2015-06-25 10 views
18

sto ottenendo questo errore quando si avvia un programma in gdb:Ubuntu 14.04, gcc 4.8.4: gdb abbastanza la stampa non funziona a causa del problema di 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 alzato questo bug report: http://osdir.com/ml/debian-gcc/2014-02/msg00061.html Questo elenco di segnalazioni di bug utilizza il comando python print sys.path nel prompt di gdb. Tuttavia, quando cerco di usare qualsiasi python al prompt di gdb, questo accade:

(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. 

sto usando Ubuntu 14.04 LTS, pertinenti informazioni sulla versione:

$ 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 

Chiaramente, qualcosa nella mia configurazione è rotto. Python, gdb o qualcos'altro?

+1

Ubuntu 14.04 crea gdb con python 3, quindi 'print' è ora una funzione; usa '(gdb) python print (sys.path)' –

+1

Grazie, questo risponde a questa domanda. Tuttavia, rimane l'errore originale "ImportError: nessun modulo chiamato 'libstdcxx'". Questo significa che questo script deve essere convertito in python 3? – Philipp

+11

Lo script in 'libstdC++. So.6.0.19-gdb.py' dovrebbe essere risolto come da quel messaggio di posta elettronica, ed eventualmente portato su python 3 (non l'ho ancora guardato molto da vicino). Ma se il tuo target è compilato con la versione di sistema di gcc (cioè non stai cross-compilando né usi una versione di gcc diversa da quella fornita con il sistema), puoi semplicemente fare '(gdb) python sys.path .Append ("/ usr/share/gcc-4.8/python") '; quindi non importa che lo script 'libstdC++. so.6.0.19-gdb.py' aggiunga una directory inesistente al percorso. –

risposta

12

Sto postando questo come risposta in modo che sia più facile per gli altri trovarlo. I commenti di Mark Plotnick e di webbertiger sono la vera risposta.

In sintesi, ecco cosa ha funzionato per me:

  • creato un file ~/.gdbinit
  • Aggiunto python sys.path.append("/usr/share/gcc-4.8/python"); a quel file

Sto utilizzando Eclipse CDT così ho controllato che questo file viene utilizzato in finestra> preferenze> GDB> file di comando GDB.

Problemi correlati