我正在使用第三方DLL。对于某些特定情况,DLL中的函数会抛出异常。是否有可能在Visual Studio中调试DLL?在Visual Studio中调试第三方DLL?
the answer from Andrew Rollings之后,我能够查看代码,但有没有简单的方法通过Visual Studio中的代码进行调试?
我正在使用第三方DLL。对于某些特定情况,DLL中的函数会抛出异常。是否有可能在Visual Studio中调试DLL?在Visual Studio中调试第三方DLL?
the answer from Andrew Rollings之后,我能够查看代码,但有没有简单的方法通过Visual Studio中的代码进行调试?
如果该DLL采用.NET语言,则可以使用类似.NET Reflector的工具对其进行反编译,然后根据源代码进行调试。
或者如果源代码可用,您可以询问供应商。这可能是最简单的方法。
它是.Net DLL,我有一个反射器,让我试试这样做。谢谢。 – Biswanath 2008-12-08 15:55:47
NET的反射6配备了Visual Studio的加载项,可以让你对你没有的源代码组件使用Visual Studio的一步,通过调试。 – 2009-10-29 18:22:55
基于Andrew的答案,您只需将反编译后的源代码作为项目中的新库,并在源代码中设置断点即可。删除所有对第三方DLL的引用,以便它是正在执行的反编译代码。
其他的事情:
+1提高对违反法律或违反许可协议 – JeffH 2009-04-21 16:05:11
我以为.NET Reflector有一些调试插件。这将是一个好主意,因为反编译和重新编译代码通常会失败,并且您需要在代码中做很多修改才能修复它。
尝试给.NET反射器调试器。它可能会帮助你很多。
有两种方法我遇到:
1)访问从使用项目的DLL项目。 这涉及在单独的Visual Studio实例中构建DLL,然后通过Visual Studio中的其他项目(假定您有源代码)访问DLL。 有多种方式来实现:
Trace.WriteLine
语句。System.Diagnostics.Debugger.Break()
语句添加到DLL代码。当在Visual Studio中运行调用项目 时, 程序执行将在那里停止。 从这里您可以添加访问 调用堆栈(包括DLL本身的所有功能 调用),并设置断点 点(虽然 图标断点将出现禁用 和休息 点会读“悬停文本目前没有命中断点,当前没有符号 “)。System.Diagnostics.Debugger.Break()
(见上)。2)附加一个使用过程的DLL项目。 这涉及将Visual Studio调试器挂接到正在运行的进程中。
对我来说调试了几个第三方库以及.NET本身的东西是WinDbg。这是一个来自微软的令人敬畏的调试器,我曾用它来排除框架内发生的一些粘性问题。
如果它是托管DLL,则需要使用Son of Strike(SOS)扩展。它也可以调试本地。您需要了解一些有关使用它的说明和汇编/ CIL说明。您应该能够确定异常以及导致它的原因。我们使用WinDbg/SOS来查找HttpWebResponse中的实例,如果您使用Gzip压缩来下载页面,并且服务器返回一个错误的Gzip头部,.NET将在线程池中运行解压缩,并且崩溃将取消您的过程。快乐调试。
.NET Reflector 6附带了一个Visual Studio插件,它允许您在没有源代码的程序集上使用Visual Studio的逐步调试。
看一看这个博客帖子:
http://www.simple-talk.com/community/blogs/alex/archive/2009/09/22/74919.aspx了解更多详情。
这仍然是一个非常早期的构建。所以不能保证它可以工作,并且可能会破坏你的视觉工作室配置或项目配置。确保你有任何项目使用备份(或源代码管理)。
这里下载: http://www.red-gate.com/MessageBoard/viewforum.php?f=109
至于塞萨尔雷耶斯在堆栈溢出问题Visual Studio - Attach source code to reference,ReSharper 5(或更高版本)中提到有这个能力。我们应该在这里提一下
还有一个选项是dotPeek 1.2(从ReSharper的创作者一个自由的反编译器)。下面是一个很好的帖子,描述如何配置VS符号服务器和dotPeek 1.2来调试VisualStudio反编译的代码:http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program
是的,将代码提取到文件中,将它们添加到dll项目并重新编译dll。 将此项目添加到您的解决方案中,并将参考更改为指向该项目。 然后你应该可以调试它。 – 2008-12-08 17:28:24
我有类似的问题。所有的资源都属于我,但我不能将它们添加到参考项目中。有超过20个项目涉及...并没有下面的解决方案真的有帮助 – TimothyP 2009-12-14 05:54:28