2016-10-19 13 views
2

私は、単純な.cファイルを持っている:なぜgcc -Ogはソースコードラインマッピングを生成しないのですか?

$ cat a.c 
int i=0; 
int j; 
static int l=4; 
void k(){} 
void main(){ 
    k(); 
} 

私はデバッグ情報を有効にするには、「-Og」とそれをコンパイルしようとしました。 GCCマンは

-Ogデバッグの経験を最適化しています。
-Ogは、デバッグを妨げない最適化を有効にします。

しかし、私は "GDBのa.outの" を使用し、 "リスト" をしようとすると、それは言う:

(GDB)L
ないシンボルテーブルの読み取り。 "file"コマンドを使用してください。

gcc a.c -gを使用すると、gdbに「list」と表示されます。 なぜですか?

答えて

3

-Ogは最適化スイッチです。これは、デバッグを妨げない最適化を可能にしますが、デバッグ情報については何も言及しません。

-gは、デバッグ情報(通常は別の非コードセクションです)を有効にします。

したがって、デバッグ情報とデバッグの最適化を有効にするには、-Og -gなどを使用します。

ビルドでは、デバッグ情報のみが有効になっていますが、デフォルトレベルでの最適化は完全に無効になっています。

"その他の最適化オプションを使用していない場合は、-Og(最適化オプションを参照)を-gと併用することを検討してください。デバッグに役立つ情報を収集することはまったく実行されないため、-Ogを使用するとデバッグの経験が向上する可能性があります。

+0

ありがとうございました – Troskyvs

関連する問題