请教各位有写WinDBG扩展命令丰富经验的兄弟们,我有个问题一整天了也解决不了。
事情是这样的
我在开发一个做自动调试功能的WinDBG扩展,在CDB.exe执行扩展命令后建立一个独立的线程用来控制被调试程序的暂时停止和继续执行。其间会做一些Symbol解析之类的工作(被调试程序运行时DbgEng无法解析Symbol)。
注意现在CDB进程中有两个线程了:1个是CDB主线程,用来处理各种Debug Event;另1个是我创建的线程用来控制被调试程序的暂时停止和继续执行。
暂时停止:我用DebuBreakProcess()暂停被调试进程
继续执行:这是我用来继续执行的代码,但是不起作用。必须手动在CDB控制台窗口输入任意键后,被调试进程才能恢复执行。
hr = control->Execute( DEBUG_OUTCTL_ALL_CLIENTS, "g;", NULL ); //希望通过执行g命令使进程恢复执行
如果这时才CDB窗口输入g命令并执行,会显示
Debuggee already running error in 'g'
说明我在"继续执行"一步中用Execute()执行的g命令已经生效。只是CDB不放开被调试进程。
有解决办法吗?什么原因造成CDB不放开被调试进程。
这个问题已经折磨我一整天了。
老雷,王宇,MJ,各位兄台,有空的话帮忙分析一下原因。感激不尽。
鸿鹄安知燕雀之志
|