我正在使用以下宏来打印我在网络上找到的调试信息。它很棒。
但是,我想在调试函数B时关闭函数A的调试打印,函数B调用函数A.我尝试#define NDEBUG
function A
#undef NDEBUG
但是没有设法抑制打印功能A.
任何帮助将不胜感激。 任何关于完成任务的替代方法的建议也是受欢迎的。
谢谢~RT
#ifdef NDEBUG
/*
If not debugging, DEBUGPRINT NOTHING.
*/
#define DEBUGPRINT2(...)
#define DEBUGPRINT(_fmt,G ...)
#else
/*
Debugging enabled:
*/
#define WHERESTR "[file %s, line %d]: "
#define WHEREARG __FILE__, __LINE__
#define DEBUGPRINT2(...) fprintf(stderr, __VA_ARGS__)
#define DEBUGPRINT(_fmt, ...) DEBUGPRINT2(WHERESTR _fmt, WHEREARG, __VA_ARGS__)
#endif /* NDEBUG */
答案 0 :(得分:1)
也许您应该将跟踪包装到模块中,以便您可以在运行时动态打开/关闭跟踪,这样您就可以专门为函数调用关闭它。在发布模式下,你可以用空语句替换所有跟踪,尽管根据我的经验,我发现在发布模式中保持跟踪也是好的 - 以防万一。
答案 1 :(得分:0)
NDEBUG
在包含assert.h
时很有用,因此#define NDEBUG
/ #undef NDEBUG
以后不会做任何事情。
你可以这样做:
#if defined(NDEBUG) || !defined(MY_DEBUG)
/*
If not debugging, DEBUGPRINT NOTHING.
*/
#define DEBUGPRINT2(...)
#define DEBUGPRINT(_fmt,G ...)
#else
/*
Debugging enabled:
*/
#define WHERESTR "[file %s, line %d]: "
#define WHEREARG __FILE__, __LINE__
#define DEBUGPRINT2(...) fprintf(stderr, __VA_ARGS__)
#define DEBUGPRINT(_fmt, ...) DEBUGPRINT2(WHERESTR _fmt, WHEREARG, __VA_ARGS__)
#endif /* NDEBUG */
然后,在函数A()中:
...
#undef MY_DEBUG
result = B();
#define MY_DEBUG
...
当从B()
以外的任何地方调用A()
时,这将调试MY_DEBUG
。要进行调试,您需要定义NDEBUG
并且MY_DEBUG
未定义。
编辑:当您想要使用调试进行编译时,需要定义make
,但希望您使用{{1}}或其他一些构建工具,所以这应该很容易。