命令
- gdb -p pid(pid可通过top命令查到)
- b 函数名(通过函数名加断点)
- b xxx 行号(通过行号加断点)
- c (continue,断点后继续运行)
- p 对象名(查看对象或数据结构参数)
- gdb xxx.exe core.yyy (查看堆栈)
- gdb 查看内存:格式: x /nfu
- gdb启动服务:gdb --args xx.exe [-option]
- set args 可指定运行时参数。(如:set args 10 20 30 40 50)
- show args 命令可以查看设置好的运行参数。
gdb查看内存
-
格式: x /nfu
-
说明
x 是 examine 的缩写
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。u表示一个地址单元的长度
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节
堆栈
- thread apply all bt
锁定当前线程
- (锁定当前线程):set scheduler-locking off|on|step
- (忽略信号):handle SIGSEGV nostop noprint pass
打印所有元素
- set print element 0
查看栈是否溢出(coredump)
- gdb xx.core 打印出死机的堆栈信息 执行 maintenance info sections (gdb进程时使用info proc mapping)列出core中栈的信息
- 在线程执行开始的地方(这里堆栈靠上的位置,比如f0、f1可能已经出现越界,找线程执行开始的地方)执行 info reg 找到寄存器地址 64位的是rsp 32位的是esp
- 根据寄存器地址找到对应的栈段,后减前即为线程对应的栈可用大小,在疑似越界的地方info reg查看寄存器地址可看出是否有越界