【问题标题】:Generate PDB from .NET DLL file?从 .NET DLL 文件生成 PDB?
【发布时间】:2010-05-18 16:37:20
【问题描述】:

我需要可以从 DLL 文件(C# .NET 代码)生成 PDB 的东西,是否有任何 免费 程序可以做到这一点?

【问题讨论】:

  • 理论上可以做到,因为使用 .net dll 您可以获得原始源代码(在实验错误范围内)。唯一缺少的部分是PDB 文件的格式,这是一个严密保护的秘密。 Reflector 可以将 dll 转换为解决方案,您可以在其中使用 Visual Studio 编译它同时生成 PDB。您是否使用 Visual Studio 为您生成 PDB - 因为它知道秘密格式。

标签: c# .net debugging pdb-files disassembly


【解决方案1】:

实际上你也可以使用 dotPeek 从 1.2 版本开始。

在程序集资源管理器中右键单击程序集,然后选择“生成 Pdb”。它还可以选择一次性为引用的程序集生成文件。

【讨论】:

  • 如果程序集不包含调试目录,如果您将此解决方案与之前的答案结合使用,它仍然可以工作(并在重新创建 dll/exe 之前删除 .il 文件)
  • 有没有办法防止它生成这么多子文件夹?
【解决方案2】:

即使您没有混淆源代码和代码,您也可以通过使用 ildasm 和 ilasm 重新编译来创建 pdb:

  • ildasm 反编译程序集:ildasm /out=assembly_name.il assembly_name.dll
  • ilasm 兼容:ilasm assembly_name.il /dll /pdb

【讨论】:

【解决方案3】:

PDB 包含与 DLL 相关的调试符号,通常与 DLL 一起构建。要启用生成 pdb 文件,请转到项目 PropertiesBuild 选项卡、Advanced... 按钮并在 Debug Info 中选择> 字段“pdb-only”或“full”:

如果您需要在没有源代码的情况下调试第三方程序集,那么 dotPeekReSharper 将非常有帮助,可以选择从 DLL 生成 PDB。在 ReSharper 中,这可以通过 ReSharper > Windows > Assembly Explorer 完成,方法是打开必要的程序集并单击“Generate Pdb... ”:

【讨论】:

    【解决方案4】:

    您可以使用ILSpy。这是一个方便的免费应用程序,用于为托管 dll 拆卸和生成 pdb。

    【讨论】:

      【解决方案5】:

      您需要源代码才能生成 PDB。

      【讨论】:

      • 换句话说:当你只有 DLL 时,不可能创建 PDB。
      • 嗯,我可以使用Reflector来获取源,那么我需要什么来获取PDB?
      • 请记住,您获得的源代码与用于编译 DLL 的源代码不同。如果有 lambda 表达式、迭代器……更不用说混淆了,那简直就是一场噩梦。但是假设您有一些源代码,您将 /pdb 选项提供给编译器 (msdn.microsoft.com/en-US/library/ms228625(v=VS.80).aspx)。
      • @BrunoLM Reflector Pro(他们为您提供的 15 天试用版)正是这样做的 - 它会反编译整个程序集并构建一个 PDB,以便您可以对其进行调试。
      • 有点误导的答案。 @Rup 是对的,我过去使用过这个选项,而且效果非常好!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多