2017-06-09 18 views
0

サードパーティライブラリを使用せずに、Swift 3.0を使用してiOS 10以降のクラッシュをキャプチャするための基本コードを書き込もうとしています。iOS 10でクラッシュをキャプチャする方法iOS 10のみを使用する

私は、次の機能が見つかりました:

// Capturing exceptions 

NSSetUncaughtExceptionHandler { exception in 
     print("Exception: \(exception.name) \(exception.reason!)\(exception.description)") 
     print(exception.callStackSymbols) 
    } 

    // Capturing other crashes - **is this enough ????** 
    // I wrote these in application didFinishLaunchingWithOptions method, but these don't get called. 
    signal(SIGABRT) {(a) in 
     print(a) 
    } 

    signal(SIGABRT){(a) in 
     print(a) 
    } 

    signal(SIGILL){(a) in 
     print(a) 
    } 

    signal(SIGSEGV){(a) in 
     print(a) 
    } 

    signal(SIGFPE){(a) in 
     print(a) 
    } 

    signal(SIGBUS){(a) in 
     print(a) 
    } 
    signal(SIGPIPE){(a) in 
     print(a) 
    } 

1 - 十分なこれらの方法はありますか?

2 - もしそうなら、どこでクラッシュをキャプチャする必要がありますか?

トリガするために、私は私がプロジェクトに持っている唯一のViewControllerオブジェクトののviewDidLoadで、次の方法を書いたクラッシュ

enter image description here

しかし、この方法は私にEXC_BREAKPOINTを与え、上記のいずれかのクラッシュではありません。

3 - どのようにキャプチャできますか?EXC_BREAKPOINTはプログラムによって設定されていますか?

4 - クラッシュを誘発する方法はありますか?

答えて

0

あなたはiOSがTestFlightを持っていることを知っています.AppleのWebサイトからアプリのクラッシュを取得することはできますか?

教育的な目的でこの操作を行っても問題ありませんが、そうでない場合は、クラッシュ処理コードを書く必要はありません。

これを楽しんでいる人は、EXC_BREAKPOINTがObjC例外ではなくCPU例外であるという混乱があると思います。それらは、標準のUnixシグナルハンドラを使用してアプリケーションに渡されるため、代わりに使用する必要があります。

+0

私は楽しく教育的な目的のためにこれをやっています。シグナルハンドラのメリットとして、自分の答えに投稿したものに同意しますか?私は "signal(SIGTRAP){(a)in print(a)}"を使ってアプリケーションで修正しました。残念ながら、私は私のアプリを実行すると、印刷コードは実行されません。何か不足していますか?そのプリントをどのようにして得ることができますか?ありがとう! – mm24

関連する問題