2010-11-19 13 views
6

estoy abierto apertura de un proceso (con C++/Windows) utilizandoPila Caminar un proceso depurado

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 

donde

DWORD creationFlags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS; 

y luego estoy tratando de stackwalk con

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

pero stackwalk solo me da la dirección superior y la siguiente es 0, mientras que yo conozco ther e hay más direcciones en la pila.

¿Alguien sabe cuál es el problema?
gracias :)

Respuesta

0

oops ... Me olvidé de llamar a "ContinueDebugEvent" después de recibir eventos del proceso depurado, por lo que se detuvo y el StackWalk de hecho fue correcto. :)

0

Es imposible saber en función de este fragmento. Hay tanto que tienes que configurar correctamente para que esto funcione. Consulte la lógica en this detailed blog post.

Publique más código si puede publicar una muestra más grande pero no demasiado grande. ¿Cómo está configurando las estructuras STACKFRAME y CONTEXT? ¿Estás haciendo un bucle en StackWalk64? Cualquier llamada dada solo devuelve un marco de pila.

+0

Ya he tenido esto funcionando bien cuando creé el proceso solo con el distintivo "CREATE_NEW_CONSOLE", pero ahora necesito apilar un proceso depurado. las banderas en "CreateProcess" son las únicas diferencias que he hecho ... – Idov

Cuestiones relacionadas