2012-05-07 42 views
1

在分析我們的崩潰日誌時,我發現一個相當常見的崩潰是一種甚至在我自己的類中都不會發生的崩潰。這些是外部崩潰日誌,因此我不能重現問題。應用程序崩潰時未通過我的代碼

由於我不能調試框架,我想知道,一個切實可行的方法可以解決這個問題。

我唯一的線索是SIGSEGV可能是分段錯誤或無效指針。但就像我說,因爲我的課程似乎直接參與這對我沒有多大幫助。

的崩潰:

Exception Type: SIGSEGV 
Exception Codes: SEGV_ACCERR at 0x6b636f6c 
Crashed Thread: 0 

Thread 0 Crashed: 
0 libobjc.A.dylib      0x365c7f94 objc_msgSend + 43 
1 CoreFoundation      0x31cd23fd -[NSObject performSelector:withObject:withObject:] + 52 
2 UIKit        0x3291cfaf -[UIApplication sendAction:to:from:forEvent:] + 62 
3 UIKit        0x3291cf6b -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 30 
4 UIKit        0x3291cf49 -[UIControl sendAction:to:forEvent:] + 44 
5 UIKit        0x3291ccb9 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 492 
6 UIKit        0x3291d5f1 -[UIControl touchesEnded:withEvent:] + 476 
7 UIKit        0x3291bad3 -[UIWindow _sendTouchesForEvent:] + 318 
8 UIKit        0x3291b4c1 -[UIWindow sendEvent:] + 380 
9 UIKit        0x3290183d -[UIApplication sendEvent:] + 356 
10 UIKit        0x329010e3 _UIApplicationHandleEvent + 5826 
11 GraphicsServices     0x3572d22b PurpleEventCallback + 882 
12 CoreFoundation      0x31d4c523 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 38 
13 CoreFoundation      0x31d4c4c5 __CFRunLoopDoSource1 + 140 
14 CoreFoundation      0x31d4b313 __CFRunLoopRun + 1370 
15 CoreFoundation      0x31cce4a5 CFRunLoopRunSpecific + 300 
16 CoreFoundation      0x31cce36d CFRunLoopRunInMode + 104 
17 GraphicsServices     0x3572c439 GSEventRunModal + 136 
18 UIKit        0x3292fe7d UIApplicationMain + 1080 
19 MyApp        0x0000321f main (main.m:14) 
+0

也許是一些靜態構造函數?靜態塊在主應用程序之前執行(至少在C++中,但我確實懷疑Objective C沒有什麼不同) – BigMike

+0

好像UIControl/UIButton的目標被設置爲一個當按鈕被按下時不再存在的對象。 –

+0

你的問題解決了嗎?問題的原因是什麼? – foogry

回答

8

這個崩潰可能對您的部分錯誤的結果。如果您查看堆棧跟蹤頂部的幾行文字,它應該會提示您哪些是錯誤的。

1 CoreFoundation 0x31cd23fd -[NSObject performSelector:withObject:withObject:] + 52 
2 UIKit   0x3291cfaf -[UIApplication sendAction:to:from:forEvent:] + 62 
3 UIKit   0x3291cf6b -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 30 
4 UIKit   0x3291cf49 -[UIControl sendAction:to:forEvent:] + 44 

它看起來像某個地方你有一個對象(可能是一個視圖控制器)註冊的事件,但太快釋放。最好的辦法是在連接到調試器時嘗試重現這一點。首先檢查處理UIControl回調(如UIButtons)的代碼。

+0

我不太清楚你的意思是「UIControl回調如UIButtons」 – Besi

+0

UIControl通常通過處理用戶輸入然後回調你的代碼來工作。所以按下'UIButton'時會回調你的方法(IBAction如果使用IB,例如 - (IBAction)buttonPressed:(id)sender)。如果包含'buttonPressed:'的類在事件觸發前被釋放,那麼這將導致應用程序崩潰。 'UISwitch','UISlider'等也一樣。 – Joe

+0

我在ApplicationDidFinishLaunching方法中提出了一個viewcontroller,但它沒有保留。這解決了我的問題,謝謝! – iosDeveloper

相關問題