WinDbg 和内联函数

WinDbg and inlined functions

本文关键字:函数 WinDbg      更新时间:2023-10-16

>我正在尝试调试故障转储,我想检查堆栈上某个变量的值。问题是某些方法已在发布版本中内联,但我想转储此变量 (dv)。

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

我可以执行 uf(unassmeble 函数)命令来查看汇编代码,但要弄清楚事情需要做很多工作。

这在优化的版本中通常是不可能的。优化程序可能决定不为变量分配内存,因此研究汇编代码以确定变量位于哪个寄存器中是唯一的方法。此外,如果"省略帧指针"开关处于打开状态,调试器将无法正确显示堆栈上分配的任何变量。

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

不幸的是,你将不得不通过反汇编来解决这个问题。如果您对此还不满意,那么现在是开始练习的好时机,这是调试棘手问题的一项宝贵技能。

此外,虽然它现在对您没有帮助,但Visual Studio 2012生成的PDB文件格式现在可以更好地跟踪内联功能。因此,今后在大多数情况下,这种特殊情况应该得到缓解。您可以在此处阅读有关该功能的更多信息:

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