如果您正在开发软件,很可能遇到了“不匹配的PDB”调试器错误。当您将调试器指向错误的符号路径时,通常会发生这种情况。 但有时你确信你所指向的符号是正确的符号,这让你想知道为什么调试器认为这些符号不匹配。
"!sym noisy“将告诉您windows调试器如何搜索符号,并在遇到不匹配的pdb时报告它们,但它不会告诉您符号不匹配的原因。针对这一点,我们可以用扩展命令!itoldyouso
!itoldyouso简介
这个扩展命令根据模块测试符号文件的有效性。模块可以由其名称或基址指定。如果未指定符号文件,则测试加载的符号。否则,如果指定了pdb或dbg符号文件路径,则针对加载的模块对其进行测试。
语法
!IToldYouSo <module> [symbol]
- module
模块,可以是名称也可以是地址 - symbol
符号文件路径
用例
- 匹配的情况
0:000> !itoldyouso libcef F:..libcef.dll.pdb
libcef.dll
Timestamp: 5A9FC023
SizeOfImage: 2F86000
pdb: F:Codecef2623chromiumsrcoutReleaselibcef.dll.pdb
pdb sig: BE989A0F-1981-4A33-8F9C-44FDDE3E2BB2
age: 1
libcef.dll.pdb
pdb sig: BE989A0F-1981-4A33-8F9C-44FDDE3E2BB2
age: 1
MATCH: libcef.dll.pdb and libcef.dll - 不匹配的情况
0:000> !itoldyouso libcef F:..libcef.dll1.pdb
libcef.dll
Timestamp: 5A9FC023
SizeOfImage: 2F86000
pdb: F:Codecef2623chromiumsrcoutReleaselibcef.dll.pdb
pdb sig: BE989A0F-1981-4A33-8F9C-44FDDE3E2BB2
age: 1
F:..libcef.dll1.pdb - Could not find PDB.
0:000> !itoldyouso libcef F:..Update.pdb
libcef.dll
Timestamp: 5A9FC023
SizeOfImage: 2F86000
pdb: F:Codecef2623chromiumsrcoutReleaselibcef.dll.pdb
pdb sig: BE989A0F-1981-4A33-8F9C-44FDDE3E2BB2
age: 1
Update.pdb
pdb sig: 7A98EDE4-B661-401E-86E5-2A9BFF443B9E
age: 1
sig MISMATCH: Update.pdb and libcef.dll