WSL(Linux) 源码编译 gdb-8.1 带 python 支持

前言

系统:Ubuntu 16.4(WSL)
正常都不会需要升级 GDB 的,但如果是对新标准、新特性、新语言有要求的话,那就需要升级 GDB 了。
这次升级 GDB 是为了能够调试 Rust 程序,因为 Windows 下提供 GDB 太老了,而也明确不支持 Rust调试。
最新的 gdb 是 8.2,不过太新怕有 bug,我们上 gdb-8.1。


下载

下载到 D 盘:

eor@DESKTOP-CNB2LNA:/mnt/c/Users/admin$ cd /mnt/d/inbox/
eor@DESKTOP-CNB2LNA:/mnt/d/inbox$ wget http://ftp.gnu.org/gnu/gdb/gdb-8.1.1.tar.gz .

配置、编译、安装

如果不需要用到 Python 调试脚本,可以跳过 python-dev 和去除 -with-python=python3 的标志,因为这可能会导致失败。

带上 python 的开发环境,这是为了调试 Rust 而装的。
第一个是 python2 的,第二个是 python3 的,按需安装:

sudo apt-get install python-dev
sudo apt-get install python3-dev
sudo apt-get install texinfo # 这个必备

解压、配置、编译、安装

eor@DESKTOP-CNB2LNA:/mnt/d/inbox$ tar zxfv gdb-8.1.1.tar.gz
eor@DESKTOP-CNB2LNA:/mnt/d/inbox$ cd gdb-8.1.1/
eor@DESKTOP-CNB2LNA:/mnt/d/inbox/gdb-8.1.1$ ./configure -prefix=/usr/local/gdb -with-python=python3 && make && sudo make install
eor@DESKTOP-CNB2LNA:/mnt/d/inbox/gdb-8.1.1$ make clean

-with-python=python3 这个选项很重要,因为我们要加载 Rust 自带的打印支持,这能让 GDB 更好的显示 Rust 程序信息。而 Rust 提供的打印支持是 Python 版本的,所以我们需要带上 Python。

注意,这里的 python3 是已经安装了的 python3,请确保 python3 和 python3-dev 的存在。

我偷懒的将命令堆到一起,但不建议别人这样做。

耐心等待,可能比较久。

建立链接

由于安装时我们加上了前缀 -prefix=/usr/local/gdb,这将会把软件安装到 /usr/local/gdb 目录下,好处是卸载时只需要删除这个文件夹就可以了。

eor@DESKTOP-CNB2LNA:/mnt/d/inbox/gdb-8.1.1$ /usr/local/gdb/bin/gdb
image.png

建立符号链接来方便的使用他:

sudo ln -s /usr/local/gdb/bin/gdb /usr/local/bin/
sudo ln -s /usr/local/gdb/bin/gcore /usr/local/bin/
sudo ln -s /usr/local/gdb/bin/gdbserver /usr/local/bin/
ls -al /usr/local/bin/
image.png

检查 python 支持

在用户的主目录 ~ 下新建一个 .gdbinit 文件和 python 文件。

cd ~
touch hello.py
touch .gdbinit

hello.py 文件写入:

import gdb
print('Hello gdb, I am python script.')

.gdbinit 文件写入:

source ~/hello.py
image.png

出现这个说明 python 脚本导入成功了。


参考链接

gdb 文档
PythonGdbTutorial
dev-python-gdb-support
用 Python 拓展 GDB(一)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • title: python高级进阶 参考文献 https://pythonguidecn.readthedocs....
    采香行处蹙连钱阅读 2,549评论 1 5
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,238评论 4 16
  • [manjaro ~]# pacman -S pgadmin4 正在解决依赖关系... 正在查找软件包冲突... ...
    Gentoo_df33阅读 2,192评论 1 0
  • 孤身一人荡天涯, 他乡明月几时亲。 自古多情流浪客, 唯有杜康解忧心。
    简白安阅读 364评论 0 1
  • 9月22日 周五 晴 今天可真是不太开心的一天。大清早起床吃饭时,因为小宝哭闹,女儿这饭也吃不安稳,一...
    杨喜钠妈妈阅读 155评论 0 0