【发布时间】:2009-06-10 10:44:30
【问题描述】:
我有一个导入 DLL(由我编写)的项目。有时,当 DLL 中的方法中引发异常时,宿主项目会打开一个选项卡,让我查看 DLL 中的代码。我也可以在里面放断点。
但是这种行为似乎很随机,我不能故意这样做,而且并不总是有效。另外,我在项目浏览器窗口中看不到文件名。
对调试 DLL 有帮助吗?谢谢
【问题讨论】:
标签: c# visual-studio dll
我有一个导入 DLL(由我编写)的项目。有时,当 DLL 中的方法中引发异常时,宿主项目会打开一个选项卡,让我查看 DLL 中的代码。我也可以在里面放断点。
但是这种行为似乎很随机,我不能故意这样做,而且并不总是有效。另外,我在项目浏览器窗口中看不到文件名。
对调试 DLL 有帮助吗?谢谢
【问题讨论】:
标签: c# visual-studio dll
增强的调试(针对当前解决方案中没有的 dll)很大程度上取决于您是否将调试符号文件 (.pdb) 放在明显的位置 - 特别是在 dll 本身旁边。您也可以从模块窗口手动加载符号(调试时,Debug -> Windows -> Module,右键单击,Load Symbols From...)
【讨论】:
这里可能会遇到一个称为 Just My Code (JMC) 的功能。这是一个调试器/CLR 功能,旨在将用户的世界视野限制为他们编写的代码。确定一段代码或 DLL 是否属于您的各种方式有时会令人困惑。
下次遇到此问题时,请尝试禁用 JMC 并查看它是否能解决您的问题
【讨论】:
在调用 C++ dll 的托管 C# 程序上, 右键属性 调试选项卡 勾选启用非托管代码调试
希望这会有所帮助, 托尼。
【讨论】:
要调试 dll,它必须有 pdb 文件,其中包含与该 dll 匹配的调试信息。
【讨论】:
Visual Studio 使用编译过程生成的 .Pdb 符号,使开发人员能够在发生异常时查看源代码。
此信息的存在有两个原因。第一个原因是编译器(即,将源代码转换为应用程序的程序,例如 .exe 或 .dll 文件)在构建应用程序时使用。第二个原因是人们在调试应用程序时使用。符号信息是作为应用程序编译的一部分生成的(如果您将编译器设置为生成符号信息)。此信息可以直接驻留在应用程序文件中,也可以写入单独的符号文件中。符号所在的位置取决于您的开发应用程序和您选择的设置。例如,Microsoft Visual Basic (VB) 将符号直接构建到程序文件中。 Visual C++ (VC++) 通常构建一个或两个单独的文件。
符号文件有两种文件类型——.dbg 和 .pdb。 .dbg 文件采用通用对象文件格式 (COFF),这是一种不包含源代码行信息的通用符号文件描述;许多调试器可以读取这些文件。 .pdb 文件是 Microsoft 格式,包含比 .dbg 文件更多的信息。例如,源代码行信息仅在 .pdb 符号中可用。包含源代码行信息的符号文件让您可以使用源代码进行调试。
【讨论】:
虽然它不允许您调试代码,但Reflector 在检查 DLL 时非常有用。堆栈跟踪、有问题的 DLL 和反射器的组合通常会让您找到问题的核心。
【讨论】: