LoginSignup
13
12

More than 5 years have passed since last update.

問題検出をするためにXcodeのCode Diagnosticsを利用する。

Last updated at Posted at 2017-12-18

SENSY株式会社のnamcoです。
業務ではiOS APPの開発をしています。

今回は、xcodeのScheme - Diagonosticsを見直した時の内容を、備忘録として書き残しておこうと思

下記のような流れで。
1. Address Sanitizer
2. Thread Sanitizer
3. Main Thread Checker
4. Undefined Behaviour Sanitizer
5. まとめ

Address Sanitizer

Address Sanitizer

  • 実行時にメモリ破損やその他のメモリエラーを検出するツール。
  • チェックを有効にしてコードを実行すると、CPUの速度が2〜5倍に低下し、メモリ使用量が2〜3倍に増加する。
  • 検証例: SwiftのAddress/Thread Sanitizer

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 Checker

  • Main Threadで呼ばれるべき処理が、Main Thread以外で呼ばれていないかを実行時にチェックしてくれる。
  • CPUのオーバーヘッドは1〜2%、プロセスの起動時間は0.1秒未満。
  • デフォルトで有効になっているが、問題の箇所でプログラムの実行を止めたい場合はPause on issuesにもチェックをつける
  • 検証例:iOS 11 Xcode 9で“だいぶまとも”に!新機能をまとめてみた

Undefined Behaviour Sanitizer

Undefined Behaviour Sanitizer

まとめ

  • 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で“だいぶまとも”に!新機能をまとめてみた

以上です。

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12