我们正在尝试使用windbg分析w3wp内存转储,我们发现w3wp进程因堆栈溢出而崩溃。我加载了psscor4.dll并通过发出!clrstack获得了调用堆栈。但我也想知道传递给方法的参数。 如果我发出“!clrstack -p”或“!clrstack -a”,我们将获得< no data>对于所有参数和局部变量。 任何想法,为什么我们得到<没有数据>而不是参数和局部变量的实际值?
答案 0 :(得分:14)
这是调试优化代码的乐趣。如果你使用!sosex.mdv,你至少会得到你的locals / args的数据类型。然后你可以运行!sos.dso或!sosex.mdso来查看堆栈中的对象及其类型。通过这种方式追踪论证通常并不十分困难,尽管它并不总是有效。
答案 1 :(得分:9)
如果您正在运行发布版本,则通常无法跟踪本地和参数,因为它们已经过优化并存储在寄存器中。如果你确实需要它,你可以查看JIT编译的代码并在寄存器中找到值,但这可能需要大量的簿记。