段错误:产生核心转储文件(core dump),也称吐核。进程异常终止时,把进程的内存信息转存到文件中,出现段错误说明内存越界访问。
Linux默认情况会忽略核心转储文件,需要手动设置。
ulimit -c unulimited #获取核心转储文件
ulimit -c $((1024*1024*1024)) #获取小于1GB的核心转储文件
SIGQUIT信号会异常终止程序并产生核心转储文件,终端输入 Ctrl + \ 可以产生此信号。
gdb ./a.out core.1234 #此命令可直接查看段错误在程序中的位置。
gcc -g -Wall -O0 #生成可调试代码,生成所有警告信息,不进行优化。
启动:
gdb a.out [core | PID]
加断点:
{break | b} [文件名:]{函数名 | 行号} [if i == 100]
运行:
{r | run} 直接运行,直到遇到断点停止
start 从main开始运行,会自动停留在main处
显示栈贞:
{bt | backtrace | i s | info stack | where}
显示变量:
{p | print} i
显示寄存器:
{info registers | i reg | i r}
单步执行:
{n | next}
继续执行:
{c | continue} [n]
当带有参数 n 时, 会 忽略 n 此 断点
监视点:
watch i #监视变量值被修改
awatch i #监视变量被访问 或 值被修改
rwatch i #监视变量被访问
删除断点:
{delete | d} 断点号
改变变量的值:
set variable i=100
生成内核转储文件:
generate-core-file
调试正在运行的进程:
gdb a.out PID
gdb
attach PID