2010-07-15 116 views
1

我读过很多类似的问题进行转储,但我似乎无法找到一个答案,我的问题是什么。需要帮助调试使用WinDbg

我从64位Windows 2008上运行的32位应用程序中获得了一组小型转储。我的32位Vista Business上的32位Visual Studio根本不会触及它们,所以我一直试图在WinDbg中打开它们。

我没有确切对应的.pdb文件(我们才开始为他们节省这一特定版本之后),但我必须在同一台机器建有相同的代码.pdbs。我也可以访问创建小型转储的确切可执行文件。

我发现叫ChkMatch一个漂亮的小应用程序,可以让.pdbs匹配的可执行文件......唯一的区别(根据ChkMatch)是年龄,所以我符合我的新.pdbs原来的可执行文件。

但是,当我将它加载到WinDbg中时,它仍然表示它是“不匹配的pdb”,因为我已经设置了.symopts+0x40它试图加载它们。然后我得到了警告:

*** WARNING: Unable to verify checksum for myexe.exe 

我跑!lmi myexe,发现,的确,可执行文件的校验实际上为零。从左右一点,我发现可执行文件应该已经用/release标志来构建,以获得校验和。这一切都很好,但我不能及时重建并重建(如果我这样做了,我肯定会保存原始的.pdbs :-P)。

有什么我可以做吗?似乎有点荒谬,我至少不能在这里比赛,至少得到一个调用堆栈。

+0

即使SYMOPT_LOAD_ANYTHING打开,从中获得您的PDB文件必须具有相同的设置,您试图调试的二进制文件的版本。是这样吗? – 2010-07-15 22:10:28

回答

1

你不需要校验获得调用堆栈 - 这样的警告可以忽略。

得到你需要发出命令堆栈(k的任何版本)堆栈。

如果小转储器是好的(即描述实际故障),则应首先尝试自动分析!analyze -v,这将帮助您开始。

回来的时候,你已经用尽你的专业知识:O)

+0

对,我已经知道了。调用堆栈非常准确,所以我确信这是由于我缺少符号。我放置了一个新的可执行文件(使用完全匹配的符号),重现了这个问题,并获得了相同的调用堆栈。看起来我已经回到原点了。 接受你的答案,因为它是这里唯一的一个。 – Morinar 2010-07-15 22:31:44

0

如果你使用小型转储工作,那么你必须设置你的图像路径(按Ctrl + I)为指向与垃圾堆里的图像的位置。小转储的麻烦在于它们不包含来自目标上可执行文件的任何代码或数据,因此您必须自己提供它们。

斯科特