记一次adb查找安卓App崩溃报错记录

记一次adb查找安卓App崩溃报错记录

首先先说结论,是因为内存不足的时候会出现这种问题
在小米手机上有这么一个设置
在这里插入图片描述
可以很方面的模拟出这个异常
然后我们再设置一下logcat日志的大小
如果你的操作真的很多,最好设置一下,如果你的操作很短就可以复现,那就没必要调整,256k足矣
在这里插入图片描述
然后就是手机连接电脑
然后打开命令行工具清空logcat日志

adb logcat -c

然后查看日志

#需要打印时间和级别是Error的信息
adb logcat -v time *:E

这里只是在cmd上打印日志,很快,你可能来不及,那就下载日志,不是已经清理了之前的日志么,我们再执行命令

adb logcat -v time >C:/Users/EDY/Desktop/work/logcat.txt

这个时候就会把logcat日志传输到本地,但是注意,等你操作完了,就可以关闭adb窗口了,要不然他会一直往windows本地的文件里写入日志,关闭后就不写入了
然后搜索“FATAL”关键字
在这里插入图片描述
就可以定位到错误信息了,至于真正的错误原因,就得让开发看了

如果你遇到了ANR
那还得看trace日志
以小米手机为例子
可能遇到两个问题
一个是大家都说adb pull /data/anr/traces.txt
但是自己去pull的时候报错
在这里插入图片描述
那是因为不同的手机厂商他的文件命名可能不同
在这里插入图片描述
但是我们也不清楚哪个是我们要的文件,那我们就尝试先pull一个,发现了第二个问题,权限不足,那就可以使用

adb bugreport

在这里插入图片描述
他会告诉你把文件放到哪里了
然后解压,再解压后的文件里就有anr目录下所有的东西了

在这里插入图片描述

怎么确定哪个文件是我们需要的,我们可以根据日志的时间来看,看哪个是你操作的时间附近
打开之后,看看是不是你的包报的错误
在这里插入图片描述
怎么确定报错信息在哪里
下面的内容是我抄的
首先,我们可以根据发生ANR的app包名和时间能确定ANR日志的地方,通常是再traces内容的最上面。
在这里插入图片描述

然后ANR必然是主线程异常,我们可以找到"main"线程部分,查看main线程相关状态。
在这里插入图片描述

可以很明确的看到主线程sleeping了,通常在多线程开发中,比较容易遇到的是blocked状态导致的ANR

其次我们可以继续找到下面的线程调用栈信息
在这里插入图片描述

这块我们就比较熟悉,和查看普通的异常一样,可以很明确的知道ANR 发生在MainActivity 28行处,原因是Thread.sleep(),此时我们再回到上面自己的代码层面,结果已经很明确。

当然,实际开发中的ANR通常不会这么简单,有些也没那么容易分析,这个就需要大家通过此篇文章的借鉴,结合实际开发多分析,多优化来增长自己的能力。

线程状态
对于上述线程状态,相对于java线程状态,Linux细化了很多状态,这样更便于分析当前的状态。

java中的线程和操作系统内核中的线程并不是等价关系。他们之间存在着映射关系,对Android来说,java中的线程和内核的线程是一对一关系。
在这里插入图片描述

新解决方案

今天测试的时候学习到了开发老师的一招

adb logcat >> 本地路径

会将设备中的logcat日志全部导出到本地,相比bugreport,更轻量级一些

<think>好的,用户遇到了UniApp安卓模拟器中因JavaScript堆内存不足导致的崩溃问题,需要解决。首先,我得分析可能的原因。JavaScript堆内存不足通常是因为应用占用了过多内存,或者内存泄漏。安卓模拟器本身也可能占用较多资源,加上UniApp可能未优化,导致问题。 接下来,我应该考虑几个方面。首先是调整JavaScript堆内存大小。用户可能没有配置V8引擎的内存限制,默认值可能不够。可以通过启动命令增加内存,比如--max-old-space-size=4096。然后需要确保在UniApp的配置中正确应用这个参数。 然后是优化代码和资源。检查是否有内存泄漏,比如未解除的事件监听、大型数据集未释放等。图片和资源文件是否压缩,减少内存占用。使用懒加载或分页加载数据,避免一次性加载过多数据。 接下来是模拟器和开发工具的设置。可能模拟器分配的内存不足,需要调整模拟器的RAM大小,比如增加到4GB。关闭不必要的后台程序,释放系统资源。或者换用性能更好的模拟器,如蓝叠或Genymotion。 还要考虑更新工具和依赖。确保HBuilderX、Android SDK和模拟器都是最新版本,可能修复了内存管理的问题。第三方插件如果有内存问题,也需要更新或替换。 最后,如果问题依旧,可能需要进一步分析内存快照,使用Chrome DevTools检查内存使用情况,查找泄漏点。或者联系UniApp官方支持,提供详细日志。 需要验证每个步骤的有效性,比如调整内存参数是否生效,模拟器设置是否正确,代码优化是否减少内存占用。同时注意用户可能对某些步骤不熟悉,需要给出具体的操作指导,比如如何修改启动参数,如何调整模拟器内存等。还要提醒用户备份和测试环境的重要性,避免修改引发其他问题。</think>针对UniApp安卓模拟器中因JavaScript堆内存不足导致的崩溃问题,以下是分步解决方案: ### 一、调整JavaScript堆内存大小 1. **修改Node.js内存限制** 在UniApp项目的`vue.config.js`中添加以下配置: ```javascript module.exports = { chainWebpack: (config) => { config.plugin('limit-memory').use(require('webpack').DefinePlugin, [{ 'process.env': { NODE_OPTIONS: '--max-old-space-size=4096' // 设置堆内存上限为4GB } }]) } } ``` 该配置通过扩展V8引擎的内存限制来避免溢出[^1]。 2. **调整HBuilderX启动参数** 在HBuilderX安装目录的`hbuilderx.ini`文件中添加: ``` -Xmx4096m // 分配4GB内存给JVM ``` ### 二、代码与资源优化 1. **避免内存泄漏** - 及时销毁定时器: ```javascript let timer = setInterval(() => {}, 1000); onUnload(() => clearInterval(timer)); ``` - 移除未使用的全局事件监听: ```javascript uni.$off('eventName'); ``` 2. **压缩静态资源** 使用`image-webpack-loader`自动压缩图片: ```javascript // vue.config.js module.exports = { chainWebpack: (config) => { config.module.rule('images') .test(/\.(png|jpe?g|gif)$/i) .use('image-webpack-loader') .loader('image-webpack-loader') } } ``` ### 三、模拟器配置优化 1. **调整安卓模拟器参数** - 在AVD Manager中将`RAM`设置为`4096MB` - 启用`Use Host GPU`加速 - 将`VM heap`调整为`512MB`(在`config.ini`中修改`hw.ramSize=4096`) 2. **推荐使用真机调试** 通过`adb`连接实体手机可减少30%-50%内存消耗: ```bash adb devices // 检查设备连接 ``` ### 四、进阶排查方案 1. **内存泄漏检测** 在Chrome DevTools的`Memory`面板执行: - Heap Snapshot对比两次快照差异 - Allocation instrumentation记录实时内存分配 2. **查看详细日志** 在`manifest.json`中开启调试模式: ```json { "app-plus": { "debug": true } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值