2008-10-24 261 views
1

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

有没有一种方法可以在我的单个VS解决方案中的5个C++项目中设置多个断点,并在同一时间调试它们,如果启动项目是从VS执行的唯一项目?

注:手动启动通过Visual Studio中的每个项目的新实例,是不是一种选择,因为其执行需要由LAUNCHER.EXE同步。

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

回答

5

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

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

主要令人感兴趣的部分是进程列表 - 请在此列表中查找要调试的子进程。一旦找到并选择了进程,请单击右下角的附加(或者只需双击进程),调试器将附加到该进程并开始调试。

您可能还需要启用“调试位置”工具栏,该工具栏提供了一种将调试器的焦点更改为您所连接的各种进程和线程的方法。一个Visual Studio实例中的多进程调试可能会非常棘手,因此您始终可以考虑启动单独的实例来调试每个不同的进程。

另一个棘手的方面可能是调试子流程的初始启动。通常,在调试器连接之前,您想调试的东西就会发生,所以您需要某种方法来让进程等待您做好准备。在C++中执行此操作的简单方法是使用IsDebuggerPresent函数。尝试将此代码添加到您的main()函数的开始(或同等学历):

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

或者尝试此代码为C#:

while(!System.Diagnostics.Debugger.IsAttached) 
    System.Threading.Thread.Sleep(500); 
+0

一个完美的答案!谢谢。 – BeachRunnerFred 2008-10-24 01:37:58

1

您可以通过运行启动一次挑一手动(在Visual Studio之外,或者用< ctrl-f5 >),然后附加到要调试的进程,一旦它启动。如果它是解决方案中的其中一个项目,那么您可以设置断点,并在连接调试器时将它们拾取。

相关问题