考虑以下函数:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在这个函数中设置一个断点时,有没有可能检查返回值?go()
直接与.aspx
页面中的datagrid相耦合。检查返回的datatable的唯一方法是使用临时变量。不过,那有点不方便。还有其他方法吗?考虑以下函数:
DataTable go() {
return someTableAdapter.getSomeData();
}
当我在这个函数中设置一个断点时,有没有可能检查返回值?go()
直接与.aspx
页面中的datagrid相耦合。检查返回的datatable的唯一方法是使用临时变量。不过,那有点不方便。还有其他方法吗?unsafe {
int * sp = stackalloc int[1];
try {
return a+b;
}
finally {
Trace.WriteLine("return is " + *(sp+3));
}
}
因此,将其视为Visual Studio的功能请求。
我所知道的唯一方法是在返回行上设置断点,然后调用Quick Watch窗口并输入返回的表达式:
someTableAdapter.getSomeData();
但是,这仅适用于调用不更改任何对象状态的情况(因为当您恢复执行时,将会有第二个对相同方法的调用)。
被接受的答案在使用Visual Studio 2015时无法正常工作,但是通过在方法的最后一行上设置断点并按下F10,它会将返回值的所有表达式放入本地窗口。
我认为您可以通过查看寄存器窗口(调试/窗口/寄存器)中的RAX寄存器来确定这一点。在步出(SHIFT + F11)函数后,请检查RAX寄存器。我不确定,但在 .NET 之前的某个时候,您可以检查寄存器并在那里查看返回值。可能甚至是RAX和RBX等的组合。
是的,通过转换为VB.NET。;P(你刚才说“Visual Studio”。;)
自我记忆以来(从Visual Basic到所有版本的VB.NET),您可以简单地查询函数名称。它“像”一个本地变量,在函数开始时隐式声明,并且每当函数通过非返回语句手段退出(即 Exit Function
或仅通过)并且当使用返回语句时,其当前值也用作返回值。
它还设置为返回语句的表达式。就像本地变量一样,可以在函数内的任何执行点(包括执行返回语句后)检查其值。C#没有这个功能,应该有。
我经常采用一种defensive programming的形式,即将函数名作为第一条语句初始化为失败/默认值。这时那个小巧的VB.NET功能(加上Exit Function
语句的启用——这是C#没有而应该有的另一个功能)非常有用。然后,在任何失败点(通常比成功点更频繁出现),我只需调用Exit Function
语句(无需重复故障/默认表达式甚至常量/变量名称)。
如果它不设置标志或其他变量,而只返回某些内容,您还可以要求在中间窗口中评估该值。
打开调试→自动窗口可以让你接近目标。它不会显示实际的返回值,但它会显示在返回语句中被评估的内容。
"someTableAdapter.getSomeData();"
,右键点击它,然后选择 快速查看。