20

我弄清楚了 .NET 程序集 .dll 文件如何使用 GUID(博客)映射到 .pdb。当我调试到程序集并询问源代码时,如果我导航到文件,它可能会告诉我源代码与原始代码不同。它怎么知道这个?我期待 .pdb 文件包含每个文件的校验和,但它似乎没有。我发现转储调试信息的最佳工具是dia2dump。C++ .pdb 文件有 MD5 条目,但 C# .pdb 文件没有。

C++ 转储
dia2dump -f dia2dump.pdb > dia2dump.pdb.files.txt

C# 转储
dia2dump -f Autofac.pdb > Autofac.pdb.files.txt
dia2dump -all Autofac.pdb > Autofac.pdb.all.txt

我在“全部”转储中遗漏了什么?

它必须使用校验和。如果我更改 Module.cs 中的单个字符,我会得到:
在此处输入图像描述

在哪里可以找到 .pdb 中引用的源文件的校验和?

4

1 回答 1

12

MD5 校验和存储在每个源文件的 .pdb 文件中。如果您对上面的问题“您希望调试器仍然使用它吗?”回答“否”,它会打印出它正在寻找的校验和:

在此处输入图像描述

使用十六进制编辑器,您可以看到它肯定在 .pdb 中。我的下一个任务是弄清楚如何以编程方式访问它。对于 .pdb 文件,我希望它返回所有源文件名及其 MD5 校验和。

在此处输入图像描述

于 2013-06-15T15:04:57.400 回答