友盟崩溃日志分析

对于友盟提供的如下崩溃报告,很难看出是什么地方出了问题,接下来我们一步步通过dsym文件解析崩溃原因;
下面的崩溃报告中的app名称我用appname代替

Application received signal SIGSEGV
(null)
((
0 CoreFoundation 0x000000018236d1d0 + 148
1 libobjc.A.dylib 0x0000000180da455c objc_exception_throw + 56
2 CoreFoundation 0x000000018236d100 + 0
3 appname 0x10017b0e4 SmartFeedFish + 1552612
4 libsystem_platform.dylib 0x00000001813fd338 _sigtramp + 36
**5 appname 0x100022f90 SmartFeedFish + 143248
6 appname 0x100022f90 SmartFeedFish + 143248**
7 UIKit 0x000000018823a834 + 848
8 UIKit 0x000000018823ad98 + 220
9 UIKit 0x00000001882f3130 + 1236
10 UIKit 0x00000001883c40a0 + 232
11 UIKit 0x0000000188349be8 + 116
12 UIKit 0x000000018849a158 + 712
13 UIKit 0x000000018825b5b8 + 492
14 UIKit 0x000000018825b0dc + 312
15 UIKit 0x000000018825aef8 + 160
16 QuartzCore 0x00000001856c97e8 + 260
17 libdispatch.dylib 0x00000001811f61bc + 16
18 libdispatch.dylib 0x00000001811fad68 _dispatch_main_queue_callback_4CF + 1000
19 CoreFoundation 0x000000018231a810 + 12
20 CoreFoundation 0x00000001823183fc + 1660
21 CoreFoundation 0x00000001822462b8 CFRunLoopRunSpecific + 444
22 GraphicsServices 0x0000000183cfa198 GSEventRunModal + 180
23 UIKit 0x000000018828d7fc + 684
24 UIKit 0x0000000188288534 UIApplicationMain + 208
25 appname 0x100097db0 SmartFeedFish + 622000
26 libdyld.dylib 0x00000001812295b8 + 4
)

dSYM UUID: ***************1D-9804-96F6C382533D
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: appname
Base Address: 0x00000001000e8000

从这个崩溃报告中我们可以找多UUID,CPU Type类型,和Slide Address,这个三个数据很重要,下面我们分析:5 appname 0x100022f90 SmartFeedFish + 143248这个数据的崩溃原因,我们只要他的指针地址即可0x100022f90

下面我们还需要一个DSYM文件,这个文件在archives文件里面,你问archives在什么地方,就是你打包app时archives留下的文件,点击window-organizer-archives,里面就是我们经常打包app留下的archives文件,找到和你打包app对应的文件,也就是崩溃的app对应的archives文件,一定不要搞错了,不然找不出错误信息。
这里写图片描述

我的archive文件是这个,然后鼠标右键show in finder 我们可以看到这个文件存放的地方,这里写图片描述

这里写图片描述

为了避免后面的操作出错,我们这个这个文件复制粘贴的桌面,这样后面操作非常方便,

然后右键显示包内容,我们可以看到几个文件夹,其中有一个dsyms的文件夹,打开这个文件夹你会看到后缀名是dsym的文件。
这里写图片描述

以上是我们要找的文件,现在正式操作找到崩溃原因,
快上车,没时间解释了,
现在打开终端,根据文件位置输入,先cd到dsyms文件夹,
cd /Users/mymac/Desktop/appname.xcarchive/dSYMs
然后再输入:
dwarfdump - -uuid appname.app.dSYM
这个appname.app.dSYM是dsyms文件夹下的,
然后我们就可以查到他的uuid,这个uuid要和崩溃日志里面的uuid一样才可以,
这里写图片描述
如果uuid这些都一样,下面就可以输入:
dwarfdump - -arch=arm64 - -lookup 0x100022f90 /Users/mymac/Desktop/appname.xcarchive/dSYMs/appname.app.dSYM/Contents/Resources/DWARF/appname

这句话意思:–arch=arm64手机的cpu类型。–lookup 0x100022f90 我们要解析的崩溃指针友盟里面有,
/Users/mymac/Desktop/appname.xcarchive/dSYMs/appname.app.dSYM/Contents/Resources/DWARF/appname 这个是dysm里面这里写图片描述
选中右键显示包内容,打开里面的文件夹,直到最后一个文件。
这个文件
这里写图片描述

最后终端会给我错误信息

File: /Users/mymac/Desktop/appname.xcarchive/dSYMs/appname.app.dSYM/Contents/Resources/DWARF/appname (arm64)

Looking up address: 0x0000000100022f90 in .debug_info… found!

0x0005a5e4: Compile Unit: length = 0x00003421 version = 0x0002 abbr_offset = 0x00000000 addr_size = 0x08 (next CU at 0x0005da09)

0x0005a5ef: TAG_compile_unit [106] *
AT_producer( “Apple LLVM version 8.1.0 (clang-802.0.42)” )
AT_language( DW_LANG_ObjC )
AT_name( “/Users/mymac/Desktop/代码/新tutk/appname/appname/DeviceControllerViewController.m” )
AT_stmt_list( 0x00012c31 )
AT_comp_dir( “/Users/mymac/Desktop/代码/新tutk/appname” )
AT_APPLE_optimized( 0x01 )
AT_APPLE_major_runtime_vers( 0x02 )
AT_low_pc( 0x0000000100022438 )
AT_high_pc( 0x0000000100026fe0 )

0x0005b7c2: TAG_subprogram [111] *
AT_low_pc( 0x0000000100022ca4 )
AT_high_pc( 0x0000000100022fb0 )
AT_frame_base( reg29 )
AT_object_pointer( {0x0005b7e1} )
AT_name( “-[DeviceControllerViewController viewDidAppear:]” )
AT_decl_file( “/Users/mymac/Desktop/代码/新tutk/appname/appname/DeviceControllerViewController.m” )
AT_decl_line( 151 )
AT_prototyped( 0x01 )
AT_APPLE_optimized( 0x01 )
Line table dir : ‘/Users/appname/Desktop/代码/新tutk/appname/appname’
Line table file: ‘DeviceControllerViewController.m’ line 179, column 13 with start address 0x0000000100022f84

Looking up address: 0x0000000100022f90 in .debug_frame… not found.

可以看到DeviceControllerViewController.m这个文件出了问题,
在这个方法里崩溃了[DeviceControllerViewController viewDidAppear:]
在Line table file: ‘DeviceControllerViewController.m’ line 179, column 13
在179行这个代码

有什么不懂得下面留言
*到此结束**

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Flutter使用友盟分享,首先需要在项目添加友盟分享的插件。可以使用flutter_umeng_share插件,它提供了友盟分享的各种功能。 1. 在pubspec.yaml文件添加依赖: ``` dependencies: flutter_umeng_share: ^2.0.0 ``` 2. 在项目集成友盟分享SDK: 在Flutter项目的MainActivity.java文件,添加以下代码: ``` import com.umeng.socialize.UMShareAPI; public class MainActivity extends FlutterActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this); UMShareAPI.get(this);//添加这一行 } } ``` 3. 初始化友盟分享SDK: 在项目的main.dart文件,添加以下代码: ``` import 'package:flutter_umeng_share/flutter_umeng_share.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await FlutterUmengShare.init( androidKey: 'your_umeng_android_app_key', iosKey: 'your_umeng_ios_app_key'); runApp(MyApp()); } ``` 其,'your_umeng_android_app_key'和'your_umeng_ios_app_key'需要替换为你自己的友盟App Key。 4. 使用友盟分享: ``` import 'package:flutter_umeng_share/flutter_umeng_share.dart'; //分享文本 FlutterUmengShare.shareText('This is a test.'); //分享图片 FlutterUmengShare.shareImage(imagePath: 'image_path', text: 'This is a test.'); //分享链接 FlutterUmengShare.shareWeb( url: 'https://www.example.com', title: 'This is a test.', description: 'This is a test.', thumb: 'thumb_image_path'); ``` 以上就是在Flutter使用友盟分享的基本步骤。你可以根据自己的需求,选择更多的分享方式,例如分享音乐、视频等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值