在visual studio 2010中遇到一些访问冲突,这里是callstack:
大多数调用堆栈都是dll中的汇编代码(对我来说几乎难以辨认)。我想追溯到我的代码中导致违规的行,但似乎调用堆栈中没有用户函数。
如何在我的函数中找到导致违规的行?我需要调整一些设置吗?
答案 0 :(得分:1)
从优化的C或C ++代码中获取可靠的堆栈跟踪很困难。优化器选择速度而不是可诊断性。调试器需要这些代码的PDB文件才能知道如何正确解释堆栈帧并找到调用方法的返回地址。
显然,您没有这些PDB,您从操作系统DLL获取原始地址而不是其函数名称。获得这些PDB非常简单,微软有一个公共服务器,除了为任何已发布的Windows版本(包括服务包和安全更新)提供这些PDB之外什么都不做。
需要告知有关该服务器的调试器,默认情况下该功能处于关闭状态。 VS2010特别容易,服务器名称在对话框中预编程,您只需将其打开即可。工具+选项,调试,符号,勾选“Microsoft Symbol Servers”前面的复选框。设置缓存目录,任何可写目录都可以。
再次开始调试,首先需要一段时间来缓存PDB。完成后,您将看到堆栈跟踪大大改善。准确且具有Windows DLL的函数名称。