Estou executando Ubuntu 16.04
com gdb
a versão 7.11.1-0ubuntu1~16.5
. Quando atualizei g++
para g++-6.4
( Ubuntu 6.4.0-17ubuntu1~16.04
), o gdb começou a apresentar erros de python como:
Python Exception <class 'TypeError'> expected string or bytes-like object:
Error while executing Python code.
sempre que tento imprimir uma classe ou objeto STL durante a depuração. Eu determinei que apenas gdb-8
suporta g++-6.4
, então tentei construir gdb-8.1
a partir das instruções emhttp://www.linuxfromscratch.org/blfs/view/cvs/general/gdb.html, mas gdb-8.1
requer python 2.7.15
, e apenas instalar gdb-8.1
sem atualizar o python (a versão instalada é 2.7.12
) não resolveu os problemas de impressão.
Seguindo a resposta aceita emComo instalo o Python 2.7.X ou 3.X mais recente no Ubuntu?, tentei instalar python 2.7.15
a partir do deadsnakes
ppa. Mas, misteriosamente, python 2.7.xx
nem está listado na página do ppa (https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa), embora 2.3, 2.4, 2.5, 2.6
estejam todos disponíveis. Então, tentei construí-lo manualmente com base nas instruções emhttp://www.linuxfromscratch.org/blfs/view/svn/general/python2.html, mas acontece que ele python 2.7.15
é instalado em um local separado ( /usr/local/bin
etc.) e não substitui o python 2.7.12
. Portanto, os erros de impressão do gdb ainda estão presentes.
Existe uma maneira de substituir completamente o instalado python 2.7.12
? Mesmo que eu possa usar o arquivo binário python correto, terei que alterar o local da biblioteca dos arquivos dev para o da nova versão e posso ser reconstruído gdb-8.1
com base nesses arquivos python-dev. Porque caso contrário, vejo erros como:
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
quando eu começo gdb
. Se nada ajudar, talvez eu precise atualizar (o que não é desejável) para Ubuntu-18.04
o qual vem com python 2.7.15rc
e gdb-7
, embora gdb-8
a versão experimental esteja disponível nos repositórios.
Perguntas semelhantes a esta não foram tão específicas e não me ajudaram a resolver o problema.