From e3a3d33c993b88a2ddfe24931c47c907d22e0b34 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 4 Feb 2023 08:52:29 +0100 Subject: [PATCH] FpDebug: Windows (10 up), use WaitForDebugEventEx to support Utf16 OutputDebugStringW --- components/fpdebug/fpdbgwinclasses.pas | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/components/fpdebug/fpdbgwinclasses.pas b/components/fpdebug/fpdbgwinclasses.pas index 91a1bf6ea0..d892d6b340 100644 --- a/components/fpdebug/fpdbgwinclasses.pas +++ b/components/fpdebug/fpdbgwinclasses.pas @@ -328,6 +328,7 @@ var _Wow64SuspendThread: function (hThread:HANDLE):DWORD; stdcall = nil; _DebugBreakProcess: function(Process:HANDLE): WINBOOL; stdcall = nil; _GetThreadDescription: function(hThread: THandle; ppszThreadDescription: PPWSTR): HResult; stdcall = nil; + _WaitForDebugEventEx: function(var lpDebugEvent: TDebugEvent; dwMilliseconds: DWORD): BOOL; stdcall = nil; procedure LoadKernelEntryPoints; var @@ -352,6 +353,7 @@ begin Pointer(_Wow64SetThreadContext) := GetProcAddress(hMod, 'Wow64SetThreadContext'); Pointer(_Wow64SuspendThread) := GetProcAddress(hMod, 'Wow64SuspendThread'); {$endif} + Pointer(_WaitForDebugEventEx) := GetProcAddress(hMod, 'WaitForDebugEventEx'); DebugLn(DBG_WARNINGS and (DebugBreakAddr = nil), ['WARNING: Failed to get DebugBreakAddr']); DebugLn(DBG_WARNINGS and (_CreateRemoteThread = nil), ['WARNING: Failed to get CreateRemoteThread']); @@ -954,7 +956,10 @@ var begin repeat Done := True; - result := Windows.WaitForDebugEvent(MDebugEvent, INFINITE); + if _WaitForDebugEventEx <> nil then + result := _WaitForDebugEventEx(MDebugEvent, INFINITE) + else + result := Windows.WaitForDebugEvent(MDebugEvent, INFINITE); DebugLn(FPDBG_WINDOWS and (not Result), 'WaitForDebugEvent failed: %d', [Windows.GetLastError]); if Result and FTerminated and (MDebugEvent.dwDebugEventCode <> EXIT_PROCESS_DEBUG_EVENT)