采取以下功能:

DataTable go() {
    return someTableAdapter.getSomeData();
}

当我设置一个断点在本功能,是否可以检查返回的价值? go() 直接联接到一个网格中 .aspx 页。

唯一的方式检查返回的数据表是用一种临时可变。然而,这是一个有点不方便。是不是有另一种方式?

有帮助吗?

解决方案

不是我知道的。请注意,如果你添加一个变量,它将被发布版本中的编译器删除...

<强>更新 此功能已添加到VS2013 的。 您可以在自动窗口中查看返回值,或在监视/即时窗口中使用 $ ReturnValue

该值只能在从函数返回后直接看到,因此访问它的最简单方法是在函数调用上放置一个断点并跳过(F10)调用。


VS2015更新:嘘!不幸的是,它似乎没有出现在VS2015(devenv v14)中 VS2017更新:它回来了。 (devenv v15)

其他提示

这可以在带有CLR 4.5.1的Visual Studio 2013中完成根据客户反馈网站。它在以前的C#版本中不可用。

(Visual&nbsp; Studio&nbsp; 2008及更早版本支持VB.NET。它一直供C / C ++开发人员使用。)

我同意这是一个非常有用的东西:不仅在退出之前看到方法的返回值,而且还看到我刚刚步过的方法的返回值。我将其实现为Visual Studio的商业扩展的一部分,称为“ OzCode ”。

有了它,您可以在代码编辑器上查看方法返回值,作为HUD显示的一种类型:

有关详细信息,请参阅此视频

根据Microsoft的说法,无法使用托管代码可靠地实现此功能。这是他们意识到并正在解决的问题:

  

对于那些有调试本机C ++或VB6代码经验的人,您可能已经使用了一个功能,在Autos窗口中为您提供了函数返回值。不幸的是,托管代码不存在此功能。虽然您可以通过将返回值分配给局部变量来解决此问题,但这并不方便,因为它需要修改代码。   在托管代码中,确定您已经跨越的函数的返回值是非常棘手的。我们意识到我们无法在此处一致地执行正确的操作,因此我们删除了该功能,而不是在调试器中给出错误的结果。但是,我们希望为您带来这一点,我们的CLR和调试器团队正在研究这个问题的一些潜在解决方案。不幸的是,这不会是Visual Studio 11的一部分。

https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-代码

根据目前公认的答案是由马克*Gravell:

功能已被添加到Visual Studio2013年.你可以看到回报 值的汽车的窗户或使用$ReturnValue表/即时 窗口

该答复还指出,这一功能不起作用,在Visual Studio2015。这不是(完)真实的。上 审查返回值的方法的电话 有以下注:

你必须具有的传统表达的评价人员开 $ReturnValue 被认可 (工具/办法/行调试的/使用的遗留C#和VB表达的评估).否则,可以使用 $ReturnValue1.

我测试这些工作室2015年企业:

  • 与传统的表达,评估关闭: $ReturnValue1 工作
  • 与传统的表达的评估程序开启: $ReturnValue $ReturnValue1 工作

如果您转到菜单工具选项,IntelliTrace,并更改设置以收集事件和通话信息。

您可以返回上一个调用事件( Ctrl + Shift + F11 )并查看方法调用返回的临时值在autos窗口中作为方法名称的子项。

这不会显示您所在方法的返回值。它只显示当前方法中调用的最后一个方法的返回值。

所以,这对

来说没问题
DataTable go(){return someTableAdapter.getSomeData();}

因为它显示了 someTableAdapter.getSomeData()的返回值。

但不是为了:

int go(){return 100 * 99;}

.NET .NET之前的旧技巧:打开Registers窗口并查看EAX寄存器的值。它包含最后一个函数的返回值。

使用Shift-F11退出go()方法,然后在“Autos”中使用调试窗口它将显示刚从堆栈弹出的方法调用的返回值(在这种情况下,go()方法就是你想要的)。这是Visual Studio 2005中的行为;我没有使用Visual Studio 2008,所以我不知道这个版本的行为是否相同。

是的,有一种非常好的方式。一个重要的缺点是你必须等待5年,也许6年。因为我看到你在2008年11月发布了,我建议你waaaaaa ......

... aaaait。呜呜&#224;!只为你,MS发布了最新的 Visual Studio 2013 ,这是一个默认功能,可以在调试模式下从菜单运行进行访问(菜单 Debug &#8594; Windows &#8594; Autos )。

有很多变通方法,但似乎都没有。

引用下面的John Skeet(评论现已删除的答案):

  

对我来说仍然不方便 -   特别是如果你不知道哪个   你将需要的回报价值   在开始调试之前。我真的   不想要有一个临时的   变量使每个代码混乱   我什么时候回来的东西.t

理论上,调试器可以有 return - 变量。毕竟:它只是堆栈中的一个变量:

unsafe {
  int * sp = stackalloc int[1];
  try {
    return a+b;
  }
  finally {
    Trace.WriteLine("return is " + *(sp+3));
  }
}

因此,请考虑这是Visual Studio的功能请求。

Microsoft Visual C ++曾经这样做,但Visual Studio不是AFAIK .. :(

我知道的唯一方法是在返回行上放置一个断点,然后调用 Quick Watch 窗口并输入返回的表达式:

someTableAdapter.getSomeData();

但是这只有在调用没有改变任何对象的状态时才有效(因为当你将恢复执行时会再次调用同一个方法)。

我想扩展 PascalK的答案,让它在Visual Studio&nbsp; Studio 2015中运行,因为有一个隐藏的功能未记录在 检查方法调用的返回值

如果您有嵌套函数调用,则会自动创建伪变量 $ ResultValueX ,其中X表示函数调用顺序。因此,如果您有一个诸如 Multiply(Five(),Six())之类的调用,则会创建以下伪变量:

Five()     | $ResultValue1 = 5
Six()      | $ResultValue2 = 6
Multiply() | $ResultValue3 = 30

如果它没有设置标志或其他变量,你也可以要求评估中间窗口中的值,但只返回一些值。

我认为您可以通过查看“寄存器”窗口(调试/ Windows /寄存器)中的RAX寄存器来确定这一点。踩下(SHIFT + F11)函数后,检查RAX寄存器。我不知道一个事实,但是一旦登上月球你就可以检查一个寄存器(在.NET之前的日子里)并看到那里的返回值。它甚至可能是RAX和RBX等的组合。

打开调试&#8594;汽车窗口让你关闭。它不会显示实际的返回值,但会显示返回语句中的值。

是的,切换到VB.NET。 ; P(你刚才说“Visual Studio”.;)

只要我记得(从Visual Basic到所有版本的VB.NET),您只需查询函数名称即可。它起到了“功能”的作用。就像一个在函数开始时隐式声明的局部变量,当函数通过非返回语句意味着退出时,它的当前值也被用作返回值(即 Exit Function 或者只是通过)当然,当使用return语句时。

它也设置为return语句的表达式。就像局部变量一样,它的值可以在函数内部的任何执行点检查(包括在执行return语句之后)。 C#没有这个,应该。

这个小VB.NET特性(加上它启用的 Exit Function 语句 - 另一个C#所没有的功能)应该以防御性编程我练习总是将函数名称初始化为失败/默认值作为第一个语句。然后,在任何故障点(通常比成功点更常出现),我可以简单地调用 Exit Function 语句(即不必复制失败/默认表达式甚至是常量/变量)名称)。

已接受的答案无法在Visual&nbsp; Studio&nbsp; 2015中正常运行,但通过在方法的最后一行放置一个断点并按 F10 ,它将全部放入将返回值表达到本地窗口。

您可以尝试选择&quot; someTableAdapter.getSomeData();&quot; ,右键单击它,然后转到 Quick Watch

将返回表达式拖放到监视窗口中。

例如,在声明中

return someTableAdapter.getSomeData();

拖放

someTableAdapter.getSomeData()

进入观察窗口,你会看到价值。

您可以为任何表达式执行此操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top