gpt4 book ai didi

ios - EXC_BREAKPOINT 崩溃的原因范围

转载 作者:IT王子 更新时间:2023-10-29 05:15:56 44 4
gpt4 key购买 nike

我在 Fabric 中有这个堆栈跟踪:

enter image description here

我的问题:根据崩溃日志,函数“formatMessageAuthorName”是否是导致此 EXC_BREAKPOINT 崩溃的唯一原因?例如,除了此函数中的代码之外,是否还有其他可能导致崩溃的原因?

这是我的 formatMessageAuthorName 函数:

private static func formatMessageAuthorName(firstname: String, lastname: String?=nil) -> String {
// Capitalise first character of firstname
var Cap_firstname = firstname
Cap_firstname.replaceRange(Cap_firstname.startIndex...Cap_firstname.startIndex, with: String(Cap_firstname[Cap_firstname.startIndex]).capitalizedString)


guard let lastname = lastname else { return Cap_firstname }

// if has lastname & first char, capitalise too and concat with firstname.
if let firstCharLastName = lastname.characters.first {
return "\(Cap_firstname) \(String(firstCharLastName).uppercaseString)."
} else {
return firstname
}
}

我的假设

我所知道的唯一会使函数崩溃的线索是当'firstname'是一个空字符串时,它会在这里崩溃,因为它访问了无效的数组索引:

String(Cap_firstname[Cap_firstname.startIndex])

但是,我仍然对这个假设持怀疑态度,因为我很确定“firstname”不为空(它是从服务器检索到的)。我什至通过登录一些发生此崩溃的用户帐户并使用该页面 (MessageViewController) 对其进行了测试,但我自己从未遇到过崩溃并且名字显示正确。它似乎也与 iOS 版本无关,因为我收到了 iOS 8、9 和 10 的崩溃。

在我最近的应用程序更新后,我经常遇到这种崩溃(>300 次),我不知道为什么,因为它以前从未发生过,这里的代码不会通过更新改变,而且我永远无法用受影响的用户重现它.

如果罪魁祸首只能是这个函数中的代码,而没有其他可能性(如多线程、Realm 等),我可以转而关注服务器问题,比如 'firstname' 可能是空的字符串。但是,我仍然无法想象它是怎么发生的,因为我已经使用了这些用户帐户并且我自己从未遇到过这种崩溃。

非常感谢。

最佳答案

EXC_BREAKPOINT 总是通过执行某种陷阱指令 (*) 触发,并且异常会直接传递到执行陷阱指令的线程。因此,如果您看到一个崩溃报告说这个具有这个堆栈的线程得到了一个 EXC_BREAKPOINT,这意味着该线程确实做了一些执行陷阱指令的事情。

您可能可以通过查看二进制文件中的崩溃地址来了解这一点,您会在那里看到某种陷阱指令。 swift 标准库使用陷阱指令来指示各种无效访问错误,并且该代码可能已内联到崩溃的函数中。所以你上面的例子是有道理的。

(*) EXC_BREAKPOINT 也可以用于数据监视,但这不是这里发生的事情,无论如何它们仍然会被传送到访问监视数据的线程......

关于ios - EXC_BREAKPOINT 崩溃的原因范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434741/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com