c++ - para - ¿Construir Qt en modo "Liberar con información de depuración"?
qt para c++ (7)
¿Hay alguna forma de compilar Qt en el modo "Liberar con información de depuración"? Mi aplicación se bloquea solo en modo "lanzamiento" (funciona bien en modo de depuración) y parece que el problema proviene de Qt (puede ser un error en Qt). Así que quiero ver la información de depuración de Qt.
Qt docs tiene el modo "debug", "release" pero no el modo "release with debug".
[Upate]
Mi aplicación funciona bien con Mingw 32bit Release / Debug y VSC ++ Compiler 64bit Debug.
Solo se bloquea en VSC ++ 64Bit Release
Algun consejo ?
La construcción de Qt con este modo no es compatible, vea este error. Solo puedes hacerlo manualmente cambiando archivos vcproj o Makefiles como en la respuesta de Macke.
Puedo agregar que en Qt 4.8, este error parece haber sido corregido. Copié esas dos líneas en mi archivo .pro, y funcionó a la perfección.
En Qt5, al llamar a configure
, simplemente agregue la opción -force-debug-info
Parece que necesitas ajustar la variable QMAKE_CFLAGS_RELEASE
. En el caso de gcc, solo necesita agregar la opción -g para agregar información de depuración.
Simplemente seleccione Profile build en la pestaña de proyectos de Qt Creator en lugar de las versiones debug o release. Agregará muchos argumentos a la llamada qmake.
qmake.exe someproject.pro -spec win32-msvc "CONFIG+=qml_debug"
"CONFIG+=qtquickcompiler" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info"
Usamos qmake para generar archivos vcproj para compilar Qt. Escribí una secuencia de comandos de Python (pero sed también está bien) para cambiar los archivos vcproj para compilar con la información de depuración en la versión también.
Tener información de depuración es realmente invaluable para trazas de pila que van y vienen entre Qt y nuestra aplicación.
Aquí está el fragmento relevante:
for root, dirs, files in os.walk( qt_build_dir ):
for f in files:
if not f.endswith(''.vcproj''):
continue
output = []
with open(pj(root, f), ''r'') as file:
for line in file.readlines():
line = line.strip()
if ''DebugInformationFormat="0"'' == line:
output.append(''/t/t/t/tDebugInformationFormat="3"'')
elif ''GenerateDebugInformation="false"'' == line:
output.append(''/t/t/t/tGenerateDebugInformation="true"'')
else:
output.append(line)
with open(pj(root, f), ''w'') as file:
file.write(''/n''.join(output))
Utilizo esto en mis archivos qmake para compilar mis versiones de lanzamiento con debuginfo:
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
De esta manera, al menos puede verificar si el bloqueo ocurre en su código. La construcción de Qt con este modo no es compatible, vea este bug . Solo puedes hacerlo manualmente cambiando archivos vcproj o Makefiles como en la respuesta de Macke.
Vieja pregunta, lo sé. Pero hoy en día, simplemente puede utilizar
CONFIG += force_debug_info
para obtener símbolos de depuración incluso en modo de lanzamiento. Cuando usas QMake a través de la línea de comandos, generalmente hago esto para obtener una versión de lanzamiento con información de depuración:
qmake CONFIG+=release CONFIG+=force_debug_info path/to/sources