RongersLY 93cecd7544 BIG MERGE!!!
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
2025-04-04 17:35:35 +08:00

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] # 调试运行中的程序