gdb

来自百合仙子's Wiki
跳转到导航 跳转到搜索

查看数据

查看指定内存地址

可以使用examine命令(简写是x)来查看内存地址中的值。x 命令的语法如下所示:

x/<n/f/u> <addr>

n、f、u 是可选的参数。(详见 help x

  • n 正整数,显示内容的项数。
  • f 显示的格式。字符串 s;指令 i;十六进制数 x。
  • u 表示从当前地址往后请求的字节数,如果不指定的话,gdb 默认是4字节。u 参数可以用下面的字符来代替,b 表示单字节,h 表示双字节,w 表示四字节,g 表示八字节。当我们指定了字节长度后,gdb 会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

<addr>表示一个内存地址。

n/f/u 三个参数可以一起使用。例如:

命令:x/3xh 0x54320表示,从内存地址 0x54320 读取内容,h 表示以双字节为一个单位,3 表示三个单位,x 表示按十六进制显示。

指定文件或者函数名

使用 file::varfuncname::var 的形式来指定要查看的变量所在的文件或者函数。文件名如有歧义,可以使用单引号引起来。[1]

收到SIGILL信号时的指令

disassemble $rip,+1

设置

源码路径

路径替换:

set substitute-path from to

历史记录

默认不保存历史记录,使用如下命令来保存之:

set history expansion on
set history save on
set history size 2000
set history filename ~/.gdb_history

格式化设置

打印完整的字符串:

set print elements 0
set print repeats 0

技巧

  • 使用Ctrl-x a可对照显示源码(与 cgdb 类似)[2]

文件和环境变量

启动时读取的文件是~/.gdbinit

调试 CPython

使用 python 命令来加载 CPythonTools/gdb/libpython.py 脚本,然后就有 py-bt 等命令可以用了。[3]

远程调试

[4]

被调试方:

$ gdbserver :12345 myprog [args...]

调试方连接:

$ gdb myprog
(gdb) target remote localhost:12345

参见

外部链接

参考资料