调试备忘录

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) 比如全局函数

        

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值