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