2013-03-07 4 views
5

.outの実行ファイルを作成するには、私が入力する必要があります。Cプログラミング:Makefileとコマンドライン引数でgdbを使うには?

$: make 
$: myprogram.out name.ged 

私のプログラムは、このように「name.ged」、コマンドライン引数を内蔵しています。

私はセグメンテーションフォールト(コアダンプ)を取得した後、GDBを実行するたびに、私は次のように入力します

$: gdb a.out core 
(gdb): bt 

私は当時traceコマンドを使用して、GDBリターン:

#0 0x4a145155 in ??() 
#1 0x08a16ce0 in ??() 

私も試してみました上のコマンドを使ってスタックを上げても、まだ運がない。私のプログラムのどの行が私にseg faultを与えているのかは分かりません。 gdbは、Makefileやコマンドの引数を伴わない私の他のプログラムと一緒に働くので、私のコマンドが間違っているのだろうかと思っています。

+4

あなたは '-g'フラグを使用してコンパイルする必要があります。あなたがMakefileを投稿していないので、私はあなたにそれ以上の助けを与えることはできません。 –

+0

コマンドはgcc -g myprogram.outという名前になりますか? – Bonnie

+0

makeファイルにコードをコンパイルするコマンドがあります(gcc ...)gdbが効果的に動作するための追加情報を追加するには、-gフラグが必要です。 –

答えて

7

他の誰よりも前にコメントを要約しています。

実行可能ファイルには、gdbが関連するソースコードを表示するために必要なシンボリック情報がありません。コンパイルコマンドに-gオプションを追加し、新しい実行可能ファイルを生成する必要があります。失敗したテストを再実行して、新しいコアファイルを作成します。 gdbこの実行可能ファイルとコアを使用すると、backtraceを使用して関数呼び出しのスタックを表示できます。

メイクファイルでは、これを行う最も簡単な方法は、暗黙の.o.cルールで使用される変数CFLAGSを追加することです。

これをコマンドラインに直接追加することもできます(まともなシェルを想定しています)。これは、makeコマンド(およびサブコマンド)の実行中に環境変数として値を設定します。

$ CFLAGS='-g -Wall -Wextra' make 

私は実際にあなたがあなたのbashの.profileに以下を追加お勧めしますので、あなたは常に、コンパイラからほとんどの情報を取得します。

CFLAGS='-Wall -Wextra' 

次に、あなたがそれを必要とするとき、デバッグ実行可能にするために、メイクファイルでこれを置く:

CFLAGS+= -g 
関連する問題