Ci-dessous est mon programme et j'essaie d'obtenir la pile d'appels lorsque le processus est bloqué dans l'appel WaitForSingleObject() en utilisant windbg. La chose étrange est quand le processus bloque, windbg imprime seulement la pile très étrange.Comportement windbg très étrange avec WaitForSingleObject()
wow64cpu!TurboDispatchJumpAddressEnd+0x690 wow64cpu!TurboDispatchJumpAddressEnd+0x484 wow64!Wow64SystemServiceEx+0x1ce wow64!Wow64LdrpInitialize+0x429 ntdll!RtlResetRtlTranslations+0x1b08 ntdll!RtlResetRtlTranslations+0xc63 ntdll!LdrInitializeThunk+0xe
// process2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
HANDLE g_hWriteEvent;
int _tmain(int argc, _TCHAR* argv[])
{
g_hWriteEvent = OpenEvent(
EVENT_ALL_ACCESS,
FALSE,
TEXT("WriteEvent")
);
if (g_hWriteEvent == NULL) {
printf("OpenEvent error (%d)\n", GetLastError());
return 0;
}
// while (1);
WaitForSingleObject(g_hWriteEvent, INFINITE);
return 0;
}
Notez que si je décommentez la ligne while(1)
alors le windbg peut reconnaître le processus bloque dans la fonction _tmain
.
Merci. Bin
On dirait que c'est un processus Wow64 32 bits fonctionnant sur un système d'exploitation 64 bits. Assurez-vous de connecter le Windbg 64 bits au processus, pas le Windbg 32 bits. –
Merci, c'est vraiment le problème! Après avoir émis la commande de commutation 32 bits, le backtrace est bon maintenant! ! Wow64exts.sw –