我在visual studio调试器下的断点处暂停了一个进程。 我可以在非侵入模式下附加cdb(微软的控制台调试器)和
一样多cdb -p pid -pvr
如何使用我自己的使用Debug Engine API的程序实现相同的功能。
IDebugClient* debugClient = 0;
(DebugCreate( __uuidof(IDebugClient), (void **)&debugClient );
debugClient->AttachProcess(0,id,DEBUG_ATTACH_NONINVASIVE
|DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND);
此代码导致E_INVALIDARG。这种组合是不允许的?下面的一个工作,但当它调用GetStackTrace时,它返回E_UNEXPECTED。
debugClient->AttachProcess(0,id,DEBUG_ATTACH_NONINVASIVE);
debugControl->GetStackTrace(0, 0, 0, pStackFrames, maxFrames, &framesFilled);
我有兴趣以非侵入方式附加到调试中断的进程,并从其当前堆栈中获取一些局部变量&一些全局变量值。
其次,有人可以指出我用于迭代迭代符号的内存内容的功能!stl会这样做。我需要编写一个插件来转储我的一个矢量结构。
由于
答案 0 :(得分:2)
我相信
没有错DEBUG_ATTACH_NONINVASIVE|DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND
组合 - 它是完全允许的,甚至在断言样本中也有特色。 否则,就文档而言 - 它并不那么详细。我建议在 wt (跟踪和观察数据)的帮助下调试你的扩展 - 当你需要找到返回错误的确切子例程时,它会特别有用,这可能会让你更好地了解问题。
至于从扩展程序远程访问应用程序中的类型化数据,我发现ExtRemoteTyped类(在sdk子文件夹中的engextcpp.hpp中可用)非常有用且直观易用。