Deshabilitar (depurar) el inicio de sesión en QT y QML

 C Programming >> Programación C >  >> Tags >> Qt
Deshabilitar (depurar) el inicio de sesión en QT y QML

En QT puedes usar algunas funciones del qDebug.h encabezado como qDebug() y qWarning() para registrar información en la consola. En QML puedes usar los gustos de console.log() , console.error() . También es muy fácil implementar su propio registrador (p. ej., SyslogMessageHandler ) si desea algo diferente, como iniciar sesión en syslog y en la consola. En esta publicación, le mostraré cómo deshabilitar ambas formas de iniciar sesión en una compilación de lanzamiento, qml y qt tienen diferentes formas de administrar su salida.

Información en línea sugerida principalmente para definir QT_NO_DEBUG_OUTPUT , pero eso no pudo deshabilitar el registro de QML. No estoy seguro de si eso se debe a que mi proyecto de muestra tenía su propio MessageHandler , pero al final descubrí cómo deshabilitar todo.

Las páginas de documentación de QT sobre depuración y registro de qml son útiles, pero como suele ocurrir con su documentación, es tan completa que no es fácil encontrar cómo hacer una sola cosa específica, en este caso, simplemente deshabilitar el registro en una compilación de versión.

Desactivar registro QT

En tu .pro archivo agregue las siguientes líneas:

# Suppress logging output for release build.
CONFIG(release, debug|release): DEFINES += QT_NO_DEBUG_OUTPUT
CONFIG(release, debug|release): DEFINES += QT_NO_INFO_OUTPUT
CONFIG(release, debug|release): DEFINES += QT_NO_WARNING_OUTPUT

Cada bandera desactiva el qLog() apropiado método, por ejemplo, QT_NO_DEBUG_OUTPUT deshabilita qDebug() .

Después de editar tu .pro archivo, recuerde limpiar y reconstruir su proyecto.

¿Por qué no solo CONFIG(release):? ? Si tiene varias opciones, esto solo se activa si la última opción es release .

CONFIG(release, debug|release) evalúa a true si CONFIG contiene release pero no debug , o si contiene ambos debug y release pero debug no aparece después de la última aparición de release . Por ejemplo:

CONFIG += release debug release

Porque el último debug viene después del último debug , CONFIG(release, debug|release) es true .

Desactivar registro QML

En main.cpp incluir el QLoggingCategory encabezado:

#include <QLoggingCategory>

Antes que sus otros controladores de registro (como qInstallMessageHandler() ), agregue este fragmento de código:

#ifdef QT_NO_DEBUG
    QLoggingCategory::setFilterRules("*.debug=false\n"
                                     "*.info=false\n"
                                     "*.warning=false\n"
                                     "*.critical=true");
    fprintf(stderr, "Disabling QML logging in release build.\n");
#else
    fprintf(stderr, "QML logging enabled.\n");
#endif

QT_NO_DEBUG es exportado automáticamente por QT al compilar una versión de lanzamiento. Las reglas de filtro permiten un mayor control sobre lo que se registra, cuándo y dónde, pero este código simplemente deshabilita todo, excepto lo crítico. Debe estar separado por saltos de línea (\n en los parámetros del método), las comas no funcionan.

El fprintf line es opcional pero ayuda a saber qué está pasando y cuándo hay registro y cuándo está deshabilitado.

Intenté usar un #if defined(QT_NO_DEBUG_OUTPUT) compruebe si hay un control más granular, sin embargo, eso no funcionó. Cada compilación (depuración o lanzamiento) deshabilitó el registro, no estoy seguro de por qué y tampoco investigué demasiado.

La otra forma es con una variable de entorno. Aquí sugieren la siguiente bandera:

QT_LOGGING_RULES=qml=false

Esto no funcionó para mí, tanto exportado en la línea de comando como en main.cpp como sigue:

#ifdef QT_NO_DEBUG
   qputenv("QT_LOGGING_RULES", "qml=false");
#endif

Su experiencia puede ser diferente. Si funciona para usted, por favor hágamelo saber.