Crate win_dbg_logger

Source
Expand description

A logger for use with Windows debuggers.

Windows allows applications to output a string directly to debuggers. This is very useful in situations where other forms of logging are not available. For example, stderr is not available for GUI apps.

Windows provides the OutputDebugString entry point, which allows apps to print a debug string. Internally, OutputDebugString is implemented by raising an SEH exception, which the debugger catches and handles.

Raising an exception has a significant cost, when run under a debugger, because the debugger halts all threads in the target process. So you should avoid using this logger for high rates of output, because doing so will slow down your app.

Like many Windows entry points, OutputDebugString is actually two entry points: OutputDebugStringA (multi-byte encodings) and OutputDebugStringW (UTF-16). In most cases, the *A version is implemented using a “thunk” which converts its arguments to UTF-16 and then calls the *W version. However, OutputDebugStringA is one of the few entry points where the opposite is true.

This crate can be compiled and used on non-Windows platforms, but it does nothing. This is intended to minimize the impact on code that takes a dependency on this crate.

Structs§

DebuggerLogger
This implements log::Log, and so can be used as a logging provider. It forwards log messages to the Windows OutputDebugString API.

Statics§

DEBUGGER_LOGGER
This is a static instance of DebuggerLogger. Since DebuggerLogger contains no state, this can be directly registered using log::set_logger.

Functions§

init
Sets the DebuggerLogger as the currently-active logger.
is_debugger_present
Checks whether a debugger is attached to the current process.
output_debug_string
Calls the OutputDebugString API to log a string.
rust_win_dbg_logger_init_debug
This can be called from C/C++ code to register the debug logger.
rust_win_dbg_logger_init_error
This can be called from C/C++ code to register the debug logger.
rust_win_dbg_logger_init_info
This can be called from C/C++ code to register the debug logger.
rust_win_dbg_logger_init_trace
This can be called from C/C++ code to register the debug logger.
rust_win_dbg_logger_init_warn
This can be called from C/C++ code to register the debug logger.