2011-04-14 62 views
5

一般來說,我們如何避免在我們的Mac應用程序中發生objc_msgSend()崩潰?另外,我們如何避免EXC_BAD_ACCESS崩潰?我們爲什麼得到它?我們如何管理這些類型的錯誤?他們正在增加我們的應用程序,並希望就此問題提供指導和幫助。可可應用程序中的objc_msgSend()和EXC_BAD_ACCESS

我們正在使用XCode 3.2.5,我們的項目是一個可可,使用Objective-C語言。我們的web服務是一個IIS供電的ASP.Net網站(我們可以從這裏下載/上傳XML文件和圖像)。

我們正在Mac上開發一個可可應用程序,我們在啓動應用程序的十次嘗試中遇到過這樣的兩次。這個應用程序有一個草圖應用程序,當我們運行應用程序,它只是在1分鐘內凍結和崩潰,而不做任何事情。這個應用程序做一些功能是:從網絡

  • 下載xml和解釋我們的應用程序
  • 登錄到Web服務
  • 有一個速寫本
  • 具有定時
  • 拖放功能
  • 上傳XML數據
  • 下載圖像,並顯示在我們的應用程序

崩潰不限於應用程序發佈後。有時候,在拖放,下載數據集,以及在我們的Mac應用程序上添加/編輯/刪除功能等操作程序時,應用程序也會崩潰。

老實說,我們對這個開發平臺和環境比較陌生,而且我們還在學習。你能指導我們解決這個問題嗎?像一些資源或提示我們做錯了什麼?感謝這裏每個人都有更多更多的權力。


如下因素是崩潰報告的一個例子:

Process:   Sketch [63065] 
Path:   /Users/william_hooley_27Inch/Desktop/untitled folder/MacGlass.app/Contents/MacOS/Sketch 
Identifier:  com.apple.CocoaExamples.Sketch 
Version:   1.049 (48.1) 
Code Type:  X86 (Native) 
Parent Process: launchd [116] 
Date/Time:  2011-04-14 13:12:15.421 +1000 
OS Version:  Mac OS X 10.6.5 (10H574) 
Report Version: 6 
Interval Since Last Report:   714907 sec 
Crashes Since Last Report:   17 
Per-App Interval Since Last Report: 206437 sec 

Per-App Crashes Since Last Report: 5 
Anonymous UUID:      
086C860F-E28E-4256-84F9-9692782AAD01 
Exception Type: EXC_BAD_ACCESS 
(SIGBUS) Exception Codes: 
KERN_PROTECTION_FAILURE at 
0x0000000000000044 Crashed Thread: 0 
Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: Dispatch queue: 
com.apple.main-thread 0 
com.apple.AppKit    
0x91a8e6cb 
_recursiveInvalidateCachedVisibleRectValue 
+ 24 1 com.apple.CoreFoundation  0x995f02c0 CFArrayApplyFunction + 224 
2 com.apple.AppKit    
0x91a8e70d 
_recursiveInvalidateCachedVisibleRectValue 
+ 90 3 com.apple.CoreFoundation  0x995f02c0 CFArrayApplyFunction + 224 
4 com.apple.AppKit    
0x91a8e70d 
_recursiveInvalidateCachedVisibleRectValue 
+ 90 5 com.apple.CoreFoundation  0x995f02c0 CFArrayApplyFunction + 224 
6 com.apple.AppKit    
0x91a8e70d 
_recursiveInvalidateCachedVisibleRectValue 
+ 90 7 com.apple.CoreFoundation  0x995f02c0 CFArrayApplyFunction + 224 
8 com.apple.AppKit    
0x91a8e70d 
_recursiveInvalidateCachedVisibleRectValue 
+ 90 9 com.apple.CoreFoundation  0x995f02c0 CFArrayApplyFunction + 224 
10 com.apple.AppKit    
0x91a8e70d 
_recursiveInvalidateCachedVisibleRectValue 
+ 90 11 com.apple.CoreFoundation  0x995f02c0 CFArrayApplyFunction + 224 
12 com.apple.AppKit    
0x91a8e70d 
_recursiveInvalidateCachedVisibleRectValue 
+ 90 13 com.apple.CoreFoundation  0x995f02c0 CFArrayApplyFunction + 224 
14 com.apple.AppKit    
0x91a8e70d 
_recursiveInvalidateCachedVisibleRectValue 
+ 90 15 com.apple.AppKit    0x91a8e2e1 -[NSView _setSuperview:] + 
684 16 com.apple.AppKit    
0x91a8db02 -[NSView addSubview:] + 383 
17 com.apple.CocoaExamples.Sketch 
0x00094cbf -[viewTasksDisplay Appear:] 
+ 242 18 com.apple.CocoaExamples.Sketch 
0x000c2e8f -[MainWindow 
ShowLeftScreen:] + 964 19 
com.apple.CocoaExamples.Sketch 
0x0003e301 -[viewOptionMenuItemmouseDown:] + 2055 20 
com.apple.AppKit    
0x91bc6c68 -[NSWindow sendEvent:] + 
5549 21 com.apple.AppKit    
0x91adf817 -[NSApplication sendEvent:] 
+ 6431 22 com.apple.AppKit    0x91a732a7 -[NSApplication run] + 917 
23 com.apple.AppKit    
0x91a6b2d9 NSApplicationMain + 574 24 
com.apple.CocoaExamples.Sketch 
0x0001b33e main + 30 25 
com.apple.CocoaExamples.Sketch 
0x00001eba start + 54 Thread 1: 
Dispatch queue: 
com.apple.libdispatch-manager 0 
libSystem.B.dylib    
0x98002982 kevent + 10 1 
libSystem.B.dylib    
0x9800309c _dispatch_mgr_invoke + 215 
2 libSystem.B.dylib    
0x98002559 _dispatch_queue_invoke + 
163 3 libSystem.B.dylib    
0x980022fe _dispatch_worker_thread2 + 
240 4 libSystem.B.dylib    
0x98001d81 _pthread_wqthread + 390 5 
libSystem.B.dylib    
0x98001bc6 start_wqthread + 30 Thread 
2: 0 libSystem.B.dylib    
0x97fdc0fa mach_msg_trap + 10 1 
libSystem.B.dylib    
0x97fdc867 mach_msg + 68 2 
com.apple.CoreFoundation  
0x995f837f __CFRunLoopRun + 2079 

另一個崩潰報告:

Date/Time:  2011-04-14 13:27:02 
+1000 OS Version:  10.6.5 (Build 10H574) Architecture: x86_64 Report 
Version: 6 Command:   MacGlass 
Path:   
/Users/william_hooley_27Inch/Desktop/untitled 
folder/MacGlass.app/Contents/MacOS/Sketch 
Version:   1.050 (48.1) Parent: 
launchd [116] PID:    63101 
Event:   hang Duration:  
3.58s (sampling started after 2 seconds) Steps:   16 (100ms 
sampling interval) Pageins:   0 
Pageouts:  0 Process:   
Sketch [63101] Path:   
/Users/william_hooley_27Inch/Desktop/untitled 
folder/MacGlass.app/Contents/MacOS/Sketch 
UID:    501 Thread edef3d4 
DispatchQueue 100 User stack: 
    16 start + 54 (in Sketch) [0x1f6a] 
     16 main + 30 (in Sketch) [0x1b3ee] 
     16 NSApplicationMain + 574 (in AppKit) [0x91a6b2d9] 
      16 -[NSApplication run] + 821 (in AppKit) [0x91a73247] 
      16 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] 
+ 156 (in AppKit) [0x91ab0fce] 
       16 _DPSNextEvent + 847 (in AppKit) [0x91ab178d] 
       16 BlockUntilNextEventMatchingListInMode 
+ 81 (in HIToolbox) [0x95bd0bd6] 
        16 ReceiveNextEventCommon + 354 (in 
HIToolbox) [0x95bd0d51] 
        16 RunCurrentEventLoopInMode + 392 (in 
HIToolbox) [0x95bd0f9c] 
         16 CFRunLoopRunInMode + 97 (in 
CoreFoundation) [0x995f7291] 
         16 CFRunLoopRunSpecific + 452 (in 
CoreFoundation) [0x995f7464] 
          16 __CFRunLoopRun + 8059 (in CoreFoundation) [0x995f9adb] 
          16 __NSFireTimer + 141 (in Foundation) [0x972c39b0] 
           16 _handleWindowNeedsDisplay + 696 (in AppKit) [0x91adb28a] 
           16 -[NSWindow displayIfNeeded] + 204 (in AppKit) [0x91aa9d40] 
            16 -[NSView displayIfNeeded] + 818 (in AppKit) [0x91ae0a57] 
            16 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] 
+ 4122 (in AppKit) [0x91b801cf] 
             16 CAViewEndDraw + 134 (in QuartzCore) 
[0x961bd926] 
             16 pthread_cond_wait$UNIX2003 + 73 (in 
libSystem.B.dylib) [0x9800b9f8] 
              16 __semwait_signal + 10 (in 
libSystem.B.dylib) [0x9800a0a6] 
Kernel stack: 
    15 semaphore_wait_continue + 0 [0x22a3dd] 
    1 lo_alltraps + 454 [0x2a08a6] 
     1 i386_astintr + 47 [0x2a9a9a] 
     1 ast_taken + 247 [0x219107] 
      1 bsd_ast + 806 [0x489088] 
      1 postsig + 432 [0x4861df] 
       1 exit1 + 449 [0x47ab28] 
       1 task_terminate_internal + 315 
[0x22c56a] 
+0

而對於'EXC_BAD_ACCESS'一個常見的原因是錯誤的內存manageme NT。你在你的應用程序中使用垃圾回收嗎? – 2011-04-14 08:03:18

+0

我推薦閱讀: [所以你墜毀在objc_msgSend()](http://www.sealiesoftware.com/blog/archive/2008/09/22/objc_explain_So_you_crashed_in_objc_msgSend.html) – 2011-04-14 10:22:44

回答

4

的像這樣的通常的原因是過度釋放對象。如果你用NSZombieEnabled運行你的代碼,控制檯輸出應該給你一個線索,看看在哪裏看。

或者,如果這是一個Macintosh應用程序,目標是10.5或更高版本,則可以啓用垃圾回收,而不必擔心保留和釋放。

0

我只是解決了objc_msgSend的EXC_BAD_ACCESS通過找到我重寫一個字符串的結尾,破壞中存儲的對象....

2

第二崩潰報告是不是死機,這是一個懸掛報告。這意味着你的應用程序很慢,沒有崩潰。

一般而言,閱讀並完全理解Cocoa Memory Management指南;內存管理中的錯誤佔了Cocoa應用程序絕大多數的崩潰。該指南可以在這裏找到:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

您還應該能夠使用工具(如Xcode調試器和Instruments中的Zombies工具)收集有關崩潰的更多詳細信息。

3

當在與調試器連接的設備上的iOS應用發生該錯誤可以找出選擇通過輸入調試控制檯

(GDB)X/S $ R1

上被稱爲

當加速度計的代理仍然設置爲釋放對象時,這幫助我發現問題。也許這個信息對其他人有幫助。

+2

![在這裏輸入圖片描述] [1] ] [1]:http://i.stack.imgur.com/otnqT.png 我做錯了嗎? – 2012-08-16 01:21:21

+0

上面的答案是針對gdb的,但從屏幕截圖中可以清楚地看到您正在使用lldb(這是自XCode 4.3以來的默認調試器)。有關如何使用lldb的信息可以在這裏找到:http://lldb.llvm.org/tutorial.html – emidander 2013-08-27 11:51:43

+0

$ r1不是它在iOS 8上爲我吹掉的註冊表。應該將堆棧跟蹤視爲事情會改變的 – clearlight 2014-11-26 19:04:54

0

我能找到的LLDB問題選擇,但對我的做法是不同的比上面用gdb語義的答案和iOS的早期版本(我目前與iOS工作8)

描述

我的堆棧跟蹤開始是這樣的:

libobjc.A.dylib`objc_msgSend: 
0x10c160000: testq %rdi, %rdi 
0x10c160003: jle 0x10c160068  ; objc_msgSend + 104 
0x10c160005: movq (%rdi), %r11 
0x10c160008: movq %rsi, %r10 
0x10c16000b: andl 0x18(%r11), %r10d <== EXC_BAD_ACCESS 

在LLDB提示,我做了以下內容:

(lldb) register read -G s r10 
    r10 = "\xffffffc16\xffffffa4\t\x01" "isKindOfClass:" 
相關問題