让 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++ 可执行文件自动加载调试器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 devenv 在 C++ 可执行文件中调试回调

VC6.0的程序结束后进程不自动结束,如何解决?

什么软件能将C语言的执行文件反汇编为汇编源代码

加载图像仅在可执行文件打开时有效

C语言如何执行批处理

VC++ 可执行文件需要啥才能运行?