我使用totalview作为linux C ++调试器。我们的代码中的函数通常看起来像这样
double foo() {
int a = 2;
int b = 3;
return bar(a,b);
}
其中一些初步工作已完成,而且或多或少复杂的函数bar
被称为return语句。
使用totalview很难调试,因为无法轻易观察到有趣的返回值。 Totalview无法评估表达式bar(a,b)
。我可以将代码重写为
double foo() {
int a = 2;
int b = 3;
const auto retVal = bar(a,b);
return retVal;
}
现在,我可以在返回值处放置一个断点,并观察我的函数bar
的输入和输出。
如何在不引入新(无用)变量的情况下执行此操作?
答案 0 :(得分:0)
让编译器优化"无用的"变量,由一个名为命名的返回值优化的进程,并保留。(就个人而言,尽管我会通过显式使用函数的返回类型而不是{{1}来尽可能地帮助编译器因此auto
阶段没有潜在的类型转换。)。对于它的价值,我会一直这样做,即使是return
这样的重物。如果您怀疑编译器正在制作多余的副本,则可以随时检查生成的汇编程序。
然后,您可以在适当的位置设置断点。
在某些调试器中,您可以通过查看寄存器来直接检查函数返回值,但这绝不是通用的。