c++ - Visual Studio - 调用堆栈不会追溯到用户函数

标签 c++ visual-studio-2010 visual-studio

在 visual studio 2010 中遇到一些访问冲突,调用堆栈如下: enter image description here

大部分调用堆栈是dll中的汇编代码(我几乎无法辨认)。我想追溯到我的代码中导致违规的行,但调用堆栈中似乎没有用户函数。

如何在我的函数中找到导致违规的行?我需要调整一些设置吗?

最佳答案

从优化的 C 或 C++ 代码中获取可靠的堆栈跟踪很困难。优化器选择速度而不是可诊断性。调试器需要此类代码的 PDB 文件,以了解如何正确解释堆栈帧并找到调用方法的返回地址。

显然您没有这些 PDB,您从操作系统 DLL 中获取原始地址而不是它们的函数名称。获取这些 PDB 非常简单,Microsoft 有一个公共(public)服务器,它只为任何已发布的 Windows 版本提供这些 PDB,包括服务包和安全更新。

需要告知调试器有关该服务器的信息,默认情况下该功能处于关闭状态。对于 VS2010 特别容易,服务器名称已预先编程在对话框中,您只需将其打开即可。 Tools + Options,Debugging,Symbols,勾选“Microsoft Symbol Servers”前面的复选框。设置缓存目录,任何可写的目录都可以。

重新开始调试,开始缓存PDB需要一段时间。完成后,您会看到一个大大改进的堆栈跟踪。准确且带有 Windows DLL 的函数名称。

关于c++ - Visual Studio - 调用堆栈不会追溯到用户函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17231693/

相关文章:

c++ - C++ 中的重载运算符 - 编译但崩溃

c++ - Win32 自定义资源可以有多大?

c# - 如何在 C#/VS 中构建自定义断言?

visual-studio - 在 Visual Studio 2015 中找不到我的 "Find in Files"窗口

android - Xamarin.Forms:Visual Studio 升级后的部署问题

c++ - 从内存缓冲区创建一个 fstream 对象

c++ - 写入纹理 GLSL

c++ - 使用 comsupp.lib 的内部链接器错误

visual-studio-2010 - 获取 mstest 结果以显示在 CruiseControl.Net 构建报告中

c++ - 运行合并排序递归算法时出现 EXC_BAD_ACCESS 错误