代码之家  ›  专栏  ›  技术社区  ›  AlfredBr

你知道一个相当于'@eax'的托管代码吗?

  •  3
  • AlfredBr  · 技术社区  · 16 年前

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

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

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

    3 回复  |  直到 16 年前
        1
  •  3
  •   Steve Steiner    16 年前

    类似@eax的监视窗口技巧称为[psuedVariables]。实际上是 documented. 我写了一篇 blog post 关于这个和几年前的一些其他vs调试项。格式说明符通常非常有用。

    对于您的特定问题,托管代码中没有用于EAX的psuedo变量。然而,存在一个寄存器窗口,其中实际包含EAX和其他寄存器。这在许多情况下都是有用的,这是值得怀疑的,因为我不相信有任何方法可以将地址强制转换为托管类型。但是,您可以在内存窗口中查看布局。

        2
  •  4
  •   John Mulder    16 年前

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

      $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
    
        3
  •  1
  •   Frank Krueger    16 年前

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

    也就是说,如果函数返回的是值类型,并且该类型的大小小于或等于32位,那么@eax很可能仍然会提供该值。(您可能需要打开混合模式调试才能看到寄存器,我记不起来了。)当然,对于引用类型、大值类型和内联函数来说,这是不一样的。

    简而言之,我希望这也能内置到调试器中!