Windbg !clrstack-p不提供调用堆栈中方法的参数值

Windbg !clrstack-p不提供调用堆栈中方法的参数值,windbg,sos,Windbg,Sos,我们正在尝试使用windbg分析w3wp内存转储,发现w3wp进程由于堆栈溢出而崩溃。我加载了psscor4.dll,并通过发出!clrstack。但我也想知道传递给方法的参数。 如果我发出“!clrstack-p”或“!clrstack-a”,我们将得到所有参数和局部变量。 你知道为什么我们得到的不是参数和局部变量的实际值,而是参数和局部变量的实际值吗?如果你正在运行发布版本,你通常无法跟踪局部变量和参数,因为它们被优化并存储在寄存器中。如果您真的需要它,您可以查看JIT编译的代码并在寄存器中

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

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

这就是调试优化代码的乐趣。如果你用!sosex.mdv,您至少可以获得本地人/参数的数据类型。那你就可以跑了!sos.dso或!sosex.mdso以查看堆栈上的对象及其类型。通过这种方式追踪参数通常并不十分困难,尽管它并不总是有效。

我想我理解,直到你问这个问题,“知道吗,为什么我们得到的是参数和局部变量的实际值而不是实际值?”你能重新措辞吗?@dtryon,我现在更新了这个问题。谢谢你指出这一点。