在“使用调试信息发布”模式下构建Qt?

时间:2011-08-09 07:57:45

标签: c++ qt qt4 qmake

有没有办法在“Release with Debug info”模式下构建Qt?我的应用程序仅在“发布”模式下崩溃(在调试模式下工作正常),似乎问题来自Qt(可能是Qt中的错误)。所以我想查看Qt的调试信息。

Qt docs有“debug”,“release”但没有“release with debug”模式。

[Upate]

我的应用程序适用于Mingw 32位Release / Debug和VSC ++ Compiler 64bit Debug。

仅在VSC ++ 64Bit版本

上崩溃

任何提示?

7 个答案:

答案 0 :(得分:27)

老问题,我知道。但是现在,你可以简单地使用

CONFIG += force_debug_info

即使在发布模式下也能获得调试符号。当您通过命令行使用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

答案 1 :(得分:16)

我在qmake文件中使用它来使用debuginfo构建我的发行版:

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,请参阅此bug。 你只能通过在Macke的答案中更改vcproj文件或Makefile来手动完成。

答案 2 :(得分:11)

在Qt5中,在致电configure时,只需添加选项-force-debug-info

即可

答案 3 :(得分:3)

更新:请参阅下面的@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))

答案 4 :(得分:1)

您似乎需要调整QMAKE_CFLAGS_RELEASE变量。对于gcc,您只需添加 -g 选项即可添加调试信息。

答案 5 :(得分:1)

  

不支持使用此模式构建Qt,请参阅此错误。你只能通过在Macke的答案中更改vcproj文件或Makefile来手动完成。

我可以在Qt 4.8中添加,这个错误似乎已得到解决。我将这两行复制到我的.pro文件中,它就像一个魅力。

答案 6 :(得分:0)

只需在Qt Creator的项目选项卡中选择Profile build,而不是debug或release版本。它将为qmake调用添加很多参数。

qmake.exe someproject.pro -spec win32-msvc "CONFIG+=qml_debug" 
"CONFIG+=qtquickcompiler" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info"