获取函数返回的行号

时间:2014-07-15 13:57:49

标签: c++ debugging raii

我有一个cpp函数,它根据不同的标志集和不同的控制流有多个返回点。有没有办法计算使用哪个return语句,而不为每个return语句添加一行调试? (很难从返回值中确定返回点)

我已经使用RAII来记录函数的进入和退出。我需要能够记录它返回的行号。

我试着四处寻找,但没有发现任何我想要的东西

4 个答案:

答案 0 :(得分:3)

使用return_type fun(args)

pair<return_type, unsigned int> fun(args)更改为return valreturn make_pair<return_type, unsigned int>(val, __LINE__)

答案 1 :(得分:2)

您可以做的一件事是将方法的返回类型更改为Tuple

Tuple中的一个元素将是您的原始返回值。

第二个元素可以使用__LINE__宏。您可以只返回行号或String,包括行号和其他有关返回点的信息性日志信息。

答案 2 :(得分:1)

您可以在日志语句中使用标准__LINE__预定义宏:

来自gcc documentation

  

此宏以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