2010年9月3日金曜日

+[NSThread callStackSymbols]でコールスタックのダンプ

iOS 4 から NSThread にクラスメソッド +callStackSymboles が追加された。これはその時点でのコールスタックの内容を配列で返してくれるというもの。
NSThread Class Reference - callStackSymboles

例えば適当なメソッドでコンソールへ出力すると:
- (void)changeStateOfSwitch:(id)sender
{
 NSLog(@"%@", [NSThread callStackSymbols]);
}

こうなる。
0   SampleApp     0x00037936 -[PreferenceViewController changeStateOfSwitch:] + 44
 1   UIKit             0x000d2e14 -[UIApplication sendAction:to:from:forEvent:] + 119
 2   UIKit             0x002a1c41 -[_UISwitchSlider sendAction:to:forEvent:] + 104
 3   UIKit             0x0015e71b -[UIControl(Static) _sendDelayedActions:] + 477
 4   UIKit             0x0015c5cf -[UIControl(Internal) _sendDelayedActions] + 42
 5   UIKit             0x001d8e47 -[UISlider _sendDelayedActions] + 110
 6   Foundation        0x01e39cea __NSFireDelayedPerform + 441
 7   CoreFoundation    0x02a00d43 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
 8   CoreFoundation    0x02a02384 __CFRunLoopDoTimer + 1364
 9   CoreFoundation    0x0295ed09 __CFRunLoopRun + 1817
 10  CoreFoundation    0x0295e280 CFRunLoopRunSpecific + 208
 11  CoreFoundation    0x0295e1a1 CFRunLoopRunInMode + 97
 12  GraphicsServices  0x02c6a2c8 GSEventRunModal + 217
 13  GraphicsServices  0x02c6a38d GSEventRun + 115
 14  UIKit             0x000e0b58 UIApplicationMain + 1160
 15  SampleApp         0x0000203c main + 102
 16  SampleApp         0x00001fcd start + 53


おお、これは便利。前からこういうのが欲しかった。
コールスタックの内容はデバッガを使えば確認できるけれど NSLogだとお手軽に使える。

0 件のコメント:

コメントを投稿