1

Makefile は次のとおりです。

 objects = disk.o super.o inode.o namei.o open.o main.o

test : $(objects)
        cc -g -Wall -O2 -o test $(objects)

disk.o : fs.h disk.h
        cc -g -Wall -O2 -c disk.c

namei.o : fs.h
        cc -g -Wall -O2 -c namei.c 

open.o : fs.h
        cc -g -Wall -O2 -c open.c

super.o : fs.h
        cc -g -Wall -O2 -c super.c

inode.o : fs.h
        cc -g -Wall -O2 -c inode.c

main.o : fs.h disk.h sched.h
        cc -g -Wall -O2 -c main.c

.PHONY : clean
clean:
        rm edit $(objects) 

私は "-g" を使用しますが、gdb でデバッグすると:

gdb test

メッセージは次のとおりです。

Reading symbols from /root/lx/filesystem/lx_filesystem/test...(no debugging symbols found)...done.
(gdb) file
No executable file now.
No symbol file now.

これが理由です?
ありがとうございました

4

2 に答える 2

2

バイナリにデバッグ シンボルがあるかどうかを確認する必要があります。Linuxでは、実行できます

ファイルテスト
シンボルが削除されたかどうかがわかります。または試してみてください
nm -C テスト
テストバイナリに含まれるシンボルのリストを表示します。次のようなものが表示された場合
nm: テスト: 記号なし
それが問題です。それらが削除されていない場合、デバッグ シンボルが gdb スタイルではない可能性があります (この質問を参照してください)。

于 2013-05-30T13:56:46.763 に答える
1

あなたMakefileはいくつかの点で間違っています。これはうまくいくはずです:

objects = disk.o super.o inode.o namei.o open.o main.o
CFLAGS = -g -Wall -O2

test : $(objects)
disk.o : fs.h disk.h disk.c
namei.o : fs.h namei.c
open.o : fs.h open.c
super.o : fs.h super.c
inode.o : fs.h inode.c
main.o : fs.h disk.h sched.h main.c

.PHONY : clean
clean:
        rm test $(objects)

しかし、それはあなたの質問ではありませんでした。これ:

(gdb) file
現在、実行ファイルはありません。

デバッグしたいファイルを何もリセットしていないために発生しています。そうしないでください。

あなたの本当の問題はこれです:

/root/lx/filesystem/lx_filesystem/test からシンボルを読み取り中...(デバッグ シンボルが見つかりません)...完了。

なぜデバッグシンボルがないのですか? 実行可能ファイルが提供されたものでビルドされているMakefile場合、デバッグ シンボルが含まれているはずです。唯一の論理的な結論は、そうではなかったということです。起こりそうなことは、あなたがあなたMakefileの を変更したが、再作成せず、なしでビルドされた古い-g実行可能ファイルをまだデバッグしていることです。

固定を使用してMakefile、およびmake clean allする必要があります

  • すべてのオブジェクト ファイルを で再構築します(出力で再構築され-gていることがわかります。-gmake
  • デバッグ シンボルを含む実行可能ファイルを提供します。
于 2013-05-30T13:51:12.770 に答える