2010-12-31 25 views
7

Tôi đang cố gắng biên dịch chương trình của mình bằng các biểu tượng gỡ lỗi để sử dụng trong gdb. Tôi đã thêm cờ -g vào makefile của tôi nhưng tôi vẫn nhận được "Đọc biểu tượng từ ... (không tìm thấy biểu tượng gỡ lỗi)" khi tôi tải chương trình trong gdb. Chuyện gì thế??Không có biểu tượng gỡ lỗi nào trong gdb ngay cả khi biên dịch bằng cờ -g

Dưới đây là một tước xuống ví dụ về makefile của tôi mà cần phải có các bit có liên quan:

CPP = g++ 
CFLAGS = -c -g -Wall 

$(BIN): $(OBJ) 
$(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS) 

<test.o>: <test.cpp> 
$(CPP) $(CFLAGS) <test.cpp> -o <test.o> 

Nếu bạn muốn xem toàn bộ điều bạn có thể đi đây thay vào đó, mặc dù tôi không nghĩ đó là cần thiết:

http://pastebin.com/vGNjy0ga

ghi chú khác .. tôi đang biên soạn với MinGW trên Windows và tôi có SFML và OpenGL như phụ thuộc.

Và không, cờ-s không được tìm thấy trong tệp makefile của tôi.

+5

Bạn có thể xác nhận với 'make -n' rằng bạn đang thực sự nhận được cờ' -g' trên dòng biên dịch của mình không? – chrisaycock

+0

F: \ rowdump \ rom \ ROMV> make -n g ++ -Wall src/obj/core.o src/obj/image.o src/obj/gnd.o src/obj/gat.o src/obj/world.o src/obj/rsw.o src/obj/camera.o src/obj/rsm.o src/obj/main.o -o romv -Wl, - cho phép-tự động nhập, -subsystem, windows -lsfml-main -lsfml-graphics -lsfml-window -lsfml-system -lopengl32 -lglu32 Nó không có ! Weird .. Và lá cờ -ansi và -pendant của tôi cũng biến mất. Chỉnh sửa: Xin lỗi vì tường văn bản. Không nhận ra nó sẽ trở thành như thế này. – delaccount992

+3

đầu ra mà Kobie dán là cho mục tiêu mặc định, đó là để liên kết, và không có lá cờ -g ở đó. Tôi vừa xác nhận trên Ubuntu rằng cờ đó là không cần thiết trong quá trình liên kết chỉ trong thời gian biên dịch. Tôi nghĩ bạn nên thử "make -n test.o" để xem lệnh nào được sử dụng để biên dịch. – binW

Trả lời

0

Tôi không chắc chắn, nhưng tôi nghĩ bạn cần -g ngay cả khi liên kết.

+0

Không có súc sắc. Không làm việc. Cảm ơn bạn đã thử. – delaccount992

1

cố gắng để thay thế

$(BIN): $(OBJ) 
$(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS) 

với

$(BIN): $(OBJ) 
$(CPP) $(CFLAGS) -o $(BIN) $(OBJ) $(LDFLAGS) $(LIBS) 

(chỉnh sửa) Lưu ý: Tùy chọn -c sẽ không làm việc với thực thi

+0

Điều đó sẽ không hoạt động, bởi vì tệp thực thi cuối cùng không thể sử dụng '-c'. Ngoài ra, có vẻ như (từ một thử nghiệm nhanh trên g ++ 4.4.1 trên GNU/Linux) mà bạn không cần '-g' khi liên kết. –

+0

Rất tiếc, bạn có quyền lựa chọn -c sẽ không hoạt động với tập tin thực thi – Alam

0

Tôi không có nhiều kinh nghiệm với MinGW nhưng hãy thử thay thế -g với -ggdb. Điều này có thể giải quyết vấn đề của bạn. Theo trang người đàn ông gcc

Tạo thông tin gỡ lỗi để sử dụng bởi GDB. Điều này có nghĩa là sử dụng hầu hết các định dạng hiển thị có sẵn (DWARF 2, đâm hoặc định dạng gốc nếu không trong số đó được hỗ trợ), bao gồm GDB tiện ích mở rộng nếu có thể.

+0

Trên hướng dẫn (GNU/Linux g ++) của tôi, '-g' thường xuyên nói," GDB có thể làm việc với thông tin gỡ lỗi này. " –

+0

DWARF 2 được sử dụng chủ yếu để lấy giá trị của MACROS trong khi gỡ lỗi – Alam

4

Ahh. Tôi rất xin lỗi. Nó chỉ ra phần "sạch:" của makefile của tôi bị hỏng. Vì vậy, khi tôi sử dụng làm sạch không có gì xảy ra. Xóa các tệp .o theo cách thủ công đã khắc phục sự cố. Những lá cờ hoạt động hoàn hảo ngay bây giờ. Cảm ơn tất cả những người đã đăng tải! Điều này có thể bị xóa ngay bây giờ.

+0

Và kỳ quặc mặc dù make -n cho thấy cờ -g của tôi đã bị tước bỏ, trong thực tế nó không có. – delaccount992

+1

binW có nhận xét ở trên rằng 'make -n' của bạn chỉ hiển thị phần liên kết chứ không phải phần biên dịch. Hãy chắc chắn rằng bạn đang tìm kiếm 'make -n test.o'. – chrisaycock

0

Tôi nghĩ bạn cần -g khi liên kết đối tượng vào mã nhị phân.

CPP = g++ 
CFLAGS = -g -Wall 

$(BIN): $(OBJ) 
$(CPP) $(CFLAGS) $(OBJ) -o $(BIN) $(LDFLAGS) $(LIBS) 

<test.o>: <test.cpp> 
$(CPP) $(CFLAGS) -c <test.cpp> -o <test.o> 
3

Tôi gặp vấn đề tương tự khi sử dụng một makefile mà tôi thừa kế trên một số mã F77 cũ. Tôi đã thử tất cả các lá cờ mà mọi người đề nghị (-g -ggdb ... vv) giải pháp được chạy làm sạch Nếu bạn không có điều đó hoặc biết ý nghĩa của nó, về cơ bản xóa tất cả các biên dịch (.o) các tập tin.

makefile không biết biên dịch lại vì chỉ có cờ đã được thay đổi, vì vậy tôi đã không thực sự biên dịch với -g hoặc -ggdb khi tôi nghĩ nó được. Hy vọng điều này sẽ giúp một ai đó!

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