!clrstack -p没有给出调用堆栈中方法的参数值

时间:2012-05-09 14:52:11

标签: windbg sos

我们正在尝试使用windbg分析w3wp内存转储,我们发现w3wp进程因堆栈溢出而崩溃。我加载了psscor4.dll并通过发出!clrstack获得了调用堆栈。但我也想知道传递给方法的参数。 如果我发出“!clrstack -p”或“!clrstack -a”,我们将获得< no data>对于所有参数和局部变量。 任何想法,为什么我们得到<没有数据>而不是参数和局部变量的实际值?

2 个答案:

答案 0 :(得分:14)

这是调试优化代码的乐趣。如果你使用!sosex.mdv,你至少会得到你的locals / args的数据类型。然后你可以运行!sos.dso或!sosex.mdso来查看堆栈中的对象及其类型。通过这种方式追踪论证通常并不十分困难,尽管它并不总是有效。

答案 1 :(得分:9)

如果您正在运行发布版本,则通常无法跟踪本地和参数,因为它们已经过优化并存储在寄存器中。如果你确实需要它,你可以查看JIT编译的代码并在寄存器中找到值,但这可能需要大量的簿记。