2014-04-21 15 views
5

Được rồi tôi không thể làm việc gdb mặc dù đã thử một vài giải pháp.Gdb lặp lại "không có bảng biểu tượng nào được tải"

makefile của tôi không cc -g _________ và sản xuất myfilesys

>gdb myfilesys 
(gdb) break my_linked_list.c:90 
No symbol table is loaded, use the "file" command... 
(gdb) file myfilesys 
Reading symbols from /home/jsexton/Work/cs492/hw3/myfilesys...(no 
debugging symbols found)...done. 
(gdb) break my_linked_list.c:90 
No symbol table is loaded, use the "file" command... 

bất cứ ai có thể thấy được vấn đề? Chương trình của tôi được chia thành 30 tệp .c, vì vậy tôi thực sự cần phải sử dụng tệp: [số dòng].

+0

Bạn có thể hiển thị dòng lệnh đầy đủ không? Bạn đã biên dịch tệp vào .o trước khi liên kết? –

+0

Tại dòng lệnh, nhập 'tệp myfilesys'. Thao tác này sẽ in loại tệp. In một chút thông tin, đảm bảo thông tin nói 'không bị tước'. Vui lòng thêm đầu ra cho câu hỏi của bạn. – esorton

+1

Khi nó nói '... (không tìm thấy biểu tượng gỡ lỗi) ...' khi tải trong tệp của bạn, điều đó có nghĩa là nó. Kiểm tra để đảm bảo makefile của bạn thực sự đang thực hiện việc biên dịch 'cc -g -c' của mỗi tệp' .c', không chỉ là tệp cuối cùng để tạo 'myfilesys' của bạn. Nếu tất cả các nguồn của bạn nằm trong một thư mục, bạn có thể thực hiện 'cc -g * .c -o myfilesys'. – jxh

Trả lời

4

Mặc dù bạn tuyên bố đã biên soạn với cc -g về thực thi của bạn myfilesys, GDB không thấy bất kỳ, bằng chứng là trong nỗ lực của bạn để sử dụng file lệnh GDB của:

(gdb) file myfilesys
Reading symbols from /.../myfilesys...(no debugging symbols found)...done.

Đưa bạn theo từ của bạn rằng bạn đã thực sự sử dụng cc -g để biên soạn myfilesys, điều này có nghĩa là bạn có eit cô ấy đã tước các biểu tượng từ các tệp nhị phân của bạn (tôi thấy điều này khó xảy ra, nhưng tôi đề cập đến khả năng) hoặc không có tệp đối tượng nào của bạn có các biểu tượng gỡ lỗi. Giả sử sau này, bạn cần áp dụng việc biên dịch cc -g -c cho mỗi tệp nguồn riêng lẻ. Sau đó, mỗi tệp đối tượng kết quả sẽ có các biểu tượng gỡ lỗi và kết quả thực thi cũng sẽ có các biểu tượng gỡ lỗi (miễn là bạn không loại bỏ chúng sau khi liên kết).

Với makefiles chuẩn như gmake, điều này thường có thể dễ dàng thực hiện bằng cách tăng thêm biến CFLAGS với -g. Dưới đây là một makefile hoàn chỉnh để minh họa điều này với ba file nguồn:

CFLAGS=-g 

myfilesys: a.o b.o c.o 
     $(CC) $^ -o [email protected] 

GCC đã có quy tắc ngầm rằng biết làm thế nào để tạo ra một tập tin .o từ .c tập tin tương ứng. Tuy nhiên, bạn có thể thay đổi các đối số dòng lệnh được chuyển đến trình biên dịch bằng cách thay đổi biến số CFLAGS. Các chỉ thị trước khi xử lý và bao gồm các thư mục thường được chuyển vào bằng cách tăng thêm biến số CPPFLAGS (các cờ C++ cụ thể được đọc từ CXXFLAGS, nhưng các tùy chọn CPPFLAGS được chuyển tới cả trình biên dịch C và C++).

Chúng tôi cần xác định quy tắc rõ ràng để tạo tệp thực thi myfilesys (quy tắc $(CC) được thụt lề với ký tự tab, yêu cầu makefile). Sau khi gõ make, thực thi sẽ có biểu tượng, và GDB sẽ không báo cáo những biểu tượng còn thiếu trong thực thi của bạn (nó có thể báo cáo về những biểu tượng mất tích từ bất kỳ thư viện mà bạn sử dụng):

(gdb) file myfilesys
Reading symbols from /.../myfilesys...done.

Các vấn đề liên quan