调试的时候在每个函数中都输出log信息是很好的一件事情,但是这样的代码太多了,又影响阅读,如果能用一个宏来干这样的事情,那应该不错。
下面这个宏是利用局部对象的生命期来实现的。可以实现对函数入口和出口的打印,以及对关注变量值的打印,参数定义成宏,可以打印任意类型的变量。这里内容不是很完善,待补充。
下面这个宏是利用局部对象的生命期来实现的。可以实现对函数入口和出口的打印,以及对关注变量值的打印,参数定义成宏,可以打印任意类型的变量。这里内容不是很完善,待补充。
class
CLogTrace
{
public
:
CLogTrace
(
const
char
*
pszCurFunction
,
const
char
*
pszCurFile
,
const
char
*
pszCurLine
)
:
m_pFunction
(
pszCurFunction
)
,
m_pFile
(
pszCurFile
)
,
m_nLine
(
pszCurLine
)
,
LOG_TRACE_A
(
*
this
)
,
LOG_TRACE_B
(
*
this
)
{
//这里打印函数入口
}
~
CLogTrace
(
)
{
//这里打印函数入口
}
template
<
typename
T
>
CLogTrace
&
PrintArg
(
char
*
pszArg
,
T
arg
)
{
//这里打印要关注的变量
return
*
this
;
}
CLogTrace
&
LOG_TRACE_A
;
CLogTrace
&
LOG_TRACE_B
;
private
:
const
char
*
m_pFunction
;
const
char
*
m_pFile
;
const
int
m_nLine
;
}
;
#define
LOG_TRACE_A(x) LOG_TRACE_OP(x, B)
#define
LOG_TRACE_B(x) LOG_TRACE_OP(x, A)
#define
LOG_TRACE_OP(x, next) \
LOG_TRACE_A.printArg(#x, (x)).LOG_TRACE##next
#define
FUNC_TRACE() \
CLogTrace logtrc##__LINE__(__FUNCTION__, __FILE__, __LINE__); \
(void)logtrc##__LINE__.LOG_TRACE_A
//调用
FUNC_TRACE
(
)
(
参
数
1
,
参
数
2
,
参
数
3
....
)