gdb 段错误 core 文件定位:
注意:源代码编译的时候要加-g选项生成调试信息
1,查看core文件的大小限制: ulimit -c //如果返回值为0,则表示core文件被禁用;如果返回值为unlimited,则表示core文件大小不受限制 ulimit -a命令查看所有资源限制的详细信息
2, 将其设置为无限制: ulimit -c unlimited
3, core 文件路径: cat /proc/sys/kernel/core_pattern
4, 改变core 文件路径: echo /tmp/core-%e-%s-%u-%g-%p-%t > /proc/sys/kernel/core_pattern
注:> 用于将输出重定向到文件;
< 用于将文件内容作为输入;
>> 用于将输出追加到文件末尾;
2> 用于将错误输出重定向到文件;
2>&1 用于将标准错误输出合并到标准输出
5,运行core 文件:gdb <可执行文件路径> <core文件路径> gdb core-a.out-11-0-0-2215-1706064035
6,bt
gdb 调试段错误:
注意:源代码编译的时候要加-g选项生成调试信息
启动程序和调试会话:
gdb <可执行文件>:启动 GDB 并加载可执行文件。
gdb --args <可执行文件> <参数>:启动 GDB 并将参数传递给可执行文件。
设置断点:
break <函数名>:在指定函数的开头设置断点。
break <行号>:在指定行号设置断点。
break <文件名>:<行号>:在指定文件的指定行号设置断点。
break <文件名>:<函数名>:在指定文件的指定函数开头设置断点。
运行程序:
run 或 r:运行程序。
run <参数>:运行程序并传递参数。
continue 或 c:从当前位置继续执行程序。
next 或 n:执行下一行代码,但不进入函数内部。
step 或 s:执行下一行代码,并进入函数内部。
查看变量和堆栈:
print <变量名>:打印变量的值。
info locals:显示当前函数的局部变量。
backtrace 或 bt:显示当前的函数调用堆栈。
frame <帧号>:切换到指定的堆栈帧。
up 和 down:在堆栈帧之间上下导航。
查看内存:
x/<格式> <地址>:以指定的格式查看内存内容。例如,x/x 0x1234 显示十六进制格式的内存内容。
调试信息显示:
list 或 l:显示当前位置周围的源代码。
info breakpoints:显示已设置的断点信息。
info threads:显示当前线程信息。
info registers:显示寄存器的值。
修改程序状态:
set <变量名> = <值>:修改变量的值。
return <表达式>:在当前函数中返回指定的表达式结果。
终止调试会话:
quit 或 q:退出 GDB。
注:很多时候也返回不了堆栈信息,就需要加打印手动缩小范围,重点关注指针,数组等地址操作