c++ - ¿Por qué funciona qDebug en las versiones de lanzamiento?
qt (3)
Procedente de MFC, traté a qDebug()
como TRACE()
, suponiendo que el preprocesador lo haya eliminado de las compilaciones de Release (en MFC se hace usando #define TRACE 1 ? (void*) 0 : AfxTrace
).
Sin embargo, para mi sorpresa, qDebug()
se ejecuta en versiones de lanzamiento. ¿Cómo cambio esto? Y también, ¿por qué esto es así, cuál fue el razonamiento de los desarrolladores de Qt detrás de esta decisión?
QDebug es "flujo de salida para información de depuración". Tiene el comportamiento predeterminado que está imprimiendo en stdout / stderr dependiendo del tipo de mensaje. Puede personalizar el comportamiento de qDebug () fácilmente instalando su propio controlador de mensajes. Por ejemplo, puede probar en tiempo de ejecución (no en tiempo de compilación) si desea imprimir las depuraciones. Eche un vistazo a este ejemplo de código:
#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);
}
}
Ocultará toda la salida de qDebug si no hay ningún parámetro especificado en el tiempo de ejecución. Obtienes más control que solo "mostrar depuración / no mostrar depuración"
También puede desactivar QDebug completamente con QT_NO_DEBUG_OUTPUT
definir si le preocupa la pérdida de rendimiento con qDebug presente dentro del código.
Use esto para suprimir los mensajes en el modo de liberación pero permitirlos en el modo de depuración
CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
Si solo usa DEFINES += QT_NO_DEBUG_OUTPUT
sin la parte CONFIG(...)
, los deshabilitará en ambos modos, lo que generalmente no es deseable.
qDebug
también está controlado por preprocesador, pero tiene su propia macro especial, QT_NO_DEBUG_OUTPUT
. Si lo agrega a sus definiciones de versión de lanzamiento, se eliminará.