【问题标题】:Have VC++ executable automatically load debugger [duplicate]让 VC++ 可执行文件自动加载调试器 [重复]
【发布时间】:2016-01-18 05:31:46
【问题描述】:

我有一个正在运行的程序,它加载了一个单独的 程序来为它做一些工作。该单独的程序从第一个开始运行,使用Process.Start(),我需要将其加载到 Visual Studio 调试器中以单步执行。

不幸的是,虽然我可以在调试器会话中运行 first 程序,但它仍然将第二个程序作为“正确”进程启动。我需要在调试器会话中打开第二个程序。通常我只会在进程启动后将调试器附加到进程,但在这种情况下,我需要很早就断点(在CInitDialog() 函数中),而且,我尽可能快地运行代码在这种情况下。

我在 Stack Overflow 上找到的解决方案说使用 Debugger.Launch(),但这似乎是特定于 C# 的。

我也想过尝试在代码中导致崩溃(例如使用空指针引用)来加载调试器,但我怀疑这意味着我将无法使用单步执行。

我该怎么做?

【问题讨论】:

  • 科迪,你应该回答这个问题,这样我就可以投票了。由于我正在运行 VS2010,这对我没有好处,但对其他人仍然有用。
  • 对我来说也是如此,我只记得听说过它并认为它看起来很有趣。我无法证明它只是一个评论,因为我自己从未使用过它。

标签: visual-studio debugging visual-c++


【解决方案1】:

Visual C++ 与 C# Debugger.Launch() 有一个相似的特性,它被称为 DebugBreak()。这实际上会破坏应用程序,它会向您显示一个对话框,询问您要如何处理它:

如果此时您选择调试程序,它将询问您是要在新的 Visual Studio 会话中还是在现有会话中执行此操作。我倾向于已经打开解决方案,因此我可以有效地附加到该解决方案 - 打开一个新实例只为您提供文件而不是整个解决方案。

因此,您可以简单地将该调用插入您想要中断的代码中,并允许第一个程序正常运行它。第二个程序将启动并中断您放置语句的位置,然后您可以单步执行调试器允许的所有其他奇妙的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 2016-02-29
    • 1970-01-01
    • 2011-11-27
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多