2012-11-30 3 views
8

私は、ユーザーからのコンソールスタック(クラッシュレポートではありません)を持っていて、アプリケーションで最後に立ったメソッド呼び出しを特定しようとしています。atosを使用してdSYMでクラッシュしたメソッド名を確認

私は使用しているアプリケーションのバージョンを知っており、そのリリース/デバッグビルドのコピーと、アーカイブされたコピーのdSYMファイルがあります。

しかし、atosを使用してメモリアドレスを吐くと、それは役に立たないようです。 (私は下のスタックから0x000000010e703bc0を使用しています。)

craig-mbp:Desktop Craig$ atos -o MyApp.app_1.0.0.dSYM/Contents/Resources/DWARF/MyApp -arch x86_64 
0x000000010e703bc0 (<- entered by me) 
0x000000010e703bc0 (<- console output) 

私はいくつかの並べ替えのオフセットを入力する必要がありますか?または、私のプログラムのメモリブロック内の実際の場所を、ユーザーが私に提供したアドレスに基づいて決定する何らかの種類のメモリアドレス計算ですか?

これは私が受け取ったスタックトレースの全体です:

28/11/12 10:48:56.220 AM MyApp[411] (
    0 CoreFoundation      0x00007fff8fee90a6 __exceptionPreprocess + 198 
    1 libobjc.A.dylib      0x00007fff8e94a3f0 objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff8fee8e7c +[NSException raise:format:] + 204 
    3 Foundation       0x00007fff92b1ce5c -[NSPlaceholderString initWithString:] + 93 
    4 Foundation       0x00007fff92b1cde4 +[NSString stringWithString:] + 43 
    5 MyApp        0x000000010e703bc0 MyApp + 23488 
    6 MyApp        0x000000010e70a038 MyApp + 49208 
    7 MyApp        0x000000010e70b41a MyApp + 54298 
    8 MyApp        0x000000010e70bb92 MyApp + 56210 
    9 Foundation       0x00007fff92b22db5 __NSFireDelayedPerform + 358 
    10 CoreFoundation      0x00007fff8fea5da4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 
    11 CoreFoundation      0x00007fff8fea58bd __CFRunLoopDoTimer + 557 
    12 CoreFoundation      0x00007fff8fe8b099 __CFRunLoopRun + 1513 
    13 CoreFoundation      0x00007fff8fe8a6b2 CFRunLoopRunSpecific + 290 
    14 HIToolbox       0x00007fff8b31c0a4 RunCurrentEventLoopInMode + 209 
    15 HIToolbox       0x00007fff8b31be42 ReceiveNextEventCommon + 356 
    16 HIToolbox       0x00007fff8b31bcd3 BlockUntilNextEventMatchingListInMode + 62 
    17 AppKit        0x00007fff948e7613 _DPSNextEvent + 685 
    18 AppKit        0x00007fff948e6ed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128 
    19 AppKit        0x00007fff948de283 -[NSApplication run] + 517 
    20 AppKit        0x00007fff94882cb6 NSApplicationMain + 869 
    21 MyApp        0x000000010e6ffab4 MyApp + 6836 

答えて

14

それはロードアドレスを期待しています。あなたは試してみました:

atos -o MyApp.app_1.0.0.dSYM/Contents/Resources/DWARF/MyApp -arch x86_64 -l 0x000000010E6FE000 

を私は0x000000010e6ffab4から6836(base10)を減算することによってあなたの例から0x000000010E6FE000を取得...またはあなたがMyAppのためにそこに示された他の数学の項目のいずれかを使用することができます。

ここに私の最近のクラッシュの例があります。ここでは、0x2d000がクラッシュログから明らかです。最初の行はコマンドラインで入力した行です。それ以降の行はすべてプログラム出力です(人為的に$または$>で入力をインデントします...そのようなプロンプトは画面に表示されません)。

$ atos -o /x/xcode/DerivedData/Xxxx/Build/Products/Debug-iphoneos/Xxxx.app.dSYM/Contents/Resources/DWARF/Xxxx -l 0x2d000 
got symbolicator for /x/xcode/DerivedData/Xxxx/Build/Products/Debug-iphoneos/Xxxx.app.dSYM/Contents/Resources/DWARF/Xxxx, base address 1000 
$> 0x0002f9a6 
0x000039a6 (in Xxxx) 
$> 0x0002f940 
0x00003940 (in Xxxx) 
$> 0x000c70f6 
-[TFHTTPOperation connection:didReceiveData:] (in Xxxx) + 754 
+0

私が必要としていたのは、 '6836 'をBase10に変換してメモリアドレスから引き出すことでした。 (そして、そのスライドの値を 'atos'に渡してください。)今、完全に象徴的なスタックトレースがあります。ありがとうございます。 –

関連する問題