gdb 异步调试

使用如下.gdbinit 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
set target-async 1 
set pagination off
set non-stop on


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 加载脚本条件

  1. 路径完全匹配(核心条件)
    GDB 的自动加载逻辑非常死板,它会根据你的程序链接的 libstdc++.so.6 的真实物理路径来拼接查找路径。
    如果你的程序链接的是 /usr/lib64/libstdc++.so.6,那么 GDB 会尝试在以下位置查找: [auto-load 根目录] + [库的绝对路径] + [-gdb.py 脚本]
    即:/usr/share/gdb/auto-load + /usr/lib64/libstdc++.so.6 + -gdb.py 也就是你找到的:/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6-gdb.py。

  2. 必须开启 safe-path 权限
    即使文件位置对了,GDB 为了安全默认也是不运行它的。你需要给它“授权”。

    1
    set auto-load safe-path /

Check script load status

start gdb:

1
info auto-load python-scripts