Stack Walking отлаженный процесс - PullRequest
6 голосов
/ 19 ноября 2010

Я открываю процесс открытия (с C ++ / Windows), используя

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;  

, и затем я пытаюсь использовать его с помощью

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

но stackwalk просто дает мне верхний адрес, а следующий - 0, в то время как я знаю в стеке больше адресов.

Кто-нибудь знает, в чем проблема?
спасибо:)

Ответы [ 2 ]

0 голосов
/ 20 ноября 2010

упс ... Я забываю вызывать "ContinueDebugEvent" после получения событий отлаженного процесса - поэтому он остался приостановленным и StackWalk был на самом деле правильным.:)

0 голосов
/ 19 ноября 2010

Невозможно сказать, основываясь на этом фрагменте. Для того, чтобы это работало, нужно так много настроить правильно. Проверьте логику в этом подробном сообщении в блоге .

Опубликуйте больше кода, если вы можете разместить большой, но не слишком большой пример. Как вы настраиваете структуры STACKFRAME и CONTEXT? Вы зациклены на StackWalk64? Любой данный вызов возвращает только один кадр стека.

...