c++ - 在 Visual Studio 2005 中调试多项目 (C++) 解决方案

标签 c++ visual-studio-2005 visual-c++-2005

我目前正在开发一个应用程序,该应用程序由五个通过 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/

相关文章:

c++ - 如何将表面对象绑定(bind)到二维倾斜阵列?

c++ - 如何设置图书管理员选项/忽略:4221 for visual studio 2010 with CMake?

c++ - 我如何在类声明之外实现我的显式覆盖?

c++ - 矩阵循环移位

c++ - 无法在 Windows CE 中以编程方式卸载字体

c++ - Loki 和 C++11

c++ - 无法附加到使用 Visual Studio 2005 创建的进程

visual-studio-2010 - 我可以在同一台计算机上安装两个不同版本的 Visual Studio 吗?

c++ - 在 Visual Studio 中包含头文件

visual-c++ - 如何检查字符串是否仅包含数字字符