4

Can some one explain other than the debugging symbols being embedded in the debug build, if there is any other difference. Further I am very curious as to know how they differ in executing binary. What mechanisms are being used use debug symbols in the debug build show the errors.

4

2 に答える 2

3

多くのqtライブラリで使用されるコンパイラ呼び出しの -DQT_NO_DEBUG フラグをqtセットでデバッグとしてコンパイルします。Jimmy がすでに指摘したように、パフォーマンスの主な違いはこのソースによるものです。極端な例の 1 つは、境界のチェックに使用できる STL コンテナーのデバッグ バージョンの使用です。これをデバッグ モードのコードで使用すると、処理に時間がかかる場合があります (Qt はこれを使用しませんが、ライブラリに同様のチェックを導入します)。

さらに通常、最適化フラグが変更されます。リリースの場合、デバッグの最適化ではなく、リリースに -O2 が選択されます

デバッグ ビルドに関するもう 1 つの重要な点は、定義の追加、ターゲットの変更、別のライブラリ セットに対するコンパイルなど、pro ファイル内のさまざまなことをトリガーするために使用できることです。

CONFIG(debug, debug|release) {
  message("Debug")
  DESTDIR = $$DESTDIR-debug
  CONFIG += debug
  DEFINES += DEBUG
  TARGET = $$TARGET-debug
}else{
  message("Release")  
  DEFINES += QT_NO_DEBUG_OUTPUT
  DESTDIR = $$DESTDIR-release
  TARGET = $$TARGET-release
}

詳細に興味がある場合は、qmake 構成ファイルを参照してください。Linux Ubuntu: /usr/share/qt4/mkspecs/common/g++.conf /usr/share/qt4/mkspecs/common/linux.conf およびターゲットに依存する conf ファイル

于 2012-07-20T21:33:15.963 に答える
1

「リリースビルド」と「デバッグビルド」の正確な定義と動作は、使用するビルドシステムとコンパイラによって異なります。デバッグビルドと比較したリリースビルドのいくつかの一般的なプロパティ:

  • デバッグビルドは通常、デバッグ情報を生成しますが、リリースビルドは生成しません。ただし、個別のデバッグ情報を使用したリリースビルドなど、いくつかのハイブリッドがあります。
  • アサーションは評価されません(assert(p = getFoo());何も割り当てません-またはアサートしません)。したがって、assert内に副作用がある式は悪い考えです。
  • 最適化設定は通常異なります(デバッグビルドでは最適化がないか、ほとんどありません)
  • デバッグ出力が抑制される可能性があります
  • ライブラリ開発者は、NDEBUGプリプロセッサマクロなどに応じて、さらに異なる動作を実装する可能性があります
于 2012-07-20T21:38:27.253 に答える