2015-06-25 20 views
18

tôi nhận được lỗi này khi tung ra một chương trình trong gdb:Ubuntu 14.04, gcc 4.8.4: in ấn khá gdb không hoạt động vì vấn đề Python

Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 
Traceback (most recent call last): 
File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module> 
from libstdcxx.v6.printers import register_libstdcxx_printers 
ImportError: No module named 'libstdcxx' 

Google bật lên báo cáo lỗi này: http://osdir.com/ml/debian-gcc/2014-02/msg00061.html Danh sách báo cáo lỗi này sử dụng lệnh python print sys.path trên lời nhắc gdb. Tuy nhiên, khi tôi cố gắng sử dụng bất kỳ python trên dấu nhắc gdb, điều này xảy ra:

(gdb) python print sys.path 
File "<string>", line 1 
print sys.path 
     ^
SyntaxError: invalid syntax 
Error while executing Python code. 

(gdb) python print "Hello" 
File "<string>", line 1 
print "HellO" 
      ^
SyntaxError: invalid syntax 
Error while executing Python code. 

Tôi đang sử dụng Ubuntu 14.04 LTS, thông tin phiên bản có liên quan:

$ gcc --version 
gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 
$ gdb --version 
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 
$ python --version 
Python 2.7.6 

Rõ ràng, một cái gì đó trong thiết lập của tôi là bị hỏng. Nó là python, gdb, hay cái gì khác?

+1

Ubuntu 14.04 xây dựng gdb với python 3, do đó, 'in' bây giờ là một hàm; sử dụng in python (gdb) (sys.path) ' –

+1

Cảm ơn, câu trả lời cho câu hỏi đó. Tuy nhiên, lỗi ban đầu "ImportError: Không có mô-đun có tên 'libstdcxx'" vẫn còn. Điều đó có nghĩa là kịch bản này cần phải được chuyển đổi sang python 3? – Philipp

+11

Tập lệnh trong 'libstdC++. So.6.0.19-gdb.py' phải được cố định theo thông điệp email đó và có thể được chuyển đến python 3 (Tôi chưa xem xét nó thật kỹ). Nhưng nếu mục tiêu của bạn được biên dịch với phiên bản hệ thống của gcc (nghĩa là bạn không biên dịch chéo hay sử dụng phiên bản gcc khác với phiên bản đi kèm với hệ thống), bạn chỉ có thể làm '(gdb) python sys.path .append ("/ usr/share/gcc-4.8/python") '; thì kịch bản 'libstdC++. so.6.0.19-gdb.py' sẽ thêm một thư mục không tồn tại vào đường dẫn. –

Trả lời

12

Tôi đăng bài này làm câu trả lời để những người khác dễ dàng tìm thấy câu trả lời hơn. Các bình luận từ Mark Plotnick và webbertiger là câu trả lời thực tế.

Nói tóm lại, đây là những gì làm việc cho tôi:

  • Tạo một file ~/.gdbinit
  • Added python sys.path.append("/usr/share/gcc-4.8/python"); đến tập tin đó

Tôi đang sử dụng Eclipse CDT vì vậy tôi đã kiểm tra tệp này đang được sử dụng trong cửa sổ> tùy chọn> GDB> tệp lệnh GDB.

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