2012-06-11 36 views
11

Chỉ cần đưa ra một số ngữ cảnh, tôi đang nói về việc biên dịch mã C++ bằng g ++ tại đây.g ++ - đang sử dụng cờ "-g" để sản xuất xây dựng ý tưởng hay không?

Tôi có thể thấy cách bao gồm cờ -g cho bản dựng sản xuất sẽ thuận tiện cho việc bảo trì: chương trình sẽ dễ dàng hơn để gỡ lỗi nếu nó gặp sự cố bất ngờ.

Câu hỏi của tôi ở đây là, có bao gồm cờ -g ảnh hưởng đến tệp thực thi đầu ra theo bất kỳ cách nào khác ngoài việc tăng kích thước của nó không? Có thể bằng cách nào đó làm cho mã chậm hơn (ví dụ: bằng cách tắt một số tối ưu hóa)?

Từ những gì tôi hiểu, không nên (tài liệu chỉ đề cập đến việc bao gồm các biểu tượng gỡ lỗi), nhưng tôi không chắc chắn.

Trả lời

13

Cờ -g không ảnh hưởng đến việc tạo mã, chỉ có bảng biểu tượng và siêu dữ liệu gỡ lỗi được thay đổi. Những người không sống trong phần mã thực thi, do đó, họ thậm chí sẽ không ảnh hưởng đến hiệu suất khi mã được chạy bên ngoài trình gỡ lỗi hte.

4

Tôi nhớ đọc rằng tối ưu hóa nhất định được tắt với các biểu tượng debug: How Does The Debugging Option -g Change the Binary Executable?

Googling cũng cho thấy nhiều bài viết liên quan đến chủ đề này.

Tôi không nghĩ điều đó thực sự sẽ ảnh hưởng đến bạn trừ khi mã của bạn rất nhạy cảm với hiệu suất; và, ngoài ra, tôi không biết bất kỳ nhược điểm nào trên đỉnh đầu của tôi (ngoài các tệp nhị phân lớn hơn).

+2

Khi tôi đọc các tài liệu này, chỉ các trình biên dịch khác với gcc có tối ưu hóa bị ảnh hưởng bởi -g. Kinh nghiệm của tôi là cho gcc nó đi theo một hướng khác: những gì bạn có thể thấy và làm trong trình gỡ rối bị ảnh hưởng bởi sự tối ưu hóa - đôi khi nghiêm trọng. Tất nhiên đây là những gì bạn mong đợi từ tối ưu hóa tích cực: bạn không thể gỡ lỗi những gì không có ở đó. – Gene

+0

@Gene: Ồ, tôi thấy ... thú vị, cảm ơn vì đã chỉ ra. Vì vậy, có vẻ như tôi là người đã sai về GCC rồi! – Mehrdad

0

Câu hỏi của tôi ở đây là, có bao gồm cờ -g ảnh hưởng đến tệp thực thi theo bất kỳ cách nào khác ngoài việc tăng kích thước của nó không?

Không, nó là hoàn toàn có thể tạo ra mã nhị phân tối ưu hóa với gỡ lỗi thông tin, mà không ảnh hưởng đến các mã thông thường trong bất kỳ cách nào (mặc dù đó thông tin có thể ít hữu ích, vì các biến không cần phải tồn tại vào những thời điểm, chức năng nội tuyến khó khăn hơn để gỡ lỗi, vv)

Bản phân phối Debian xây dựng các gói có thông tin gỡ lỗi, được gỡ bỏ sau này (đôi khi được chia thành "gói gỡ lỗi").

Lưu ý rằng việc tăng kích thước có thể khá lớn.

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