SENSY株式会社のnamcoです。
業務ではiOS APPの開発をしています。
今回は、xcodeのScheme - Diagonosticsを見直した時の内容を、備忘録として書き残しておこうと思
下記のような流れで。
1. Address Sanitizer
2. Thread Sanitizer
3. Main Thread Checker
4. Undefined Behaviour Sanitizer
5. まとめ
Address Sanitizer
- 実行時にメモリ破損やその他のメモリエラーを検出するツール。
- チェックを有効にしてコードを実行すると、CPUの速度が2〜5倍に低下し、メモリ使用量が2〜3倍に増加する。
- 検証例: SwiftのAddress/Thread Sanitizer
Thread Sanitizer
- スレッドセーフになってないオブジェクトに、意図せず複数スレッドでアクセスしてしまった時に検知をして、警告を出してくれる。
- Thread Sanitizerのチェックを有効にしてコードを実行すると、CPUが2〜20秒遅くなり、メモリ使用量が5〜10倍に増加する。
- 64ビットMacOSおよび64ビットiOSおよびtvOSシミュレータ(watchOSはサポートされていません)でのみサポートされている。デバイスでアプリケーションを実行するときはTSanを使用できない。
- 検証例: SwiftのAddress/Thread Sanitizer
Main Thread Checker
- Main Threadで呼ばれるべき処理が、Main Thread以外で呼ばれていないかを実行時にチェックしてくれる。
- CPUのオーバーヘッドは1〜2%、プロセスの起動時間は0.1秒未満。
- デフォルトで有効になっているが、問題の箇所でプログラムの実行を止めたい場合はPause on issuesにもチェックをつける
- 検証例:iOS 11 Xcode 9で“だいぶまとも”に!新機能をまとめてみた
Undefined Behaviour Sanitizer
- 実行時に未定義の動作を検出する。
- デバッグ構成では平均20%のCPUオーバーヘッドがある。
- 検証例:iOS 11 Xcode 9で“だいぶまとも”に!新機能をまとめてみた
まとめ
- Main Thread Checker以外は、どれを利用するにしても、パフェーマンスへの影響が大きいので、各種設定を有効にしたschemaを作っておき、デバッグしたい時のみ利用するのが良さそう。
- 諸々の使い方をappleが動画で解説してくれている。年末年始に確認しよう。
Finding Bugs Using Xcode Runtime Tools
下記参考にさせていただきました。ありがとうございます。
参考
SwiftのAddress/Thread Sanitizer
Finding Bugs Using Xcode Runtime Tools
iOS 11 Xcode 9で“だいぶまとも”に!新機能をまとめてみた
以上です。