我一直在處理我的iPhone應用程序中的一個有害的崩潰錯誤,該錯誤在從App Store下載的版本中始終可重現,但根本不在調試版本中。我已經制作了一個解決方法,它通過排除UIViewController動畫期間運行的關鍵繪圖代碼而起作用。不可重現的崩潰Bug涉及CGPathAddLineToPoint
- 崩潰日誌表明CGPathAddLineToPoint中存在斷言失敗。
- 該應用程序使用繪圖函數CGContextMoveToPoint,CGContextAddLineToPoint和CGContextStrokePath。函數CGPathCreateMutable,CGPathAddLines和CGContextAddPath也被使用,但即使在(應該)避免調用它們的配置中,該應用仍然崩潰。
- 當呈現UIViewController(動畫)時在視圖上繪製線條時發生崩潰。否則,繪圖工作沒有問題。
- 我已經在調試版本中確認每一行繪製的每一點都是真實的,並在視圖的邊界內。
- 嘗試繪圖時,應用程序立即在iOS7上崩潰。在iOS5和iOS6上,應用程序在崩潰前停止響應30秒,留下未知信息的「未知」崩潰日誌。
- 我在網上發現的類似於這個問題的唯一情況是CGFloatIsValid在OS X應用程序(包括髮布到Apple支持論壇的iPhoto崩潰日誌)中的CGPathAddLineToPoint中斷言失敗。
我不能說更多關於它,因爲應用程序從不崩潰,甚至在調試版本中發出警告。有沒有其他人遇到過這個錯誤?有沒有更好的方法來解決這個問題?
您可以在發佈版本on the App Store中查看實際解決方法。當計算器處於2D模式時,您可以看到圖形上的線條延遲到動畫完成後,當您按下[Graph]按鈕時。
崩潰日誌(運行iOS 7.0.3,應用的ARMv7從iPhone 5S)的重要組成部分:
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread: 0
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x3a5e11fc __pthread_kill + 8
1 libsystem_pthread.dylib 0x3a648a4f pthread_kill + 55
2 libsystem_c.dylib 0x3a592029 abort + 73
3 libsystem_c.dylib 0x3a571c67 __assert_rtn + 179
4 CoreGraphics 0x2fd566f5 CGPathAddLineToPoint + 149
5 (My App) 0x001464cd 0xd7000 + 455885
6 UIKit 0x324d4dd5 -[UIView(CALayerDelegate) drawLayer:inContext:] + 369
7 QuartzCore 0x3210aa75 -[CALayer drawInContext:] + 97
8 QuartzCore 0x320f4241 CABackingStoreUpdate_ + 1857
9 QuartzCore 0x321ce2e9 ___ZN2CA5Layer8display_Ev_block_invoke + 49
10 QuartzCore 0x320f3af1 x_blame_allocations + 81
11 QuartzCore 0x320f37a3 CA::Layer::display_() + 1115
12 QuartzCore 0x320d7365 CA::Layer::display_if_needed(CA::Transaction*) + 205
13 QuartzCore 0x320d6ffd CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 21
14 QuartzCore 0x320d6a09 CA::Context::commit_transaction(CA::Transaction*) + 225
15 QuartzCore 0x320d681b CA::Transaction::commit() + 311
16 QuartzCore 0x320d0549 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 53
17 CoreFoundation 0x2fc9bf67 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 19
18 CoreFoundation 0x2fc998f3 __CFRunLoopDoObservers + 283
19 CoreFoundation 0x2fc99c3f __CFRunLoopRun + 735
20 CoreFoundation 0x2fc0446d CFRunLoopRunSpecific + 521
21 CoreFoundation 0x2fc0424f CFRunLoopRunInMode + 103
22 GraphicsServices 0x349382e7 GSEventRunModal + 135
23 UIKit 0x324b9841 UIApplicationMain + 1133
24 (My App) 0x000de723 0xd7000 + 30499
25 (My App) 0x000dde0c 0xd7000 + 28172
它在斷言中崩潰。什麼是斷言信息?它應該在程序的標準錯誤中。 –
在崩潰日誌中沒有關於斷言失敗的描述。是否有其他地方的信息會被記錄下來? –
升級到Xcode 5.1後,我有類似的問題,iOS PhoneGap + jQuery Mobile應用程序。1:http://stackoverflow.com/questions/23413205/updated-to-xcode-5-1-1-causes-strange-crash-of-ios-app –