Ich habe mich gefragt, ob es möglich ist, Visual Studio 2008-Debugger so zu konfigurieren, dass die Ausführung gestoppt wird, wenn ein Thread mit einem genauen Fehlercode (oder mindestens 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.
Gibt es eine Möglichkeit, VS2008 zu brechen, wenn ein beliebiger Thread im Programm auf "exit (X)" klickt? (X ist anders als 0) und Quelle anzeigen?
Ja, setze einen Haltepunkt in der Funktion _RtlExitUserThread@4
und füge eine Bedingung von *(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 der Thread jedoch beendet wird, indem er von seiner Hauptthread-Prozedur (der übliche Fall) zurückkehrt, anstatt ExitThread
oder einen seiner Wrapper direkt aufzurufen, haben Sie keine Informationen darüber, welcher Thread er war oder was verursacht wurde Es wird anders als der Exit-Status und die Thread-ID beendet.
Hinweis: Der Funktionsname _RtlExitUserThread@4
ist ein Implementierungsdetail, das sich in zukünftigen Windows-Versionen ändern kann. _RtlExitUserThread@4
ist der Name unter Windows 7. Um herauszufinden, was sich auf Ihrem System tatsächlich befindet, führen Sie dumpbin /exports C:\Windows\system32\kernel32.dll
aus und suchen Sie nach dem Namen, auf den ExitThread
verweist.
Tags und Links multithreading visual-studio-2008 visual-studio-debugging exit-code