16

Release ビルド モードと Debug ビルド モードの違いは理解できたと思います。主な違いは、デバッグ モードでは、生成される実行可能ファイルが最適化されず (デバッグが難しくなる可能性があるため)、デバッグ シンボルが含まれることです。

WinMerge の外部依存関係の 1 つである PCRE をビルドしているときに、これまで見たことのないビルド モードに気付きました: RelWithDebInfo.

Debug と RelWithDebInfo の違いについては、http ://www.cmake.org/pipermail/cmake/2001-October/002479.html に記載されています。exerpt: 「RelwithDebInfo はリリース モードと非常によく似ています。完全に最適化されたコードを生成しますが、プログラム データベースを構築し、デバッグ行情報を挿入して、デバッガーがいつでもコードのどこにいるかを推測できるようにします。」

これは非常に良いアイデアのように思えますが、セットアップ方法が必ずしも明白であるとは限りません。このリンクでは、VC++ でこれを有効にする方法について説明しています: http://www.cygnus-software.com/papers/release_debugging.html

何か不足していますか、それともすべてのリリース コードを RelWithDebInfo としてコンパイルするのは意味がありませんか?

4

5 に答える 5

21

私の知る限り、対応するデバッグ シンボルを社内に保存せずに顧客にコードを出荷することは、生産上の問題をデバッグする際に頭を悩ませる原因になります。

デバッグ シンボルを使用したリリース ビルドのデバッグは、デバッグ ビルドのデバッグとほとんど変わらないため、常にこれを行うことをお勧めします。

とは言っても、欠点があるかどうかはわかりません。もしそうなら、それを聞くのは興味深いでしょう。

于 2009-08-06T15:59:01.450 に答える
7

何か不足していますか、それともすべてのリリース コードを RelWithDebInfo としてコンパイルするのは意味がありませんか?

それは、デバッグ情報に関して顧客をどれだけ信頼できるかにかかっています。

追加情報:

gcc は、デバッグ情報をオブジェクト コードにエンコードします。

gcc に相当する pdb は次のとおりです。

ビルドターゲットの外でgccデバッグシンボルを生成するには?

cmake は、そのままではこのアプローチをサポートしていないように見えることに注意してください。

于 2009-08-06T16:13:28.580 に答える
5

最適化されたリリース ビルドをデバッグしようとすると、他に方法がない場合にのみ実行したい理由がわかります。

基本的に、これが必要になるケースは 2 つあります。

  • デバッグ ビルドには表示されない問題があるため、リリース ビルドをデバッグする必要があります。
  • 顧客でクラッシュが発生し、ローカルに保存されたデバッグ情報を使用してクラッシュを理解します。

あなたのことは知りませんが、私は過去 10 年間にリリース コードを 2 回か 3 回デバッグする必要があり、顧客のクラッシュが問題にならなかった会社で働くことができました。

ええ、おそらくリリース ビルドのデバッグ情報も用意しておくことをお勧めしますが、VS はこのように設定しません。これが必要な 10 年ごとの 2 つのケースでは、毎回手動で設定する価値はありません。時間。CMakeは無料で提供しているので、それを実行してください。

于 2009-08-06T16:03:25.963 に答える
2

リリース ビルド用にデバッグ情報が生成されたとしても、デバッグ目的ではデバッグ ビルドほど有用ではありません。その理由は、多くの変数と中間式が最適化されていないため、デバッガーで使用できないためです。

于 2012-07-24T15:20:36.350 に答える
2

製品コードは、デバッグ情報が運ぶサイズの肥大化を必要としません。

于 2009-08-06T15:59:38.653 に答える