【问题标题】:Unhelpful Swift iOS crash reports无用的 Swift iOS 崩溃报告
【发布时间】:2015-04-30 19:59:31
【问题描述】:

我正在使用 Swift 开发一个 iOS 应用程序。该应用程序以 Apple Maps 为中心。我是 iOS 开发的新手。我正在使用Fabric.io 测试分发应用程序并获取崩溃报告。但是,我收到的许多崩溃报告都不是很有帮助。有时崩溃报告只指定崩溃发生的方法,但不给我任何关于它为什么崩溃的线索。 我正在尝试了解这是否是标准的,或者我是否应该切换到另一个崩溃报告服务。

以下是此类崩溃报告的示例:

Crashed: com.apple.main-thread
EXC_BREAKPOINT UNKNOWN at 0x00000001000a68f8

Thread : Crashed: com.apple.main-thread
0  <APP NAME>                     0x00000001000a68f8 <APP NAME>.MapViewController.(getMapAnnotations (<APP NAME>.MapViewController) -> (Swift.Double, long : Swift.Double) -> ()).(closure #1).(closure #1) (MapViewController.swift)
1  <APP NAME>                     0x00000001000a6570 <APP NAME>.MapViewController.(getMapAnnotations (<APP NAME>.MapViewController) -> (Swift.Double, long : Swift.Double) -> ()).(closure #1).(closure #1) (MapViewController.swift)
2  libdispatch.dylib              0x0000000192ed13ac _dispatch_call_block_and_release + 24
3  libdispatch.dylib              0x0000000192ed136c _dispatch_client_callout + 16
4  libdispatch.dylib              0x0000000192ed5980 _dispatch_main_queue_callback_4CF + 932
5  CoreFoundation                 0x00000001820f9fa4 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
6  CoreFoundation                 0x00000001820f804c __CFRunLoopRun + 1492
7  CoreFoundation                 0x00000001820250a4 CFRunLoopRunSpecific + 396
8  GraphicsServices               0x000000018b1bf5a4 GSEventRunModal + 168
9  UIKit                          0x0000000186956aa4 UIApplicationMain + 1488
10 <APP NAME>                     0x00000001000f1914 main (AppDelegate.swift:16)
11 libdyld.dylib                  0x0000000192efaa08 start + 4

这是发生错误的方法的方法定义:

func getAnnotations(lat: Double, long: Double){ // ignore the lat long arguments

    var apiWrapper = apiWrapper()

    apiWrapper.search(completionHandler: {(error: NSError?, mediaElements: [MediaElement]?) in
        if error == nil {
            dispatch_async(dispatch_get_main_queue(), {
                self.myMapView!.removeAnnotations(self.myMapView!.annotations)
                self.mediaAnnotations = []
                for m in mediaElements! {
                    var annotation = CustomAnnotation(lat: m.lat,long: m.long, mediaTuple: (media.url, media.type))
                    self.mediaAnnotations.append(annotation)
                }
                self.reorganizeAnnotations(self.mediaAnnotations)
            })
        } 

    })
}

【问题讨论】:

  • 为什么不直接发布导致应用程序崩溃的代码?
  • 忘记了 :) 虽然我的问题不是针对这个特定错误获得帮助,但更多的是关于为什么崩溃报告不是很有帮助(意味着不报告发生崩溃的行号或原因)
  • 根据我的经验,导致此崩溃的最常见原因是强制转换 (foo as SomeClass),但 foo 实际上并不是那个类。
  • 这很正常,但 Swift 还不是很擅长。 (它在 Swift 1.2 中更好,但你还不能用它发布到 App Store。)
  • 这有什么更新吗?我有 2% 的用户遇到同样的问题,我无法复制错误,这让我很生气!

标签: ios iphone swift


【解决方案1】:

这是已编译代码的崩溃报告。您所看到的几乎是堆栈跟踪。我不确定您可能熟悉哪些语言,但我假设类似 python,它是一种解释语言,您的跟踪会为您提供行号等...

如果 swift 这样做,也意味着人们可以更容易地对编译后的代码进行逆向工程。

【讨论】:

  • 好的。所以我理解为什么我不会得到行号,但是它甚至没有报告导致崩溃的原因是否正常? (就像说我试图强制解开具有 nil 值的可选项,如果是这种情况)
  • 在崩溃报告中,没有。那时它是编译的代码。您不会在编译时展开任何优化的选项。如果需要描述性调试信息,则需要在调试模式下运行。
  • 也就是说,根据我的理解,您实际上可以通过符号化崩溃日志来获得导致崩溃的行号之类的东西。事实上,在我回来的一些崩溃报告中,我确实看到了行号。
猜你喜欢
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多