我可以在Visual Studio中进行调试时在返回之前找出返回值吗?

帅比萌擦擦* 提交于 2020-02-28 00:54:54

具有以下功能:

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

当我在此函数中设置断点时,是否有可能检查返回的值? go()直接与.aspx页中的数据网格耦合。

检查返回的数据表的唯一方法是使用临时变量。 但是,这有点不方便。 有没有其他办法?


#1楼

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

对于那些有调试本机C ++或VB6代码经验的人,您可能使用了在“自动”窗口中为您提供函数返回值的功能。 不幸的是,托管代码不存在此功能。 尽管您可以通过将返回值分配给局部变量来解决此问题,但这并不方便,因为它需要修改您的代码。 在托管代码中,确定您跨过的函数的返回值要麻烦得多。 我们意识到在这里无法始终如一地做正确的事情,因此我们删除了该功能,而不是在调试器中给您错误的结果。 但是,我们希望为您带来帮助,我们的CLR和Debugger团队正在寻找解决此问题的许多潜在解决方案。 不幸的是,这不是Visual Studio 11的一部分。

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


#2楼

.NET以前的古老技巧:打开“寄存器”窗口,查看EAX寄存器的值。 它包含最后一个调用函数的返回值。


#3楼

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


#4楼

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

只要我能记住(从Visual Basic到VB.NET的所有版本),您都可以简单地查询函数名称。 它像局部变量一样在函数的“函数”中隐式声明,该变量在函数的开始处隐含声明,并且当函数通过非返回语句手段(例如, Exit Function或刚刚掉线)退出时,其当前值也用作返回值,当然,当使用return语句时。

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

VB.NET的那个小功能(加上它启用的Exit Function语句-C#没有并且应该有的另一个功能)在防御性编程中非常有用,我在练习中总是将函数名初始化为失败/默认值作为第一个陈述。 然后,在任何故障点(通常比成功点发生的频率高得多),我可以简单地调用Exit Function语句(即,不必重复故障/默认表达式甚至是常量/变量名称)。


#5楼

是的,有一个非常好的方法。 一个重大的缺点是您必须等待5到6年。 由于我看到您是在2008年11月发布的,因此建议您waaaaaa ...

... aaaait。 和瞧! MS仅针对您发布了最新的Visual Studio 2013 ,它是在调试模式下运行时从菜单中可访问的默认功能(菜单DebugWindowsAutos )。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!