symbolicatecrashの処理が終わらないクラッシュレポート

iOSアプリのクラッシュ時に吐き出されるクラッシュレポートのメモリイメージをシンボルテーブルと引き合わせてヒューマンリーダブルなスタックトレースを得るsynbolicateというのをいままでやったことなかったんだけど、今回再現しないクラッシュの原因究明のためにやってみた。んだけど、なんか処理が終わらないように見える。初めてだったのでこういうもんかなとずっと待ってみたんだけど、やっぱり終わらない。perlスクリプトだというsymbolicatecrash(ここのを落とした)をいじって動作状況をみてみたところ、クラッシュリポートのメモリイメージに循環参照(? じゃなくて、単に同じメモリイメージの項目が大量にあるので処理に時間んがかかるだけかな)があってそこでシンボル検索が無限ループになって終わらないようになっているっぽかった。

while ( length($nextIDKey) ) {
    last if ( !length($images{$nextIDKey}{nextID}) );
    $nextIDKey = $images{$nextIDKey}{nextID};
}

というとこを、

while ( length($nextIDKey) ) {
    last if ( !length($images{$nextIDKey}{nextID}) );
    $nextIDKey = $images{$nextIDKey}{nextID};
    last if ( $nextIDKey == $images{$nextIDKey}{nextID} );
}

とかしたらとりあえず出力された。

同様の症状についての記事。クラッシュレポートのライブラリアドレステーブルが変になるのはiOS9からの現象らしい。