启动GDB
//直接使用GDB调试程序
gdb a.out
//加载core文件进行调试
gdb a.out core
//指定PID进行调试
gdb a.out $pid
或
gdb -p $pid 使用-p参数可以省略程序文件名
//不显示gdb简介
gdb --silent / gdb -q ( -- quiet)
//显示帮助
gdb -h (-help)
选择文件启动
-symbols file
-s file 从 file获取符号表
-exec file
-e file 使用file作为可执行文件,结合core文件分析数据
-se file 从file中读取符号表,并将file作为可执行文件
-core file
-c file 使用file作为用于检查的core dump文件
-pid number
-p number 指定进程号
-command file
-x file 执行文件文件中的命令,和直接输入原命令效果相同
-directory directory
-d directory 指定文件夹用于搜索源文件或者脚本文件
选择GDB启动模式
GDB有多种可选启动模式,例如:批处理模式,安静模式等
-nx
-n 不执行任何从初始化文件中找到的命令,按照先后顺序,共有3种初始化文件在GDB 初始化的时候会依次加载
‘system.gdbinit’
这个整个系统的初始化文件,具体位置由T --with-system-gdbinit 参数指定,这个文件在GDB启动阶段,执行命令行选项之前首个加载的文件。
‘~/.gdbinit’
这个是你home目录下的初始化文件,在‘system.gdbinit’之后,命令行选项执行之前加载
‘./.gdbinit’
这个是当前目录下的初始化文件,它最后加载,在除了 -x -ex命令执行之后加载, -x -ex 选择最后执行,在/.gdbinit’ 加载完成之后
-nh ‘不执行‘~/.gdbinit’初始化文件中的命令
-quiet
-silent
-q 这些选择用于屏蔽GDB的简介以及版权等信息
-batch 批处理模式,当执行完使用-x命令指定的文件中的命令后,返回0
-batch-silent 不显示版权信息的批处理模式
-cd directory
指定gdb的工作目录
–args
更改命令行的解释,以便将可执行文件后面的参数作为命令行参数传递给下级。
GDB的启动过程
(1) 按照指定的命令设置命令解释器;
(2) 如果创建GDB会话时, 使用–with-system-gdbinit 选项,则读取系统初始化文件‘system.gdbinit’,然后执行那个文件中所有的名利
(3) 读取home目录下的初始化文件‘~/.gdbinit’,执行其中的所有命令;
(4)顺序执行’-ix’, '-iex’参数指定文件和命令,使用这种方式,可能在GDB初始化文件执行之前,应用我们的配置
(5) 执行命令行参数和操作
(6)如果‘set auto-load local-gdbinit’ 这个选项开启,则读取当前目录下的初始化文件‘./.gdbinit’。只有当前目录和home目录不一致时,这一步骤才会执行。
(7) 如果命令行指定了可执行程序文件、或某个进程ID、core文件等,GDB会自动加载程序对应的脚本或者对应的共享库.如果想禁用自动加载功能,可以*$ gdb -iex “set auto-load python-scripts off” myprogram*
(8) 执行以 ‘-x’或者‘-ex’指定的命令或者命令文件
(9) 从历史文件中读取命令的历史纪录
退出GDB
quit [expression]
q
Ctrl + d
detach //用于释放attach的进程或者设备
Shell 命令
在GDB调试模式下,可以使用Shell命令,命令的格式:
shell command-string
!command-string
启动标准shell执行command-string。需要注意的是‘!’ 和‘command-string‘之间没有空格,
GDB模式下,还可以使用管道操作,将一个命令的执行结果传递给其他命令作为输入
pipe [command] | shell_command
| [command] | shell_command
pipe -d delim command delim shell_command
| -d delim command delim shell_command
Log输出
GDB还支持Log输出,相关的命令如下:
set logging on
开启日志功能
set logging off
关闭日志功能
set logging file file
改变GDB log的名称,默认为 ‘gdb.txt’.
set logging overwrite [on|off]
是否覆盖原有内容,默认追加到文件尾
set logging redirect [on|off]
是否开启输出重定向,默认输出到终端和Log文件,如果开启,则只输出到文件
set logging debugredirect [on|off]
是否开启debug输出重定向,默认输出到终端和Log文件,如果开启,则只输出到文件.
show logging
显示当前日志的相关设置