iOS开发如何通过UMeng的错误分析解决crash问题

2023-10-28 04:10

本文主要是介绍iOS开发如何通过UMeng的错误分析解决crash问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

友盟统计有一个很适用的功能是错误分析,通过它我们可以看到App的一些crash错误,对于定位问题有帮助,那么如何根据这些错误日志解决bug呢?


今天在友盟的错误分析里面找到了一个这样的错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Application received signal SIGSEGV
( null )
(
     0   CoreFoundation                      0x2ef6dfeb  + 154
     1   libobjc.A.dylib                     0x3971cccf objc_exception_throw + 38
     2   CoreFoundation                      0x2ef6df15  + 0
     3   appname                          0xcc979 appname + 821625
     4   libsystem_platform.dylib            0x39d43f8b _sigtramp + 34
     5   UIKit                               0x31842261  + 44
     6   UIKit                               0x31842261  + 44
     7   UIKit                               0x31842261  + 44
     8   UIKit                               0x318ab1d9  + 256
     9   UIKit                               0x3182d97f  + 142
     10  UIKit                               0x318aaefd  + 128
     11  UIKit                               0x31808115  + 312
     12  UIKit                               0x31808407  + 106
     13  UIKit                               0x31884c37  + 46
     14  Foundation                          0x2f94d163 __NSFireDelayedPerform + 414
     15  CoreFoundation                      0x2ef391b7  + 14
     16  CoreFoundation                      0x2ef38dcf  + 782
     17  CoreFoundation                      0x2ef3716b  + 1210
     18  CoreFoundation                      0x2eea1f0f CFRunLoopRunSpecific + 522
     19  CoreFoundation                      0x2eea1cf3 CFRunLoopRunInMode + 106
     20  GraphicsServices                    0x33da6663 GSEventRunModal + 138
     21  UIKit                               0x317ed16d UIApplicationMain + 1136
     22  veryWallen                          0x85613 veryWallen + 529939
     23  libdyld.dylib                       0x39c29ab7  + 2
)
dSYM UUID: 76634C55-B73F-303D-BA7C-511D5B84D45A
CPU Type: armv7
Slide Address: 0x00004000
Binary Image: veryWallen
Base Address: 0x0008b000
1
2
Application received signal SIGSEGV
( null )<br><span style= "background-color: #ff6600;" >SIGSEGV</span>和<span style= "background-color: #ff6600;" >SIGBUS</span>一般是因为访问已被释放的内存或者调用不存在的方法导致的,那么上面所说的崩溃信息基本就能定性为内存被释放啦?问题是在哪里崩溃的呢,完全不知道啊,所以只能往里找了。<br>使用showinfinder进入
/Users/username(电脑名)/Library/Developer/Xcode/Archives/这个文件夹,你会看到你打包时生成的xcarchive文件,当然你得用Archives来打包。
然后来查找正确的包吧,也就是崩溃程序的这个包的dSYM UUID必须和上面崩溃信息的一样。

打开终端,输入cd 然后拖进
xcarchive
文件吧,记得加上/dSYMs然后回车,这样你就进入了/dSYMs的目录了,再输入
dwarfdump --uuid appname.app.dSYM

命令,可别脑子坏掉的也输appname就成,然后你就能看到

armv7 和 armv7s的 两个UUID了,对比下就能知道是否是这个包了,不是就继续试直到找到位置


当你找到是哪个包了在来看下一步。。。

看看这句
1
3   appname                          0xcc979 appname + 821625

 这就是崩溃时调用的地方,在终端继续输入

dwarfdump --arch=armv7 --lookup 0xcc979 对应的包的路径/dSYMs/appname.app.dSYM/Contents/Resources/DWARF/appname


就会得出结果,如果你前面没有敲错,那么你应该能看到不一样的Log信息,不是么,
复制代码
----------------------------------------------------------------------File: /Users/username/Library/Developer/Xcode/Archives/2014-10-16/veryWallen 14-10-16 上午11.51.xcarchive/dSYMs/appname.app.dSYM/Contents/Resources/DWARF/appname (armv7)
----------------------------------------------------------------------
Looking up address: 0x0000000000097525 in .debug_info... found!0x00223f5a: Compile Unit: length = 0x000021d9  version = 0x0002  abbr_offset = 0x00000000  addr_size = 0x04  (next CU at 0x00226137)0x00223f65: TAG_compile_unit [1] *AT_producer( "Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)" )AT_language( DW_LANG_ObjC )AT_name( "/Users/paobao/Documents/veryWallen/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m" )AT_stmt_list( 0x0006eca0 )AT_comp_dir( "/Users/paobao/Documents/veryWallen/Pods" )AT_APPLE_optimized( 0x01 )AT_APPLE_major_runtime_vers( 0x02 )AT_low_pc( 0x00096888 )0x002253ff:     TAG_subprogram [10] *AT_name( "-[AFHTTPSessionManager POST:parameters:constructingBodyWithBlock:success:failure:]" )AT_decl_file( "/Users/paobao/Documents/veryWallen/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m" )AT_decl_line( 179 )AT_prototyped( 0x01 )AT_type( {0x00224de4} ( NSURLSessionDataTask* ) )AT_APPLE_isa( 0x01 )AT_accessibility( DW_ACCESS_public )AT_low_pc( 0x00097454 )AT_high_pc( 0x000976ec )AT_frame_base( r7 )AT_object_pointer( {0x0022541b} )
Line table dir : '/Users/paobao/Documents/veryWallen/Pods/AFNetworking/AFNetworking'
Line table file: 'AFHTTPSessionManager.m' line 185, column 0 with start address 0x00000000000974a4Looking up address: 0x0000000000097525 in .debug_frame... found!0x0000c930: FDElength: 0x0000000cCIE_pointer: 0x00000000start_addr: 0x00097454 -[AFHTTPSessionManager POST:parameters:constructingBodyWithBlock:success:failure:]range_size: 0x00000298 (end_addr = 0x000976ec)Instructions: 0x00097454: CFA=4294967295+4294967295
复制代码

 

 看一下结果:发现有AT_name、Line table dir :、Line table file,没错,你能找到了出错的文件,是哪一行。。。(也许我不小心弄错了内存地址,不过没事,知道怎么找问题就行,不是么)

于是剩下的就靠你自己判断了。。。

 

今天到此为止!!!

还不明白看这个,我也是在紧跟前人的脚步
http://lieyunye.github.io/blog/2013/09/10/how-to-analyse-ios-crash-log/

这篇关于iOS开发如何通过UMeng的错误分析解决crash问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql