GDB调试
gdb
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。
gdb调试命令
break/b *0x地址:下断点,*表示为指针。
delete/d:删除断点,指明断点编号或删除所有。
info b:查看断点个数
x /nfx 0x内存地址:n表示要显示的内存单元的个数,f表示显示方式(可取x,按十六进制格式显示变量)。
set: 修改值 set {int}0x待修改地址 = 值:{int}为修改值的类型,也是修改的内存空间大小;修改寄存器,如set $rip=0x401233;修改变量,set var b=xx
disassemble/disas 函数名/起始地址[,结束地址]:反汇编一部分代码
next/n: 单步步过
step/s: 单步步入
finsih/f:运行完当前函数,返回到函数调用点
run/r :运行(如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处)。
continue/c:继续运行
quit/q:结束
调试子进程
gdb调试多进程时默认追踪父进程。切换到默认开始调试子进程的命令:set follow-fork-mode child。这个命令是要在调试前使用。
同时调试父子进程
要同时调试父进程和子进程,可以使用“set detach-on-fork off”(默认detach-on-fork是on)命令,这样gdb就能同时调试父子进程,并且在调试一个进程时,另外一个进程处于挂起状态。默认情况,是会将子进程分离出去,父进程会变为init,该子进程独立运行,不受gdb控制。
让父子进程都同时运行,可以使用“set schedule-multiple on”(默认schedule-multiple是off)命令。
gdb每个调试的进程都会以inferior来记录,所以我们可以通过“info inferiors”来查看当前调试器调试的进程有哪些,还可以在调试过程中通过“inferior inferior号”来切换。
调试已经运行的程序
方法一:gdb program pid

方法二:先启动gdb,后attach pid


浙公网安备 33010602011771号