[Linux]corddump的使用(RK3588)

在应用程序中,程序崩溃造成的原因往往是出现野指针。

1.内存越界
2.指针没有初始化
3.指针指向已被释放的地址(例如指向调用函数的局部变量地址)
4.空间释放后指针没有执行NULL,再次使用指针可能造成问题

往往再多进程多线程的应用程序中,出现程序崩溃,除了日志方式的查看,我们也使用coredump来进行问题定位,生产的core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等

1.查看coredump是否开启

使用ulimit -a命令,查看core file size是否为0,是的话表示没有开启

root@rk3588-buildroot:/# ulimit -a
real-time non-blocking time  (microseconds, -R) unlimited
core file size              (blocks, -c) 0
data seg size               (kbytes, -d) unlimited
scheduling priority                 (-e) 0
file size                   (blocks, -f) unlimited
pending signals                     (-i) 31624
max locked memory           (kbytes, -l) 64
max memory size             (kbytes, -m) unlimited
open files                          (-n) 1024
pipe size                (512 bytes, -p) 8
POSIX message queues         (bytes, -q) 819200
real-time priority                  (-r) 0
stack size                  (kbytes, -s) 8192
cpu time                   (seconds, -t) unlimited
max user processes                  (-u) 31624
virtual memory              (kbytes, -v) unlimited
file locks                          (-x) unlimited

2.开启coredump

  1. 设置coredump size大小为无限制
ulimit -c unlimited     #该命名只在该终端窗口有效

我们通过修改kernel的参数,可以指定内核所生成的coredump文件的文件名。例如,Easwy使用下面的命令使kernel生成名字为core_filename_time_pid格式的core dump文件。

echo /usr/core_%e_%t_%p > /proc/sys/kernel/core_pattern

在core_pattern模板中使用变量见下面的列表:

%%单个%字符
%p代表dump进程的进程ID
%u代表dump进程的实际用户ID
%g代表dump进程的实际组ID
%s导致本次core dump的信号
%t core dump的时间 (由1970年1月1日计起的秒数)
%h主机名
%e程序文件名

2 在交叉编译时候加上 -g

3.生成coredump文件

root@rk3588-buildroot:/# ./node_shell
Segmentation fault (core dumped)
root@rk3588-buildroot:/# ls -al  /usr/core_log/
total 512
drwxr-xr-x 2 root root   1024 Mar 23 22:17 .
drwxr-xr-x 1 root root   1024 Mar 21 22:01 ..
-rw------- 1 root root 823296 Mar 23 22:17 core_node_shell_1711232275_1355

4.gdb调试

gdb ./node_shell   core_node_shell_1711232275_1355
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统本身并不具备识别硬件芯片型号的能力,包括RK3588RK3588S这类特定SoC(System on Chip)。为了确认设备上所使用的SoC型号,需要依赖额外的工具或方法。 通常的做法是在Linux环境中运行专门用于检测处理器信息的软件包或命令。以下是一些常用的方法: ### 使用`cat /proc/cpuinfo` 打开终端并输入以下命令: ```bash cat /proc/cpuinfo ``` 然后查看输出内容中是否存在类似于“Processor”、“model name”或“Revision”的字段,并寻找包含RK3588RK3588S描述的关键信息。请注意,此方法仅能提供有限的信息,并且无法保证一定能准确地区分两个版本。 ### 使用CPU-Z或其他硬件检测工具 对于Windows用户来说,可以下载安装CPU-Z这样的第三方硬件检测软件。虽然CPU-Z可以在Windows上运行,但它同样适用于Linux环境下的虚拟机或者其他兼容Linux的环境。 在Linux环境下,你可以通过SSH连接到目标机器并通过网络运行CPU-Z,或者如果设备支持USB,直接将装有CPU-Z的U盘插入目标设备,然后在该设备上运行CPU-Z来获取更详细的硬件信息。 ### 检查内核配置文件 如果你对Linux内核有深入了解并且拥有足够的权限,还可以尝试检查内核源码目录中是否包含了特定于RK3588RK3588S的配置文件、补丁等信息。这通常涉及到分析`arch/arm64/include/generated/uapi/linux/platform_device.h`等目录下的头文件以及内核配置文件。 这种方法相对复杂且技术含量较高,非专业人士一般不会选择这种方式来进行简单的硬件检测。 --- --- 相关问题 --- 1. 是否有可能误判RK3588RK3588S的区别? 2. 如果我的设备是基于ARM架构的,那么还有哪些方法可以帮助我确定具体的芯片型号? 3. 在Linux环境下,如何有效提高硬件检测的准确性?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值