8

Mi chiedevo se fosse possibile configurare Visual Studio 2008 debugger per interrompere l'esecuzione quando un thread termina con un preciso codice di errore (o almeno un valore diverso da zero). La mia app utilizza un numero enorme di thread, quindi è impossibile rintracciarli tutti manualmente.È possibile interrompere l'uscita del thread con un codice di errore specifico?

C'è un modo per dire a VS2008 di interrompere quando QUALSIASI thread nel programma colpisce "exit (X);" (X è diverso da 0) e visualizza la fonte?

risposta

3

Sì, impostare un punto di interruzione nella funzione [email protected] e aggiungere una condizione di *(int*)(ESP+4) == 42 per verificare se lo stato di uscita è un valore particolare (42, in questo esempio); per i programmi a 64 bit, utilizzare ESP+8 anziché ESP+4.

Tuttavia, se il thread si interrompe tornando dalla procedura del thread principale (il solito caso) anziché chiamare direttamente ExitThread o uno dei suoi wrapper, non si avranno informazioni su quale thread è stato o che cosa lo ha causato per uscire oltre lo stato di uscita e l'ID del thread.

Nota: il nome della funzione [email protected] è un dettaglio di implementazione che potrebbe cambiare nelle versioni future di Windows; [email protected] è il nome su Windows 7. Per scoprire qual è il vero sul tuo sistema, esegui dumpbin /exports C:\Windows\system32\kernel32.dll e cerca il nome a cui si riferiscono le mappe ExitThread.

+0

Ho trovato che l'impostazione di un punto di interruzione a '_RtlExitUserThread @ 4' non ha funzionato, in quanto la funzione non è stata riconosciuta. Tuttavia, l'impostazione del punto di interruzione su 'kernel32! ExitUserThread' ha funzionato. –

Problemi correlati