【问题标题】:Does Qt offer a (guaranteed) debug definition?Qt 是否提供(保证的)调试定义?
【发布时间】:2012-02-06 18:21:26
【问题描述】:

有谁知道官方支持的在 Qt 中包含仅调试构建代码的方式?例如:

#ifdef QT_DEBUG
// do something
#endif

基本上类似于 Q_ASSERT,但用于更复杂的测试。

我似乎找不到任何说明 Qt 框架保证定义调试宏的文档。如果没有,在整个项目范围内实施此功能的非官方方法是什么?

【问题讨论】:

    标签: debugging qt definition


    【解决方案1】:

    Qt 为发布版本定义了QT_NO_DEBUG。否则 QT_DEBUG 被定义。

    当然,您可以在 .pro 文件中随意指定任何 DEFINES,并将它们的范围设置为 debugrelease

    【讨论】:

    • 你知道有任何证据表明QT_NO_DEBUG 被官方支持在Qt 框架之外使用吗?
    • 不,只是阅读源代码。尽管在没有充分理由的情况下更改已发布 API 标头中的定义是不可能的。
    【解决方案2】:

    另一种方法是在您的项目文件中写入如下内容:

    debug {
      DEFINES += MYPREFIX_DEBUG
    }
    release {
      DEFINES += MYPREFIX_RELEASE
    }
    

    那么你就不会依赖Qt内部定义了。

    【讨论】:

    • 不是一个不合理的建议,但我特别希望避免额外的定义。
    • 为什么?您在附加定义中看到了哪些缺点?
    • 这样,两者都可以定义,这可能是不想要的。使用例如CONFIG(debug,debug|release) 检查调试版本,请参阅:wiki.qt.io/…
    【解决方案3】:

    检查调试模式:

    #ifdef QT_DEBUG
        //Some codes
    #endif
    

    查看发布模式:

    #ifndef QT_DEBUG    //<== Please note... if not defined
        //Some codes
    #endif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-19
      • 2019-11-13
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多