由procexp(MS process explorer)创建的VC10调试转储文件-只有堆栈信息,没有变量值

VC10 debugging dump file create by procexp(MS process explorer) - only stack information no variable value

本文关键字:-只 文件 转储 堆栈 信息 变量值 调试 VC10 MS procexp process      更新时间:2023-10-16

基本上我创建转储文件:

  1. 调试下:VC10调试->将转储另存为
  2. 发布中:Procexp->右键单击->保存转储->创建完整转储

通过1,我可以打开带有VC10的转储文件(符号路径,调试源文件所有设置正确),我可以看到带有源代码的所有堆栈信息以及所有变量的值。

通过2,我可以用VC10打开转储文件(符号路径,调试源文件所有设置正确),我可以看到所有源代码的堆栈信息,但所有变量的值都不存在。即使我将本地变量放入Debug Watch窗口,它也会显示错误:找不到符号"xxx"。我应该如何为2修复此问题?

我是如何设置转储调试的

对于符号路径:

操作->设置符号路径->为调试添加pdb路径;为我的项目以及使用Microsoft Symbol服务器发布文件夹。

对于调试源路径:

转储项目解决方案->属性->调试源文件->添加我的项目文件夹

BTW:对于同一个转储文件,我也使用了WinDbg,我也可以看到所有的堆栈信息(在正确设置符号和源路径之后)。

感谢

调试构建是确保您获得最佳调试体验的构建。查看局部变量不是问题。

发布版本将启用代码优化器。它对代码做了很多的事情,但第一个受害者肯定是局部变量。它们可能会被完全删除或存储在CPU寄存器中。如果你真的需要知道这样一个局部变量的值,那么你通常需要查看机器代码,以找出存储它的cpu寄存器。然而,如果这是隐藏在堆栈跟踪中的代码,那么这将永远不会起作用,因为该值会被推送到堆栈的某个位置。找出哪里几乎是不可能的。

调试优化后的代码很难,没有两种方法。通过调试构建消除错误,在发布构建时向玛丽致敬。

感谢您提供的所有好的输入,但我想我今天自己已经找到了原因!

原因:这是一个生成问题,exe需要使用的一些组件没有正确生成!

注意:在我的案例中,">迷你转储"7M和">full-dump"112M执行相同的工作,都是从procexp创建的。一旦我把它们加载到VS中,我就可以访问:

  1. 所有堆栈信息
  2. 所有变量信息
  3. 一旦我将堆栈切换到代码,它就会精确定位来自kernel32.dll_UnhandleExceptionFiler

所以本质上只要你像我上面所做的那样设置VC10,&下面,你应该没事:

对于符号路径:

操作->设置符号路径->为调试添加pdb路径;为我的项目以及使用Microsoft Symbol服务器发布文件夹。

对于调试源路径:

转储项目解决方案->属性->调试源文件->添加我的项目文件夹

相关文章: