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,就说明升级成功!
在这里插入图片描述

常见错误:

  1. 输入enable pretty-printer后显示1 of 1 printers enabled,说明pretty-printer开启失败,很可能是没有配置gdbinit导致
  2. 切记提前安装texinfo
  3. .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
                }
            ],

结束语

其实非常简单,步骤也不多,但是每个博客踩的坑也不一样,也许有的人不需要这么完整的步骤就能成功,下面列了参考文章。

参考博客

  1. Centos7 [安装/升级] GDB
  2. centos 编译gdb发生错误 missing: line 81: makeinfo: command not found
  3. gdb配置打印STL容器脚本pretty printer
  4. GDB的Pretty Printer功能
  5. 01_gdb容器可视化概论
  6. 02_gdb_pretty_printer加载原理

猜你喜欢

转载自blog.csdn.net/baoxin1100/article/details/127432625