2013-10-02 17 views
9

Tôi đã cài đặt gcc 4.8.1 trên Ubuntu 12.04 (tôi phải thêm ppa để làm điều đó) bây giờ gdb hiển thị thông báo sau:Ứng dụng C++ trên Ubuntu. Sau khi cài đặt gcc 4.8.1 gdb không hoạt động

Không thể tìm thấy chức năng điểm ngắt liên kết động . GDB sẽ không thể gỡ lỗi trình khởi tạo thư viện được chia sẻ và theo dõi mã động được tải một cách rõ ràng. Không được tải biểu tượng thư viện được chia sẻ cho 5 thư viện, ví dụ: /usr/lib/x86_64-linux-gnu/libstdc++.so.6. Sử dụng lệnh "info sharedlibrary" để xem danh sách đầy đủ. Bạn có cần "đặt solib-search-path" hoặc "set sysroot" không?

Tôi đã google và tôi thấy bài viết này để trả lời tốt nhất câu hỏi của tôi: http://www.fayewilliams.com/2013/01/31/gdb-unable-to-find-dynamic-linker-breakpoint-function/

tuy nhiên tôi vẫn không hiểu những gì để thực hiện chính xác. Ai đó có thể giúp. CÁM ƠN!

+1

Hoặc bạn có thể chuyển '-gdwarf-2' vào trình biên dịch để tạo các biểu tượng gỡ lỗi tương thích với GDB 7.4. – legends2k

Trả lời

13

Tôi cũng gặp vấn đề tương tự và có thể giải quyết được vấn đề này.

Tôi đã cài đặt phiên bản "ổn định" cuối cùng của GCC (4.8.1) từ PPA này (https://launchpad.net/~ubuntu-toolchain-r/+archive/test) và mọi thứ đều hoàn hảo cho đến khi tôi phải giải quyết vấn đề gỡ lỗi. Bạn có thể nhận thấy rằng trong PPA này, toolchain không cung cấp một phiên bản cập nhật của GDB để xử lý việc nâng cấp trình biên dịch. Trên thực tế, tôi không tìm thấy bất kỳ PPA nào cung cấp phiên bản GDB mới hơn.

Trong trường hợp của tôi, tôi đã giải quyết tình huống này tải xuống và cài đặt phiên bản GDB ổn định mới nhất (7.6) từ trang web (http://www.sourceware.org/gdb/). Phiên bản GDB này có thể giải quyết các ký hiệu và cung cấp cho tôi tất cả thông tin cần thiết về các tệp nhị phân được tạo bằng Gcc 4.8.1, ngay cả khi tôi đang sử dụng tiêu chuẩn C++ 11 mới (mã được biên dịch với -std = C++ 11 cờ).

Hãy tính đến việc cài đặt phiên bản GDB mới theo cách thủ công sẽ cài đặt theo mặc định, nhị phân trong /usr/local/bin/gdb.

+0

Tôi hiểu, cảm ơn bạn! – vincegata

+0

Bạn có biết cách cài đặt nó thường xuyên/usr/bin không? – vincegata

+0

để cài đặt trong/usr và không phải/usr/local: ./configure --prefix =/usr – vincegata

2

Gdb thường được chuyển bằng toolchain.

Có thể bạn đang sử dụng gdb được chuyển với chuỗi công cụ trước đó. Sử dụng

which gdb 

để khám phá gdb nào bạn đang sử dụng.

Để gỡ lỗi chương trình được biên dịch bằng trình biên dịch mới, bạn phải sử dụng gdb mới, bất kể nó ở đâu.

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