我使用下面的宏来打印我在web上找到的调试信息。它工作得很好。但是,当调试调用函数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 */发布于 2009-12-14 09:53:47
也许您应该将跟踪封装到一个模块中,这样您就可以在运行时动态地打开/关闭跟踪,这样您就可以专门为函数调用关闭跟踪。在发布模式下,你可以用空语句替换所有的跟踪,尽管根据我的经验,我发现在发布模式下保持跟踪也很好--以防万一。
发布于 2009-12-14 08:26:17
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
...这将在除A()之外的任何地方调用B()时对其进行调试。要进行调试,您需要定义MY_DEBUG,而不定义NDEBUG。
编辑:当您想要通过调试进行编译时,您将需要定义MY_DEBUG,但希望您使用的是make或其他构建工具,所以这应该很容易。
https://stackoverflow.com/questions/1898336
复制相似问题