注意core文件需要结合源码一起查看
这里的方法是在设备端产生CORE文件之后,在PC端分析CORE文件的堆栈信息
1:core文件设置
设备端可能默认不会产生core文件,需要设置一下
# 设置core文件在 /tmp 目录下
ulimit -c unlimited && echo '/tmp/%e-%s.core' >/proc/sys/kernel/core_pattern
2: 程序增加一个段错误函数
static void TestFault()
{
int *ptr = NULL;
ptr = 100;
memset((void *)ptr,0,100);
return 0;
}
// 初始化时候同步数据
Int32 InitParamStart()
{
TestFault();
}
3:运行程序产生core文件
注意查看 Segmentation fault (core dumped) 是否有core文件; 如果没有core文件的话,则说明设置不成功
4:core文件分析
注意这里一定要使用程序编译时候使用gcc编译工具链的gdb可执行程序;不能用windows的gdb工具
其它的一些指令,参考普通的gdb
# 指定ec200a的gdb文件运行core文件
/home/ec200a/ec200a_linux/build_dir/toolchain-arm_cortex-a7+neon-vfpv4_gcc-8.4.0_musl_eabi/gdb-10.1/gdb/gdb pmu_service
# core-file 加载 core 文件
core-file pmu_service-11.core
# bt或where 查看堆栈信息
如果是库里面调用出错找不到源码的话,可能就会报 ??