デバッグ シンボルを残した状態でリリース バイナリをビルドすることのマイナス面があるかどうかを判断しようとしています。リリース ビルドでは-O3
、現時点で を使用してコンパイルします。クラッシュが発生した場合、コアはほとんど役に立たなくなります。
-O3 -g
だから、私がやりたいのはビルドを修正してデバッグシンボルに残すことです. サイズの問題はシンボルを削除することで解決できることはわかっていますが、他に見逃している微妙なものはありますか?
デバッグ シンボルを残した状態でリリース バイナリをビルドすることのマイナス面があるかどうかを判断しようとしています。リリース ビルドでは-O3
、現時点で を使用してコンパイルします。クラッシュが発生した場合、コアはほとんど役に立たなくなります。
-O3 -g
だから、私がやりたいのはビルドを修正してデバッグシンボルに残すことです. サイズの問題はシンボルを削除することで解決できることはわかっていますが、他に見逃している微妙なものはありますか?
シンボルをバイナリから分離します。
g++ -ggdb -o target obj1.o obj2.o ...
strip target --only-keep-debug -o target.dbg
strip target
次に、gdbで使用しますsymbol-file target.dbg
編集:実際の質問について:
欠点は次のとおりです。
実行速度には影響しません - デバッグ シンボルはバイナリの別のセクションに追加されるだけで、仮想アドレス空間のサイズに影響を与える可能性がありますが、他には何も影響しません。
サイズに影響するため、キャッシングとメモリにも影響します。
コンパイラ オプションに関する情報を読むと、サイズが大きくなりキャッシュが壊れてメモリ フェッチが増えるため、たとえばループを展開するとコードが遅くなることがあると書かれていることがわかります。