【发布时间】:2010-09-11 18:43:45
【问题描述】:
如何获得使用 Visual Studio 2005 开发的 c++ 应用程序的完整调用堆栈?我想要一个完整的调用堆栈,包括系统库中的代码。
我是否必须更改 Visual Studio 中的某些设置,还是必须安装其他软件?
【问题讨论】:
标签: c++ visual-studio debugging callstack visual-c++-2005
如何获得使用 Visual Studio 2005 开发的 c++ 应用程序的完整调用堆栈?我想要一个完整的调用堆栈,包括系统库中的代码。
我是否必须更改 Visual Studio 中的某些设置,还是必须安装其他软件?
【问题讨论】:
标签: c++ visual-studio debugging callstack visual-c++-2005
获取所有项目依赖项的调试信息。这在项目属性的“配置属性 -> C/C++ -> 常规”部分下指定。
在菜单上,转到“工具 -> 选项”,然后选择“调试 -> 符号”。
添加指向微软免费符号服务器“symsrvsymsrv.dllc:\symbols*http://msdl.microsoft.com/downloads/symbols”的新符号位置(文件夹图标)
李>用本地的某个地方填写“缓存符号”字段,这样您就不会一直上网。
【讨论】:
同意 Clay,但对于 Symbols Server,您应该从“Debugging Tools For Windows”获取最新的 symsrv.DLL,Microsoft 可免费下载。
(既然你明确询问了你需要下载什么,我想你还没有)
【讨论】:
或者,可选地(假设未安装 Visual Studio),获取Windows Debugging Tools 的副本,安装并从调试器 (windbg.exe) 中运行您的应用程序,或者将其附加到已运行的应用程序:
windbg[.exe] -pn 程序.exe
或
windbg[.exe] -p process_id
在您想要观察堆栈跟踪的点处中断调试器 (Ctrl+Break)。切换到感兴趣的线程(很可能是执行的主线程):
~0s
修复系统模块的符号(如果可用,也可能用于应用程序):
* 修复 app
.sympath path_to_app_symbols 的符号
* 配置调试器将下载和存储系统符号的位置
.symfix+ path_where_system_symbols_will_be_stored
* 强制调试器重新加载符号
.reload
发出调用堆栈命令:
kb
【讨论】: