基本上我创建转储文件:
- 在调试中:VC10 Debug->Save dump as...
- Under release: Procexp->右击 -> Save dump -> Create Full Dump...
通过1,我可以用VC10打开转储文件(符号路径,调试源文件都设置正确),我可以看到所有堆栈信息和源代码以及所有变量的值。
通过 2,我可以用 VC10 打开转储文件(符号路径,调试源文件都设置正确),我可以看到所有带有源代码的堆栈信息 BUT 所有变量的值都不是那里。 即使我将局部变量放入 Debug Watch 窗口,它也会显示错误:找不到符号“xxx”。 我应该如何为 2 解决这个问题?
我是如何设置转储调试的?
对于符号路径:
操作->设置符号路径-> 为我的项目添加调试和发布文件夹的 pdb 路径以及使用 Microsoft 符号服务器。
对于调试源路径:
Dump project solution -> Property-> Debug Source Files -> Add my project file folder
顺便说一句:对于同一个转储文件,我也使用了 WinDbg,我也可以看到所有堆栈信息(在正确设置符号和源路径之后)。
谢谢
最佳答案
调试版本是确保您获得最佳调试体验的版本。查看局部变量不是问题。
发布构建会打开代码优化器。它会对您的代码执行许多操作,但第一个受害者肯定是局部变量。它们可能会被完全删除或存储在 CPU 寄存器中。如果你真的需要知道这样一个局部变量的值,那么你通常需要查看机器代码来弄清楚哪个 cpu 寄存器存储它。但是,如果这是隐藏在堆栈跟踪中的代码,那么这将永远不起作用,该值将被插入堆栈的某个地方。找出几乎不可能的地方。
调试优化代码很难,没有两种解决方法。在调试版本中找出错误,在发布版本中万岁。
关于c++ - 由 procexp(MS 进程资源管理器)创建的 VC10 调试转储文件 - 只有堆栈信息没有变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13861128/