centos升级gdb支持pretty-printer
起因:公司centos自带的gdb-7.6.1不具备pretty-printer功能,故升级到gdb-8.1同时支持pretty-printer方便调试c++代码,下面是踩坑过程。
pretty-printer说明
pretty-printer可以让gdb调试的时候,以python的风格显示STL,极大的方便调试,举个例子,代码包含vector和string时,gdb没有开启pretty-printer进行调试,此时变量窗口显示的是内存地址
开启pretty-printer进行调试,容器就像数组一样,里面内容一清二楚,string也直接显示内容。
遗憾的是,pretty-printer功能需要在编译GDB时手动开启,好了,开始操作。
升级GDB
卸载自带GDB
sudo yum remove -y gdb
确保安装了texinfo
sudo yum install -y texinfo
下载GDB-8.1源码,高版本可能有问题。
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gdb/gdb-8.1.tar.gz --no-check-certificate
解压,编译安装GDB-8.1
cd gdb-8.1
./configure --with-python=yes
make -j16
sudo make install
如果编译的时候报python is missing or unusable错误,或者想自己指定python版本,需要显示指定python路径
./configure --with-python='/usr/bin/python2.7'
配置.gdbinit
首先查看gdb是否正确安装,输入gdb -config
,有–with-python说明安装成功
创建.gdbinit文件,每次启动gdb都会自动运行这个文件
touch ~/.gdbinit
输入下面内容
set print pretty on
set print object on
set print static-members on
set print demangle on
set print sevenbit-strings off
python
import sys
sys.path.insert(0, '/usr/share/gcc-4.8.2/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end
最后一步,查看是否配置成功,启动gdb,开启enable pretty-printer,如下图,显示xxx of xxx printers enabled
,只要xxx
不等于1,就说明升级成功!
常见错误:
- 输入
enable pretty-printer
后显示1 of 1 printers enabled
,说明pretty-printer开启失败,很可能是没有配置gdbinit导致 - 切记提前安装texinfo
- .gdbinit 中的 sys.path.insert(0, ‘/usr/share/gcc-4.8.2/python’) 这一句,路径改成自己的,一般是’/usr/share/gcc-4.8/python’,切记不要写成/usr/bin/python,这两个不一样
vscode调试开启pretty-printer
输入ctrl+shift+p,输入debug,选择
自动生成launch.json,补上下面内容(如果已经存在就可以了)
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
结束语
其实非常简单,步骤也不多,但是每个博客踩的坑也不一样,也许有的人不需要这么完整的步骤就能成功,下面列了参考文章。