【问题标题】:VisualStudio / C#: Debugging imported DLLVisualStudio / C#:调试导入的 DLL
【发布时间】:2009-06-10 10:44:30
【问题描述】:

我有一个导入 DLL(由我编写)的项目。有时,当 DLL 中的方法中引发异常时,宿主项目会打开一个选项卡,让我查看 DLL 中的代码。我也可以在里面放断点。

但是这种行为似乎很随机,我不能故意这样做,而且并不总是有效。另外,我在项目浏览器窗口中看不到文件名。

对调试 DLL 有帮助吗?谢谢

【问题讨论】:

    标签: c# visual-studio dll


    【解决方案1】:

    增强的调试(针对当前解决方案中没有的 dll)很大程度上取决于您是否将调试符号文件 (.pdb) 放在明显的位置 - 特别是在 dll 本身旁边。您也可以从模块窗口手动加载符号(调试时,Debug -> Windows -> Module,右键单击,Load Symbols From...)

    【讨论】:

    • ...而不是调试...您可以从 Tools->Options->Debugging->Symbols 设置符号路径
    【解决方案2】:

    这里可能会遇到一个称为 Just My Code (JMC) 的功能。这是一个调试器/CLR 功能,旨在将用户的世界视野限制为他们编写的代码。确定一段代码或 DLL 是否属于您的各种方式有时会令人困惑。

    下次遇到此问题时,请尝试禁用 JMC 并查看它是否能解决您的问题

    • 导航:工具 -> 选项
    • 导航:调试器 -> 常规
    • 取消选中“仅我的代码”选项

    【讨论】:

      【解决方案3】:

      在调用 C++ dll 的托管 C# 程序上, 右键属性 调试选项卡 勾选启用非托管代码调试

      希望这会有所帮助, 托尼。

      【讨论】:

        【解决方案4】:

        要调试 dll,它必须有 pdb 文件,其中包含与该 dll 匹配的调试信息。

        【讨论】:

          【解决方案5】:

          Visual Studio 使用编译过程生成的 .Pdb 符号,使开发人员能够在发生异常时查看源代码。

          此信息的存在有两个原因。第一个原因是编译器(即,将源代码转换为应用程序的程序,例如 .exe 或 .dll 文件)在构建应用程序时使用。第二个原因是人们在调试应用程序时使用。符号信息是作为应用程序编译的一部分生成的(如果您将编译器设置为生成符号信息)。此信息可以直接驻留在应用程序文件中,也可以写入单独的符号文件中。符号所在的位置取决于您的开发应用程序和您选择的设置。例如,Microsoft Visual Basic (VB) 将符号直接构建到程序文件中。 Visual C++ (VC++) 通常构建一个或两个单独的文件。

          符号文件有两种文件类型——.dbg 和 .pdb。 .dbg 文件采用通用对象文件格式 (COFF),这是一种不包含源代码行信息的通用符号文件描述;许多调试器可以读取这些文件。 .pdb 文件是 Microsoft 格式,包含比 .dbg 文件更多的信息。例如,源代码行信息仅在 .pdb 符号中可用。包含源代码行信息的符号文件让您可以使用源代码进行调试。

          【讨论】:

          • 你为什么不在另一个引用你项目的源代码,它们都是你的?
          【解决方案6】:

          虽然它不允许您调试代码,但Reflector 在检查 DLL 时非常有用。堆栈跟踪、有问题的 DLL 和反射器的组合通常会让您找到问题的核心。

          【讨论】:

            猜你喜欢
            • 2022-12-05
            • 1970-01-01
            • 1970-01-01
            • 2021-04-12
            • 2015-12-08
            • 2013-11-23
            • 1970-01-01
            • 2011-11-06
            • 1970-01-01
            相关资源
            最近更新 更多