【问题标题】:Debugging Multi-Project (C++) Solutions in Visual Studio 2005在 Visual Studio 2005 中调试多项目 (C++) 解决方案
【发布时间】:2009-12-14 03:40:05
【问题描述】:

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

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

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

如果这令人费解,我深表歉意,这是我能解释的最好的。在此先感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    或者试试这个 C# 代码:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 2011-03-30
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多