web-dev-qa-db-ja.com

「デバッグ情報付きリリース」モードでQtをビルドしますか?

「デバッグ情報付きリリース」モードでQtをビルドする方法はありますか?私のアプリケーションは「リリース」モード(デバッグモードで正常に動作)でのみクラッシュし、問題はQtに起因するようです(Qtのバグである可能性があります)。したがって、Qtのデバッグ情報を確認したいと思います。

Qt docs には「デバッグ」、「リリース」がありますが、「デバッグ付きリリース」モードはありません。

[Upate]

私のアプリケーションは、Mingw32ビットリリース/デバッグおよびVSC++コンパイラ64ビットデバッグで正常に動作します。

VSC++ 64ビットリリースでのみクラッシュします

任意のヒント ?

更新:以下の@milanwの回答を参照してください。これはqmakeで直接サポートされるようになりました

Qtを使用して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))
3
Macke

古い質問です。しかし、今日では、あなたは単に使用することができます

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.prfQt 4.xに上記の条件を手動で追加する必要があります。

30
milianw

これを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のビルドはサポートされていません。これを参照してください バグ 。 Mackeの答えのようにvcproj-filesまたはMakefilesを変更することによってのみ手動で行うことができます。

16
hmuelner

Qt5では、configureを呼び出すときに、オプション-force-debug-infoを追加するだけです。

11

このモードでのQtのビルドはサポートされていません。このバグを参照してください。 Mackeの答えのようにvcproj-filesまたはMakefilesを変更することによってのみ手動で行うことができます。

これをQt 4.8で追加してもらえれば、このバグは修正されたようです。これらの2行を.proファイルにコピーしたところ、魅力のように機能しました。

1
Yellow

調整する必要があるようです QMAKE_CFLAGS_RELEASE 変数。 gccの場合、デバッグ情報を追加するために-gオプションを追加する必要があります。

1
ks1322

デバッグビルドやリリースビルドではなく、QtCreatorの[プロジェクト]タブで[プロファイルビルド]を選択するだけです。 qmake呼び出しに多くの引数を追加します。

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