8

Ich frage mich, ob es möglich war, Visual Studio 2008 Debugger zu konfigurieren, um die Ausführung zu stoppen, wenn ein Thread mit einem genauen Fehlercode (oder zumindest einem Wert ungleich Null) beendet wird. Meine App verwendet eine enorme Anzahl von Threads, sodass es nicht möglich ist, sie alle manuell zu verfolgen.Ist es möglich, Thread-Exit mit spezifischem Fehlercode zu unterbrechen?

Gibt es eine Möglichkeit zu sagen VS2008 zu brechen, wenn jeder Thread im Programm trifft "Exit (X);" (X ist anders als 0) und Anzeigequelle?

Antwort

3

Ja, setzen Sie einen Breakpoint in der Funktion [email protected], und fügen Sie eine Bedingung *(int*)(ESP+4) == 42 hinzu, um zu testen, ob der Exit-Status ein bestimmter Wert ist (42, in diesem Beispiel); Verwenden Sie für 64-Bit-Programme ESP+8 anstelle von ESP+4.

Wenn jedoch der Thread durch Zurückkehren von seiner Hauptthreadprozedur (der übliche Fall) beendet wird, anstatt ExitThread oder einen seiner Wrapper direkt aufzurufen, dann haben Sie keine Informationen darüber, welcher Thread er war oder was ihn verursacht hat anderen als den Exit-Status und die Thread-ID beenden.

Hinweis: Der Funktionsname [email protected] ist ein Implementierungsdetail, das sich möglicherweise in zukünftigen Windows-Versionen ändert. [email protected] ist der Name unter Windows 7. Um herauszufinden, was sich tatsächlich auf Ihrem System befindet, führen Sie dumpbin /exports C:\Windows\system32\kernel32.dll aus, und suchen Sie nach dem Namen, der ExitThread zugeordnet wird.

+0

Ich fand, dass das Setzen eines Haltepunkts bei '_RtlExitUserThread @ 4' nicht funktionierte, da die Funktion nicht erkannt wurde. Das Setzen des Breakpoints auf 'kernel32! ExitUserThread' hat jedoch funktioniert. –

Verwandte Themen