你知道托管等同于'@eax'吗?

时间:2008-12-17 16:50:24

标签: c# visual-studio-2008 debugging

在非托管开发环境中,您可以通过在调试器的监视窗口中键入“@eax”来观察方法的DWORD返回值。

有人知道托管代码中的等效快捷方式吗?

相关点:我了解到VS2008 SP1在观察窗口中支持 $ exception 作为一个神奇的词。你知道还有其他捷径吗?

3 个答案:

答案 0 :(得分:4)

我不确定这是不是你的意思,但是你可以为跟踪点打印出一些其他关键字:

  $ADDRESS      address of current instruction
  $CALLER       name of the previous function on the call stack
  $CALLSTACK    entire call stack
  $FUNCTION     name of the current function
  $PID          process ID for current process
  $PNAME        name of the current process
  $TID          thread ID for current thread
  $TNAME        name of the current thread

答案 1 :(得分:3)

像@eax这样的观察窗口被称为[Psuedovariables]。它们实际上是documented.几年前我写了关于这个以及其他一些VS调试项目的blog post。格式说明符通常非常有用。

对于您的特定问题,托管代码中的eax没有伪变量。然而,有一个寄存器窗口实际上有EAX和其他寄存器。值得怀疑的是,这在许多情况下都很有用,因为我认为没有办法将地址转换为托管类型。但是,您可以在内存窗口中查看布局

答案 2 :(得分:1)

托管代码中的@EAX实现起来有点棘手,因为CIL具有函数返回的高阶原语(在虚拟执行堆栈上语义上发生)。

也就是说,如果你的函数返回一个值类型并且该类型的大小小于或等于32位,那么@EAX很可能仍然会给你这个值。 (你可能需要打开混合模式调试才能看到寄存器,我不记得了。)这当然会因参考类型,大值类型和内联函数而分崩离析。

简而言之,我希望这也是内置于调试器中的!