我有一个导入DLL的项目(由我编写)。有时,当DLL中的方法中引发异常时,主机项目会打开一个选项卡,让我看到DLL中的代码。我也可以在其中加入断点。
但是这种行为似乎很随意,我不能故意这样做,并不总是有效。另外,我在项目资源管理器窗口中看不到文件名。
有关调试DLL的任何帮助吗?感谢
答案 0 :(得分:13)
增强的调试(对于不在当前解决方案中的dll)在很大程度上取决于您是否在一个明显的位置具有调试符号文件(.pdb) - 特别是在dll本身旁边。您还可以从模块窗口手动加载符号(调试时,调试 - > Windows - >模块,右键单击,从...加载符号)
答案 1 :(得分:3)
这里可能遇到的问题是Just My Code(JMC)。这是一个调试器/ CLR功能,旨在将用户的世界视图限制为他们编写的代码。一段代码或DLL如何被确定为你自己的各种方式有时会令人困惑。
下次遇到此问题时,请尝试停用JMC,看看它是否解决了您的问题
答案 2 :(得分:2)
在调用C ++ dll的托管C#程序上, 右键单击属性 调试选项卡 勾选启用非托管代码调试
希望这有帮助, 贝。
答案 3 :(得分:1)
要调试dll,它必须具有pdb文件,其中包含与该dll匹配的调试信息。
答案 4 :(得分:1)
Visual Studio使用编译过程生成的.Pdb符号,让dev在发生异常时查看源代码。
此信息存在有两个原因。第一个原因是编译器(即,将源代码转换为应用程序的程序,例如.exe或.dll文件)在构建应用程序时使用。第二个原因是人们在调试应用程序时使用。符号信息是作为应用程序编译的一部分生成的(如果您将编译器设置为生成符号信息)。此信息可以直接驻留在应用程序文件中,也可以写入单独的符号文件。符号所在的位置取决于您的开发应用程序和您选择的设置。例如,Microsoft Visual Basic(VB)将符号直接构建到程序文件中。 Visual C ++(VC ++)通常构建一个或两个单独的文件。
符号文件有两种文件类型 - .dbg和.pdb。 .dbg文件采用通用对象文件格式(COFF),这是一种不包含源行信息的通用符号文件描述;许多调试器都可以读取这些文件。 .pdb文件是Microsoft格式,包含的信息比.dbg文件多得多。例如,源行信息仅在.pdb符号中可用。包含源代码行信息的符号文件允许您使用源代码进行调试。
答案 5 :(得分:1)
虽然它不允许您调试代码,但Reflector在检查DLL时非常有用。堆栈跟踪,违规DLL和反射器的组合通常会让你找到问题的核心。