调试复杂返回语句
Debug complex return statement
我正在使用TotalView作为Linux C 调试器。我们代码中的功能通常看起来像这样
double foo() {
int a = 2;
int b = 3;
return bar(a,b);
}
在完成某些初步工作的地方,而不是一个或多或少复杂的功能bar
称为返回语句。
这很难通过TotalView进行调试,因为不容易观察到有趣的返回值。TotalView无法评估表达的bar(a,b)
。我可以将代码重写为
double foo() {
int a = 2;
int b = 3;
const auto retVal = bar(a,b);
return retVal;
}
现在,我可以在返回值上放置一个断点,并观察我功能bar
的内和输出。
如果不引入新的(无用)变量?
让编译器通过称为命名的返回值优化的过程优化"无用"变量,然后将其放入。(尽管我个人会帮助您通过明确使用函数的返回类型而不是auto
;因此,在return
阶段没有潜在的类型转换。)。对于它的价值,即使使用诸如std::vector
之类的重物,我都会一直这样做。如果您怀疑编译器正在制作多余的副本,则可以随时检查生成的汇编程序。
然后,您可以如您所知,在适当的位置设置一个断点。
在某些调试器中,您可以通过窥视寄存器直接检查函数返回值,但这绝不是通用的。
参考:http://en.cppreference.com/w/cpp/language/copy_elision
相关文章:
- 返回语句后的代码,没有警告
- 三元运算符在返回语句中给出意外的结果
- 返回非 void 的函数中没有返回语句警告
- 如何使用单个返回语句返回对变量的引用
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 获取上次执行的返回语句的行
- 如果语句错误地读取字符串,则始终在第一个条件返回
- 如何在 c++ 中从 switch 语句返回不同类型的变量
- Qt SQL LIKE语句返回错误
- C++如果使用 lambda 表达式的语句返回 true,但输出来自 false,为什么
- 为什么返回语句和打印语句返回不同的答案?
- if-else 语句返回相同的反馈
- 为什么此范围基于语句返回一个数字太低的范围
- C++选择语句返回 true
- C++开关语句返回奇怪的值
- 这个语句返回什么
- 空的C++if语句返回零值
- 从if语句返回数据
- If语句返回错误的输出C++
- 返回语句返回一个空指针值而不是期望的值