2011-07-28 16 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.私は例外ブレークポイントを追加することによって、コールスタックを表示することができています

- ログインしていない例外ブレークポイントを過ぎて継続、しかし、コンソールには何もありません(あいまいでもありません。SIGABRTまたはEXC_BAD_ACCESSメッセージ)。

[Edit Scheme]ウィンドウの[Diagnostics]タブで[例外をログに記録]と[ゾンビオブジェクトを有効にする]がオンになっていますが、これは役に立ちませんでした。他にも設定がありますか?

ありがとうございます。

+0

おそらく何かが役に立ちます。申し訳ありませんが、私は提供するより具体的な何も持っていません。 http://developer.apple.com/library/mac/#documentation/IDEs/Conceptual/Xcode4TransitionGuide/Debugging/Debugging.html – dcpomero

+0

変わったのは、MAC Lionでxcode 4を使用していて、 xcode3の同じ方法!あなたはXcode4を持っていますか?どのOS? –

+0

Xcode 4.2がSnow Leopardで動作しています。私は単に何かが誤って構成されていると確信しています。 –

答えて

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の$バリアント$アップ 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

ああ、少なくとも私はそう思います:-)それは言い訳です:_問題はxyzで解決するようです、ここに私が得ているログIfしたがって、少し明確にすることを検討するかもしれません(ログ/トレースのフォーマットを含む) – 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; 
    } 
} 
関連する問題