2011-04-06 5 views
11

私は、デバッグシンボルを残してリリースバイナリをビルドする際に欠点があるかどうかを判断しようとしています。リリースビルドでは、現時点では-O3でコンパイルしていますが、クラッシュがあればコアは無駄になります。リリースビルドのデバッグシンボルを残すことには欠点がありますか?

だから、私は何をしたいことはすなわち-O3 -g、デバッグシンボルに残すためのビルドを修正しているが、気持ちは(脇バイナリのサイズから)何らかの影響があるかもしれないということであるとして、これまで抵抗があります。私はサイズの問題はシンボルを取り除くことで修正できることを知っていますが、他に微妙なものがありますか?

+0

商用アプリケーションですか?あなたはリバースエンジニアリングを心配していますか? – EboMike

+0

@EboMike、いいえ、これは私たちの設定では該当しません。 – Nim

答えて

22

バイナリからシンボルを区切ります。

g++ -ggdb -o target obj1.o obj2.o ... 
strip target --only-keep-debug -o target.dbg 
strip target 

次にGDBで、symbol-file target.dbg

EDITを使用します。実際の問題について:

欠点は次のとおりです。

  • 簡単リバースエンジニアリング(それはあなたを心配場合)
  • より大きなバイナリ

実行速度は影響を受けません - デバッグシンボルはバイナリに別のセクションで追加されるだけで、仮想アドレススペースのサイズに影響する可能性があります。

+1

うわー、いい、私はこれが可能であることを知らなかった! – speeder

+0

ありがとう、私はこれが可能であることを知っていますが、最初にそれらを使って最適化されたビルドをビルドすることに問題があるかどうか(つまり、ストリッピングの前に)です。 – Nim

+0

ありがとうございます。私はそれを試して、何が起こるか見る必要があるだろうと思う.. – Nim

0

これはサイズに影響し、したがってキャッシュとメモリにも影響します。

コンパイラオプションについての情報を読んだ場合は、キャッシュのサイズが大きくなり、メモリフェッチが増えるため、アンロールループなどのコードがSLOWERになることがあります。

+0

したがって、シンボルを第2段階の操作として取り除くと、キャッシュ効果が減少しますか? – Nim

+0

あなたはErikのアイデアを参照していますか?私はそう思います。 – speeder

関連する問題