【问题标题】:Return value of a function in Visual studioVisual Studio 中函数的返回值
【发布时间】:2011-01-18 13:28:13
【问题描述】:

嗨,

我对使用 Visual Studio 非常陌生。

我正在尝试调试应用程序。 我遇到了如下声明:

double tmp = 
myPart->bat_qty() * timeFactor / myPart->AUB() * myPart->UCost * myAIM->param->myAnalysisParams->wd_year;

在VS中将光标放在

timeFactor
myPart->UCost
myAIM->param->myAnalysisParams->wd_year

它显示了相应的值。但不是由返回的值

myPart->bat_qty()
myPart->AUB()

找到这些函数返回值的最简单方法是什么。 如果这似乎是一种陈词滥调的查询,我深表歉意。但我对 VS 完全陌生。 我需要一种更好的方法来查找返回的值,而无需编辑文件以将值存储在一些临时变量中。我的意思是我不应该编辑文件。

【问题讨论】:

  • 我也想知道(如果可能的话,对于 VS2005)。我认为您最好的选择是检查 eax 寄存器的值。

标签: c++ visual-studio visual-c++


【解决方案1】:

在 VS 2010 中,您可以在函数调用站点设置断点并激活“Autos”窗口(如果 Autos 窗口不可见,您可以通过 Debug -> Windows -> Autos Ctrl + Alt + V 使其可见,一种)。在您跳过函数调用 (F10) 后,在 Autos 窗口中,您将看到以下内容:

名称值类型

[Func] 返回[返回值] [返回类型]

其中 [Return Value] 和 [Return Type] 是名为 [Func] 的函数的适当返回值和类型。

我希望这会有所帮助。

这样做的好处是您不必编辑代码。我看到的缺点是,如果返回的类型很复杂,则无法扩展它并检查其属性,就像将返回值分配给自动变量一样。然而,对于简单的结构,返回值被扩展为如下所示:{var1=[val1], var2=[val2]...} 其中 var1, var2 是结构的属性。

据我所知,自动窗口在 VS 6.0 中已经存在(并且做了同样的事情),所以我猜这也适用于 VS 2005(有人也询问了 VS 2005)。

【讨论】:

  • 除了“Autos”窗口,您还可以打开“Watch”窗口。见这里:msdn.microsoft.com/en-us/library/aa290591(VS.71).aspx(虽然链接说的是 VS 2003 .NET,但描述也适用于更高版本)。
  • @anand.arumug 我不确定您是否可以在“Watch”中获取返回值。你会怎么做?我问是为了学习新东西。
  • 在监视窗口中,只有使用F11进入函数,然后在函数末尾计算出值才能看到它。它是一个手动过程。我将 Watch 窗口指定为查看变量值的另一种方式。
【解决方案2】:

最快的方法是在即时窗口中输入myPart->bat_qty()。这样就不用改代码了。

【讨论】:

  • 我没听懂你的回答,能解释一下吗?
  • 当然,当 Visual Studio 遇到断点时(也就是说,当您可以通过将鼠标悬停在变量上查看变量的值时),您应该能够在视觉工作室。 (如果没有,通过从主菜单 Debug -> Windows -> Immediate 中选择来打开它)。在此窗口中,输入您想查看的值 - 例如 myPart->bat_qty() 并按 Enter。
  • 此解决方案的缺点是即时窗口必须“执行” myPart 上的功能,因此应用其副作用才能打印出结果。我可以举一个例子,这可能至少会导致令人费解的行为(即,如果附加了调试器并且使用了立即窗口,而不是根本不使用立即窗口,程序会打印出其他内容)。该示例有点太长了,无法评论...使用“自动”窗口没有这个缺点,并且不需要输入任何内容。
  • @Matt 我发布了一个解决方案(使用自动窗口),它没有我提到的这个缺点。但是我必须说我不知道​​可以使用即时窗口来调用函数,所以我今天学到了一些新东西。谢谢 很高兴知道:-)
  • @ds27680 啊,我和你在一起,没想到这是你的答案。我不知道这种方法...只是向您展示了 Visual Studio 真正的庞然大物!
【解决方案3】:

将它们分配给一个临时的,像这样:

const double bat_qty_val = myPart->bat_qty();
const double AUB_val = myPart->AUB();

然后使用方程式中的那些而不是调用函数。

【讨论】:

  • ah snap :) 示例 +1 ;)
【解决方案4】:

在我的脑海中,我相信会有更优雅的方式,但你可以将 bat_qty() 和 AUB() 的返回值分配给一个临时变量并在调试器中观察它们。

【讨论】:

  • 查看@VJo 回答示例
猜你喜欢
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 2019-05-21
  • 2021-08-24
  • 2019-12-17
  • 2018-09-02
相关资源
最近更新 更多