2012-05-16 38 views
5

tôi sử dụng gdb của apple, phiên bản như saunhắn gdb lạ khi gỡ lỗi chương trình C++

GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 01:19:56 UTC 2009) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "x86_64-apple-darwin". 

tôi không sử dụng Xcode IDE vì đối với nhu cầu của tôi dự án makefile quản lý được thuận tiện hơn, đặc biệt là bởi vì tôi thường cần để biên dịch và chạy các chương trình trên các máy từ xa. Gần đây tôi đã bắt đầu sử dụng các tính năng C++ 11 sau đây (trên g ++ - 4.6 và 4.7 từ macports): di chuyển các hàm tạo, nullptr, auto và decltype. Tôi rencently cần thiết để d3bug mã của tôi, và thông điệp kỳ lạ sau đây xuất hiện thay vì bước vào một chức năng:

Die: DW_TAG_unspecified_type (abbrev = 36, offset = 4315) 
     has children: FALSE 
     attributes: 
       DW_AT_name (DW_FORM_string) string: "decltype(nullptr)" 

từ từ báo này xuất hiện, tất cả các lệnh gdb Dưới đây là trả lời bằng thông điệp kỳ lạ tương tự, vì vậy nó không phải là có thể gỡ lỗi nữa. Có vẻ như một cái gì đó liên quan đến C++ 11. Câu hỏi của tôi là, bạn đã bao giờ gặp phải thông báo này chưa và cách thoát khỏi số của nó?

Cảm ơn trước

Giuliano

+3

Tôi đoán là phiên bản gdb của bạn bị chậm lại - có vẻ như có thông tin [DWARF] (http://wiki.dwarfstd.org/index.php?title=Dwarf_FAQ#What_is_DWARF.3F) mà nó không có Tôi biết. Giải pháp: xây dựng/cài đặt gdb mới hơn. – Flexo

Trả lời

3

Các phiên bản của GDB bạn đang sử dụng (phiên bản của Apple) dường như không hỗ trợ các tính năng mới của trình biên dịch bạn cài đặt từ macports.

Thông báo lỗi báo cáo rằng GDB không hiểu một số thông tin gỡ lỗi mà nó gặp phải trong chương trình. Các thông tin gỡ lỗi nó đã cho thấy rõ ràng là C++ 11 có liên quan.

Giải pháp là nâng cấp lên GDB mới hơn (có thể từ macports nếu có), không sử dụng các tính năng mà GDB không hiểu hoặc chấp nhận rằng phiên bản GDB bạn sẽ không thể hiểu điều này.

+0

Tôi đã cố gắng cài đặt gdb của macport nhiều lần, nhưng nó không bao giờ làm việc cho tôi. Vì tôi đang vội, tôi không muốn thay đổi chương trình. Tôi nghĩ rằng tùy chọn # 3 là một lựa chọn cho thời điểm này. Đã chấp nhận. – Giuliano

6

http://gcc.gnu.org/gcc-4.5/changes.html nói

GCC bây giờ tạo ra thông tin Thư giãn cũng cho epilogues. DWARF debuginfo được tạo ra bởi GCC bây giờ sử dụng nhiều tính năng của DWARF3 hơn trước, và cũng có một số tính năng DWARF4. GDB cũ hơn 7.0 không thể xử lý một trong hai cách này, do đó, để gỡ lỗi các tệp nhị phân hoặc thư viện được tạo ra GCC 4.5 hoặc GDB 7.0 trở lên là cần thiết. Bạn có thể vô hiệu hóa việc sử dụng các tính năng của DWARF4 với các tùy chọn -gdwarf-3 -gstrict-dwarf hoặc sử dụng -gdwarf-2 -gstrict-dwarf để hạn chế GCC chỉ với DWARF2, nhưng thông tin bóc lột thông tin được phát ra vô điều kiện bất cứ khi nào thông tin thư giãn được phát ra.

Nhưng bạn đã biết điều đó, bởi vì mọi người đọc ghi chú phát hành khi họ nâng cấp trình biên dịch của họ, đúng không ?! ;-)

+3

Điều cần biết! Tất nhiên tôi cẩn thận đọc toàn bộ ghi chú phát hành trước khi thực hiện 'sudo cổng cài đặt của tôi bất cứ điều gì'! Bạn nghĩ bạn đang nói chuyện với ai? – Giuliano

+0

Lol ... Tất nhiên mọi người đều biết điều đó! – jww

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