pdb文件包含多少信息? (C#/ .NET)

时间:2009-02-27 20:22:29

标签: .net debugging symbols pdb-files

将pdb文件与商业应用程序一起重新分发是明智的吗?

有时,我正在使用堆栈跟踪从已部署的应用程序中获取更详细的错误报告日志;可以在不依赖这些文件的情况下实现此功能吗?

此外,这些文件包含多少原始源代码的提示?使用它对我的应用程序进行反向工程会更容易吗?

5 个答案:

答案 0 :(得分:11)

它基本上添加了以下信息:

  • 所有非公共类型,接口,结构,类
  • 函数中的局部变量
  • 源代码中相关代码和相应行号的源文件名。

所有组合使得逆向工程对于本机代码非常容易。

幸运的是,您可以创建PDB文件的精简版本,该版本仅包含带有/PDBSTRIPPED参数的公共信息。

哦,你编辑添加C#/ .NET,所以我不确定“PDBSTRIPPED”是否适用。但是,即使没有任何符号信息,.NET应用程序也很容易reverse engineer。我不介意将它们包含在.NET项目中。

答案 1 :(得分:3)

您可以尝试使用dia2dump查看内容。

答案 2 :(得分:3)

托管的.pdb文件包含以下信息:

  • 所有本地变量的名称
  • 所有源代码文件的名称以及IL指令到这些文件中的行的映射。

其他所有内容都包含在二进制文件本身中,包括所有类型,成员和函数参数的名称。

来源:PDB files: what every developer must know

答案 3 :(得分:2)

较新的.Net编译器版本可以在所有PDB文件中嵌入带有所有注释的完整源代码

免费的 JetBrains dotPeek 反编译器使用此Blob显示反编译的代码。检查程序集->元数据->便携式PDB元数据-> CustomDebugInformation->类型:guid 0003 0E8A571B-6926-466E-B4AD-8AB04611F5FE(嵌入式源)。

在此处记录: https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#EmbeddedSource

答案 4 :(得分:0)

PDB文件还包括源文件的所有注释。因此,使用EXE和PDB文件,可以从原始源代码生成1:1副本。