2008-12-08 236 views
13

我正在使用第三方DLL。对于某些特定情况,DLL中的函数会抛出异常。是否有可能在Visual Studio中调试DLL?在Visual Studio中调试第三方DLL?

the answer from Andrew Rollings之后,我能够查看代码,但有没有简单的方法通过Visual Studio中的代码进行调试?

+1

是的,将代码提取到文件中,将它们添加到dll项目并重新编译dll。 将此项目添加到您的解决方案中,并将参考更改为指向该项目。 然后你应该可以调试它。 – 2008-12-08 17:28:24

+0

我有类似的问题。所有的资源都属于我,但我不能将它们添加到参考项目中。有超过20个项目涉及...并没有下面的解决方案真的有帮助 – TimothyP 2009-12-14 05:54:28

回答

15

如果该DLL采用.NET语言,则可以使用类似.NET Reflector的工具对其进行反编译,然后根据源代码进行调试。

或者如果源代码可用,您可以询问供应商。这可能是最简单的方法。

+0

它是.Net DLL,我有一个反射器,让我试试这样做。谢谢。 – Biswanath 2008-12-08 15:55:47

+2

NET的反射6配备了Visual Studio的加载项,可以让你对你没有的源代码组件使用Visual Studio的一步,通过调试。 – 2009-10-29 18:22:55

5

基于Andrew的答案,您只需将反编译后的源代码作为项目中的新库,并在源代码中设置断点即可。删除所有对第三方DLL的引用,以便它是正在执行的反编译代码。

其他的事情:

  • 您可以通过反编译代码违反法律,违反或与第三方供应商提供的许可协议。请务必与某人一起回顾。
  • 如果您要发送给其他开发人员或检入更大的源代码树,您将需要确保删除对反编译版本的引用。容易忘记这一点!
+3

+1提高对违反法律或违反许可协议 – JeffH 2009-04-21 16:05:11

0

我以为.NET Reflector有一些调试插件。这将是一个好主意,因为反编译和重新编译代码通常会失败,并且您需要在代码中做很多修改才能修复它。

尝试给.NET反射器调试器。它可能会帮助你很多。

3

有两种方法我遇到:

1)访问从使用项目的DLL项目。 这涉及在单独的Visual Studio实例中构建DLL,然后通过Visual Studio中的其他项目(假定您有源代码)访问DLL。 有多种方式来实现:

  • 您可以将在Visual Studio中的“输出”窗口显示 了DLL添加Trace.WriteLine 语句。
  • 您可以将System.Diagnostics.Debugger.Break()语句添加到DLL代码。当在Visual Studio中运行调用项目 时, 程序执行将在那里停止。 从这里您可以添加访问 调用堆栈(包括DLL本身的所有功能 调用),并设置断点 点(虽然 图标断点将出现禁用 和休息 点会读“悬停文本目前没有命中断点,当前没有符号 “)。
  • 如果DLL抛出异常(你可以从 看到“输出”窗口,如果该异常 被捕获并通过DLL处理) 你可以告诉Visual Studio时 该类型例外的是要始终破抛出。 命中按Ctrl + Alt键+Ë,发现被抛出 异常的类型,然后单击 为 例外“扔”列。从这里,它正好是 ,就好像你已经使用 System.Diagnostics.Debugger.Break() (见上)。

2)附加一个使用过程的DLL项目。 这涉及将Visual Studio调试器挂接到正在运行的进程中。

  • 在Visual Studio中打开DLL项目。
  • 运行一个应用程序,使用DLL(这 应用程序不能从 运行Visual Studio的另一个实例,因为 过程中就已经连有一个调试器 )。
  • 从这里您可以添加中断点,并通过 加载Visual Studio中的DLL代码(尽管 中断点将出现禁用 与方法1中相同)。
3

对我来说调试了几个第三方库以及.NET本身的东西是WinDbg。这是一个来自微软的令人敬畏的调试器,我曾用它来排除框架内发生的一些粘性问题。

如果它是托管DLL,则需要使用Son of Strike(SOS)扩展。它也可以调试本地。您需要了解一些有关使用它的说明和汇编/ CIL说明。您应该能够确定异常以及导致它的原因。我们使用WinDbg/SOS来查找HttpWebResponse中的实例,如果您使用Gzip压缩来下载页面,并且服务器返回一个错误的Gzip头部,.NET将在线程池中运行解压缩,并且崩溃将取消您的过程。快乐调试。

0

.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