c++ - 由 procexp(MS 进程资源管理器)创建的 VC10 调试转储文件 - 只有堆栈信息没有变量值

标签 c++ visual-studio-2010 debugging windbg dump

基本上我创建转储文件:

  1. 在调试中:VC10 Debug->Save dump as...
  2. 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/

相关文章:

docker - 在K8S pod中快速修改Python应用进行调试

c++ - 如何使用 Eclipse 在 Linux 上调试 C++ 程序?

c++ - Arduino Uno+伺服电机(SG-90)+超声波传感器(HC-S04)检测障碍物

c++ - 使用 QPainter 绘制着色 QPixmap

c# - 在C#中的非事件窗口的某个位置模拟鼠标点击

visual-studio-2010 - Ctrl+k、Ctrl+d 在处理 C++ 项目的 Visual Studio 2010 中不可用

c++ - 计算最大利润的代码

c++ - 无法使用 `std::make_shared` 分配指针

visual-studio-2010 - TFS - 在错误的文件夹中 checkout ,文件夹被删除 -> 麻烦

.net - 生产代码中的 System.Diagnostics.Debug.WriteLine