arm+linux平台使用gdb/coredump 分析系统日志
Posted liuxd3000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arm+linux平台使用gdb/coredump 分析系统日志相关的知识,希望对你有一定的参考价值。
1.在arm+linux平台上设置环境,使能coredump相关的命令:
使用 ulimit -c命令当前系统coredump的开关状态:
[root@mi:/]# ulimit -c
0
0说明没有打开,我们将其打开:
#!/bin/sh
ulimit -c unlimited
ulimit -c 0
echo "/mnt/flash/ext/core-%p-%e" > /proc/sys/kernel/core_pattern
cat /proc/sys/kernel/core_pattern
2.在PC在进行应用程序编译:
引用别人一个测试demo: test.c
#include <stdio.h>
int square(int a, int b)
int ret;
int *p = NULL; //此处是会导致coredump处
*p = 666;
return ret;
int doCalc(int num1, int num2)
int ret = square(num1, num2);
return ret;
int main()
int param1 = 1;
int param2 = 2;
int result = doCalc(param1, param2);
printf( "result is %d\\n", result);
# gcc -c -g test.c -o main // 编译时加入debug调试信息
3. 运行应用程序main,让应用程序产生异常:
./main
4.使用gdb进行日志分析:
gdb main core-main-547-1501837727
# (gdb) backtrace // 输入backtrace
linux下 gdb+coredump 调试偶发crash的程序
1. 打开 core dump
查看是否打开
ulimit -c
如果输出0, 说明没有打开。
方法一:使用命令
ulimit -c unlimited
可以打开,但是只对当前终端有效,
方法二: 配置 /etc/profile 文件
sudo gedit /etc/profile
在最后添加一行
ulimit -S -c unlimited > /dev/null 2>&1
可以始终打开core dump , unlimited 可以改为具体的数字,比方说 1024 来限制 core 文件的大小。
然后在 bashrc 文件里面 source /etc/profile 就可以使每个终端运行的程序 启动 core dump 了.
2. 设置core文件的路径和名字
生成的core file在哪里?
core file生成的地方是在/proc/sys/kernel/core_pattern文件定义的。
改动到生成到自己定义的目录的方法是:
echo "pattern" > /proc/sys/kernel/core_pattern
并且只有超级用户可以修改这两个文件。
"pattern"类似我们C语言打印字符串的格式,相关标识如下:
%%: 相当于%
%p: 相当于
%u: 相当于
%g: 相当于
%s: 相当于导致dump的信号的数字
%t: 相当于dump的时间
%h: 相当于hostname
%e: 相当于执行文件的名称
这时用如下命令设置生成的core file到系统/tmp目录下,并记录pid以及执行文件名
echo "/tmp/core-%e-%p" > proc/sys/kernel/core_pattern
以上是关于arm+linux平台使用gdb/coredump 分析系统日志的主要内容,如果未能解决你的问题,请参考以下文章