Ответ 1
qDebug
также управляется препроцессором, но имеет свой собственный специальный макрос QT_NO_DEBUG_OUTPUT
. Если вы добавите это в свою версию сборки сборки, она будет удалена.
Начиная с MFC, я относился к qDebug()
как к TRACE()
, считая, что он удален из версий Release препроцессором (в MFC это делается с помощью #define TRACE 1 ? (void*) 0 : AfxTrace
).
К моему удивлению, однако, qDebug()
также выполняется в сборках Release. Как мне это изменить? А также, почему это так, какова была аргументация разработчиков Qt за этим решением?
qDebug
также управляется препроцессором, но имеет свой собственный специальный макрос QT_NO_DEBUG_OUTPUT
. Если вы добавите это в свою версию сборки сборки, она будет удалена.
QDebug - это "выходной поток для отладки информации". Он имеет поведение по умолчанию, которое печатает на stdout/stderr в зависимости от типа сообщения. Вы можете легко настроить поведение qDebug(), установив собственный обработчик сообщений. Например, вы можете протестировать во время выполнения (не время компиляции), если вы хотите печатать отладки. Взгляните на этот пример кода:
#include <QDebug>
void noMessageOutput(QtMsgType type, const char *msg)
{
Q_UNUSED(type);
Q_UNUSED(msg);
}
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
if ( ! app.arguments().contains(QLatin1String("--with-debug") ) {
qInstallMsgHandler(noMessageOutput);
}
}
Он будет скрывать весь вывод qDebug, если во время выполнения нет параметров. Вы получаете больше контроля, чем просто "show debug/do not show debug"
Также вы можете полностью отключить QDebug с помощью QT_NO_DEBUG_OUTPUT
define, если вы обеспокоены потерей производительности, связанной с qDebug, присутствующим в коде.