https://github.com/charles-zablit updated https://github.com/llvm/llvm-project/pull/156474
>From ec308302c936c8ce4993ae27f8d5e813e4ac59c9 Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Tue, 2 Sep 2025 16:13:17 +0100 Subject: [PATCH 1/2] [lldb][windows] use OutputDebugStringA instead of ReportEventW to log events --- lldb/source/Host/windows/Host.cpp | 44 +++++-------------------------- 1 file changed, 7 insertions(+), 37 deletions(-) diff --git a/lldb/source/Host/windows/Host.cpp b/lldb/source/Host/windows/Host.cpp index 4277b8edb38e5..8be4596c420a4 100644 --- a/lldb/source/Host/windows/Host.cpp +++ b/lldb/source/Host/windows/Host.cpp @@ -22,10 +22,8 @@ #include "lldb/Utility/StreamString.h" #include "lldb/Utility/StructuredData.h" -#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/ConvertUTF.h" -#include "llvm/Support/ManagedStatic.h" // Windows includes #include <tlhelp32.h> @@ -308,52 +306,24 @@ Environment Host::GetEnvironment() { return env; } -/// Manages the lifecycle of a Windows Event's Source. -/// The destructor will call DeregisterEventSource. -/// This class is meant to be used with \ref llvm::ManagedStatic. -class WindowsEventLog { -public: - WindowsEventLog() : handle(RegisterEventSource(nullptr, L"lldb")) {} - - ~WindowsEventLog() { - if (handle) - DeregisterEventSource(handle); - } - - HANDLE GetHandle() const { return handle; } - -private: - HANDLE handle; -}; - -static llvm::ManagedStatic<WindowsEventLog> event_log; - void Host::SystemLog(Severity severity, llvm::StringRef message) { if (message.empty()) return; - HANDLE h = event_log->GetHandle(); - if (!h) - return; - - llvm::SmallVector<wchar_t, 1> argsUTF16; - if (UTF8ToUTF16(message.str(), argsUTF16)) - return; - - WORD event_type; + std::string log_prefix; switch (severity) { case lldb::eSeverityWarning: - event_type = EVENTLOG_WARNING_TYPE; + log_prefix = "[Warning] "; break; case lldb::eSeverityError: - event_type = EVENTLOG_ERROR_TYPE; + log_prefix = "[Error] "; break; case lldb::eSeverityInfo: default: - event_type = EVENTLOG_INFORMATION_TYPE; + log_prefix = "[Info] "; + break; } - LPCWSTR messages[1] = {argsUTF16.data()}; - ReportEventW(h, event_type, 0, 0, nullptr, std::size(messages), 0, messages, - nullptr); + std::string final_message = log_prefix + message.str(); + OutputDebugStringA(final_message.c_str()); } >From be11dc3b8c516c6305b074ecf6f0cb1a76935bae Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Tue, 2 Sep 2025 17:57:17 +0100 Subject: [PATCH 2/2] fixup! [lldb][windows] use OutputDebugStringA instead of ReportEventW to log events --- lldb/source/Host/windows/Host.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lldb/source/Host/windows/Host.cpp b/lldb/source/Host/windows/Host.cpp index 8be4596c420a4..e8973a3fb937a 100644 --- a/lldb/source/Host/windows/Host.cpp +++ b/lldb/source/Host/windows/Host.cpp @@ -310,20 +310,24 @@ void Host::SystemLog(Severity severity, llvm::StringRef message) { if (message.empty()) return; - std::string log_prefix; + std::string log_msg; + llvm::raw_string_ostream stream(log_msg); + switch (severity) { case lldb::eSeverityWarning: - log_prefix = "[Warning] "; + stream << "[Warning] "; break; case lldb::eSeverityError: - log_prefix = "[Error] "; + stream << "[Error] "; break; case lldb::eSeverityInfo: default: - log_prefix = "[Info] "; + stream << "[Info] "; break; } - std::string final_message = log_prefix + message.str(); - OutputDebugStringA(final_message.c_str()); + stream << message; + stream.flush(); + + OutputDebugStringA(log_msg.c_str()); } _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
