gpt4 book ai didi

arrays - Swift 崩溃 : Array. _ 分配缓冲区未初始化

转载 作者:可可西里 更新时间:2023-11-01 00:52:17 24 4
gpt4 key购买 nike

我有一个集成了我们的 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) 则不会。- App 是 objc 而 framework 是 Swift

我的问题是:

specialized specialized static 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. _ 分配缓冲区未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426618/

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