在Visual Studio中调试第三方DLL?

时间:2008-12-08 15:48:57

标签: c# .net debugging dll

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

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

8 个答案:

答案 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 点(虽然图标为 断点将显示为禁用 和休息的悬停文本 点将显示“断点将 目前没有被击中。没有符号 已加载此文档“)。
  • 如果DLL抛出异常(您可以从中看到) 如果异常,则为“输出”窗口 由DLL捕获和处理) 你可以告诉Visual Studio总是在什么时候破坏 抛出这种类型的异常。 点击 Ctrl + Alt + E ,找到的类型 抛出异常,然后单击 那个'投掷'专栏 例外。从这里确切地说 好像你曾经使用过 System.Diagnostics.Debugger.Break() (见上文)。

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

  • 在Visual Studio中打开DLL项目。
  • 运行使用DLL的应用程序(这个 应用程序无法运行 自从以来的另一个Visual Studio实例 进程已经有一个调试器 附在它上面。)
  • 从这里您可以添加断点并逐步完成 在Visual Studio中加载的DLL代码(尽管如此 断点将显示为禁用 与方法1)相同。

答案 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