1

我目前正在开发一个应用程序,该应用程序由五个通过 ActiveMQ 通信的独立可执行文件组成。我有一个包含五个可执行项目的 Visual Studio 解决方案。其中一个项目(launcher.exe)从它们的本地文件夹作为单独的进程启动其他四个项目。因此,启动器项目被设置为“启动项目”,因此,由于我对 VS2005 的了解有限,它是我唯一可以设置断点和调试的项目。

如果启动器项目是从 VS 执行的唯一项目,有没有办法在我的单个 VS 解决方案中跨我的五个 c++ 项目设置多个断点并同时调试它们?

注意: 不能通过 Visual Studio 手动启动每个项目的新实例,因为它们的执行需要由 launcher.exe 同步。

如果这很复杂,我很抱歉,这是我能解释的最好的。在此先感谢您的帮助!

4

3 回答 3

5

您需要的是工具菜单中的:附加到进程。这为您提供了一个正在运行的进程列表,并允许您将调试器附加到这些进程。

对于本地调试,Transport 和 Qualifier 应保持其默认值。列表上方的 Attach To 值决定了您将执行哪种类型的调试(本机或托管是最常见的类型),通常调试器也可以在这里找到一个好的默认值。

主要有趣的部分是进程列表 - 在此列表中查找要调试的子进程。找到并选择进程后,单击右下角的附加(或直接双击进程),调试器将附加到该进程并开始调试它。

您可能还希望启用“调试位置”工具栏,它提供了一种将调试器的焦点更改为您附加到的各种进程和线程的方法。在一个 Visual Studio 实例中进行多进程调试可能会很棘手,因此您始终可以考虑启动单独的实例来调试每个不同的进程。

另一个棘手的方面可能是调试子流程的初始启动。通常,您要调试的事情发生在您可以附加调试器之前,因此您需要一些方法来使进程等待您准备好。在 C++ 中执行此操作的一种简单方法是使用 IsDebuggerPresent 函数。尝试将此代码添加到 main() 函数(或等效函数)的开头:

while( !IsDebuggerPresent() )
    Sleep( 500 );

或者试试这个 C# 代码:

while( !System.Diagnostics.Debugger.IsAttached )
    System.Threading.Thread.Sleep( 500 );
于 2008-10-24T01:14:09.637 回答
1

您可以通过手动运行启动器(在 Visual Studio 之外,或使用 <ctrl-f5>)来一次选择一个,然后在启动后附加到要调试的进程。如果它是您解决方案中的项目之一,您可以设置断点,当您附加调试器时它们会被拾取。

于 2008-10-24T01:15:00.760 回答
1

您知道吗……您可以开始调试多个项目?- #268

于 2008-10-24T02:11:56.307 回答