有没有一种方法可以以“发布带调试信息”模式构建Qt?我的应用程序仅在“发布”模式下崩溃(在Debug模式下正常工作),似乎问题来自于Qt(可能是Qt中的一个错误)。因此,我想查看Qt的调试信息。
Qt文档有“调试”、“发布”但没有“发布带调试”模式。
[更新]
我的应用程序在Mingw 32位Release/Debug和VSC ++编译器64位Debug下都正常工作。
只有在VSC ++ 64位Release下崩溃
有什么提示吗?
有没有一种方法可以以“发布带调试信息”模式构建Qt?我的应用程序仅在“发布”模式下崩溃(在Debug模式下正常工作),似乎问题来自于Qt(可能是Qt中的一个错误)。因此,我想查看Qt的调试信息。
Qt文档有“调试”、“发布”但没有“发布带调试”模式。
[更新]
我的应用程序在Mingw 32位Release/Debug和VSC ++编译器64位Debug下都正常工作。
只有在VSC ++ 64位Release下崩溃
有什么提示吗?
老问题了,我知道。但是现在,你可以简单地使用
CONFIG += force_debug_info
即使在发布模式下,也可以获得调试符号。当您通过命令行使用QMake
时,我通常会这样做以获取带有调试信息的发布版本:
即使在发行模式下也可以获得调试符号。当您通过命令行使用QMake
时,我通常会这样设置以获得带有调试信息的发布版本:
qmake CONFIG+=release CONFIG+=force_debug_info path/to/sources
这将启用Qt5/mkspecs/features/
default_post.prf下列条件:
force_debug_info|debug: CONFIG += debug_info
force_debug_info {
QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
}
即使对于Qt 4.x
也能工作,但我们需要手动将上述条件添加到default_post.prf
中以适应Qt 4.x
CONFIG += debug
- 不需要在调试版本中强制使用调试信息。 - milianw"CONFIG+=force_debug_info"
添加到我的 qmake.exe
调用中是我需要做的,以便于针对 Qt 项目进行 PDBs 的即时生成,而不会干扰任何人的项目文件。 - kayleeFrye_onDeckCONFIG += force_debug_info
的等效语句是什么? - SplinesCMAKE_BUILD_TYPE=RelWithDebInfo
,使用 @Splines。 - milianw我在我的qmake文件中使用以下代码来生成带有调试信息的发布版本:
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
这样你至少可以检查崩溃是否发生在你的代码中。 使用该模式构建Qt是不受支持的,请参阅此错误. 您只能通过手动更改vcproj文件或Makefile来执行此操作,例如Macke的回答。
+=
才能正常工作,使用普通的 =
只会生成调试版本。 - Matteo Italiamilianw
的回答建议的那样添加force_debug_info
也会导致这种情况,但这是一种更直接的方法,即使对于Qt4
也可以使用。 - Top-Masterconfigure
时,只需添加选项-force-debug-info
就可以了。更新:请参考下面@milanw的答案。现在这个功能已经直接支持在qmake中实现。
我们使用qmake来生成vcproj文件来构建Qt。我写了一个Python脚本(但也可以使用sed)来更改vcproj文件,以便在发布时构建调试信息。
拥有调试信息对于在Qt和我们的应用程序之间来回移动的堆栈跟踪确实非常宝贵。
以下是相关的代码片段:
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))
适用于Linux用户
./configure -prefix /opt/qt -release -force-debug-info -opensource -nomake tests -no-avx -no-avx2 -no-avx512
make V=1 -j8
make install
附注:如果您的CPU支持AVX、AVX2或AVX512,请删除-no-avx、-no-avx2和-no-avx512选项。
看起来你需要调整QMAKE_CFLAGS_RELEASE
变量。如果是gcc,你只需要添加-g选项以添加调试信息。
CXXFLAGS
。请查看./configure脚本。 - ks1322qmake.exe someproject.pro -spec win32-msvc "CONFIG+=qml_debug"
"CONFIG+=qtquickcompiler" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info"