2009-10-28 9 views
1

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

+1

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. –

+1

Merci, c'est vraiment le problème! Après avoir émis la commande de commutation 32 bits, le backtrace est bon maintenant! ! Wow64exts.sw –

Répondre

1

Cela ressemble à 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.