0

在 Visual Studio 2010 中遇到一些访问冲突,这是调用堆栈: 在此处输入图像描述

大多数调用堆栈都是 dll 中的汇编代码(对我来说几乎难以辨认)。我想追溯到我的代码中导致违规的行,但调用堆栈中似乎没有用户函数。

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

4

1 回答 1

2

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

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

需要告诉调试器该服务器,该功能默认关闭。VS2010特别简单,服务器名称在对话框中预编程,你只需要打开它。工具+选项,调试,符号,勾选“Microsoft Symbol Servers”前面的复选框。设置缓存目录,任何可写目录都可以。

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

于 2013-06-21T11:16:45.310 回答