【发布时间】:2011-05-27 00:01:42
【问题描述】:
我的一位同事向客户发送了一个热修复版本,随后删除了 pdb 文件。有问题的构建正在崩溃(间歇性地),我们有几个崩溃转储。我们拥有版本控制中的所有源代码,并且可以将其编译为等效的 .exe 并获取该文件的符号。但是,这些符号与故障转储不完全匹配。似乎有几个函数偏离了一些恒定的偏移量,但我们只查看了少数几个。
我希望能够执行以下操作(我可以手动伪造其中的一部分,但这是一项巨大的工作):为转储中的每个线程获取堆栈跟踪并将转储中的指针转换为适当的类型并让它们显示在 Visual Studio 调试器中。我正在使用 2005,如果这很重要的话。
是否有工具可以让我们根据源代码、所有 .obj 文件和原始 .exe 重新创建 pdb?或者当我们编译/链接时是否有设置说“让它与你刚刚做的其他 exe 完全一样”或类似的东西?
快速更新,基于到目前为止的答案:我有我们发送给客户的 exe 文件,而不是对应的 pdb,如果有帮助的话。我不会尽快向他们发送新版本(如果可能的话),因为它需要大约一周的运行时间才能获得故障转储,而客户已经在“为什么这还没有修复?”阶段。 (如果我们确实发送了另一个构建,我希望它能够修复问题或在感兴趣的领域进行额外的调试,而不仅仅是相同的代码。)我知道可以使用大量的猜测;这就是我们目前正在做的事情。但这很痛苦,所以我希望有一种方法可以自动化它。
【问题讨论】:
-
让他为下个月洗碗。同时,向他们发送另一个“修补程序”。
-
Wimmel 的链接对我有用。这是一个很棒的工具。如果您将评论作为答案,我会接受。
标签: c++ visual-studio compiler-construction linker