arrays - Swift 崩溃 : Array. _allocateBufferUninitialized

标签 arrays swift crash

我有一个来自集成了我们的 Swift SDK 的应用程序的崩溃报告。我能够对其进行符号化,但是当我查看堆栈跟踪中本应属于我们的 SDK 的最后一行代码时,我无法识别它。

(堆栈的其余部分位于 Swift Core 中。混淆名称)

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000a00000008
....
7   libswiftCore.dylib      0x00000001007d337c 0x1005ec000 + 1995644
8   libswiftCore.dylib      0x00000001007d33d4 0x1005ec000 + 1995732
9   OurLib                  0x00000001003e1ed0 specialized specialized static Array._allocateBufferUninitialized<A>(Int) -> _ArrayBuffer<A> (TheCrashingClass.swift:0)
10  OurLib                  0x0000000100420200 specialized static OurLibClass.(startInternal in _9A5ED0808944BC6425F8A2C348E9DA3A)(delegate : NotificationDelegate?, send : Bool) -> () (OurLibClass.swift:0)
11  OurLib                  0x0000000100420a70 specialized static OurLibClass.start(NotificationDelegate?, send : Bool) -> () (OurLibClass.swift:47)
12  OurLib                  0x000000010041f5b0 @objc static OurLibClass.start(NotificationDelegate?, send : Bool) -> () (OurLibClass.swift:0)
13  TheApp                  0x00000001000f8f3c -[AppDelegate application:didFinishLaunchingWithOptions:] (AppDelegate.m:48)

有问题的行是这一行:

specialized specialized static Array._allocateBufferUninitialized<A>(Int) -> _ArrayBuffer<A> (TheCrashingClass.swift:0)

堆栈跟踪很困惑,因为 OurLibClass 没有调用 TheCrashingClass。客户端确认我们在 start() 调用开始时启用的打印语句没有被打印。这让我认为 CrashingClass 加载时正在调用静态属性/ block 。这是类和属性的精简版本。

public class CrashingClass : IProtocolThree, CustomStringConvertible {

    public let description = "ADescription"
    private let class1: IProtocolOne
    private var class2: IProtocolTwo?
    private let defaults: NSUserDefaults
    private let key: String
    private let class4: IProtocolOne
    private let callback: () -> ()
    private let class3 = Class3()

    public private(set) var interval: NSTimeInterval

    public var date2: NSDate? { get { } }

    public var date1: NSDate? { get { } }

    init(class1: IProtocolOne, defaults: NSUserDefaults, key: String, interval: NSTimeInterval, class4: IProtocolFour, callback: () -> ()) {
    }
}

它没有任何数组,我能想到的唯一可以作为数组进行初始化的属性是字符串。

其他一些注意事项: - 我无法在任何设备(真实设备或模拟器)上重现此问题 - 崩溃仅发生在某些设备上,但是当它发生在设备上时,它会持续发生。但是,同一类型的不同设备表现出不同的行为。例如,一台 iPad4 (ios 8.0) 总是崩溃,而另一台 iPad4 (ios 8.1) 则不会。 - 应用程序是 objc,而框架是 Swift

我的问题是:

专用专用静态Array._allocateBufferUninitialized(Int) -> _ArrayBuffer (TheCrashingClass.swift:0)

  • 我可以在 allocateBufferUninitialized 处设置一个符号断点,以便我可以看到它是从哪里调用的吗?
  • “专门专门”是什么意思?
  • 如有任何其他见解,我们将不胜感激。

最佳答案

我无法缩小有问题的代码范围。但是,我发现了问题。

问题是我们的 Swift SDK 是使用 Xcode 7.1(使用 Swift 2.1)构建的,而应用程序是使用 Xcode 7.0(使用 Swift 2.0)构建其应用程序的。如果我们使用相同版本的 Xcode 构建框架,一切都会很好。我对 Apple 非常失望,因为我们不应该在次要版本升级中发现这样的问题。

已提交雷达23338116。

关于arrays - Swift 崩溃 : Array. _allocateBufferUninitialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426618/

相关文章:

ios - UIMenuController 在 iOS 13.2 中不可见

c# - 为什么我需要 "new"来进行锯齿状数组初始化?

c++ - 读取文本文件并将每一行保存为字符串 (C++)

javascript - 在 Prop 中提取对象

ios - 应用程序不在标签上显示 var 字符串

ios - 无法找到在 Swift 中使用 Google 客户端库的用户的 serverAuthCode

c# - 如何找出 AppCrash 的原因?

google-apps-script - 如果Google脚本的 “My Executions”显示脚本未在指定时间内运行,如何获取通知

ios - misaligned_stack_error_是什么意思?

python - 数组中数字的绝对差之和