上传到附件中

- 发布:2020-07-06 15:34
- 更新:2020-07-06 15:34
- 阅读:2210
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win7
HBuilderX类型: 正式
HBuilderX版本号: 2.7.14
手机系统: Android
手机系统版本号: Android 6.0
手机厂商: 华为
手机机型: 荣耀 CAM AL00
页面类型: vue
打包方式: 云端
项目创建方式: HBuilderX
App下载地址或H5⽹址: http://218.75.210.46:10209/appupdate//s/5KlZ
示例代码:
操作步骤:
时不时 偶尔在某个界面闪退,又很难复现,以上是bugly抓取到崩溃日志
时不时 偶尔在某个界面闪退,又很难复现,以上是bugly抓取到崩溃日志
预期结果:
能否提供类型android ios的防崩溃机制
能否提供类型android ios的防崩溃机制
实际结果:
时不时偶尔在某个界面闪退,又很难复现,以上是bugly抓取到崩溃日志
时不时偶尔在某个界面闪退,又很难复现,以上是bugly抓取到崩溃日志
bug描述:
1102 SIGSEGV(SEGV_MAPERR)
SIGSEGV(SEGV_MAPERR):
00 pc 001ab958 /system/vendor/lib/egl/libGLESv2_adreno.so (EsxMemPoolGeneral::ReturnMemory(EsxMemType, EsxTimestamp const, unsigned int, gsl_memdesc)+463) [armeabi-v7a]
2 #01 pc 001a6cbf /system/vendor/lib/egl/libGLESv2_adreno.so (EsxGfxMem::Destroy(EsxContext)+642) [armeabi-v7a]
3 #02 pc 001094ed /system/vendor/lib/egl/libGLESv2_adreno.so (EsxResource::SetGfxMem(EsxContext, unsigned int, EsxGfxMem, int)+132) [armeabi-v7a]
4 #03 pc 00109543 /system/vendor/lib/egl/libGLESv2_adreno.so (EsxResource::FreeSubResource(EsxContext, EsxSubResource)+30) [armeabi-v7a]
5 #04 pc 001095d9 /system/vendor/lib/egl/libGLESv2_adreno.so (EsxResource::SetSubResource(EsxContext, unsigned int, EsxSubResource)+36) [armeabi-v7a]
6 #05 pc 001097ab /system/vendor/lib/egl/libGLESv2_adreno.so (EsxResource::Destroy(EsxContext)+290) [armeabi-v7a]
7 #06 pc 00126c2d /system/vendor/lib/egl/libGLESv2_adreno.so (EglImage::Destroy()+20) [armeabi-v7a]
8 #07 pc 001238ab /system/vendor/lib/egl/libGLESv2_adreno.so (EglImageAccess::~EglImageAccess()+10) [armeabi-v7a]
9 #08 pc 001205d9 /system/vendor/lib/egl/libGLESv2_adreno.so (EglApi::DestroyImage(void, void)+64) [armeabi-v7a]
10 #09 pc 0000c40d /system/lib/libEGL.so (eglDestroyImageKHR+44) [armeabi-v7a]
11 #10 pc 013ddfe7 /system/app/WebViewGoogle/WebViewGoogle.apk
解决方案
SIG 是信号名的通用前缀, SEGV 是 segmentation violation 的缩写
在 POSIX 兼容的平台上,SIGSEGV 是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。SIGSEGV 的符号常量在头文件 signal.h 中定义。因为在不同平台上,信号数字可能变化,因此符号信号名被使用。通常,它是信号11。
对于不正确的内存处理,如当程序企图访问 CPU 无法定址的内存区块时,计算机程序可能抛出 SIGSEGV。操作系统可能使用信号栈向一个处于自然状态的应用程序通告错误,由此,开发者可以使用它来调试程序或处理错误。
在一个程序接收到 SIGSEGV 时的默认动作是异常终止。这个动作也许会结束进程,但是可能生成一个核心文件以帮助调试,或者执行一些其他特定于某些平台的动作。
SIGSEGV可以被捕获。也就是说,应用程序可以请求它们想要的动作,以替代默认发生的动作。这样的动作可以是忽略它、调用一个函数,或恢复默认的动作。在一些情形下,忽略 SIGSEGV 导致未定义行为。
一个应用程序可能处理SIGSEGV的例子是调试器,它可能检查信号栈并通知开发者目前所发生的,以及程序终止的位置。
SIGSEGV通常由操作系统生成,但是有适当权限的用户可以在需要时使用kill系统调用或kill命令(一个用户级程序,或者一个shell内建命令)来向一个进程发送信号。
闪退场景一:recorder deleteRecording 之前 先判断文件是否存在,否则会造成过度释放,解决方法:
if ([[NSFileManager defaultManager] fileExistsAtPath:self.recorder.url.path]) {
if (![self.recorder deleteRecording])
NSLog(@"Failed to delete %@", self.recorder.url);
}
闪退场景二: delegate = nil 。
将XXViewContrller设置为delegate时,当页面发生跳转时,XXViewController的对象会被释放,这是代码走到[_delegate callbackMethod],便出现crash。解决方法有二:1.将@property (nonatomic ,assign) id <BLELibDelegate>delegate; 中 assign关键字改为weak。 2.在XXViewController的delloc方法中添加:xxx.delegate = nil;
0 个回复