11

最近、アプリケーションの iOS 7 アップデートをプッシュし、クラッシュ レポートを有効にして Flurry Analytics を実装しました。最近、一部のユーザーでクラッシュが発生していることに気付きました。Flurry を使用すると、アプリがクラッシュした瞬間のスタック トレースを取得して問題を追跡できます。
確かに、私はクラッシュ レポートに精通しており、iTunes Connect またはメールから取得し、Xcode でシンボリック化することで、以前にそれらを使用してバグを修正しました。しかし、私は Flurry を使用してそれを行うことに成功しません。

私が試したこと:
Flurry 自体のスタック トレースを表示すると、次のようになり 慌ただしいスタック トレース ます<redacted>。いくつかの調査で、Apple が iOS 6 および 7 で多くのデバッグ シンボルを削除した
ことがわかりました。私が最初に試みたのは、独自の dSYM ファイルをアップロードすることでした。Flurry は、dSYM ファイルが保存され、dSYM ファイルを使用してクラッシュ レポートが再度シンボリック化されたと報告しました。ただし、スタック トレースは、dSYM がない場合とまったく同じでした。
問題ありません。クラッシュ レポートをダウンロードして、Xcode を使用してシンボル化するだけでよいと思いました。ダウンロードをクリックすると、次の内容のファイル (拡張子がないため、名前を に変更.crash) が得られます。

Hardware Model:      iPhone3,1
Process:         RadioPlayer [2965]
Path:            /var/mobile/Applications/E4DD7DA6-4450-4538-A1E2-AE23139FAC10/RadioPlayer.app/RadioPlayer
Identifier:      *******
Version:         1.2.0
Code Type:       ARM
Parent Process:  launchd [1]

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x548a000
Crashed Thread:  2

Thread 0:
0   libsystem_kernel.dylib              0x3aa67a8c _mach_msg_trap + 20
1   CoreFoundation                      0x3015e7cb <redacted> + 154
2   CoreFoundation                      0x3015cf37 <redacted> + 854
3   CoreFoundation                      0x300c7ce7 _CFRunLoopRunSpecific + 522
4   CoreFoundation                      0x300c7acb _CFRunLoopRunInMode + 106
5   GraphicsServices                    0x34da0283 _GSEventRunModal + 138
6   UIKit                               0x32969a41 _UIApplicationMain + 1136
7   RadioPlayer                         0x000dfb9b __mh_execute_header + 23451
8   libdyld.dylib                       0x3a9c3ab7 <redacted> + 2

Thread 1:
0   libsystem_kernel.dylib              0x3aa6783c _kevent64 + 24
1   libdispatch.dylib                   0x3a9a23f3 <redacted> + 38

Thread 2 Crashed:
0   vImage                              0x2f19d7dc <redacted> + 139
1   vImage                              0x2f1874ff _vImageFlatten_RGBA8888 + 378
2   vImage                              0x2f26e799 <redacted> + 40
3   vImage                              0x2f27d7c3 <redacted> + 674
4   vImage                              0x2f27d365 _vImageConvert_AnyToAny + 1300
5   ImageIO                             0x30efd9e7 <redacted> + 858
6   ImageIO                             0x30ef8c3b <redacted> + 2754
7   ImageIO                             0x30ef8173 <redacted> + 102
8   ImageIO                             0x30ef8057 _CGImageDestinationFinalize + 66
9   UIKit                               0x32a8a611 _UIImageJPEGRepresentation + 520
10  MediaPlayer                         0x31435319 -[MPMediaItemArtwork imageDataWithSize:atPlaybackTime:] + 36
11  MediaPlayer                         0x31435387 -[MPMediaItemArtwork albumImageDataWithSize:] + 42
12  MediaPlayer                         0x31494f0d -[MPNowPlayingInfoCenter _pushNowPlayingInfoAndRetry:] + 824
13  libdispatch.dylib                   0x3a99ed7b <redacted> + 10
14  libdispatch.dylib                   0x3a99f2f3 <redacted> + 378
15  libdispatch.dylib                   0x3a99f75b <redacted> + 38
16  libdispatch.dylib                   0x3a9b18f9 <redacted> + 76
17  libdispatch.dylib                   0x3a9b1b79 <redacted> + 56
18  libsystem_pthread.dylib             0x3aae0dbf __pthread_wqthread + 298
19  libsystem_pthread.dylib             0x3aae0c84 _start_wqthread + 8


// The file continues like this listing the other threads and overview of binary images.
// I however didn't paste that part here since I don't think it's useful.

このファイルをXcodeオーガナイザーにドラッグするだけでなく、デバイスログをインポートすることも試しました。どちらも単に何もしませんでした。リストなどに新しいデバイス ログは表示されませんでした。
次のステップ: を使用して手動でクラッシュ ログをシンボリック化しようとしていますatos。dSYMの内容を作業ディレクトリなどにコピーしてから、このコマンドを試しました

xcrun atos -arch armv7 -o RadioPlayer 0x31435387`

これが返ってき0x31435387ました。他のメモリアドレスをいくつか試しましたが、出力は毎回メモリアドレス自体だけでした。

誰でもこの問題で私を助けてもらえますか? <redacted>これらのシンボルを記号化することは、これらのクラッシュの原因となるバグを修正するのに確実に役立つため、非常に気に入っています。ありがとう!

4

3 に答える 3

10

Flurry クラッシュ レポートを XCode Organizer にドラッグできるようにするには、次のことを行う必要があることに気付きました。

  1. ファイルの名前を .crash に変更します
  2. レポートの上部にインシデント識別子の行を追加します。これは GUID のように見えるので、一意のものを配置したり、オンラインで生成したりできます。

    インシデント ID: D1D6CA1F-EC87-4677-9366-401BE050B2C8

  3. iOS およびクラッシュ レポートのバージョン行を追加します (例外タイプのすぐ上)。

    OS バージョン: iOS 7.1.1 (11D201)

    レポートのバージョン: 104

于 2014-05-26T14:04:50.150 に答える
6
  1. <redacted>システム シンボルのみの iOS 最適化です。
  2. アプリの dSYM をアップロードしても、必要な CPU アーキテクチャの iOS システム シンボルではなく、アプリ シンボルのみが含まれているため、何も変わりません。
  3. それらをローカルでシンボリケートするには、正確なシステム シンボル、またはクラッシュを引き起こした iOS のバージョンとアーキテクチャが必要です。
  4. アプリのバイナリ/dSYM でシステム シンボルをシンボル化するために使用atosしても機能しません (上記のとおり)。
  5. スタック フレーム内のアドレスを渡すだけでシンボルを取得することはできません。対応するバイナリのロード アドレスも渡す必要があります (バイナリ イメージ セクション、バイナリの行の最初のアドレスにあります)。
  6. あなたのatos例では、スタック トレースに適切なシンボルが既に表示されているアドレスを試しています。
  7. クラッシュ レポートを Xcode オーガナイザーにドラッグすると、使用可能なシンボルがあり、手動の手順を実行する必要がない場合は、レポートが既にシンボル化されているはずです。
  8. Flurry のサーバーには、シンボル自体を解決するための iOS シンボルがないようです。

したがって、ライブラリの例は0x3a99ed7b次のlibdispatch.dylibようになります。

xcrun atos -arch armv7 -o PathToLibrary -l LoadAddressOfLibrary 0x3a99ed7b

Mac 上の iOS シンボルのルート パスは、~/Library/Developer/Xcode/iOS DeviceSupport/` で、各 iOS バージョンのサブディレクトリがあります。

簡単な解決策: クラッシュ レポートをDevice LogsXcode オーガナイザーのエントリにドラッグし、必要なものがすべて揃っていることを確認します。それでも文字列の少なくとも一部が削除されない場合は<redacted>、iOS シンボルが欠落しており、手動の手順も機能しません。

于 2013-11-06T15:29:26.737 に答える
1

これは私の突飛なログで機能しましたhttp://ipartymobile.com/how-to-find-your-bug-from-ios-crash-logs/ クラッシュレポートに何も追加する必要はなく、メモリアドレスを取得してプラグインするだけでしたこの形式に「xcrun atos -arch armv7 -o MyApp 0x0000000」

于 2015-11-20T20:06:03.590 に答える