windbg怎么打开pdb文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windbg怎么打开pdb文件相关的知识,希望对你有一定的参考价值。
用VS调试程序时,有时会在VS底部的“输出”框中提示“无法查找或打开 PDB 文件”。这该怎么解决呢?下面,我们以VS2013为例,来教大家解决办法。
工具/原料
VS
方法/步骤
打开VS2013,点击菜单“工具”-“选项”。
在选项窗口中,展开“调试”-“常规”,然后在右边的窗格中勾选“启用源服务器支持”。
然后展开“调试”-“符号”,勾选“Windows符号服务器”。
这时,会弹出一个警告对话框,无视点击“确定”即可。
最后,点击“确定”关闭选项窗口。
下面,我们再来点击“本地Windows调试器”调试运行程序。
第一次运行该程序时,会从Windows服务器上下载相关的符号集,这需要一点时间。
稍后,程序就启动了(我这个程序是一个仿QQ聊天界面窗口)。以后,如果再次调试该程序,就无需再次等待了(因为符号集已经从服务器下载到本地)。
END
注意事项
首次调试程序时,需要联网从服务器加载符号集。
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
举报作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。 参考技术A 你用 WinDbg 打开一个被调试程序后,输入 symchk 回车,WinDbg 就会自动的连到微软的网站根据你的机器的情况更新的 PDB 文件,并将它保存在上面斜体部分指定的本地路径里,这样你就可以确保你的符号文件版本和你机器上的文件版本一致
SRV*D:\Symbols\websymbols*http://msdl.microsoft.com/download/symbols
(斜体部分是你在本地保存符号文件的路径) 参考技术B PDB文件是Palm OS操作系统上数据文件类型。一般我们在使用Palm系统的电子书时都会遇到这种文件,一般用于电子书或手机电子书
pdb是Palm DataBase的缩写,Palm OS所用文件的扩展名为.pdb。
可以使用PalmReader打开。 如果想把PDB文件转换成TXT文件查看,可以使用WavePDB转。
故障转储 - WinDbg - 强制 PDB 文件匹配不起作用?
【中文标题】故障转储 - WinDbg - 强制 PDB 文件匹配不起作用?【英文标题】:Crash dump - WinDbg - force PDB files to match doesn't work? 【发布时间】:2014-03-20 03:05:32 【问题描述】:我有一个客户应用程序的故障转储,该应用程序是使用我们在 WinDbg 中分析的非常旧版本的 dll(发布版本,没有原始符号)构建的。
为了获得更多信息,我在发布模式下重新构建了 dll,这次使用符号,使用相同的编译器版本,我相信与最初构建 dll 时相同的设置。我将符号文件添加到我的符号路径中,但 WinDbg 扩展名 !itoldyouso 告诉我转储中的模块与 PDB 文件不匹配。启用 SYMOPT_LOAD_ANYTHING 也无济于事。
!itoldyouso 告诉我它们不匹配,因为模块没有 pdb sig(值 0),而我创建的重新创建的符号文件(具有有效的 pdb sig)。如何让它们匹配?
【问题讨论】:
【参考方案1】:很遗憾,您的 DLL 没有匹配的符号 :(。据我了解,现在的任何尝试都无法为您提供完全匹配的 PDB。
回收一些应该有帮助的旧线程:
Is it possible to (re)create a PDB file after a DLL is made
Tool to find if dll (or) exe and PDB file match
你最好的选择是
一个。将您的代码同步回 DLL 发布的时间
b.使用相同的工具集构建和创建 PDB。
c。使用 .reload /i 选项加载符号
【讨论】:
【参考方案2】:你试过.reload /i foo.dll
吗?
对于详细输出尝试:
!sym noisy;.reload /i foo.dll;x foo!*test*
【讨论】:
是的,它加载了 foo 的符号,但是在详细的输出中我也看到了不匹配的报告:“DBGENG: foo.dll has mismatched symbols - type ".hh dbgerr003" for details" 当然它们会被报告为不匹配,因为它们不是在构建DLL时构建的。但只要你使用相同的编译器和设置(你提到的)并且源代码根本没有改变,那么符号应该可以工作。 我想我是在假设除非我有一个匹配我根本无法信任调用堆栈,虽然也许正如你所说的它们永远不会匹配,但也许尽管如此我仍然可以有一个大部分是有效的调用堆栈。 为什么会这样?也就是说,/i
是什么意思?
来自 Windbg 的帮助:“忽略 .pdb 文件版本中的不匹配。”【参考方案3】:
尝试 chkmatch (http://debuginfo.com/tools/chkmatch.html) - 它能够覆盖 pdb 文件中的签名,因此 exe 和 pdb 将匹配。另外,前段时间我写了一篇关于“离线”检查pdb文件的帖子,也许你会发现那里有一些有用的东西:http://lowleveldesign.wordpress.com/2011/12/09/pdb-file-out-of-debugger/。
【讨论】:
这是一个很好的建议,但如果年龄字段不同,chkmatch -m
可能会失败,这似乎很可能在这里。二进制文件的 PDB 签名和年龄可能为 0。如果年龄不匹配,chkmatch 不会更改 GUID,而且 PDB 中的年龄几乎肯定不是 0。以上是关于windbg怎么打开pdb文件的主要内容,如果未能解决你的问题,请参考以下文章