【问题标题】:Debugging through different solutions in Visual Studio通过 Visual Studio 中的不同解决方案进行调试
【发布时间】:2010-03-12 22:09:43
【问题描述】:

目前我的解决方案 A 包含域层基础和解决方案 B,它引用解决方案 A 中的二进制文件。有没有办法在打开两个 Visual Studio 实例的情况下直接从一个调试到另一个(每个解决方案一个)?

我了解到您可以将现有项目从解决方案 A 添加到解决方案 B。还有其他可行的解决方案吗?我尝试将解决方案 A 直接附加到解决方案 B 中正在运行的可执行文件,但它不允许我将多个调试器附加到同一个应用程序。

我应该注意,当我进入其中的一部分时,它会自动从解决方案 B 的 Visual Studio 实例中调出解决方案 A 的代码以进行调试。我想这是可以接受的,但你不能随意设置断点并等待代码以这种方式命中它们。

【问题讨论】:

    标签: visual-studio debugging


    【解决方案1】:

    没有办法让两个 Visual Studio 实例调试同一个进程。这是 Windows 和大多数其他操作系统的限制,因为最多一个进程可以调试另一个进程。

    尽管调试不属于您的解决方案的二进制文件,但这是一个完全受支持的方案。正如您所指出的,您可以愉快地从解决方案 B 进入二进制文件,同时从解决方案 A 进行调试。

    这里有一个问题是名为“只是我的代码”的调试功能。此功能旨在将调试体验降至最低,仅针对解决方案中的代码。这对于普通解决方案非常有用,但在调试任意二进制文件时就不好了。它可能会导致您看到的断点周围出现很多问题。您需要通过执行以下操作来禁用它

    • 菜单工具选项调试
    • 未选中“仅启用我的代码”

    【讨论】:

    • 另见克里斯的回答。您可以在解决方案 B 中为解决方案 A 的源代码设置断点,而无需将项目添加到解决方案。将 Visual Studio 指向 A 的 PDB 文件(在编译期间创建,请参阅 Chris 的答案),然后在解决方案 B 中打开 A 的源文件。您只需打开或拖放即可,不必将其添加到解决方案中。请注意,有时断点看起来是空的(就像它不会被命中一样),直到它的程序集被加载,这可能是在运行时。
    • @JohnB 当你说“拖放”时,你是什么意思?如果我将文件从 VS 2010 的一个实例的解决方案资源管理器拖动到另一个,唯一有效的拖动目标是文本编辑器,它只是将文件名的副本粘贴到打开的文档中。如果我从一个 VS 实例中拖动编辑器选项卡,我无法将它拖放到另一个实例中。有没有一种快速简便的方法来做到这一点,而不涉及弄乱文件->打开?
    • @Weeble,我将源文件从 Windows 资源管理器拖到 Visual Studio 文本区域。对我来说,这会打开文件。
    【解决方案2】:

    一次只能让一个调试器调试一个进程。这意味着您只需要打开一个 Visual Studio 实例。

    但是,您可以将解决方案 B 中的 .cpp/.cs/whatever 文件打开到解决方案 A 的 Visual Studio 副本中并设置断点。即使这些文件实际上不是解决方案的一部分,它仍然可以工作。

    【讨论】:

    • 我已经使用 VS 13 年了,刚刚从你那里了解到,一个人可以打开一个在正在调试的解决方案中没有出现的源文件,并且仍然允许设置断点(如果 pdb 是找到并且源文件位于同一位置,可能还有其他条件,但仍然存在。我会进一步调查)。非常感谢院长
    【解决方案3】:

    如果您从解决方案 A 中显式加载符号会怎样?

    如果你去菜单ToolsOptionsDebuggingSymbols,你可以把它指向来自解决方案 A 的 .pdb 文件。

    然后,您可以通过在调试时转到菜单DebugWindowsModules 来查看符号是否从二进制文件中加载。 p>

    【讨论】:

      【解决方案4】:

      有一个简单的解决方法。

      打开两个解决方案文件并运行它们。停止要附加到进程的第二个解决方案实例,但确保端口正在运行。现在您可以将端口进程附加到第一个解决方案实例并像魔术一样进行调试。

      【讨论】:

      【解决方案5】:

      这就是我所做的。

      说解决方案 A 的项目是指解决方案 B 的项目,我想从解决方案 A 项目调试到解决方案 B 项目。

      在 Visual Studio 中打开解决方案 B。将项目属性设置为“使用本地IIS Wb服务器”,设置项目URL并创建一个虚拟目录。

      在另一个 Visual Studio 实例中打开解决方案 A。将项目属性设置为“使用本地IIS Wb服务器”并勾选“使用IIS Express”,设置项目URL并创建一个虚拟目录。

      F5 并开始调试 Visual Studio 的解决方案 B 实例。 然后按F5,开始调试解决方案A的Visual Studio实例。

      现在 Visual Studio 的两个实例都将处于调试模式。

      现在从解决方案 A 开始,您应该能够调试到解决方案 B,就像两个项目在同一个解决方案中一样。

      这里的关键是对一个项目“使用 IIS express”,对另一个项目使用“本地 IIS Web 服务器”。这将让您同时运行两个调试器。

      【讨论】:

      • 只有在调试 Web 应用程序时才有效。我相信 OP 正在使用可执行文件。
      【解决方案6】:

      这是一个真实而简单的解决方案。只需更改您的解决方案属性以使用多个启动项目设置并设置同时启动哪个项目。

      按照这个:

      Debug Multiple Projects at the Same Time in Visual Studio

      【讨论】:

      • 不过,启动多个项目(例如,如果您需要运行服务器)与仅引用外部项目以便您可以单步执行代码之间存在区别。
      【解决方案7】:

      确保 .dll 和 .pdb 文件位于 bin 文件夹中。您将能够调试在其他 Visual Studio 实例中打开的其他解决方案。

      我们通常有一个文件夹(例如,Dependencies),从中引用 DLL 文件。将 DLL 文件放在此文件夹中。当我们构建引用的项目时,DLL文件被推送到这个文件夹(使用构建事件。还有其他方法)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2013-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多