首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭特定函数的调试宏(NDEBUG)

关闭特定函数的调试宏(NDEBUG)
EN

Stack Overflow用户
提问于 2009-12-14 08:19:17
回答 2查看 1.6K关注 0票数 0

我使用下面的宏来打印我在web上找到的调试信息。它工作得很好。但是,当调试调用函数A的函数B时,我想关闭函数A的调试打印。我尝试过#define NDEBUG function A #undef NDEBUG,但未能在函数A中禁止打印。

任何帮助都将不胜感激。任何关于完成任务的替代方法的建议也是受欢迎的。

谢谢~RT

代码语言:javascript
复制
#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 */
EN

回答 2

Stack Overflow用户

发布于 2009-12-14 09:53:47

也许您应该将跟踪封装到一个模块中,这样您就可以在运行时动态地打开/关闭跟踪,这样您就可以专门为函数调用关闭跟踪。在发布模式下,你可以用空语句替换所有的跟踪,尽管根据我的经验,我发现在发布模式下保持跟踪也很好--以防万一。

票数 1
EN

Stack Overflow用户

发布于 2009-12-14 08:26:17

NDEBUG在包含assert.h时很有用,因此#define NDEBUG/#undef NDEBUG以后不会做任何事情。

不过,您可以这样做:

代码语言:javascript
复制
#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()中:

代码语言:javascript
复制
...
#undef MY_DEBUG
result = B();
#define MY_DEBUG
...

这将在除A()之外的任何地方调用B()时对其进行调试。要进行调试,您需要定义MY_DEBUG,而不定义NDEBUG

编辑:当您想要通过调试进行编译时,您将需要定义MY_DEBUG,但希望您使用的是make或其他构建工具,所以这应该很容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1898336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档