WinDbg和内联函数

时间:2012-08-16 08:53:42

标签: c++ debugging stack windbg

我正在尝试调试崩溃转储,我想检查堆栈上某些变量的值。问题是在发布版本中已经内联了一些方法,但我想转储它的变量(dv)。

如果我转到堆栈框架并执行dv命令,它会显示该特定函数的所有变量,但不会显示内联调用中的变量。

我可以执行一个uf(不可解释的函数)命令来查看汇编代码,但是它有很多工作可以解决问题。

2 个答案:

答案 0 :(得分:4)

在优化版本中通常不可能。 优化器可能决定不为变量分配内存,因此研究汇编代码以确定哪个寄存器是变量是唯一的方法。 此外,如果“Omit frame pointers”开关打开,调试器将无法正确显示堆栈上分配的任何变量。

您可以尝试添加代码以将您感兴趣的变量记录到文件中。

答案 1 :(得分:1)

不幸的是,你必须通过反汇编来解决这个问题。如果你对这一点感到不舒服,那么开始练习是一个很好的时间,这是调试棘手问题的宝贵技能。

此外,虽然它现在对您没有帮助,但Visual Studio 2012生成的PDB文件格式现在可以更好地跟踪内联函数。因此,在未来,在大多数情况下应该减轻这种特殊情况。您可以在此处详细了解该功能:

http://dotnet.dzone.com/news/debugging-optimized-code