我正在运行Ubuntu 16.04
版本gdb
。7.11.1-0ubuntu1~16.5
当我升级g++
到g++-6.4
(Ubuntu 6.4.0-17ubuntu1~16.04
)时,gdb 开始给出如下 python 错误:
Python Exception <class 'TypeError'> expected string or bytes-like object:
Error while executing Python code.
每当我在调试过程中尝试打印类或 STL 对象时。我确定仅gdb-8
支持g++-6.4
,所以我尝试gdb-8.1
根据http://www.linuxfromscratch.org/blfs/view/cvs/general/gdb.html,但gdb-8.1
需要python 2.7.15
,并且仅安装gdb-8.1
而不升级python(安装的版本是2.7.12
)并不能解决打印问题。
按照接受的答案如何在 Ubuntu 上安装最新的 Python 2.7.X 或 3.X?python 2.7.15
,我尝试从ppa安装deadsnakes
。但奇怪的是,python 2.7.xx
甚至没有在 ppa 页面上列出(https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa),尽管2.3, 2.4, 2.5, 2.6
都是可用的。然后,我尝试根据以下说明手动构建它:http://www.linuxfromscratch.org/blfs/view/svn/general/python2.html,但事实证明python 2.7.15
安装在单独的位置(/usr/local/bin
等)并且不会替换python 2.7.12
。因此 gdb 打印错误仍然存在。
有没有办法完全替换已安装的python 2.7.12
?即使我可以使用正确的 python 二进制文件,我也必须将 dev 文件的库位置更改为新版本的位置,并且可能gdb-8.1
针对这些 python-dev 文件进行重建。否则,我会看到以下错误:
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
当我启动时gdb
。如果没有任何帮助,我可能必须升级(这不是我所希望的)到Ubuntu-18.04
随和附带的版本python 2.7.15rc
,gdb-7
尽管gdb-8
可以从存储库中获取实验版本。
与此类似的问题没有那么具体,也没有帮助我解决问题。