7

.out 実行可能ファイルを作成するには、次のように入力する必要があります。

$: make
$: myprogram.out name.ged

私のプログラムにはコマンドライン引数が組み込まれているため、「name.ged」です。

セグメンテーション違反 (コア ダンプ) が発生した後に gdb を実行するたびに、次のように入力します。

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

次に back trace コマンドを使用すると、gdb は次のように返します。

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

スタックを上に移動する up コマンドを使用してみましたが、それでもうまくいきません。プログラムのどの行でセグ フォールトが発生しているのかわかりません。gdb は、Makefile とコマンド引数を含まない他のプログラムで動作するため、コマンドが間違っているのではないかと考えています。

4

1 に答える 1

11

コメントを要約する (他の誰かが行う前に :)。

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

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

CFLAGS= -g -Wall -Wextra

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

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

これを bash .profile に追加することをお勧めします。これにより、コンパイラから常にほとんどの情報を取得できます。

CFLAGS='-Wall -Wextra'

次に、必要に応じて、これを makefile に入れてデバッグ可能な実行可能ファイルを作成します。

CFLAGS+= -g
于 2013-03-07T07:06:49.533 に答える