【Qnx】Qnx coredump解析

2024-06-14 23:28
文章标签 解析 qnx coredump

本文主要是介绍【Qnx】Qnx coredump解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qnx coredump解析

coredump文件

Qnx运行的程序崩溃时,会生成coredump文件。
默认情况下这些文件默认会保存在/var/log/*.core 文件中。

解析coredump文件,可以帮忙加快分析程序崩溃的原因,比如了解崩溃的堆栈。
通常可以使用gdbcoreinfo,帮助分析coredump文件。

coreinfo

coreinfo是QNX提供的一个bin文件,这个bin用来显示CoreDump文件的信息

coreinfo [-ilmstv] file [file ...]

选项:
-i 显示进程信息
-l 显示QNT_LINK_MAP相关信息
-m 显示内存Map(Memeroy Map)
-t 显示线程信息
-v 追加debug信息输出
如果不指定这些选项,默认输出所有信息。
coreinfo官网链接:
https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/c/coreinfo.html

coreinfo默认集成在Qnx的Image中,在Qnx系统终端执行即可。例如

coreinfo /var/log/test.core

输出信息类似如下内容:
包括cpu核信息、MACHINE、HOSTNAME、崩溃进程中线程状态等。这些信息,对了解程序崩溃的状态有些帮忙,但是对具体的问题解析,还是需要利用gdb工具。

 processor=ARM AArch64 num_cpus=8cpu 1 cpu=1091556528 name=*** *** Gold speed=***flags=0xc0000c7a FPU MMU V6 V7 V7_MP NEON IDIV VFP_D32cpu 2 cpu=1091556528 name=*** *** Gold speed=***flags=0xc0000c7a FPU MMU V6 V7 V7_MP NEON IDIV VFP_D32cpu 3 cpu=1091556528 name=*** *** Gold speed=***flags=0xc0000c7a FPU MMU V6 V7 V7_MP NEON IDIV VFP_D32cpu 4 cpu=1091556528 name=*** *** Gold speed=***flags=0xc0000c7a FPU MMU V6 V7 V7_MP NEON IDIV VFP_D32cpu 5 cpu=1091556544 name=*** *** Gold Plus speed=***flags=0xc0000c7a FPU MMU V6 V7 V7_MP NEON IDIV VFP_D32cpu 6 cpu=1091556544 name=*** *** Gold Plus speed=***flags=0xc0000c7a FPU MMU V6 V7 V7_MP NEON IDIV VFP_D32cpu 7 cpu=1091556544 name=*** *** Gold Plus speed=***flags=0xc0000c7a FPU MMU V6 V7 V7_MP NEON IDIV VFP_D32cpu 8 cpu=1091556544 name=*** *** Gold Plus speed=***flags=0xc0000c7a FPU MMU V6 V7 V7_MP NEON IDIV VFP_D32cyc/sec=*** tod_adj=*** nsec=*** inc=***boot=0 epoch=1970 intr=27rate=*** scale=-16 load=1920MACHINE="******" HOSTNAME="localhost"pid=2076765 parent=1138777 child=0 pgrp=*** sid=***flags=0x49002000 umask=02 base_addr=0x397fca7000 init_stack=0x10c1000870ruid=0 euid=0 suid=0  rgid=0 egid=0 sgid=0ign=0000000000000000 queue=ff00000000000000 pending=0000000000000000fds=4 threads=2 timers=0 chans=1canstub=0 sigstub=0couldn't read stack: No such process
argc: 6 argv:  thread 1ip=0x4cec9ce290 sp=0x10c1000690 stkbase=0x10c0f80000 stksize=528384state=JOIN flags=0 last_cpu=1 timeout=00000000pri=10 realpri=10 policy=RRtls=0x10c1000dc0thread 2 SIGNALLED-SIGABRT code=0  from pid=2076765 uid=-1 value=0(0x0)ip=0x4cec9ce2a0 sp=0x10c1042760 stkbase=0x10c1002000 stksize=266240state=STOPPED flags=4000000 last_cpu=1 timeout=00000000pri=10 realpri=10 policy=RRtls=0x10c10429d0

Gdb

gdb是常用的debug工具,关于gdb的概念可自行百度理解。这里说一下Qnx上如何使用gdb。
一般来说Qnx源码中,会提供针对架构的gdb工具。这些个工具可以在Host上运行。

ARMv7ntoarmv7-gdb
AArch64ntoaarch64-gdb
x86 64-bitntox86_64-gdb

Qnx官网说明链接:https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/g/gdb.html

例如:
qnx程序跑在AArch64架构下,崩溃产生了coredump文件,test.core
使用gdb的解析步骤:

  1. 首先把test.core 从qnx系统中,导入到Host上(比如Ubutun上)
  2. 在host的QNX的源码中,找到ntoaarch64-gdb(路径可能在 qnx源码/**/host/linux/x86_64/usr/bin 中)
  3. 在Host上,设置好Qnx编译环境(一般在编译qnx源码时,都会有一个sh脚本设置)
  4. 使用gdb 加载崩溃的bin(Host上编译出来的bin) 以及 test.core
# 例子,路径根据实际情况修改
**/**/host/linux/x86_64/usr/bin/ntoaarch64-gdb install/aarch64le/usr/bin/test install/test.core
  1. 如果gdb找不到bin程序需要的so等,可以通过 set solib-search-path (GDB的交互命令,网上使用方式比较多)设置so的查找路径
  2. 在gdb中运行bt即可,输出崩溃堆栈(前提:so等库时带符号的,可以在编译时加入导出debug符合的参数选项)

下面是test.core的一段输出示意(因为某些原因,部分内容用了**代替,所以只是示例)

#0  Test::start (this=0x33f06840a8) at /*****/test.cpp:100:115
#1  0x00000049e17ed874 in Test::Test111 (this=0x25a6f25990) at /*****/test.cpp:100
#2  0x00000049e17f06b4 in ****at /*****/qnx7/usr/include/c++/v1/type_traits:4294
#3  std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (Test::*)(), Test*, 2ul> (__t=...)at /*****/target/qnx7/usr/include/c++/v1/thread:342
#4  std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (Test::*)(), Test*> > (__vp=0x33f0685090) at /*****/qnx7/usr/include/c++/v1/thread:352
#5  0x00000049e1970fa8 in pthread_attr_setdetachstate (attr=0x105e0002, detachstate=1869902687) at /***/build_aarch64/lib/c/1c/pthread_attr_setdetachstate.c:30

实际上,就是把coredump从Qnx系统中copy出来,然后放到本地有Qnx开发环境,以及相关二进制+库的PC上。然后使用gdb加载即可。

这篇关于【Qnx】Qnx coredump解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061797

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java JDK Validation 注解解析与使用方法验证

《JavaJDKValidation注解解析与使用方法验证》JakartaValidation提供了一种声明式、标准化的方式来验证Java对象,与框架无关,可以方便地集成到各种Java应用中,... 目录核心概念1. 主要注解基本约束注解其他常用注解2. 核心接口使用方法1. 基本使用添加依赖 (Maven

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二