如何检查 pdb 文件是不是对调试程序集有效

Posted

技术标签:

【中文标题】如何检查 pdb 文件是不是对调试程序集有效【英文标题】:how to check if pdb file is valid for debugging an assembly如何检查 pdb 文件是否对调试程序集有效 【发布时间】:2011-05-22 12:32:51 【问题描述】:

我正在为学术目的符号源服务器编写一些逻辑。

我必须检查程序集及其 pdb 文件是否相互匹配,以便用户可以毫无问题地使用它们。

我几乎没有做任何研究,但没有什么特别之处。如果 VS 在调试时会得到错误的符号,它可能会显示信息:

以下模块是构建的 启用或不启用优化 调试信息: 程序集.dll 到 调试这个模块,改变它的项目 将配置构建到调试模式。到 禁止显示此消息,禁用 '如果启动时没有用户代码则发出警告' 调试器选项。

我也想知道 VS 从 pdb 和程序集获取什么信息来验证它们。

是否有任何(托管)API?甚至是不受管理的?

有什么想法吗?

【问题讨论】:

【参考方案1】:

我认为 Visual Studio 使用的 API 名称是 DIA;它是一个可以从 C# 调用的 COM API。

Mono.Cecil 库提供了一组很好的类来访问程序集及其符号;它在下面使用 DIA 来存储 .pdb 文件。我会为此直接打电话给塞西尔;如果没有,源代码应该提供指导。

【讨论】:

谢谢,比起 COM,我更喜欢任何托管 api,Mono.Cecil 很高兴了解【参考方案2】:

此页面包含一篇关于 PDB 和 DBG 文件的血腥细节的优秀文章。它准确地解释了符号文件中存储的内容,如何读取它,以及如何确定二进制文件(EXE 或 DLL)与符号文件(PDB 或 DBG)是否匹配。

http://www.debuginfo.com/articles/debuginfomatch.html#details

【讨论】:

以上是关于如何检查 pdb 文件是不是对调试程序集有效的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 怎么使用pdb进行调试

Visual Studio 不生成.vshost.exe和.pdb文件的方法

无法找到或打开 PDB 文件 - PDB 不是用 DLL 构建的

windbg怎么打开pdb文件

如何检查 DLL 是不是经过调试编译 [重复]

防止将引用的程序集 PDB 和 XML 文件复制到输出