pretty-printer可以让gdb调试的时候,以python的风格显示STL,极大的方便调试,举个例子,代码包含vector和string时,gdb没有开启pretty-printer,调试时变量显示的是内存地址(注意左边,看不懂,哭了)
如果开启了pretty-printer进行调试,容器就像数组一样,里面内容一清二楚,string也直接显示内容,方便多了。
遗憾的是,pretty-printer功能需要在编译安装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路径(看着简单,我搞了好久,有文章说改python环境变量啥的,给我整晕了)
./configure --with-python='/usr/bin/python2.7'
首先查看是否正确安装,输入gdb -config
,有–with-python说明安装成功
创建.gdbinit文件,每次启动gdb都会系统自动运行这个文件(很重要!很多博客写到安装完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,我就是,这里也卡了很久输入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
}
],
其实非常简单,步骤也不多,但是每个博客踩的坑也不一样,也许有的人不需要这么完整的步骤就能成功,导致参考了好多博客才解决这个问题,下面列了参考文章。