【问题标题】:Loading debug information from another pre-built solution从另一个预构建的解决方案加载调试信息
【发布时间】:2011-07-06 01:36:13
【问题描述】:

我有一个 Visual Studio 解决方案 (C#),它代表了我们应用程序的核心。我们构建了这个,它包含大约 10 个 DLL 和相应的 PDB。

我还有其他几个 VS 解决方案,每个解决方案都用于我们的客户。这些 VS 解决方案使用核心 DLL 并根据需要添加自己的位。 “核心”具有主 .exe,因此我们在客户特定的解决方案中执行以下操作

  • 在项目中发布构建步骤以将 EXE/DLL/PDB 复制到 $(TargetDir) 中
  • 将项目调试设置设置为指向 .exe 的“启动外部程序”

这一切都有效,但似乎有点笨拙。

我的问题是:

当通过客户特定的解决方案运行时,我该如何

  • 当我进入核心项目时自动打开核心项目的代码
  • 能够打开核心文件并设置断点

我已经习惯了 Java,您可以在其中引用 Java IDE 中的已编译和源 jars/目录,仅此而已。如何在 Visual Studio(DLL 和 PDB)中做同样的事情?

(如果可能,我宁愿避开 GAC,因为我们有时会同时在不同的项目上同时进行多个本地核心构建)

【问题讨论】:

    标签: c# visual-studio debugging symbols


    【解决方案1】:

    Mike,如果您打开一个引用核心解决方案的“更高堆栈”解决方案,您可以打开核心解决方案的源文件并在其中放置断点,那么当您调试当前解决方案时,Visual Studio 就足够智能了如果 bin 文件夹中有 .pdb 文件,则进入并触发断点。

    【讨论】:

    • 谢谢 我会试试这个,但是没有 .cs 文件有没有办法做到这一点?从理论上讲,PDB 中是否有足够的信息可以自行执行此操作?
    • pdb 有调试符号但没有源代码,两者都需要。
    • 有趣,前段时间我设法加载了核心 .NET 框架代码符号,因此我能够调试到 Control.cs 和 co。这些信息是从哪里来的?这是来自微软符号服务器而不是 PDB 的一些神奇信息吗?
    【解决方案2】:

    要自动让调试控制遍历核心源文件,请确保从本地构建核心解决方案中引用核心 dll 并确保可以访问它。 另一种方法是在引用核心 dll 后,只需打开要放置断点的 CS 文件并进行调试。

    【讨论】:

    • 我确实引用了核心 DLL(如在项目引用中),如上所述,DLL/PDB 被复制到本地,但不会发生遍历。
    • 不要将核心 dll 复制到不同的 bin 位置,只需尝试从它构建的位置引用即可。
    • 还要确保在编译之前将项目配置设置为调试,并在编译后查看生成的 pdb(只是您知道的健全性检查)。
    • 肯定在调试中。 DLL 由 Ivy 拉入 lib 目录。我在那里引用它们,但是如果我不复制它们,那么项目就不会运行,因为我使用的是“启动外部程序”,它只会在同一目录 (bin/Debug) 中查找其他 DLL。
    • 您能否尝试创建一个模拟类似场景的示例应用程序。恐怕,不知何故,它可能与某些管理员权限或 VS 中的某些调试选项有关,因为在运行时不加载符号文件。
    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多