让 VC++ 可执行文件自动加载调试器 [重复]
Posted
技术标签:
【中文标题】让 VC++ 可执行文件自动加载调试器 [重复]【英文标题】:Have VC++ executable automatically load debugger [duplicate] 【发布时间】:2016-01-18 05:31:46 【问题描述】:我有一个正在运行的程序,它加载了一个单独的 程序来为它做一些工作。该单独的程序从第一个开始运行,使用Process.Start()
,我需要将其加载到 Visual Studio 调试器中以单步执行。
不幸的是,虽然我可以在调试器会话中运行 first 程序,但它仍然将第二个程序作为“正确”进程启动。我需要在调试器会话中打开第二个程序。通常我只会在进程启动后将调试器附加到进程,但在这种情况下,我需要很早就断点(在CInitDialog()
函数中),而且,我尽可能快地运行代码在这种情况下。
我在 Stack Overflow 上找到的解决方案说使用 Debugger.Launch()
,但这似乎是特定于 C# 的。
我也想过尝试在代码中导致崩溃(例如使用空指针引用)来加载调试器,但我怀疑这意味着我将无法使用单步执行。
我该怎么做?
【问题讨论】:
blogs.msdn.com/b/visualstudioalm/archive/2014/11/24/… 科迪,你应该回答这个问题,这样我就可以投票了。由于我正在运行 VS2010,这对我没有好处,但对其他人仍然有用。 对我来说也是如此,我只记得听说过它并认为它看起来很有趣。我无法证明它只是一个评论,因为我自己从未使用过它。 【参考方案1】:Visual C++ 与 C# Debugger.Launch()
有一个相似的特性,它被称为 DebugBreak()
。这实际上会破坏应用程序,它会向您显示一个对话框,询问您要如何处理它:
如果此时您选择调试程序,它将询问您是要在新的 Visual Studio 会话中还是在现有会话中执行此操作。我倾向于已经打开解决方案,因此我可以有效地附加到该解决方案 - 打开一个新实例只为您提供文件而不是整个解决方案。
因此,您可以简单地将该调用插入您想要中断的代码中,并允许第一个程序正常运行它。第二个程序将启动并中断您放置语句的位置,然后您可以单步执行调试器允许的所有其他奇妙的事情。
【讨论】:
以上是关于让 VC++ 可执行文件自动加载调试器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章