2013-05-30 28 views
1

Makefile文件是:當我使用gdb進行調試時,爲什麼「現在沒有符號文件」?

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. 

這也就是爲什麼?
謝謝

+1

'cc'是'gcc'的鏈接嗎?此外,你不應該作爲'root'工作,如果不是必要的話...... –

+0

@ bash.d cc當我測試它時是可以的。我在VPS中編碼,所以根也許沒問題。謝謝 – lxgeek

+0

你是如何編譯目標文件的?如果它們沒有用-g編譯,則不會有調試符號。 – Entropia

回答

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)文件
現在沒有可執行文件。

正在發生的事情,因爲你是重置要調試到沒有文件。不要這樣做。

你真正的問題是這樣的:從發現/root/lx/filesystem/lx_filesystem/test...(no調試符號

閱讀符號)......完成。

爲什麼沒有調試符號?如果您的可執行文件是由您提供的Makefile構建的,則應該有調試符號。唯一合乎邏輯的結論是,事實並非如此。可能發生的情況是,您修改了您的Makefile,但未重新制作,並且仍在調試舊的可執行文件,該可執行文件不包含-g

使用固定Makefilemake clean all應該

  • 重建所有目標文件和-g(你應該看到他們在make輸出與-g重建。
  • 給你一個可執行文件調試符號
2

您需要確認您的二進制文件中是否包含調試符號。在Linux上,您可以運行

file test
其中應該告訴你這些符號是否已被剝離。或者嘗試
nm -C test
以查看包含在測試二進制文件中的符號列表。如果你看到類似
nm: test: no symbols
那麼這就是問題所在。如果它們沒有被剝離,那麼你的調試符號可能不是gdb樣式的(參見 this question)。

相關問題