2009-04-26 10 views
6

私はGDBの初心者です。正しく動作しています。しかし、私はこれが大きなプロジェクトでどのように使われているのか疑問に思っています。私はmakefileとg ++を使ってビルドを行うプロジェクトを持っています。 GDBを動作させるには、右のデバッグシンボルでコンパイルする必要があります(g ++ -gファイル)?gdbを使用したデバッグ - ベストプラクティス

  1. 質問は、私は、私はデバッグビルドのようなメイクデバッグ作ることができるように、「デバッグ」のようなメイク何かで新しいターゲットを作成する必要があります。これはベストプラクティスですか?

  2. foo.cppだけをデバッグする必要があり、mainを含むプログラム全体をビルドする以外のデバッグシンボルを生成することは可能ですか?

答えて

2
  1. は、あなたも、など)のコードを試してみて、最適化されたデバッグ(-O1、-O2する必要があり、必要なわけではありません。放置しない理由 - 上のG?リリースでは、あなたはいつもちょうどバイナリでストリップを実行することができます。

  2. はい。-gでちょうどそのファイルを作成します。私は大きな違いが間に存在しているとは思わない

+0

「リリースの場合、常にバイナリでストリップを実行できますか?」とはどういう意味ですか?説明できますか? –

+0

http://www.sourceware.org/binutils/docs-2.16/binutils/strip.html -gを使用すると、コードがなくてもコードがいくぶん大きくなります。デバッグシンボルを簡単に追加する方法はありませんが、簡単にストリップで削除することができます。 – Mikeage

0

gdbは記号なしで動作します。出力がそれほど役に立たないということだけです。

  1. これは優先事項です。私はデフォルトでデバッグモードですべてをビルドし、必要に応じてをリリースします。
  2. はい。あなたは時々-g(付の建物常に検討する必要がありますが、
1

大規模、中規模、または小規模プロジェクトでのgdbの使用。しかし、大きなプロジェクトでは、デバッグ情報はオブジェクトと実行可能ファイルのサイズを増やすので、ビルドに必要な領域を考慮する必要があります。

  1. ソリューション全体のデバッグの必要性を最初に過小評価した場合、将来的に決定が下される可能性があります。デバッグ情報の有無にかかわらずビルドが可能な場合は常に良いので、ビルドスクリプトを慎重に記述してください。
  2. はい、以前の回答を考えてください。場合によっては、デバッグ情報を持たないモジュールから問題が発生することがあります。私たちは常に可能な最も詳細なデバッグ情報でビルド作業ここでは大規模なプロジェクトで
2

(のような、GDBのマクロにアクセスするためのネイティブGDB形式または「-gdwarf-2 -g3」の「-ggdb3」)。

デバッグが終了したら、「strip」コマンドを使用してバイナリからすべてのデバッグ情報を削除します。

gcc -ggdb3 blah.c -o blah 
strip blah 
0

あなたは常にデバッグバージョンのは、どこかに保存することができ、そしてあなたがする必要がある場合は、シンボル情報、あなたが取り除か/リリースバージョンをデバッグした後、あなただけの「ファイル/パス」を行くことができるとGDBを再バインドそのターゲットのシンボルを再読み込みします。また、 "symbol-file/path"を使用して、削除されたファイルにバインドされるシンボル情報を設定することもできます。

関連する問題