我目前正在开发一个应用程序,该应用程序由五个通过 ActiveMQ 进行通信的独立可执行文件组成。我有一个包含五个可执行项目的 Visual Studio 解决方案。其中一个项目 (launcher.exe) 从本地文件夹中将其他四个项目作为单独的进程启动。因此,启动器项目被设置为“启动项目”,因此,由于我对 VS2005 的了解有限,它是唯一可以设置断点和调试的项目。
如果启动程序项目是从 VS 执行的唯一项目,是否有办法在我的单个 VS 解决方案中跨我的五个 c++ 项目设置多个断点并同时调试它们?
注意: 不能通过 Visual Studio 手动启动每个项目的新实例,因为它们的执行需要由 launcher.exe 同步。
如果这令人费解,我深表歉意,这是我能解释的最好的。在此先感谢您的帮助!
最佳答案
您需要的是在“工具”菜单中:附加到流程。这会为您提供正在运行的进程列表,并允许您将调试器附加到这些进程。
对于本地调试,Transport 和 Qualifier 应保留其默认值。列表上方的“附加到”值决定了您将进行哪种类型的调试( native 或托管是最常见的类型),通常调试器也可以在这里找到一个好的默认值。
主要有趣的部分是进程列表 - 在此列表中查找您要调试的子进程。找到并选择该进程后,单击右下角的附加(或只需双击该进程),调试器将附加到该进程并开始调试它。
您可能还想启用“调试位置”工具栏,它提供了一种将调试器的焦点更改为您附加到的各种进程和线程的方法。在一个 Visual Studio 实例中进行多进程调试可能很棘手,因此您始终可以考虑启动单独的实例来调试每个不同的进程。
另一个棘手的方面是调试子进程的初始启动。通常,您要调试的事情发生在您可以附加调试器之前,因此您需要一些方法让进程等待您准备好。在 C++ 中执行此操作的一种简单方法是使用 IsDebuggerPresent 函数。尝试将此代码添加到 main() 函数(或等效函数)的开头:
while( !IsDebuggerPresent() )
Sleep( 500 );
或者试试这个 C# 代码:
while( !System.Diagnostics.Debugger.IsAttached )
System.Threading.Thread.Sleep( 500 );
关于c++ - 在 Visual Studio 2005 中调试多项目 (C++) 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/232161/