3

アプリにクラッシュ ログを追加しようとしていますがsignal、標準の「致命的な」シグナルをキャッチするようにハンドラーを設定しています。ロギングのためにシグナルハンドラで実際に/単に収集できる「原因」情報(ある場合)は何ですか?

(私は約 2 時間グーグルで作業しましたが、見つけたもののほとんどは他の環境用であり、複雑すぎて信頼できません。特に iOS 環境で簡単にできることを探しています。)

(Objective-C 例外をキャッチするための Objective-C 例外ハンドラーが既にあります。)

4

2 に答える 2

3

これをしないでください。Landon Fuller がここで強調しているように、適切で安全なクラッシュ レポートを作成することは非常に困難です: http://landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.html

簡単に言えば、アプリがクラッシュしたときにのみ非同期セーフ コードを使用できるため、Objective-C メソッドの呼び出しは既定では安全ではありません。

代わりに、PLCrashReporter などの既存のクラッシュ レポート ライブラリや、既存の他のライブラリやサービスを使用してください: https://code.google.com/p/plcrashreporter/

于 2013-01-14T21:18:08.847 に答える
2

これでスタック トレースを取得できます。

+ (NSArray *)backtrace {
    void* callstack[128];
    int frames = backtrace(callstack, 128);
    char **strs = backtrace_symbols(callstack, frames);

    int i;
    NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frames];
    for (i = 0; i < XXX; i++) {
        [backtrace addObject:[NSString stringWithUTF8String:strs[i]]];
    }
    free(strs);

    return backtrace;
}
于 2013-01-14T19:25:49.860 に答える