我打开了一个使用
打开一个进程(使用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,而我知道堆栈中有更多地址。
有人知道问题是什么吗? 谢谢:))
答案 0 :(得分:0)
根据这个片段无法分辨。你需要正确设置才能使其正常工作。查看this detailed blog post的逻辑。
如果您可以发布更大但不太大的样本,请发布更多代码。你是如何设置STACKFRAME和CONTEXT结构的?你在StackWalk64
上循环吗?任何给定的调用只返回一个堆栈帧。
答案 1 :(得分:0)
oops ...我在调试过程中收到事件后忘记调用“ContinueDebugEvent” - 因此它保持暂停状态,StackWalk实际上是正确的。 :)