2016-08-24 22 views
0

gdbでターゲット上の埋め込みアプリケーションをデバッグしようとしました。したがって、ホスト上で実行されているgdbは、デバッグシンボルを持つバイナリ、つまり-gでコンパイルされたバイナリを必要とします。ターゲット上では、バイナリのストリップされたコピーで十分です。ターゲットでは、削除されたコピーの代わりに-gを付けずにコンパイルされたバイナリを使用しようとしましたが、動作しませんでした。gdb:-gなしでコンパイルされたバイナリと-gなしでコンパイルされたバイナリとの比較

GNUストリップは、オブジェクトファイル(-gでコンパイル)からすべてのシンボルを捨てます。だから、-gなしでコンパイルされたバイナリと同じではありませんか?それはなぜ機能しないのですか?

+0

-gは、デフォルトでオンになっている最適化を無効にするため、実行可能ファイルを削除するのと同じではありません。 –

+0

@ n.m。あなたは間違います:GCCの場合、 '-g'フラグは*最適化*に*影響しません*。 –

+0

@EmployedRussianあなたは正しいです、古い悪い多くの独自のunixes日から引き継がれた別の神話でなければなりません。 –

答えて

0

ホストでは、削除されたコピーの代わりに-gを付けずにコンパイルされたバイナリを使用しようとしましたが、動作しませんでした。

あなたはこれを逆転させました:ターゲットではストリップバイナリ、ホストではフルデバッグバイナリが必要です。

gdbserver-gによって生成ない必要性(または使用)デバッグ情報を行い、gdbはありません。

cp a.out a.out.stripped 
strip -g a.out.stripped 

、フルデバッグと一緒に取り除かバイナリの両方を保つ:

それは二回コンパイルではなく、その後、-gで一度コンパイルしないのがベストです。

+0

申し訳ありませんが、あなたが正しいです、説明のターゲットとホストが交換されました。私は私の質問を修正しました。ありがとう! – xaverius

+0

私の質問に戻る:すべてのシンボルを削除するには、-gを指定せずにstripを使用することはできますか?もしそうなら、私は、コンパイラが何をしているのかを実際には分かっていないので、2回コンパイルすることはお勧めしません。 – xaverius

+0

@xaveriusすべてのシンボルを完全に削除する必要がありますが、https://sourceware.org/bugzilla/show_bug.cgi?id=11786のように 'strip'にバグがあります –

関連する問題