
BIG ADD: - docker - archlinux FIX: - vim - c_cpp - string hash - linux /dev/random - thread - STL - linux - command - last OTHERS: - add antenna.md - mirrors - makefile.md
64 lines
1.6 KiB
Markdown
64 lines
1.6 KiB
Markdown
# gdb c/c++ 代码调试工具
|
|
使用 -g 生成调试文件,不可以加 -O 选项
|
|
|
|
## 目录
|
|
- [基础使用](#基础使用)
|
|
- [run](#run)
|
|
- [set](#set)
|
|
- [mem](#mem)
|
|
- [disassemble](#disassemble)
|
|
- [info](#info)
|
|
- [core](#core)
|
|
|
|
## 基础使用
|
|
`l n` 列出源码
|
|
`b n` 在第n行打断点
|
|
`break main if var_name > 10` 满足条件时打断点
|
|
`d n` 删除断点
|
|
`lay next` 切换窗口布局TUI
|
|
`Ctrl-x a` 退出TUI
|
|
`Ctrl-x 1` 恢复单窗口布局
|
|
`Ctrl-x o` 切换窗口焦点
|
|
`ref``Ctrl-L` 刷新布局
|
|
|
|
### run
|
|
`r` 开始运行到第一个断点
|
|
`c` 继续运行到下一个断点
|
|
`s` 步入
|
|
`si` 单步汇编
|
|
`n` 步过
|
|
`ni`
|
|
`q` 退出
|
|
|
|
### set
|
|
`set [argc]` 传入参数
|
|
`set var []` # 修改变量的值
|
|
`set $rsp = 0x7ccc` # 修改寄存器的值
|
|
|
|
### mem
|
|
`p` # 查看特定变量或表达式的值
|
|
`bt` # 查看函数调用栈
|
|
`bt full` # 详细信息
|
|
`x/10gx $rsp` # 查看内存中由$rsp开始的10个八字节数据 g:八字节 x:16进制
|
|
|
|
### disassemble
|
|
`disassemble` # 查看当前函数的汇编,可在后面加函数名看指定汇编
|
|
`x/i $pc` # 检查pc处的汇编
|
|
|
|
### info
|
|
`info locals` # 查看局部变量
|
|
`info registers` # 查看寄存器状态
|
|
`info program` # 查看程序运行信息
|
|
`info break` # 查看断点信息
|
|
`info threads` # 查看所有线程
|
|
|
|
## core
|
|
1. `ulimit -c unlimited` 使挂掉的程序产生core文件
|
|
|
|
2. 修改 `/proc/sys/kernel/core_pattern` 使其在当前目录下生成core文件
|
|
> `sudo echo "./core" > /proc/sys/kernel/core_pattern
|
|
|
|
3. gdb ./a.out core
|
|
|
|
gdb demo -p [pid] # 调试运行中的程序
|