我有一个程序使用不同的dll并且崩溃了。 我试图使用WinDbg解决崩溃的原因,但到目前为止我没有运气。
我有.dmp文件,但我尝试过addig作为符号路径,我尝试在符号路径中添加dll以及其他一些东西,但它一直告诉我它找不到myprogram.dmp / symbols等或只是找不到符号。
使用.dmp文件的正确方法是什么?
谢谢我是新手,找到在线文档似乎只对没有DLL和其他非内置DLL的程序有所帮助。
部分错误示例:
* 错误:找不到符号文件。默认导出mydll.dll的符号
* 错误:模块加载已完成但无法为myprogram.dll加载符号
找不到PDB:c:\ users \ me \ desktop \ myprogram.dmp \ symbols \ dll \ ole32.pdb
我设法加载默认的窗口符号,将下载的符号添加到符号路径中。我必须将我在项目中使用的DLL添加到符号文件夹中吗?
PRIMARY_PROBLEM_CLASS:WRONG_SYMBOLS
C:\用户\我\桌面\分配\ 4。 DPI-600测试\ DumpFileDebugging \ symbols
答案 0 :(得分:1)
首先,为您的私人符号设置路径。我们称之为X:\ mysymbols。将所有PDB复制到该文件夹中,就像平面列表一样。在WinDbg中,将符号路径设置为该文件夹
.sympath X:\mysymbols
接下来,让WinDbg找到微软的东西。创建一个文件夹X:\ microsymbols。什么都不放在里面,不要使用与X:\ mysymbols相同的文件夹。将该文件夹添加到符号路径:
.symfix+ X:\microsymbols
现在一切都设置正确,告诉调试器刷新:
.reload
在极少数情况下只有
.reload /f; ld *
帮助。
如果你仍然不走运,请尝试
!sym noisy
以便调试器告诉您符号究竟出了什么问题。查找错误消息并尝试修复它们。
如果仍然出错,您可能根本就没有正确的PDB。 PDB通过一种散列/时间戳与模块(DLL和EXE)相关联。所以要么获得正确的PDB,要么尝试
.symopt+ 0x40
强制调试器在不检查哈希的情况下加载他得到的任何东西。请注意,如果它们离得太远,那么它们可能会产生误导。