我有一个cpp函数,它根据不同的标志集和不同的控制流有多个返回点。有没有办法计算使用哪个return语句,而不为每个return语句添加一行调试? (很难从返回值中确定返回点)
我已经使用RAII来记录函数的进入和退出。我需要能够记录它返回的行号。
我试着四处寻找,但没有发现任何我想要的东西
答案 0 :(得分:3)
使用return_type fun(args)
pair<return_type, unsigned int> fun(args)
更改为return val
和return make_pair<return_type, unsigned int>(val, __LINE__)
答案 1 :(得分:2)
您可以做的一件事是将方法的返回类型更改为Tuple
。
Tuple
中的一个元素将是您的原始返回值。
第二个元素可以使用__LINE__
宏。您可以只返回行号或String
,包括行号和其他有关返回点的信息性日志信息。
答案 2 :(得分:1)
您可以在日志语句中使用标准__LINE__
预定义宏:
此宏以a的形式扩展为当前输入行号 十进制整数常量。虽然我们称之为预定义的宏,但它是一个 非常奇怪的宏,因为它的“定义”随着每个新的变化而变化 源代码行。
理想情况下,使代码更简单,减少返回点的数量,或在返回值本身中包含有关返回点的信息。
答案 3 :(得分:1)
您可以使用预处理器宏:
#define return std::cerr << __FILE__ << ":" << __LINE__ << " return " << std::endl; return
在功能定义之前。和
#undef return
所以你不会得到许多你不关心return
的日志消息。
编辑: 顺便说一下,如果你有一个RAII对象用于记录函数入口,你可以这样做:
#define return entry_raii_object.exited_at(__LINE__); return
别忘了以后再去。我个人更喜欢用于记录返回的不同关键字,例如#define logged_return ...; return