android投屏程序线程无故卡死不执行,如何分析?

2024-04-08 20:52

本文主要是介绍android投屏程序线程无故卡死不执行,如何分析?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

hi,粉丝朋友们:
大家好!近期做了一个车载互联,云手机相关的投屏的小项目demo,具体效果如下:
在这里插入图片描述

是不是感觉有点厉害哈,可以云手机远程控制,但是意外就出现了。。。

比如像如下这样拼命操作一下:
真正勇士应该经得住任意的考验

在这里插入图片描述

很遗憾发现一阵疯狂触摸操作后,居然客户端再也没有办法触控了,处于gg状态,触控后服务端的手机再也没有相关的反应,但是服务端依然是可以自己操作,也可以传递画面的变化给客户端

针对这这个无法操控问题要展开分析应该如何呢?

分析问题

针对这个客户端控制服务端触摸操作无反应问题,有以下几个方面定位排查:

1、怀疑进程直接异常崩溃

这个可以从日志,和操作行为可以看出,客户端和服务端,画面还是可以同步的,说明不存在异常退出这种情况发生,客户端日志也没有发现有任何报错,故排除程序自身异常退出导致问题

2、客户端没有传递相关的触摸数据

这个看着现象是有这个可能,但是经过客户端日志打印,发现也是正常进行了触摸数据的传递

3、服务端不接受触摸数据

这个也只能加日志相关的打印看看,发现日志在客户端无法触摸控制后就完全停止了,再也没有打印出相关的日志。故问题就明显指向是不是这个线程卡死了,连日志都不打印了,,,这个怀疑是正常的。
但是为啥会卡死呢?
怀疑又有以下两个方面:
怀疑1:
是不是接受不到数据,一直处于read服务端数据发过,一直处于阻塞状态?
这个也对read方法的前后加了很多打印,伪代码如下

Log.i("read ------start ");
read()//读取网络数据
Log.i("read ------end ");

发现卡死最后一句日志,并不一定是start这里停留,理论上如果read卡死那每次卡死肯定是有start没有end。所以经过日志也要排除这个可能

怀疑2:
是不是线程有其他方法阻塞?是否可以通过systrace/perfetto查看?
现在没有更多线索只能继续排查,用perfetto抓trace看线程是不是有啥卡住任务,具体trace如下图所示:
在这里插入图片描述
所以systrace其实也没有看出卡住时候是在等待啥,有啥一直运行的任务,所以perfetto好像也没有解决线程为啥卡死在一个地方

绝招方式解决

上面几种常见的分析思路和工具好像都没有很好的办法来分析出根本问题,现在就只知道线程卡死不动了,还不是网络阻塞。。。也不知到线程这个时候到底怎么了。。
想想线程卡住不动肯定处于某个状态,是否可以根据线程这个时候的具体状态信息反推出可能问题呢?
可以通过ps -T方式查看相关进程的线程目前运行情况和状态
具体命令如下:

adb shell ps -T  -p 进程号

注意:这个可能需要是userdebug机器

在程序卡住时候可以看看进程状态:
在这里插入图片描述
可以看到客户端触摸服务端无响应时候,这个时候服务端线程状态居然是pipe_write这样一个执行状态,说明是一直阻塞在这个地方。

那么问题来了,程序中哪里有啥地方会进行这个pipe_write操作呢?
哈哈,说实话这个就比较难想到了,一般要app层面追踪也很难,这里一般能想到程序中会有这个写入一般只有一个控制台的输出了。

             System.out.println(PREFIX + "WARN: " + message);

如上面这个 System.out.println方法,他就是需要进行pipe_write
一般android里面不是不用这个打印日志么?都是Log.i,一般情况是这样,但是投屏时候为了方便直接shell触发执行,方便直接terminal看输出情况,所以使用了这个System.out.println

问题分析到这里,那么考虑把程序中所有的System.out.println屏蔽了试试
在这里插入图片描述
其实也可以用kill -3这种获取堆栈看看到底卡在哪里:
在这里插入图片描述
一样发现是System.out.println这方法

屏蔽后发现一切运行完美。

总结:

在针对线程无故卡死情况,日志方面也不打印输出情况,需要考虑多个手段来尝试定位分析出目前的线程状态,然后根据状态反推出程序中可能的疑点,最后尝试修改验证。

本文章更多详细代码和资料需要购买课程获取
hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

私聊作者+v(androidframework007)

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

这篇关于android投屏程序线程无故卡死不执行,如何分析?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类