看看下面的功能:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在此函数设置一个断点,有没有检查返回值的可能性? go()
被直接地耦合到数据网格中一个.aspx
页。
检查传回的数据表的唯一方法就是使用一个临时变量。 然而,这是一个有点不方便。 是不是有另一种方式?
看看下面的功能:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在此函数设置一个断点,有没有检查返回值的可能性? go()
被直接地耦合到数据网格中一个.aspx
页。
检查传回的数据表的唯一方法就是使用一个临时变量。 然而,这是一个有点不方便。 是不是有另一种方式?
从来没听说过。 请注意,如果你添加一个变量,它会被编译器移除在发布版本反正...
更新: 此功能已经被添加到VS2013 。 你可以看到返回值在汽车窗户或使用$ReturnValue
在手表/即时窗口。
的值只能从函数返回,从而访问它是通过将一个断点函数调用和跨过(F10)该呼叫的最简单的方法后直接看到。
更新VS2015:嘘! 不幸的是,它不会出现在VS2015(devenv的V14)
更新VS2017:它的背部。 (devenv的V15)
这可以在Visual Studio 2013 CLR 4.5.1完成根据客户的反馈信息网站 。 这是不是在以前的版本为C#提供。
(Visual Studio 2008和更早支持它VB.NET。一直以来,提供给C / C ++开发人员。)
我同意这是有一个非常有用的东西:不仅看到走出去的,但也看到的我刚跨过方法的返回值之前,该方法的返回值。 我实现了它作为一个商业扩展到Visual Studio所谓的“部分OzCode ”。
有了它,你可以直接在代码编辑器中查看方法的返回值,不大不小的HUD显示的:
欲了解更多信息,请参阅该视频 。
据微软称,没有办法用托管代码可靠实现这一点。 这是他们知道的和正在研究的问题:
对于那些在那里谁拥有经验调试本机C ++或VB6的代码,你可能已经用在在汽车窗口中为您提供了函数的返回值的功能。 不幸的是,这个功能不存在托管代码。 虽然可以通过指定返回值局部变量解决这个问题,因为它需要修改代码,这是不是很方便。 在托管代码,它的很多麻烦,以确定哪些你已经跨过了一个函数的返回值。 我们意识到,我们不能做正确的事情一直在这里等我们去掉了功能,而不是让你在调试器中不正确的结果。 但是,我们希望把这个为你回来和我们的CLR和调试团队正在寻找这个问题的一些可能的解决方案。 不幸的是,这是不会的Visual Studio 11的一部分。
https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code
据马克Gravell目前接受的答案:
此功能已被添加到Visual Studio 2013 。 你可以看到返回值在汽车窗户或手表/即时窗口使用$返回值
这个问题的答案还指出,此功能不会在Visual Studio 2015年这不(完全)正确工作。 在检查返回值的方法调用有以下注意事项:
你必须有遗留表达评价者开启$返回值被认可(工具/选项/调试/使用传统的C#和VB表达评估 )。 否则,你可以使用$ ReturnValue1。
我在Visual Studio 2015年企业测试这样的:
如果你去菜单工具 → 选项 ,智能跟踪,并更改设置来收集事件和呼叫信息。
您可以返回到以前的呼叫事件( 按Ctrl + Shift + F11),并看到在汽车窗从方法调用返回的方法名的孩子临时值。
这是不是显示你,你是在方法的返回值。这只是表明你被称为当前方法的最后一个方法的返回值。
所以,这是罚款
DataTable go(){return someTableAdapter.getSomeData();}
因为它显示了你的返回值someTableAdapter.getSomeData()
但不适合:
int go(){return 100 * 99;}
从前期.NET日龄招:打开寄存器窗口,并期待在EAX寄存器的值。 这包含所谓的最后一个函数的返回值。
走出去()方法的使用Shift键F11,然后在“汽车”调试窗口会显示刚刚弹出堆栈(在这种情况下,方法调用,旅途中()方法,它是返回值你想要什么)。 这是在Visual Studio 2005中的行为; 我没有使用Visual Studio 2008中,所以我不知道这表现在该版本相同的方式。
是的,有一个非常好的方式。 一个显著的缺点是,你必须等待5,也许6年。 因为我看到你在2008年11月发布的,我建议你waaaaaa ...
... aaaait。 瞧! 只为你,MS发布了最新的Visual Studio 2013它是从菜单中访问的默认功能在调试模式(菜单调试 → 视窗 → 汽车 ) 运行时 。
有很多解决方法,但没有一个似乎令人满意。
引述如下(在现在删除的答案评论)约翰·斯基特:
看起来还是不方便对我来说 - 尤其是如果你不知道你会开始调试前需要哪些返回值。 我真的不希望有有一个临时变量每次我再回到anything.t时间塞满了我的代码
从理论上讲,调试器可以有return
-variable。 毕竟:这只是在栈上的变量:
unsafe {
int * sp = stackalloc int[1];
try {
return a+b;
}
finally {
Trace.WriteLine("return is " + *(sp+3));
}
}
所以认为这为Visual Studio功能请求。
微软的Visual C ++来做到这一点,但Visual Studio不会AFAIK .. :(
我所知道的唯一方法是将一个断点在回行,然后调用快速监视窗口,进入返回的表达式:
someTableAdapter.getSomeData();
但是,如果调用不会改变任何对象的状态(因为会有同样的方法第二个电话时,你会继续执行),这仅适用。
我想在扩大PascalK的回答获得此在Visual Studio 2015年的工作,因为有一个隐藏的功能未记录在检查方法调用的返回值 。
如果您有嵌套函数调用,伪变量$ResultValueX
会自动创建,其中X是指函数调用顺序。 所以,如果你有一个调用,如Multiply(Five(), Six())
将创建以下伪变量:
Five() | $ResultValue1 = 5
Six() | $ResultValue2 = 6
Multiply() | $ResultValue3 = 30
您也可以要求以评估在中间窗口中的价值以及,如果不设置标志或其他变量,但只返回的东西。
我想你可以通过查看该寄存器窗口(调试/窗/寄存器)的RAX寄存器确定这一点。 走出函数(SHIFT + F11)后,检查RAX寄存器。 我不知道一个事实,但在一个月亮,一旦你可以检查寄存器(预.NET天),看看返回值出现。 它甚至可能是RAX和RBX等的组合
打开调试→自动窗口让你接近。 它不会显示实际的返回值,但它会显示在return语句什么评价。
Yeah, by switching to VB.NET. ;P (You did just say "Visual Studio". ;)
For as long as I can remember (from Visual Basic through all versions of VB.NET), you can simply query the function name. It "functions" like a local variable that's implicitly declared at the start of the function and its current value is also used as the return value whenever the function exits via non-return statement means (i.e. Exit Function
or just falling through) and of course, when the return statement is used.
It is also set to the return statement's expression. Just like a local variable, its value can be inspected at any point of execution inside the function (including after the return statement is executed). C# doesn't have this and should.
That little VB.NET feature (plus the Exit Function
statement which it enables - another feature C# doesn't have and should) is very useful in a form of defensive programming I practice where I always initialize the function name to the failure/default value as the first statement. Then, at any failure point (which normally occurs much more often than success points), I can simply call the Exit Function
statement (i.e. without having to duplicate the failure / default expression or even a constant/variable name).
接受答案不与Visual Studio 2015年正常工作,但通过放置方法的最后一行一个破发点,并按下F10,它会把返回值的所有表达式为当地人窗口。
你可以尝试选择"someTableAdapter.getSomeData();"
,右键单击它,然后去快速观察 。
拖放回报表现为观察窗口。
例如,在语句
return someTableAdapter.getSomeData();
拖放
someTableAdapter.getSomeData()
为监视窗口,你会看到的价值。
您可以为任意表达式做到这一点。