利用coredump文件分析分析设备卡死问题

2024-02-20 14:32

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

在应用程序异常时,如内存非法访问,越界导致程序崩溃时。Core文件将记录设备当前的堆栈信息,寄存器等值。当设备出现卡死问题时,使用主动kill掉卡死线程,使设备应用程序挂掉,生成coredump文件,这样就可以分析堆栈,查看设备具体卡主到哪里,那把锁未释放,该方法对于解决死锁问题极为方便。

1 问题描述

在系统测试过程中出现设备IE控件无法正常登陆的情况,通过ps命令发现davinci进程存在,没有出现异常崩溃的现象.通过taskShow命令发现有线程累加同时有D状态线程出现,排查如下:

第一步:通过taskShow命令查看线程的运行状态,看是否有D状态
在这里插入图片描述
第二步:记录出现卡住线程的id信息,以后分析堆栈时使用

第三步:选一个线程,此处选择图1中线程id25298ipc_sdk110011线程。然后手动让程序生成coredump文件。
在这里插入图片描述
在这里插入图片描述

第四步:在gdb调试模式下输入info thread 命令
在这里插入图片描述
5步:输入t 133命令跳转到对应的栈帧中,在输入bt full命令查看堆栈信息
在这里插入图片描述
第6步:输入t 107 命令跳转到对应的栈帧中,在输入bt full命令查看堆栈信息
在这里插入图片描述
第六步:走查代码发现
netclient_set_piccfg_v30接口实现中,首先会获取一把全局锁g_param_mutexsem,然后再执行save_devinfo_config保存数据库。由于save_devinfo_config保存数据库出现异常,而用户使用控件登陆,首先要进行用户验证,要获取全局锁g_param_mutexsem。由于g_param_mutexsem一直被ipc_sdk110011线程占用,所以IE登陆时就出现卡在现象。

对于某些C库,可以直接通过查看g_param_mutexsem信息,获取到占用该锁的线程,这样就不需要本文中记录线程id信息了。如R0平台的GLIBC版本,可以用如下图9方式获知占用锁的线程,可以看到__owner=986为占用该全局锁的线程。

在这里插入图片描述

这篇关于利用coredump文件分析分析设备卡死问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

springboot3.4和mybatis plus的版本问题的解决

《springboot3.4和mybatisplus的版本问题的解决》本文主要介绍了springboot3.4和mybatisplus的版本问题的解决,主要由于SpringBoot3.4与MyBat... 报错1:spring-boot-starter/3.4.0/spring-boot-starter-

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss