1. Segmentation Fault排查
段错误(Segmentation Fault)是一种常见的程序错误,通常在访问无效的内存地址时发生。如内存访问错误(访问野指针,操控空指针,数组越界),动态内存分配问题(内存泄漏,重复释放,访问已释放内存),栈溢出等
可以使用gdb命令生成对应的core文件排查报错位置一步步修改。
/* 1、 核心转储文件生成*/
gcc main.c -g -o main //带 -g ,可以使用gdb 调试
./main // 运行文件,会在当前目录产生core文件。 为core dump 核心转储文件
/* 2、 gdb 调试器 加载core文件*/
(gdb) ./main ./core
/* 3、使用bt 或 where 查看调用堆栈,定位崩溃位置*/
(gdb) bt
/* 4、可以使用其他命令查看变量状态*/
(gdb) up 或f [number]
/* 5、显示指定变量的当前值*/
(gdb) print [variable_name] // 缩写 p
/*可以调试程序*/
(gdb) break/b 2 //第二行打断点 缩写
(gdb) run // 运行
(gdb) list // 查看源码
(gdb) continue/c //跳到下个断点
(gdb) delete 2 // 删除断点
(gdb) next/n // 单步跟踪,不进入函数
(gdb) step/s // 单步跟踪,进入函数
(gdb) until // 跳出循环
(gdb) quit/q // 退出
(gdb) finish // 运行程序至解释
2. linux无法生成调试core文件
运行程序时出现 :段错误(核心已转储)Segmentation Fault,却没有生成core文件.
首先查看 ulimit -a 查看core file size, 如果为0则需要通过命令设置来设置大小(临时),可通过ulimit -c size 设置大小。或者 ulimit -c unlimited.
如果还没有生成core文件,运行以下命令再重新运行程序
sudo bash -c "echo core > /proc/sys/kernel/core_pattern "
3. 单板开不了机:
因为非法关机等原因,磁盘损坏。
使用 fsck -y /dev/sda1 修复磁盘