我正在尝试编写一个扩展函数,该函数将运行到下一个调用,然后打印出有关下一条指令的信息。
我正在使用IDebugControl::Execute
来运行tc
。如文档中所述,此调用在实际发生跟踪之前返回。在我的分机返回之前,睡眠或调用DispatchCallbacks看不到tc
跟踪。
如何在不退出通话的情况下允许跟踪发生?
如果我添加自己的DebugEventCallback,那么我可以收到有关触发的DebuggeeState和EngineState更改的通知,但无法从这些回调中返回引擎。
答案 0 :(得分:2)
我认为通过IDebugControl :: Execute(g,t等)使调用更改调试器状态不是一个好主意
首先,您应该执行步骤命令:
control->SetExecutionStatus(DEBUG_STATUS_STEP_OVER);
control->WaitForEvent(DEBUG_WAIT_DEFAULT, INFINITE);
然后你可以为呼叫签名制作一个匹配器:
registers->GetInstructionOffset( &ip );
control->Disassemble( ip, ..., disasmStr, ..
return disasmStr
然后可以建立自己的tc:
while( CurrentInstruction() != 'call' ) makeOneStep()
你可以使用我们的python扩展名:pykd.codeplex.com
Python代码如下所示:
from pykd import disasm, step
while disasm().instruction.find('call') < 0:
step()