【问题标题】:See return value in C#在 C# 中查看返回值
【发布时间】:2019-07-25 07:14:47
【问题描述】:

考虑以下代码:

如您所见,我们在第 28 行。有什么方法可以在不让代码返回到调用者函数的情况下查看此时函数的返回值?

Foo.Bar() 是一个生成唯一路径的函数调用(例如)。所以它不是恒定的。

在即时窗口中输入 ?Foo.Bar() 也不起作用,因为这会重新评估代码:

?Foo.Bar()
"80857466"
?Foo.Bar()
"2146375101"
?Foo.Bar()
"1106609407"
?Foo.Bar()
"792759112"

在 VB.NET 中,可以通过在 Watch 中输入函数名称,然后将其作为变量威胁。

但是在 C# 中这是不可能的,还有其他提示吗?

PS:重写不是一种选择。

【问题讨论】:

  • yup.. 只需选择 Foo.Bar() 并右键单击它即可快速观看。
  • @Malcolm:快速观察重新评估。你可能会得到不同的回应,这取决于Bar() 做了什么
  • 我同意大卫的观点,但如果他将断点设置为 cgreeno,如下面的回答,它将起作用。 :)
  • @Malcolm:允许,但总是有可能Bar 不是您可以介入的方法。它可能是对其他人的 DLL 的调用。我经常看到诸如“返回新插入的数据库行的 id”之类的解决方案。在这些情况下,接受的答案将是适当的。这似乎是一个足够常见的场景,您可以期望有一种方法可以检查返回的值,即使它是一个复杂的对象(接受的答案没有涵盖)......

标签: c# function return-value return


【解决方案1】:

在这里找到答案:VS get returned value in C# code?

它实际上是可见的。调试 + 其他 Windows + 寄存器。看价值 EAX(x64 中的 RAX)。的价值 简单的整数类型返回 EAX 寄存器。做多 EDX:EAX。 STx 中的浮点数(x64 中的 XMM00)。

【讨论】:

  • 你说得对,对对象没有多大帮助。您总是可以在该寄存器中存储的地址处查询内存,但这并不容易!我找不到任何替代方案,所以我想您必须在返回结果之前将结果存储在变量中。请参阅链接的 SO 问题的答案以获取链接,您可以在该链接中要求 MS 对此进行处理。
【解决方案2】:

假设您使用的是 Visual Studio,您可以使用 Immediate window。如果你输入 Foo.Bar();在即时窗口中,您将获得您想要的结果,如果您不希望它在第一次评估之前或在 Foo.Bar() 本身中重新评估适当的点 IE 中的断点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-05
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多