【问题标题】:How Debug program called by another programDebug 程序如何被另一个程序调用
【发布时间】:2017-02-06 19:30:09
【问题描述】:

我用 C++ 编写了两个程序,A 和 B。在 A 程序中,我用参数调用 B(基于控制台的程序)。

我想要的是当我调用 B 时想要处于调试模式(知道我运行程序 A)。我如何在 Visual Studio 2010 中设置它?

谢谢

【问题讨论】:

标签: c++ visual-studio-2010


【解决方案1】:

当我遇到同样的问题时,我刚刚添加了Sleep(10000); (或类似地)在程序 B 开始时,然后手动附加调试器。您也可以根据环境变量/命令行参数/...

我知道这是一个 hack - 但它有点工作;并且还希望有更好的解决方案。

【讨论】:

  • 这是一个 hack,需要您可以更改程序 B 的代码。存在更好的解决方案。提议的副本提供了两个这样的解决方案。
  • @IInspectable 根据情况可能会有更好的解决方案,但 chrome-macro-link 已失效,并且 Image Execution Options 意味着来回更改注册表。子进程工具似乎需要VS 2013 Update 2;或更高版本 - OP 使用 VS 2010。
  • 编写一个批处理脚本来启用和禁用图像执行选项只需要 2 分钟。这也很方便,因为您不必手动寻找将调试器附加到的进程。此外,如果您需要调试启动代码,这是前进的唯一途径。
【解决方案2】:

在主调用::DebugBreak() 开始的程序B 中,这将允许您将调试器附加到您的第二个进程。见:https://msdn.microsoft.com/en-us/library/windows/desktop/ms679297(v=vs.85).aspx

【讨论】:

  • 不,这行不通。 DebugBreak() 在已附加调试器时进入调试器。这直接来自documentation“如果进程没有被调试,该函数使用标准异常处理程序的搜索逻辑。在大多数情况下,这会导致调用进程由于未处理的断点异常而终止。”
  • 这让我的 prog 在通话中崩溃了!!
  • 我得到一个不错的对话框,解释“发生异常。您要中止、重试、调试进程吗?”
  • @RichardCritten:是的,你知道。 如果调试器已附加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多