質問

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

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

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

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

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

役に立ちましたか?

解決

  

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

これは、デバッグ情報を使用して、顧客の信頼どのくらいに依存します。

追加情報:

GCCはオブジェクトコードにデバッグ情報を符号化する。

ここではgccのためのPDB相当するものはあります:

はどのようにビルド外gccのデバッグシンボルを生成しますターゲットですか

注、そのcmakeのは、箱から出して、このアプローチをサポートするためには表示されません。

他のヒント

それは生産上の問題をデバッグするために来るとき、

私に関する限り、社内で格納された対応するデバッグシンボルを持つことなく、顧客への出荷コードは、脱毛のためのレシピです。

デバッグリリースデバッグシンボルを構築することはほとんどデバッグビルド、デバッグから任意の違いはありませんので、私はこれをやって、常にお勧めします。

これはどんな欠点があるかどうか私は知らない、と述べました。その場合は、聞くのは興味深いだろう。

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

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

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

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

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

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

デバッグ情報は、リリースビルド用に生成された場合でも、

、それははるかに少ない便利なデバッグ用デバッグビルドよりもあります。その理由は、多くの変数と中間表現は離れて最適化し、ひいてはデバッガでは使用できませんされているということです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top