Ich verwende Ubuntu 16.04
die gdb
Version 7.11.1-0ubuntu1~16.5
. Als ich g++
auf g++-6.4
( Ubuntu 6.4.0-17ubuntu1~16.04
) aktualisiert habe, begann gdb, Python-Fehler wie die folgenden auszugeben:
Python Exception <class 'TypeError'> expected string or bytes-like object:
Error while executing Python code.
immer wenn ich beim Debuggen versuche, eine Klasse oder ein STL-Objekt zu drucken. Ich habe festgestellt, dass nur gdb-8
unterstützt wird , also habe ich versucht, nach den Anweisungen auf g++-6.4
zu erstellengdb-8.1
http://www.linuxfromscratch.org/blfs/view/cvs/general/gdb.html, gdb-8.1
erfordert aber python 2.7.15
, und die bloße Installation gdb-8.1
ohne Upgrade von Python (die installierte Version ist 2.7.12
) hat die Druckprobleme nicht gelöst.
Nach der akzeptierten Antwort unterWie installiere ich das neueste Python 2.7.X oder 3.X auf Ubuntu?python 2.7.15
, ich habe versucht, vom PPA aus zu installieren deadsnakes
. Aber auf mysteriöse Weise python 2.7.xx
ist es nicht einmal auf der PPA-Seite aufgeführt (https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa), obwohl 2.3, 2.4, 2.5, 2.6
alle verfügbar sind. Dann habe ich versucht, es manuell zu bauen, basierend auf Anweisungen beihttp://www.linuxfromscratch.org/blfs/view/svn/general/python2.html, aber es stellt sich heraus, dass python 2.7.15
an einem separaten Ort (usw.) installiert wird /usr/local/bin
und nicht ersetzt python 2.7.12
. Die GDB-Druckfehler sind also immer noch vorhanden.
Gibt es eine Möglichkeit, die installierte Version vollständig zu ersetzen python 2.7.12
? Selbst wenn ich die richtige Python-Binärdatei verwenden kann, muss ich den Bibliotheksspeicherort für die Entwicklungsdateien auf den der neuen Version ändern und möglicherweise gdb-8.1
anhand dieser Python-Entwicklungsdateien neu erstellen. Denn sonst erhalte ich Fehler wie:
Traceback (most recent call last):
File "/usr/share/gdb/python/gdb/__init__.py", line 144, in auto_load_packages
__import__(modname)
File "/usr/share/gdb/python/gdb/command/pretty_printers.py", line 19, in <module>
import copy
File "/usr/lib/python2.7/copy.py", line 52, in <module>
import weakref
File "/usr/lib/python2.7/weakref.py", line 14, in <module>
from _weakref import (
ImportError: cannot import name _remove_dead_weakref
wenn ich starte gdb
. Wenn nichts hilft, muss ich möglicherweise auf aktualisieren (nicht wünschenswert), Ubuntu-18.04
das mit python 2.7.15rc
und ausgeliefert wird gdb-7
, obwohl gdb-8
in den Repositories eine experimentelle Version verfügbar ist.
Ähnliche Fragen waren nicht so spezifisch und haben mir nicht bei der Lösung des Problems geholfen.