我正在使用第三方DLL。对于某些特定情况,DLL中的函数抛出异常。是否可以在Visual Studio中调试DLL?
在the answer from Andrew Rollings之后,我能够查看代码,但有没有简单的方法来调试Visual Studio中的代码?
答案 0 :(得分:17)
如果DLL是.NET语言,您可以使用.NET Reflector之类的工具对其进行反编译,然后针对源代码进行调试。
或者您可以询问供应商是否有源代码。这可能是最简单的方法。
答案 1 :(得分:5)
根据Andrew的回答,您只需将反编译的源代码视为项目中的新库,并在源代码中设置断点。删除对第三方DLL的所有引用,以便它是正在执行的反编译代码。
其他事项:
答案 2 :(得分:3)
我遇到过两种方法:
1)从使用项目中访问DLL项目。 这涉及在Visual Studio的单独实例中构建DLL,然后通过Visual Studio中的不同项目访问DLL(假设您拥有源代码)。 有很多方法可以实现这一目标:
Trace.WriteLine
将显示的DLL中的语句
在Visual Studio的“输出”窗口中。System.Diagnostics.Debugger.Break()
语句添加到DLL代码中。什么时候
在Visual Studio中运行调用项目,
程序执行将在那里停止。
从这里你可以添加访问权限
调用堆栈(包括所有函数
调用DLL本身)并设置break
点(虽然图标为
断点将显示为禁用
和休息的悬停文本
点将显示“断点将
目前没有被击中。没有符号
已加载此文档“)。System.Diagnostics.Debugger.Break()
(见上文)。2)将使用过程附加到DLL项目。 这涉及将Visual Studio调试器挂钩到正在运行的进程中。
答案 3 :(得分:3)
调试几个第三方库以及.NET本身对我有用的东西是WinDbg。它是微软的一个很棒的调试器,我用它来解决框架内部发生的一些棘手的问题。
如果它是托管DLL,则需要使用Son of Strike(SOS)扩展。它也可以调试本机。您需要了解一些关于callstacks和assembly / CIL指令以便善于使用它的信息。您应该能够确定异常以及导致异常的原因。我们使用WinDbg / SOS来查找例如在HttpWebResponse中,如果您使用Gzip压缩下载页面并且服务器返回错误的Gzip标头,.NET会在线程池中运行解压缩,崩溃将取消您的进程。快乐的调试。
答案 4 :(得分:1)
正如Cesar Reyes在Stack Overflow问题 Visual Studio - Attach source code to reference 中提到的,ReSharper 5(及更高版本)具有此功能。
答案 5 :(得分:1)
我们应该提到的另一个选项是dotPeek 1.2(来自ReSharper创建者的免费反编译器)。这篇文章描述了如何配置VS符号服务器和dotPeek 1.2来调试VisualStudio中的反编译代码:http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program
答案 6 :(得分:0)
我认为.NET Reflector得到了一些调试插件。这是一个更好的主意,因为反编译和重新编译代码通常会失败,您需要对代码进行很多更改才能修复它。
尝试使用.NET Reflector调试器。它可能会对你有所帮助。
答案 7 :(得分:0)
.NET Reflector 6附带了一个Visual Studio Addin,它允许您在没有源代码的程序集上使用Visual Studio的逐步调试。
看一下这篇博文:
http://www.simple-talk.com/community/blogs/alex/archive/2009/09/22/74919.aspx了解详情。
这仍然是一个非常早期的构建。所以不能保证它会工作,它可能会破坏您的visual studio配置或项目配置。确保您使用此项目的任何项目都有备份(或源代码管理)。
在此下载: http://www.red-gate.com/MessageBoard/viewforum.php?f=109