草庐IT

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

coder 2023-09-13 原文

我有一个集成了我们的 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/

有关arrays - Swift 崩溃 : Array. _ 分配缓冲区未初始化的更多相关文章

  1. ruby - 在 Ruby 中实现 `call_user_func_array` - 2

    我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)

  2. ruby-on-rails - 未初始化的常量 Psych::Syck (NameError) - 2

    在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到ruby​​gems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决

  3. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  4. Ruby Koans about_array_assignment - 非平行与平行分配歧视 - 2

    通过ruby​​koans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John

  5. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  6. ruby-on-rails - 未在 Ruby 中初始化的对象 - 2

    我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调

  7. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  8. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

  9. ruby - 在 Ruby 中重新分配常量时抛出异常? - 2

    我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案

  10. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

随机推荐