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

attach到进程

对于已经在运行的程序,可以使用指令attach进行附着程序调试,格式 attach
程序运行后,查阅PID,然后gdb启动:

[root@localhost gdbTest]# ps
   PID TTY          TIME CMD
  8194 pts/0    00:00:00 bash
  9108 pts/0    00:00:00 su
  9111 pts/0    00:00:00 bash
  9208 pts/0    00:00:02 a.out
  9209 pts/0    00:00:00 ps
[root@localhost gdbTest]# gdb attach 9208
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
attach: No such file or directory.
Attaching to process 9208
Reading symbols from /home/freud/myPC/gdbTest/a.out...done.
Reading symbols from /lib64/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
binarySearch (array=0x7ffdaa7ceff0, len=11, key=78) at main.c:9
9		while(1);

注意:
也可以先启动gdb,然后进入gdb后使用attach指令;
gdb只能attach有权限调试的应用,attach失败可能与权限有关。

条件断点

  1. 格式:break 断点 if 条件
    此指令将测试指定的条件,如果条件为真,则暂停运行。
  2. 格式:condition 断点编号
    此指令删除指定编号断点的触发条件。
  3. 格式:condition 断点编号 条件
    此执行给断点添加触发条件

反复执行

下面的指令,分别执行指定次数的响应命令:

  1. ignore 断点编号 次数
  2. continue 次数
  3. step 次数
  4. stepi 次数
  5. next 次数
  6. finish:执行完当前函数后暂停
  7. until: 执行完当前代码块后暂停(常用于跳出循环)
  8. nexti 次数

删除/禁用断点

  1. clear:删除已定义断点
  2. disable:禁用断点
  3. enable:重新启用断点

格式:

clear
clear 函数名
clear 行号
clear 文件名:行号
clear 文件名:函数名
delete 断点编号
disable 断点号
disable display 显示编号
disable mem 内存区域

断点命令

格式:
commands 断点编号
命令

end
比如:

(gdb) b 19
Breakpoint 1 at 0x400592: file main.c, line 19.
(gdb) commands 1
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".

>p left
>end
>(gdb) r
>Starting program: /home/freud/myPC/gdbTest/./a.out 

Breakpoint 1, binarySearch (array=0x7fffffffe3c0, len=11, key=78) at main.c:19
19			left++;
$1 = 1

条件断点 结合 断点命令
就可以在某个条件下暂停程序,并执行复杂的显示或者操作。

总结命令的简写与说明

backtrace bt/where 显示backtrace
break 设置断点
continue c/cont 继续运行
delete d 删除断点
finish 允许到函数结束
info breakpoints 显示断点信息
next n 执行下一行
print p 显示表达式的值
run r 运行程序
step s 一次执行一行,包括函数内部
x 显示内存内容
until u 执行到指定行

directory dir 插入目录
disable dis 禁用断点
down do 在当前调用栈中选择需要显示的栈帧
edit e 编辑文件或函数
frame f 选择要显示的栈帧
fonward-earch fo 向前搜索
generate-core-file gcore 生成内核转储
help h 显示帮助
info i 显示信息
list l 显示函数
nexti ni 执行下一行汇编
print-object po 显示目标信息
sharedlibrary share 加载共享库的符号
stepi si 执行下一行汇编

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