2010-11-19 2 views
6

Je suis ouvert l'ouverture d'un processus (avec C++/Windows) en utilisantStack marche un processus débogué

if(CreateProcessA(NULL, // No module name (use command line) 
    (LPSTR)path, //argv[1],  // Command line 
    NULL,   // Process handle not inheritable 
    NULL,   // Thread handle not inheritable 
    FALSE,   // Set handle inheritance to FALSE 
    creationFlags,    // No creation flags 
    NULL,   // Use parent's environment block 
    NULL,   // Use parent's starting directory 
    &startInfo,   // Pointer to STARTUPINFO structure 
    &processInfo)   // Pointer to PROCESS_INFORMATION structure 

DWORD creationFlags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS; 

et je suis en train de stackwalk avec

bool ok = StackWalk64(IMAGE_FILE_MACHINE_I386,m_ps.Handle ,m_th.Handle, 
    &m_stackframe, &m_threadContext, 
    0, NULL, NULL, 0); 

mais pilewalk me donne juste l'adresse supérieure et la suivante est 0, alors que sais ther e sont plus d'adresses dans la pile.

Est-ce que quelqu'un sait quel est le problème?
merci :)

Répondre

0

oups ... J'ai oublié d'appeler "ContinueDebugEvent" après avoir reçu des événements du processus débogué - il est donc resté en pause et le StackWalk était infact correct. :)

0

Il est impossible de dire sur la base de cet extrait. Il y a tellement de choses que vous devez configurer correctement pour que cela fonctionne. Consultez la logique au this detailed blog post.

Post plus de code si vous pouvez poster un échantillon plus grand mais pas trop grand. Comment configurez-vous les structures STACKFRAME et CONTEXT? Êtes-vous en boucle sur StackWalk64? Tout appel donné ne renvoie qu'un seul bloc de pile.

+0

Je l'avais déjà bien fonctionné lorsque j'ai créé le processus uniquement avec le drapeau "CREATE_NEW_CONSOLE", mais maintenant je dois empiler un processus débogué. les drapeaux dans "CreateProcess" sont les seules différences que j'ai faites ... – Idov