2017-07-27 3 views
0

Gibt es eine Möglichkeit, windbg oder visual studio Debugger-Ausführung zu brechen, wenn der Wert von LastError Wert ändert?Brechen, wenn sich LastError ändert

Edit: einen Weg gefunden, um einen Haltepunkt in ntdll!RtlSetLastWin32Error Einstellung.

Kennt jemand einen anderen Weg oder es ist der beste Weg dafür?

+0

zu wollen [GetLastError()] (https://msdn.microsoft.com/de-de/library/windows/desktop/ms679360 (v = vs.85) .aspx) ist eine Methode. Ruft Ihr Code das bereits auf oder erwarten Sie, dass VS oder WinDbg das aufrufen? Wie oft möchten Sie es überprüfen? Einmal pro Millisekunde? Einmal pro Mikrosekunde? –

+0

Es ist eine Methode, die einen Wert im TEB eines Threads überprüft. Ich möchte in dem Moment einbrechen, in dem dieser Wert geändert wurde. Im Moment setze ich nur einen bedingten Haltepunkt auf "ntdll! RtlSetLastWin32Error", aber ich frage mich, ob es einen besseren Weg gibt, das zu erreichen. – Train

+0

Wenn Sie die Adresse kennen, können Sie einen Speicherhaltepunkt in WinDbg ('ba w') setzen –

Antwort

1

setzen einen Schreibhaltepunkt auf die Adresse von teb-> LastErrorValue

ba w4 @@c++(&(@$thread->LastErrorValue)) 

glücklich Bruch, wenn Fehlerwert ändert Sie Bedingungen an den bp hinzufügen können nur zu brechen, wenn Sie

0:000> ba w4 @@c++(&(@$thread->LastErrorValue)) "!gle;gc" 
breakpoint 0 redefined 
0:000> g 

LastErrorValue: (Win32) 0 (0) - The operation completed successfully. 
LastStatusValue: (NTSTATUS) 0xc000008a - Indicates the specified resource type cannot be found in the image file. 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
LastErrorValue: (Win32) 0 (0) - The operation completed successfully. 
LastStatusValue: (NTSTATUS) 0 - STATUS_WAIT_0 
LastErrorValue: (Win32) 0 (0) - The operation completed successfully. 
LastStatusValue: (NTSTATUS) 0xc0000034 - Object Name not found. 
LastErrorValue: (Win32) 0 (0) - The operation completed successfully. 
LastStatusValue: (NTSTATUS) 0 - STATUS_WAIT_0 
LastErrorValue: (Win32) 0 (0) - The operation completed successfully. 
LastStatusValue: (NTSTATUS) 0xc0000034 - Object Name not found. 
LastErrorValue: (Win32) 0 (0) - The operation completed successfully. 
LastStatusValue: (NTSTATUS) 0xc0000034 - Object Name not found. 
LastErrorValue: (Win32) 0 (0) - The operation completed successfully. 
LastStatusValue: (NTSTATUS) 0xc0000034 - Object Name not found. 
LastErrorValue: (Win32) 0 (0) - The operation completed successfully. 
LastStatusValue: (NTSTATUS) 0xc0000034 - Object Name not found. 
Verwandte Themen