file lib.so 查看是否被strip过
addr2line文件的使用
addr2line -e lib.so 0x12323
!clear: 清除屏幕
进程卡死的处理方式
gdb -p [pid] pid是没有退出的进程ID
然后generate-core-file [/path/to/sava/the/core] 生成core文件,拿回来分析
set solib-search-path 共享库路径
set debug-file-directory
一、 info查看信息的使用
info registers 当前寄存器的值
info args 查看当前函数参数的值
info locals 查看当前局部变量的值
info frame 查看当前栈帧的详细信息
info variables 查看程序中变量符号
info functions 查看程序中函数符号
info inferiors (查看当前进程数量)
inferios 1切换到哪个进程
二、info threads(查看当前线程数量)
thread n(切换到哪个线程)
info locals
info registers
print $rbp
三、多进程调试
show follow-fork-mode (查看父进程还是子进程)
eg: Debugger response to a program call of fork or vfork is "parent"
set detach-on-fork [on | off] —设置调试模式
show detach-on-fork
设置为on 调试当前进程时候,其它进程继续执行,off时调试进程被GDB挂起
info inferiors —查看调试的信息
detach inferiors id (使进程脱离GDB调试)
test: set follow-fork-mode child
set detach-on-fork off
catch fork 在fork 打断点
set print pretty on (格式化打印)
ptype /o struct 查看结构体偏移量
二、多线程
info threads (查看切换的线程)
thread id (切换thread id)
三、栈帧分析
info frame (打印当前栈帧的详细信息)
Stack level 0, frame at 0x4002222e60: (栈帧编号0,地址 0x4002222e60)
rip = 0x48e589485590c3c9; saved rip 0x4016b2 (函数的地址为0x48e5xxxx),调用它的地址为(0x4004e9)
called by frame at 0x4002222e90 (当前栈帧的上一级栈帧的地址为0x400x)
Arglist at 0x4002222e50, args: (函数的参数地址和值)
Locals at 0x4002222e50, Previous frame's sp is 0x4002222e60 (函数内部局部变量的存储地址)
Saved registers: (栈帧内部存储的寄存器)
rip at 0x4002222e58
二、nm工具的使用
用于显示可执行文件或共享库中的符号表,输出的结果包括符号的名称、地址、存储类别
符号的名称:函数名、变量名
符号地址: 符号在可执行文件或共享库中的实际地址
存储类别:
T: 符号是一个函数,存储在代码段(.text) 比如全局函数