我正在尝试调试由另一个生成的错误进程。我已尝试__debugbreak(); __asm int 3;
图像文件执行但似乎没有任何效果。有没有人有任何想法如何从代码中附加调试器?
答案 0 :(得分:3)
如果没有其他工作,我有时会使用技巧 在生成过程的开始我放了一个
while(1)
{
Sleep(1000); // +Breakpoint
}
在启动后附加到进程并使用“set next statement”来传递循环。
我通常用它来调试Windows服务的OnStart()
确保在问题解决后删除此代码。
答案 1 :(得分:2)
我有时使用的是
MessageBox(NULL,“Attach”,“Attach”,MB_OK)
您需要链接SDK和#include“windows.h”,但这是关于它的。将弹出一个消息框,等待您单击“确定”。只需在此时附加调试器,设置断点并单击“确定”。
只要没有来自产生过程的时间关键监视器等待来自生成进程的回复,这就可以工作。如果有,您可能需要增加超时,以便启动VS并附加。
答案 2 :(得分:2)
Visual Studio将DEBUG_ONLY_THIS_PROCESS标志与CreateProcess一起使用。您可以切换到windbg,也可以在代码中附加调试器。例如。获取活动的VisualStudio.DTE.11.0对象,然后调用_DTE :: Debugger获取调试器,并调用Debugger :: LocalProcesses获取进程列表。找到所需的过程(例如,通过文件名或创建时间),然后调用Process :: Attach。
答案 3 :(得分:0)
您没有使用DebugBreak代替__debugbreak()的原因?
这是description of the differences
我遇到调试器没有启动的情况,但实际上有一个隐藏的对话框提示我要连接的VS会话/版本。确保通过窗口使用alt-tab确保不会发生这种情况。