代码之家  ›  专栏  ›  技术社区  ›  Biswanath

在Visual Studio中调试第三方DLL?

  •  15
  • Biswanath  · 技术社区  · 17 年前

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

    the answer from Andrew Rollings ,我可以查看代码,但是在Visual Studio中有没有任何简单的调试代码的方法?

    8 回复  |  直到 17 年前
        1
  •  17
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

    如果dll位于 .NET 语言,您可以使用类似 .NET Reflector 然后根据源代码进行调试。

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

        2
  •  5
  •   Brian Lyttle    17 年前

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

    其他事项:

    • 您可能通过反编译代码或违反与第三方供应商的许可协议而违反法律。一定要和别人一起检查。
    • 如果要传送给其他开发人员,或者签入更大的源树,您需要确保删除对已反编译版本的引用。很容易忘记这个!
        3
  •  3
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

    我遇到了两种方法:

    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键 + 中高音 + e ,查找 引发异常,然后单击 “扔”栏 例外。就在这里 好像你用过 System.Diagnostics.Debugger.Break()。 (见上文)。

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

    • 在Visual Studio中打开dll项目。
    • 运行使用DLL的应用程序(此 无法从运行应用程序 Visual Studio的另一个实例 进程将已经有一个调试器 附在上面)。
    • 从这里你可以添加断点并逐步通过 在Visual Studio中加载的dll代码(尽管 断点将显示为禁用 与方法1相同)。
        4
  •  3
  •   Community Mohan Dere    9 年前

    对于调试几个第三方库以及 .NET 本身就是 WinDbg . 这是一个来自微软的很棒的调试器,我曾经用它来解决框架内部深层次出现的一些棘手问题。

    你需要使用 Son of Strike (sos)扩展(如果它是托管dll)。它还可以调试本机。您需要了解一些调用堆栈和程序集/ CIL 使用说明。您应该能够确定异常及其原因。我们使用windbg/sos来查找,例如,在httpwebresponse中,如果您使用gzip压缩来下载一个页面,并且服务器返回了一个错误的gzip头,.net在threadpool中运行解压缩,崩溃会使您的进程中断。调试愉快。

        5
  •  1
  •   Community Mohan Dere    9 年前

    正如塞萨尔·雷耶斯在堆栈溢出问题中提到的那样 Visual Studio - Attach source code to reference , ReSharper 5(及更高版本)具有此功能。

        6
  •  0
  •   Jeeva Subburaj    16 年前

    .NET Reflector 6附带了一个Visual Studio加载项,该加载项允许您在没有源代码的程序集上使用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

        7
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

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

    请尝试.NET Reflector调试器。这可能对你有很大帮助。

        8
  •  0
  •   Shkredov S.    12 年前

    这里我们应该提到的另一个选项是dotpeek 1.2(一个来自resharper创建者的免费反编译程序)。下面是一篇很好的文章,介绍如何配置vs symbol server和dotpeek 1.2以调试VisualStudio中的反编译代码: http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program