调试符号问题 [英] debug symbol issue

查看:201
本文介绍了调试符号问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我们有一个用于构建(链接)我的应用程序的实用程序库(和相关符号)的版本(例如版本A),当崩溃时在运行时使用另一个版本(例如版本B)的实用程序库(和相关符号)



我的问题是,当崩溃是genarated的时候,我们可以在Windbg中找到另一个不同的版本(例如C版本)运行时,版本B符号用于生成故障转储(以符号信息填充转储)?但是当在Windbg调试环境中使用不同版本的符号C时,会出现符号错误问题?而哪个版本的库用来构建没关系呢?

解决方案



div>

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



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


I am interested in which symbol file is used when we analyze dump file using Windbg or Visual Studio. Suppose my application is using a utility library, and the utility library has related private symbol file. When there is crash dump in my application, I need the symbol of the utility library to analyze the full call stack. But sometimes the build/runtime/debug environments are installed with different versions of the utility library -- which are (for sure) of different versions of utility library symbols.

Suppose we have a version (e.g. version A) of utility library (and related symbol) for build (link) my application, using another version (e.g. version B) of utility library (and related symbol) in runtime when there is crash, and using another different version (e.g. version C) of utility library (and related symbol) in Windbg when I analyze the crash dump.

My question is, when the crash is genarated in runtime, version B symbol is used to generate the crash dump (to fill the dump with symbol information)? But when using a different version of symbol C in Windbg debugging environment, there will be symbol mis-match issue? And which version of library is used to build does not matter? Are my understandings all correct?

thanks in advance, George

解决方案

It sounds like you want to use a Symbol Server so that WinDBG or VS can pull down symbols that correspond to the build of the library you're debugging. If it's a third party component and you have private symbols you can either put them symbols in your own server or see if the third party has a public symbol server.

Windbg won't load symbols if they don't match the dll you're debugging, you can use !sym noisy to see more about the symbol loading process. If you choose not to use a symbol server you can manage all the pdb's by hand and load them manually into windbg (use lm v to get detailed information about a module loaded in your process)

这篇关于调试符号问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆