调试符号问题

时间:2009-03-20 04:38:19

标签: debugging windbg symbols crash-dumps

我对使用Windbg或Visual Studio分析转储文件时使用的符号文件感兴趣。假设我的应用程序正在使用实用程序库,并且实用程序库具有相关的私有符号文件。当我的应用程序中存在崩溃转储时,我需要实用程序库的符号来分析完整的调用堆栈。但有时构建/运行时/调试环境是使用不同版本的实用程序库安装的 - 这些(实际上)是不同版本的实用程序库符号。

假设我们有一个实用程序库(和相关符号)的版本(例如版本A)用于构建(链接)我的应用程序,在运行时使用实用程序库(和相关符号)的另一个版本(例如版本B)崩溃,并在分析崩溃转储时在Windbg中使用另一个不同版本(例如版本C)的实用程序库(和相关符号)。

我的问题是,当崩溃在运行时生成时,版本B符号用于生成崩溃转储(用符号信息填充转储)?但是当在Windbg调试环境中使用不同版本的符号C时,会出现符号不匹配问题吗?使用哪个版本的库无关紧要?我的理解是否正确?

提前谢谢, 乔治

2 个答案:

答案 0 :(得分:3)

听起来您想要使用Symbol Server,以便WinDBG或VS可以下拉与您正在调试的库的构建相对应的符号。如果它是第三方组件并且您有私有符号,则可以将它们放在您自己的服务器中,或者查看第三方是否有公共符号服务器。

如果符号与您正在调试的dll不匹配,Windbg将不会加载符号,您可以使用!sym noisy来查看有关符号加载过程的更多信息。如果您选择不使用符号服务器,您可以手动管理所有pdb并将其手动加载到windbg中(使用lm v获取有关在您的过程中加载的模块的详细信息)

答案 1 :(得分:1)

通常,符号应与代码位于同一文件中(这就是调试版本通常更大的原因)。我不记得调试器在运行另一个二进制文件时从一个二进制文件中提取符号的情况 - 但是,这是来自一般知识,而不是来自任何有关您的环境的专门信息。