gccコンパイラで-g(デバッグシンボル)と-O2(最良の最適化最適化)を混ぜ合わせる経験がありますか?
最終的なユーザーに配布されたリリースプログラムのクラッシュをデバッグして、コアファイルを送り返す必要があります。
I常に呼び出すために使用しました:gccで-gと-O2オプションを使用
GDB < < MYPROGRAM >> < <コアファイル>>
とトラブルがある場所を確認。今私はコールトレースを見ることができますが、デバッグシンボルがないので、かなり困っています。
gccコンパイラで-g(デバッグシンボル)と-O2(最良の最適化最適化)を混ぜ合わせる経験がありますか?
最終的なユーザーに配布されたリリースプログラムのクラッシュをデバッグして、コアファイルを送り返す必要があります。
I常に呼び出すために使用しました:gccで-gと-O2オプションを使用
GDB < < MYPROGRAM >> < <コアファイル>>
とトラブルがある場所を確認。今私はコールトレースを見ることができますが、デバッグシンボルがないので、かなり困っています。
本番環境では両方を併用するため、お客様がクラッシュを一度だけ見た場合にデバッグが非常に簡単になります。それは、問題がどこにあるのか(メモリ破損ではない)かなり良いアイデアを提供します。
理論的には、-gを追加しても実際にはパフォーマンスに影響はありませんが、実行可能ファイルは大きくなります。組み込み環境では、大きなトレードオフです。
正常に動作します。
また、最適化のために、デバッガでステップ実行しているソースがソースと正確に一致しない場合がありますが、デバッグシンボルがあるにもかかわらずIMHOによってデバッグがずっと簡単になります。
また、ソース行が順不同で実行されることもあり、最初は混乱します。 – mkb
私はこの動作に慣れています。 -gを宣言してもコードがすべて同じように最適化されていれば、私はちょうど迷っていました。 –
'-g'はコードに何の影響も与えず、追加のデバッグデータが生成されます。 –
シンボル付きのイメージはデバッガでのみ必要です。リモートデバッガを使用している場合や、コアファイルから死後デバッグを行っている場合は、ターゲット上で実行されているイメージでシンボルを削除することができます。 –