我正在使用
打开一个进程(使用 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,而我知道堆栈中还有更多地址。
有人知道问题出在哪里吗?
谢谢:)
最佳答案
根据这个片段无法判断。您必须正确设置很多才能使其正常工作。在 this detailed blog post 查看逻辑.
如果您可以发布更大但不太大的样本,请发布更多代码。您如何设置 STACKFRAME 和 CONTEXT 结构?你在 StackWalk64
上循环吗?任何给定调用仅返回一个堆栈帧。
关于c++ - Stack Walking 一个被调试的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4224307/