0

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

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

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

4

2 回答 2

4

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

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

于 2012-08-16T08:57:57.687 回答
1

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

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

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

于 2012-08-16T14:27:34.397 回答