2012-04-25 83 views
2

我有一個項目在XCode 4.3.1編寫的弧,所以我不會留下保留計數。 當我在模擬器或設備上運行項目時,它運行良好。如果我在分析器和分配器下運行它,它運行良好。iPhone應用程序中斷髮布版本不在調試

但是,如果我將項目歸檔,並分發它特設並加載.ipa文件,應用程序將與控制檯消息崩潰:

<Notice>: Quilters_AppP(1812,0x3f85cd98) malloc: *** error for object 0x1109a910: pointer being freed was not allocated 
<Notice>: *** set a breakpoint in malloc_error_break to debug 

我設置斷點malloc_error_debug但由於發生錯誤在發佈的版本中,我從來沒有看到調試器。

下面是它變得非常奇怪的地方:現在我已經添加了一些NSLog語句,問題將不會重現。

這裏是日誌:

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x00000000, 0x00000000 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x34f5432c __pthread_kill + 8 
1 libsystem_c.dylib    0x36e50208 pthread_kill + 48 
2 libsystem_c.dylib    0x36e49298 abort + 88 
3 libsystem_c.dylib    0x36e0437a free + 374 
4 libobjc.A.dylib     0x36583d72 object_dispose + 14 
5 CoreFoundation     0x350b6618 -[NSObject dealloc] + 76 
6 CoreFoundation     0x350b6736 -[__NSArrayI dealloc] + 162 
7 libobjc.A.dylib     0x3658316e _objc_rootRelease + 30 
8 libobjc.A.dylib     0x36584e50 objc_release + 32 
9 libobjc.A.dylib     0x36583ea6 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 218 
10 libobjc.A.dylib     0x36583dc2 _objc_autoreleasePoolPop + 6 
11 CoreFoundation     0x350b0cf8 _CFAutoreleasePoolPop + 12 
12 UIKit       0x3218ee34 _wrapRunLoopWithAutoreleasePoolHandler + 36 
13 CoreFoundation     0x35134b14 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 12 
14 CoreFoundation     0x35132d50 __CFRunLoopDoObservers + 252 
15 CoreFoundation     0x351330aa __CFRunLoopRun + 754 
16 CoreFoundation     0x350b649e CFRunLoopRunSpecific + 294 
17 CoreFoundation     0x350b6366 CFRunLoopRunInMode + 98 
18 GraphicsServices    0x363b2432 GSEventRunModal + 130 
19 UIKit       0x321ace76 UIApplicationMain + 1074 
20 Quilters_AppP     0x0003505c main (main.m:17) 
21 Quilters_AppP     0x00034af4 0x33000 + 6900 

請幫我抓住這個難以捉摸的錯誤。該應用程序的目標是4.3/armv7。

+2

錯誤是你在釋放自動釋放池中的對象。在某個地方,你在對象上使用'autorelease',然後調用'release'。它可能不會在DEBUG上崩潰,因爲NSZombies可能已啓用或類似。 – MarkPowell 2012-04-25 19:28:50

+0

謝謝馬克,但除了Apple在main.m中提供autoreleasepool之外,我不使用發佈或自動發佈。 - Dan – 2012-04-25 20:20:56

+0

這個項目使用ARC? – MarkPowell 2012-04-25 20:23:59

回答

1

您可以使用Project的Release Build設置(這通常與Debug Build設置完全不同)來設置斷點並調試iOS應用程序。只需修改您的Build設置或您的Run/Test Schemes即可。然後清理,構建和設備調試。

+0

感謝hotpaw,但是當我編輯使用調試存檔(這是.ipa文件需要)的方案時,該應用程序將不會安裝在我的iPhone上。 - Dan – 2012-04-25 20:32:03

+0

做相反的事情,從lldb或gdb運行你的Release Build。 – hotpaw2 2012-04-25 20:35:09

+0

這讓我這個:錯誤:未能啓動'/Users/danselig/Library/Developer/Xcode/DerivedData/Quilters_AppP-cjxjnypyjdgyryfuihmreaubguvu/Build/Products/Release-iphoneos/Quilters_AppP.app/Quilters_AppP' - 未能獲得任務過程2085 – 2012-04-25 20:46:12

0

看來問題不在應用程序代碼中,而是在編譯器代碼中。該錯誤必須在ARC預編譯器或編譯器本身中。

0

這是一個編譯器錯誤;特別是在優化。測試代碼未優化,發佈代碼針對「最快,最小」進行了優化。當我刪除發佈版本的優化時,問題就消失了。

觸發這是一個託管對象上下文訪問應用程序代碼...這是一個雙循環內進行

- (NSArray *) fetchForGroup:(Group *)group 
{ 
    NSArray *array = [group.polygons allObjects]; 
    return array; 
} 

。在內循環中滿足條件時,通過「返回」退出該功能。來自此調用的數組是雙重釋放的。 - 丹

1

我有一個類似的問題。你的雙圈完全描述了我的。我有一個嵌套在兩個while循環之間的數組。在調試模式下它很好,但是當爲了發佈而構建時,它與完全相同的錯誤崩潰。

原來,在Xcode 4.xx中,您可以將-O0添加到文件的編譯器標誌中,該標誌給出了問題(在您的項目設置 - >構建階段 - >編譯源代碼下),它將關閉編譯器優化只是爲了那個單個文件。爲我工作就像一個魅力。

Drew

+0

這不是你想要做的事情。僅僅因爲它沒有打破你的DEBUG構建,並不意味着它不會最終崩潰。你有一個錯誤,你在釋放一個對象。要麼移動到ARC或讓自己熟悉內存管理(也適用於ARC)。 – 2012-10-11 17:23:15

相關問題