使用宏在本地禁用 qDebug 输出
Disable qDebug output locally with a macro
我在整个代码中都使用了 qDebug。现在我想通过翻译单元限制它的输出,定义一个单独的宏到翻译单元中的 enable/disable qDebug 输出:
test.pro:
DEFINES += NO_DEBUG_ONE
testone.cpp:
#ifdef NO_DEBUG_ONE
#define QT_NO_DEBUG_OUTPUT
#endif
testtwo.cpp:
#ifdef NO_DEBUG_TWO
#define QT_NO_DEBUG_OUTPUT
#endif
因此,像这样设置宏我希望仅在 testtwo.cpp 中获得 qDebug 输出,但我看到来自两个翻译单元的 qDebug 消息。
我在这里遗漏了什么以及如何解决它?
由于它是一个 QMake 宏,我认为您不能在本地执行。唯一的方法是使用标准宏作为 -D TEST
然后做这样的事情。
#ifndef TEST
qDebug() << "test";
#endif
正如 Gabriel de Grimouard 指出的那样,QT_NO_DEBUG_OUTPUT
在您编译 Qt 时生效,而不是您的应用程序(据我了解)。
唯一的选择是更改代码,有几个选项:
- 按照他的回答中的建议进行,在每次调试之前使用宏检查
定义您自己可以启用或禁用的调试宏:
// Top of testone.cpp
#ifdef NO_DEBUG_ONE
#define DEBUG_MESSAGE(message)
#else
#define DEBUG_MESSAGE(message) qDebug() << message
#endif
// In your code
DEBUG_MESSAGE("This is my debug message");
- 这样做的好处是您的代码中没有
#ifndef TEST
。
- 利用Qt中的Logging Categories(推荐)
不幸的是,所有这些都需要更改代码。
将您的代码移至 testone.cpp
和 testtwo.cpp
的顶部,您应该可以开始了。
您可以在编译应用程序时使用 QT_NO_DEBUG_OUTPUT
和 QT_NO_WARNING_OUTPUT
,但必须在包含 Qt headers 之前设置它们。
使用 cmake,您可以在 per-file 基础上添加这些定义,但我没有看到使用 qmake 进行此操作的简单方法。
我在整个代码中都使用了 qDebug。现在我想通过翻译单元限制它的输出,定义一个单独的宏到翻译单元中的 enable/disable qDebug 输出:
test.pro:
DEFINES += NO_DEBUG_ONE
testone.cpp:
#ifdef NO_DEBUG_ONE
#define QT_NO_DEBUG_OUTPUT
#endif
testtwo.cpp:
#ifdef NO_DEBUG_TWO
#define QT_NO_DEBUG_OUTPUT
#endif
因此,像这样设置宏我希望仅在 testtwo.cpp 中获得 qDebug 输出,但我看到来自两个翻译单元的 qDebug 消息。
我在这里遗漏了什么以及如何解决它?
由于它是一个 QMake 宏,我认为您不能在本地执行。唯一的方法是使用标准宏作为 -D TEST
然后做这样的事情。
#ifndef TEST
qDebug() << "test";
#endif
正如 Gabriel de Grimouard 指出的那样,QT_NO_DEBUG_OUTPUT
在您编译 Qt 时生效,而不是您的应用程序(据我了解)。
唯一的选择是更改代码,有几个选项:
- 按照他的回答中的建议进行,在每次调试之前使用宏检查
定义您自己可以启用或禁用的调试宏:
// Top of testone.cpp #ifdef NO_DEBUG_ONE #define DEBUG_MESSAGE(message) #else #define DEBUG_MESSAGE(message) qDebug() << message #endif // In your code DEBUG_MESSAGE("This is my debug message");
- 这样做的好处是您的代码中没有
#ifndef TEST
。
- 这样做的好处是您的代码中没有
- 利用Qt中的Logging Categories(推荐)
不幸的是,所有这些都需要更改代码。
将您的代码移至 testone.cpp
和 testtwo.cpp
的顶部,您应该可以开始了。
您可以在编译应用程序时使用 QT_NO_DEBUG_OUTPUT
和 QT_NO_WARNING_OUTPUT
,但必须在包含 Qt headers 之前设置它们。
使用 cmake,您可以在 per-file 基础上添加这些定义,但我没有看到使用 qmake 进行此操作的简单方法。