DHTalk's Blog

DHTalk's Blog

马上订阅 DHTalk's Blog RSS 更新: https://zhangdinghao.cn/atom.xml

ARTS 08 - iOS Crash 分析攻略

2020年8月7日 11:36

前言:什么是ARTS?

ARTS 源于耗子叔在极客时间的专栏《左耳听风》打卡活动。

Algorithm:每周至少做一个 Leetcode 的算法题。主要是为了编程训练和学习。

Review:阅读并点评至少一篇英文技术文章。主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。

Tip:学习至少一个技术技巧。主要是为了总结和归纳你在日常工作中所遇到的知识点。

Share:分享一篇有观点和思考的技术文章。主要是为了建立你的影响力,能够输出价值观。

Algorithm

两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

Python3 代码:

class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
a = ListNode() # 保留完整的链表
l3 = a # 保留完整的链表
c = 0 # 进位
while l1 or l2:
x=l1.val if l1 else 0 # 没有下一节点时取0
y=l2.val if l2 else 0
tmp = x+y
if tmp+c <10:
l3.next = ListNode(tmp+c)
c=0 # 不进位,清零
else:
l3.next = ListNode(tmp+c-10)
c=1 # 进位,进1
# print(tmp)
# print(l1)
# print(l2)
if l1:
l1 = l1.next # 进入链表的下一节点
if l2:
l2 = l2.next # 进入链表的下一节点
l3 = l3.next
if c==1:
l3.next = ListNode(1) # 最后一个进位增加一个末尾节点,元素为1
return a.next # a的第一个是0,因此去头节点

Review

iOS Crash 分析攻略

本文主要从 Crash 日志渠道、Crash 捕获的原理、看懂 Crash 日志、Crash分析方法 等角度向大家普及下 Crash 原理及分析的思路。

其中讲到的知识点有:Mach异常、UNIX信号、常见 Crash 错误码、Mach-O、汇编等。

Crash 定位的过程是不断追溯 Crash 现场发生了什么的过程,通过对 Crash 日志的原理和内容的深入了解,可以帮助我们更快更好的定位应用崩溃问题。

然而现实中可能还是会有些疑难的 Crash 不易定位,是因为 Crash 日志其实也并未保存了 Crash 现场最全的信息,更进一步的优化就是丰富 Crash 日志的信息,让我们获取更多的 Crash 现场信息, 比如 KSCrash 这个框架在这块做了一些努力。这些开源项目的代码是值得学习的。

参考&引用&拓展阅读

总线错误: https://zh.wikipedia.org/wiki/%E6%80%BB%E7%BA%BF%E9%94%99%E8%AF%AF

书籍:《深入解析 Mach OS X & iOS 操作系统》

崩溃捕获系统的原理: https://junyixie.github.io/2019/09/28/CrashMonitorSystem/

分析iOS Crash文件: https://developer.aliyun.com/article/8854

iOS开发同学的arm64入门: https://blog.cnbluebox.com/blog/2017/07/24/arm64-start/

SIGSEGV 和 SIGBUS:...

剩余内容已隐藏

查看完整文章以阅读更多