2011-07-28 29 views
10

我最近升級到Xcode 4,但尚未弄清楚如何將異常和錯誤消息記錄到運行控制檯。Xcode 4:未記錄到控制檯的異常

:在Xcode中3 [[NSArray array] objectAtIndex:1]結果在下面的被記錄到控制檯。

2011-08-10 10:27:22.061 App[28662:40b] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSArray objectAtIndex:]: index 1 beyond bounds for empty array' 
    *** Call stack at first throw: 
(
    0 CoreFoundation      0x015babe9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x0170f5c2 objc_exception_throw + 47 
    2 CoreFoundation      0x015b080c -[__NSArrayI objectAtIndex:] + 236 
    3 App         0x00002514 -[AppDelegate application:didFinishLaunchingWithOptions:] + 357 
    4 UIKit        0x003fc1fa -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163 
    5 UIKit        0x003fe55e -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439 
    6 UIKit        0x00408db2 -[UIApplication handleEvent:withNewEvent:] + 1533 
    7 UIKit        0x00401202 -[UIApplication sendEvent:] + 71 
    8 UIKit        0x00406732 _UIApplicationHandleEvent + 7576 
    9 GraphicsServices     0x01c24a36 PurpleEventCallback + 1550 
    10 CoreFoundation      0x0159c064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    11 CoreFoundation      0x014fc6f7 __CFRunLoopDoSource1 + 215 
    12 CoreFoundation      0x014f9983 __CFRunLoopRun + 979 
    13 CoreFoundation      0x014f9240 CFRunLoopRunSpecific + 208 
    14 CoreFoundation      0x014f9161 CFRunLoopRunInMode + 97 
    15 UIKit        0x003fdfa8 -[UIApplication _run] + 636 
    16 UIKit        0x0040a42e UIApplicationMain + 1160 
    17 App         0x00002393 main + 85 

此異常不記錄任何控制檯在Xcode 4

我能夠通過添加一個異常斷點來查看調用堆棧 - 然而,持續過去異常斷點不記錄任何東西到控制檯(甚至沒有模糊的消息SIGABRTEXC_BAD_ACCESS)。

我在Edit Scheme窗口的Diagnostics選項卡中選中了「Log Exceptions」和「Enable Zombie Objects」,但沒有幫助。是否還有其他設置可能會丟失?

非常感謝。

+0

也許在這裏的東西將有所幫助。對不起,我沒有更具體的提供。 http://developer.apple.com/library/mac/#documentation/IDEs/Conceptual/Xcode4TransitionGuide/Debugging/Debugging.html – dcpomero

+0

奇怪的是,我在MAC Lion中使用xcode 4,它只是在與xcode3相同的方式!你有哪些Xcode4?和哪個操作系統? –

+0

在Snow Leopard上運行的Xcode 4.2。我相信我只是有一些錯誤的配置。 –

回答

0

請考慮以提高你的gdbinit文件有以下:

How do I set these break points in ~/.gdbinit?

fb -[NSException raise] 
fb -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] 
fb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] 

#define NSZombies 
# this will give you help messages. Set to NO to turn them off. 
set env MallocHelp=YES 
# might also be set in launch arguments. 
set env NSZombieEnabled=YES 
set env NSDeallocateZombies=NO 
set env MallocCheckHeapEach=100000 
set env MallocCheckHeapStart=100000 
set env MallocScribble=YES 
set env MallocGuardEdges=YES 
set env MallocCheckHeapAbort=1 

set env CFZombie 5 

fb -[_NSZombie init] 
fb -[_NSZombie retainCount] 
fb -[_NSZombie retain] 
fb -[_NSZombie release] 
fb -[_NSZombie autorelease] 
fb -[_NSZombie methodSignatureForSelector:] 
fb -[_NSZombie respondsToSelector:] 
fb -[_NSZombie forwardInvocation:] 
fb -[_NSZombie class] 
fb -[_NSZombie dealloc] 

fb szone_error 

由於這個原帖內評論說通過肯德爾:如果你沒有一個gdbinit文件還沒有,您需要創建一個名爲.gdbinit的新文件 - 將其放在您的主目錄中並填充所提供的內容。現在每次gdb啓動時它都會執行這個文件中的命令。

希望這會有所幫助。

+0

感謝您的回答,但這不幸並沒有幫助。我不想設置斷點,我只是想要將異常記錄到控制檯。 請參閱我已添加到上面原始問題的示例。 –

0

以下所有內容shareKit都有內存泄漏!

我的所有代碼都沒有泄漏的跡象,但是是shareKit的一部分!

泄露對象#地址大小負責庫負責幀 NSMallocBlock,1 0xf641c50 32字節的Twitter - [TWInFlightSessionCallInfo setRemoteCall:] TWInFlightSessionCallInfo,1 0xf676380 16字節的Twitter - [TWSession emptyCallInfo] malloc的16個字節,1 0xf6457c0 16字節的Twitter - [TWSession recordAndIssueCallInfo:] malloc的128個字節,2 <多個> 256字節libdispatch.dylib dispatch_queue_create $ $ VARIANT向上 NSLock,1 0xf64b450 64字節的Twitter - [TWSession INIT] TWSession,1 0xf62c3e0 32字節的Twitter - [ TWTweetComposeViewController會話] NSMutableArray,1 0x2c8540 32個字節的Twitter - [TWSession INIT] NSMallocBlock,1 0x1084ebb0 32字節的Twitter - [TWInFlightSessionCallInfo setRemoteCall:]

-1

我試圖準確XCode中4的例子。6,我也得到了以下日誌:
***終止應用程序由於未捕獲的異常 'NSRangeException',原因是: '* - [__ NSArrayI objectAtIndex:]:指數1超出界限空陣'
***第一擲調用堆棧:
(0x1cd0012 0x110de7e 0x1c85b44 0x4547 0x1121705 0x552c0 0x291a64 0x1121705 0x552c0 0x55258 0x116021 0x11657f 0x1156e8 0x84cef 0x84f02 0x62d4a 0x54698 0x1c2bdf9 0x1c2bad0 0x1c45bf5 0x1c45962 0x1c76bb6 0x1c75f44 0x1c75e1b 0x1c2a7e3 0x1c2a668 0x51ffc 0x285d 0x2785爲0x1) 的libC++ abi.dylib:終止叫投擲一個例外

+0

嗯,這是毫無疑問的,但是在Xcode 4.6中沒有發生上述問題中提到的問題。我認爲這可能有助於解決這個問題... –

+0

啊,我看到了,或者至少我覺得我這樣做:-)這是說:_the問題似乎解決了xyz,這裏是日誌我越來越_如果所以,你可以考慮澄清一下(包括格式化日誌/跟蹤) – kleopatra

+0

對不起,如果這不夠清楚。問題的標題是「未記錄到控制檯的異常」,並給出了一個不記錄任何內容的示例。我只是在Xcode 4.6中嘗試了這個例子,並在那裏登錄到控制檯。這是我的陳述,我提交了日誌。我不知道我應該如何說得更清楚。 –

0

你可以通過在App Deleg中建立一個未捕獲的異常處理程序吃了。

void uncaughtExceptionHandler(NSException *exception) 
{ 
    if (exception) 
    { 
     NSLog(@"Exception %@", exception); 
     NSLog(@"Exception Call Stack %@", [exception callStackSymbols]); 
    } 

} 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    ... 

    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 
0

我在我的main.m中捕獲異常這裏是我在我最近的應用程序編碼。我還在Edit Scheme中啓用了Zombie對象,並且我還發現向我的應用添加異常斷點很有幫助。

#import <UIKit/UIKit.h> 

#import "AppDelegate.h" 

int main(int argc, char *argv[]) 
{ 
    int retVal; 
    @autoreleasepool { 
     @try 
     { 
      retVal = UIApplicationMain(argc, argv, nil,  NSStringFromClass([AppDelegate class])); 
      } 
     @catch (NSException *exception) 
     { 
      NSLog(@"CRASH===> %@", [exception callStackSymbols]); 
      @throw; 
     } 
     @finally 
     { 

     } 
     return retVal; 
    } 
}