读书笔记《Debug Hacks --调试技术与工具》(4-GDB调试(三))

历史值

print变量的时候,显示过的值会记录在内部的历史中。
可以通过print $n 访问历史变量,比如下面的例子,p变量后,可以观察前面有 $1, 后续指令中,$1 就是指这个变量:

(gdb) p arrToSearch
$1 = {0, 0, 0, 0, 4195936, 0, 4195440, 0, -6960, 32767, 0}

历史命令

在一个会话中,使用的命令,可以保存起来,用于下一个gdb会话。
以下指令为:
设置指令历史扩展,保存历史文件,保存历史记录,设置命令历史数量:

  1. set history expansion
  2. show history expansion
  3. set history filename XXX
  4. show history filename
  5. set history save
  6. show history save
  7. set history size 2000
  8. show history size

例子:

(gdb) set history expansion
(gdb) show history expansion
History expansion on command input is on.
(gdb) set history filename XXX
(gdb) show history filename
The filename in which to record the command history is "XXX".
(gdb) set history save
(gdb) show history save
Saving of the history record on exit is on.
(gdb) set history size 2000
(gdb) show history size
The size of the command history is 2000.

初始化文件(.gdbinit)

gdb的初始化文件,在启动前,gdb会将其作为命令文件运行。
两个gdb初始化文件:

$HOME/./gdbinit
./.gdbinit

可以通过gdb初始化文件做两个事情:

  1. 增加自定义命令;
  2. 为自定义命令增加help说明。

source读取配置文件

可以通过source命令,读取配置文件。

source <文件名>

显示汇编代码

  1. disas : 默认会显示当前代码暂停处前后的汇编指令

  2. disas 函数名 或者是 指明源码 disas <‘源码.c’>::<函数> : 显示该函数的汇编码(比如:disassemble ‘main.c’::func1)

  3. disas /m : 显示汇编与源码

  4. disas /r : 显示十六进制的原始指令

break *<函数名>

通过在函数名前面加*,可以在函数汇编的入口处让程序暂停下来。

否则会在函数调用处的汇编结束语句暂停。

你可能感兴趣的:(读书笔记,linux相关)