当前位置: 首页 > news >正文

【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解析

Qnx coredump解析 coredump文件 Qnx运行的程序崩溃时&#xff0c;会生成coredump文件。 默认情况下这些文件默认会保存在/var/log/*.core 文件中。 解析coredump文件&#xff0c;可以帮忙加快分析程序崩溃的原因&#xff0c;比如了解崩溃的堆栈。 通常可以使用gdb和coreinfo…...

超级签名源码/超级签/ios分发/签名端本地linux服务器完成签名

该系统完全在linux下运行&#xff0c;不存在使用第三方收费工具&#xff0c;市面上很多系统都是使用的是第三方收费系统&#xff0c;例如&#xff1a;某心签名工具&#xff0c;某测侠等&#xff0c;不开源而且需要每年交费&#xff0c;这种系统只是在这些工具的基础上套了一层壳…...

RocketMQ在Centos7系统上单机部署

最近因为一些信创问题&#xff0c;要将RabbitMQ替换为RocketMQ&#xff0c;因此在此分享一些RocketMQ在Centos7系统上单机部署相关过程。 优缺点 RocketMQ的优点&#xff1a; 性能优越&#xff1a;RocketMQ在处理大量消息时&#xff0c;性能优于RabbitMQ。当面临每秒数万到数…...

Vue37-非单文件组件

一、组件的两种编写形式&#xff1a; 非单文件组件&#xff1b;单文件组件。 二、创建一个组件 2-1、组件中的el 组件中不写el&#xff0c;不说为谁服务。 2-2、组件中的data 因为对象形式&#xff0c;多处复用的话&#xff0c;有引用关系&#xff0c;改一处&#xff0c;另一…...

CSS实现经典打字小游戏《生死时速》

&#x1f33b; 前言 CSS 中有这样一个模块&#xff1a;Motion Path 运动模块&#xff0c;它可以使元素按照自定义的路径进行移动。本文将为你讲解这个模块属性的使用&#xff0c;并且利用它实现我小时候电脑课经常玩的一个打字游戏&#xff1a;金山打字的《生死时速》。 &…...

推箱子-小游戏

学习目标&#xff1a; 巩固Java基础&#xff0c;数据类型、二维数组、条件语句等&#xff1b; 效果展示&#xff1a;...

AI数字人的开源解决方案

目前&#xff0c;国内外已经涌现出一些优秀的数字人开源解决方案&#xff0c;这些解决方案为开发者提供了构建数字人应用的工具和基础设施。以下是一些比较知名的数字人开源解决方案。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1…...

java写一个验证码

生成验证码 内容&#xff1a;可以是小写字母&#xff0c;也可以是大写字母&#xff0c;还可以是数字 规则 长度为5 内容中是四位字母&#xff0c;1位数字。 其中数字只有1位&#xff0c;但是可以出现在任意的位置。 package User;import java.util.ArrayList; import jav…...

【星海随笔】ELK优化

ELS 再遇到大的日志文件的时候不会自动进行清理的,我们可以通过 logrotate 转储工具进行操作。 该命令是基于 Cron 实现,由系统执行,当然也可以手动进行执行例如 logrotate -f configfile# more /etc/logrotate.confweekly // 默认每一周执行一次rotate轮转工作 r…...

SQL Auto Increment

SQL Auto Increment 在关系型数据库中&#xff0c;自动增量&#xff08;Auto Increment&#xff09;是一个常见且实用的特性。它允许数据库自动为表中插入的新行分配唯一的标识符&#xff0c;通常用于主键字段。本文将深入探讨SQL中的自动增量功能&#xff0c;包括其工作原理、…...

网络安全练气篇——PHP编程语言基础

目录 PHP基础 一、PHP简介与环境搭建 什么是PHP&#xff1f; PHP环境安装 代码编辑选择 二、基本语法 PHP基本语法操作 PHP变量与输出 啥是常量? PHP注释 PHP单引号双引号声明 三、PHP表单 PHP表单 四、登录界面搭建与讲解 构建登陆页面 登陆页面端 服务器端…...

LabVIEW程序内存泄漏分析与解决方案

维护他人编写的LabVIEW程序时&#xff0c;若发现程序运行时间越长&#xff0c;占用内存越大直至崩溃&#xff0c;通常是内存泄漏导致的。本文从多角度分析内存泄漏的可能原因&#xff0c;包括数组和字符串处理、未释放的资源、循环中的对象创建等&#xff0c;并提供具体的解决方…...

JVM垃圾回收器介绍

Serial GC: 算法: 使用的是标记-清除算法。特点: 串行执行&#xff0c;适用于单CPU环境或较小的堆内存配置。在新生代和老年代的回收中都是单线程执行&#xff0c;因此在进行垃圾回收时会暂停所有应用线程&#xff08;Stop-The-World&#xff09;。 Parallel GC (也称为吞吐量优…...

subprocess隐藏cmd窗口

process subprocess.Popen(command, shellTrue, stdoutsubprocess.PIPE, stderrsubprocess.PIPE,creationflagssubprocess.CREATE_NO_WINDOW) 添加参数即可不显示cmd运行窗口 creationflagssubprocess.CREATE_NO_WINDOW...

编程前端看什么书比较好:深入解析与推荐

编程前端看什么书比较好&#xff1a;深入解析与推荐 在编程前端的学习道路上&#xff0c;书籍无疑是我们最宝贵的财富。一本好的书籍&#xff0c;不仅可以提供系统的知识体系&#xff0c;还能引导我们深入探索技术的奥秘。然而&#xff0c;面对市面上琳琅满目的前端书籍&#…...

HarmonyOS(36) DevEco Studio 配置debug和release

在android开发中可以在build.gradle来配置realease和debug,在HarmonyOS中可以通过build-profile.json5文件中通过buildModeSet配置&#xff1a; 在DevEco Studio 中可以通过下面来选择运行debug还是release&#xff1a; 我们可以通过BuildProfile.ets里面的静态变量获取当前…...

PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)复现

PHP语言在设计时忽略了Windows对字符编码转换的 Best-Fit 特性&#xff0c;导致未授权的攻击者可以通过特定字符串绕过 CVE-2012-1823 补丁&#xff0c;执行任意PHP代码&#xff0c;导致服务器失陷。 1.漏洞级别 高危 2.漏洞搜索 fofa: app"XAMPP"3.影响范围 P…...

WHAT - React 学习系列(二)

目录 一、官方介绍二、框架具体对比1. Next.js(Pages Router)2. Remix3. Gatsby4. Expo&#xff08;用于原生应用&#xff09;5. Next.js(App Router)Next.js App Router主要特性与 Pages Router 的对比 具体使用示例创建 App Router 项目目录结构示例示例代码 总结 这一篇主要…...

Java 反射机制 -- Java 语言反射的概述、核心类与高级应用

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 010 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…...

【Python入门与进阶】Jupyter Notebook配置与优化

目录 1.Jupyter Notebook简介 2.Jupyter Notebook的安装 2.1 命令行安装 2.2 可视化界面安装 3.Jupyter Notebook的使用 3.1 启动 Jupyter Notebook 3.2 Jupyter Notebook 界面介绍 3.3 创建新的 Notebook 3.4 编写和运行代码单元 3.5 使用 Markdown 编写文档 3.6 保…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...