デバッガを使う

ワークスペースのツールバーにある「Run」ボタンを押した後、正常にビルド処理が終わると、Xcodeはアプリケーションを起動し、デバッグセッションを開始します。デバッグはソースエディタ内でじかに行え、データチップや、変数の値を表示するQuick Lookなど、グラフィカルツールも使用可能です。

デバッグ領域やデバッグナビゲータでは、動作中のアプリケーションの状態を調べ、実行を制御することができます。

../Art/XC_O_DebugFeatures_2x.png

優れたアプリケーションの条件として、システムに対する負荷が最小限である、というものがあります。デバッグナビゲータでは、リソースの消費状況をデバッグゲージで調べるほか、Instrumentsで処理性能を計測、分析して、問題点を突き止めることも可能です。バッテリー駆動時間への影響を最小限度に抑えるには、エネルギー消費ガイドを使います。詳細については、『Energy Efficiency Guide for iOS Apps』および『Power Efficiency Guide for Mac Apps』を参照してください。

iOSまたはwatchOSアプリケーションの場合、設計中やテスト工程の早期に、シミュレータで大きな問題をつぶしてしまうとよいでしょう。

デバッグ作業に集中できるよう、Xcodeに対してさまざまな設定が可能です。たとえば、コードがブレークポイントに達したとき、自動的に警告音を鳴らし、「Debug」というウインドウタブを開いて、デバッグ領域、デバッグナビゲータ、コード中のブレークポイント箇所を表示する、といった設定ができます。

実行を制御する

Xcodeでは、コードを行単位で実行し、所定の箇所で停止して、プログラムの状態を表示することができます。デバッグ領域では、コードの実行を制御し、プログラム変数やレジスタの値を表示し、コンソール出力を表示し、デバッガを操作することができます。さらに、フレームを描画(レンダリング)するOpenGLの関数呼び出しをたどり、ある呼び出しの時点における、レンダリング状態の情報を表示することも可能です。

デバッグ領域は、ワークスペースウインドウのツールバー内、ビューセレクタの中央にあるボタン(../Art/XC_O_debug_button_2x.png)を押すと開きます。

../Art/XC_O_DebugArea_2x.png

デバッグ領域のツールバーにある一時停止ボタン(一時停止を表す ../Art/DebugPause_2x.png と再開を表す ../Art/DebugRun_2x.png が交互に切り替わる)で、一時的に実行を停めることができます。ブレークポイントを設定するには、まずソースコードファイルを開き、実行を停止したい行のガター(行番号領域とコード領域の間にある溝)部分をクリックします。ガターの青い矢印(../Art/breakpoint_icon_2x.png)がブレークポイントの位置を表します。ブレークポイント到達時に実行するアクションの設定手順、各種のブレークポイントなど、詳しくは『Breakpoint Navigator Help』を参照してください。

アプリケーションを停止すると、その時点で実行していたコード行が緑の強調表示になります。ステップ実行は、「Debug」領域上部のバーにある、「Step Over」(../Art/IB_Debug_StepOver_2x.png)、「Step Into」(../Art/IB_Debug_StepInto_2x.png)、「Step Out」(../Art/IB_Debug_StepOut_2x.png)の各ボタンで制御します。「Step Over」は、コードの現在行(メソッド呼び出しがあれば、そこから制御が戻るまで)を実行します。現在行にメソッド呼び出しがあれば、「Step Into」により、現在行を実行した後、呼び出し先メソッドの先頭行で停止することができます。「Step Out」は、実行中のメソッドや関数の末尾まで進めるために使います。

状態情報を表示する

実行を停止するとデバッグナビゲータが開き、スタックトレースが表示されます。デバッグナビゲータでいずれかの項目を選択すると、その情報がエディタ領域やデバッグ領域に表示されます。デバッグの進行に応じて、スレッドを展開/折りたたみすることにより、スタックフレームも表示/非表示を切り替えることができます。

../Art/DebugNavigator_2x.png../Art/DebugNavigator_2x.png

ソースコードエディタで、変数の上にマウスカーソルを持っていくと、その値がデータチップに表示されます。変数に添えられた「Inspector」アイコン(../Art/QuickLookInspectorIcon_2x.png)を押すと、オブジェクトに関するObjective-Cの記述をデバッグ領域コンソールに、その説明を追加のポップオーバーに表示することができます。

../Art/DataTipInspector_2x.png

「Quick Look」アイコン(../Art/QuickLookVarIcon_2x.png)を押すと、変数の内容が画像として表示されます。独自に実装したオブジェクトについては、「Quick Look」による表示内容を独自に実装できます。詳細については、『Quick Look for Custom Types in the Xcode Debugger』を参照してください。

../Art/DataTipQuickLook_2x.png

メモリ破損を検出する

メモリ破損によるクラッシュは、再現が難しく、検出することも容易ではありません。Address Sanitizerは、アプリケーションに計測機能を追加し、Xcodeから破損が発生したアプリケーションの停止が可能になります。Address Sanitizerは、割り当てが解除されたポインタへのアクセス、ヒープやスタックのバッファオーバーフロー/アンダーフローなどのメモリの問題を検出します。

../Art/Address_Sanitizer_2x.png../Art/Address_Sanitizer_2x.png

Address Sanitizerを使うには、ターゲットのデバッグ環境で有効にし、アプリケーションを起動して操作します。Xcodeがメモリ使用を監視し、問題が発生するコードの行でアプリケーションを停止してデバッガを開きます。デバッガを使って原因を特定します。

../Art/Address_Sanitizer_enable_2x.png../Art/Address_Sanitizer_enable_2x.png

Address Sanitizerの使用方法の詳細については、「Using the Address Sanitizer」を参照してください。

Metalをデバッグする

Metalは最新のGPUを最大限活用するため、アプリケーションでの最高レベルの操作性を提供できます。Metalによってグラフィックスと計算処理の両方を強化でき、すべての処理を合理化されたAPIを使って行えます。Metalのデバッグについては、「Metal Tips and Techniques」を参照してください。概要情報については、デベロッパウェブサイトの開発者向けのMetalに関するページと『Metal Programming Guide』を参照してください。

OpenGLをデバッグする

OpenGL ESアプリケーションをビルドし、接続したデバイス上で実行すると、デバッグ領域のツールバーには「Frame Capture」ボタン(../Art/CaptureFramebutton.png)が現れます。OpenGL ESのフレーム取り込み機能により、次のようなことが可能です。

デバッガを使って描画したフレームのコンポーネントを表示している様子を図に示します。左側のデバッグナビゲータにはレンダリング木の部品、主たるデバッグビューには描画フレームその他の画像源の、色や深度が表示されています。

../Art/gputrace-after_2x.png../Art/gputrace-after_2x.png

OpenGL ESのデバッグやこれに関連する話題が、『Debug Navigator Help』や『Debug Area Help』に載っています。