ARM 下core dump 调试

1、何为core dump
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump

1、core dump 产生的原因
  • 内存访问越界 (数组越界、字符串无\n结束符、字符串读写越界)
  • 多线程程序中使用了线程不安全的函数,如不可重入函数
  • 多线程读写的数据未加锁保护(临界区资源需要互斥访问)
  • 非法指针(如空指针异常或者非法地址访问)
  • 堆栈溢出

2、busybox 默认情况下,ulimit 是隐藏的, 开启使用如下命令
ln -s /bin/busybox /bin/ulimit
ulimit -c unlimited

3、修改core dump 保持位置, 由于嵌入式系统Flash 空间有限, 可以将位置修改指向SD 卡, 或者NFS 目录
echo /mnt/mmcblk0p1/%e.%p.%s.%t.core > /proc/sys/kernel/core_pattern
通配符解释:
  • %% 单个%字符
  • %p 所dump进程的进程ID
  • %u 所dump进程的实际用户ID
  • %g 所dump进程的实际组ID
  • %s 导致本次core dump的信号
  • %t core dump的时间 (由1970年1月1日计起的秒数)
  • %h 主机名
  • %e 程序文件名
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在QNX下调试位机(也称为嵌入式系统)的Coredump时,以下是一些基本步骤和工具: 1. 获取Coredump文件:在位机系统出现崩溃或异常时,Coredump文件会自动生成。可以通过以下命令获取Coredump文件:`core_dump_channel`。也可以使用`devc-*`命令检测异常进程并生成Coredump文件。 2. 分析Coredump文件:可以使用GNU调试器(GDB)来分析和调试Coredump文件。可以通过在命令行中输入以下命令来启动GDB:`gdb <位机可执行文件> -c <Coredump文件>`。 3. 定位问题代码:在GDB中,可以使用`bt`命令来查看函数的堆栈跟踪,以定位造成崩溃的代码。还可以使用`info registers`命令查看寄存器的数值,以了解当前状态。 4. 观察变量和内存:使用GDB,可以使用命令`print`查看变量和内存中的值。可以通过打印变量来检查其值是否正确,或者通过查看内存来了解崩溃的原因。 5. 单步调试:可以使用GDB的单步调试功能来逐行执行代码,并观察程序的行为。可以使用`next`命令来执行下一行代码,或者使用`step`命令来进入函数调用。 6. 修改代码和重新编译:在根据Coredump分析找到问题代码后,可以修改代码并重新编译。然后,您可以运行在修复后的代码上的测试,以确保解决了问题。 总之,对于QNX下的位机Coredump调试,主要使用GDB这样的调试工具来分析Coredump文件,查找问题代码,并使用单步调试等功能来定位问题和修复代码。这些步骤可以帮助我们理解和解决嵌入式系统中出现的异常和崩溃问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值