如何在Visual Studio中调试非托管dll,当我们没有该dll的源代码时?

时间:2013-08-22 07:16:17

标签: c# dll com visual-studio-debugging

在我的应用程序中,我正在使用第三方DLL,我没有任何可用的soruce代码。 现在我在Windows7操作系统中获得异常,所以我想调试并确定原因是什么。

在这种情况下,

Reflector不会帮助我,因为它是一个非托管的dll。并且反编译器在传递此dll时会出错(源代码的提取)。

要在visual studio中进行调试,它希望PDB文件和.pdb只能从源代码生成。

在调试部分,我选择了“启用本机代码调试选项”,在安全性部分,我选择了选项作为paritially trusted application来摆脱异常。

我无法得出结论,可能是什么问题,除了上述之外没有任何想法,如何解决?

据我所知,如果我们没有可用的源代码,我们就无法调试非托管dll。

如果我们有任何技术,请任何人建议。

我的思考过程:如果我能获得关于哪个API失败的运行时信息,我可以选择替代API并解决问题。

提前致谢。

此致 希瓦。

1 个答案:

答案 0 :(得分:1)

当然你可以调试它。你可以很好地逐步完成汇编代码并检查寄存器的状态等。

您似乎真的想通过检查和执行原始源代码进行调试。如果没有源代码,这显然是不可能的,因为通常不可能从优化的本机可执行文件中反向设计源代码(可以对功能上等效的代码进行反向工程,但这可能与原始源代码有很大不同)。原生dll通常不包含符号的名称(类,函数,成员等),除了导出的符号,因此不可能创建例如带有方法名称的友好堆栈跟踪。

除此之外,即使你有源代码,没有符号文件(.pdb)也没用,因为pdb包含有关原始源代码和编译指令之间的映射的数据,以及其他信息(符号名称,优化信息)等等。)

但是,如果您有一个pdb文件而不是源代码,那么使用汇编代码调试并不困难(好吧,它也不是那么容易)。这两篇文章(http://www.microsoft.com/msj/0298/hood0298.aspxhttp://www.microsoft.com/msj/0698/hood0698.aspx)有足够的信息来调试您可能需要的大多数常见情况。