2012-05-06 22 views
58

Khi biên dịch mã nguồn C bằng gcc hoặc Clang, tôi luôn sử dụng cờ -g để tạo thông tin gỡ lỗi cho gdb.GCC -g vs -g3 GDB Cờ: Sự khác biệt là gì?

gcc -g -o helloworld helloworld.c

tôi nhận thấy rằng một số người khuyên -g3 để thay thế. Sự khác nhau giữa các cờ -g-g3 là gì? Ngoài ra, có sự khác biệt giữa -g-ggdb không?

+7

Bạn muốn biết điều gì không nằm trong tài liệu này? –

+7

Tôi đến đây vì tôi đang sử dụng makefile của người khác và tài liệu là một con thú để bắt đầu. Câu hỏi hay để có trên StackOverflow để tìm câu trả lời dễ dàng từ google. – GreenAsJade

Trả lời

64

Từ docs:

-g

Sản xuất thông tin gỡ lỗi ở định dạng gốc của hệ điều hành (đâm, COFF, XCOFF, hoặc lùn 2). GDB có thể làm việc với thông tin gỡ lỗi này. Trên hầu hết các hệ thống sử dụng định dạng stabs, -g cho phép sử dụng thông tin gỡ lỗi bổ sung mà chỉ GDB có thể sử dụng; thông tin bổ sung này giúp gỡ lỗi hoạt động tốt hơn trong GDB nhưng có lẽ khiến các trình gỡ rối khác bị lỗi hoặc từ chối đọc chương trình. Nếu bạn muốn để kiểm soát chắc chắn có nên tạo thêm thông tin hay không, hãy sử dụng -gstabs +, -gstabs, -gxcoff +, -gxcoff hoặc -gvms (xem bên dưới).

...


-ggdb

Sản xuất thông tin gỡ lỗi để sử dụng bởi GDB. Điều này có nghĩa là sử dụng định dạng biểu cảm nhất hiện có (DWARF 2, stabs hoặc định dạng gốc nếu không có định dạng nào được hỗ trợ), bao gồm cả phần mở rộng GDB nếu có thể là .


-gvmslevel

Yêu cầu thông tin gỡ lỗi và cũng sử dụng để xác định mức độ bao nhiêu thông tin. Mức mặc định là 2. Mức 0 không tạo ra thông tin gỡ lỗi . Do đó, -g0 phủ nhận -g.

....

Level 3 bao gồm thông tin thêm, chẳng hạn như tất cả các định nghĩa vĩ mô có mặt trong chương trình. Một số trình gỡ rối hỗ trợ mở rộng macro khi bạn sử dụng -g3.

+5

Có thể giải thích sự khác biệt giữa ví dụ "định dạng biểu cảm nhất" và "thông tin bổ sung" là gì? Các thông số này có miễn phí không? Nhiều người trong số họ đề cập đến GDB ... Cảm ơn! – rogerdpack

8

tl; dr: Để trả lời câu hỏi cụ thể của bạn, -g3 "bao gồm thông tin bổ sung như định nghĩa vĩ mô Một số bộ dò lỗi hỗ trợ mở rộng vĩ mô khi bạn sử dụng -g3.", Trong khi -g không.

Câu trả lời rộng hơn là gcc hỗ trợ bốn cấp độ thông tin gỡ lỗi, từ -g0 (thông tin gỡ lỗi bị vô hiệu hóa) thông qua -g3 (thông tin gỡ lỗi tối đa).

Chỉ định -g tương đương với -g2. Thật kỳ lạ, các gcc docs nói ít về những thông tin -g/-g2 bao gồm hoặc loại trừ.

Yêu cầu thông tin gỡ lỗi và cũng sử dụng cấp để chỉ định lượng thông tin. Mức mặc định là 2. Mức 0 không tạo ra thông tin gỡ lỗi nào cả. Do đó, -g0 phủ nhận -g.

Cấp 1 tạo ra thông tin tối thiểu, đủ để tạo backtrac trong các phần của chương trình mà bạn không định gỡ lỗi. Điều này bao gồm các mô tả về các hàm và các biến bên ngoài, và các bảng số dòng, nhưng không có thông tin về các biến cục bộ.

Cấp 3 bao gồm thông tin bổ sung, chẳng hạn như tất cả các định nghĩa macro có trong chương trình. Một số trình gỡ rối hỗ trợ mở rộng macro khi bạn sử dụng -g3.

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