IAR C-SPYデバッガを使用したデバッグ
アプリケーションのデバッグ
デバッガの起動
ウィンドウの編成
ソース文の検証
変数の検証
ブレークポイントの設定とモニタ
逆アセンブリモードのデバッグ
メモリのモニタ
ターミナルI/Oの表示
プログラムの最後まで実行
このチュートリアルでは、前のチュートリアルで始めた開発サイクルを引き続き実行し、C-SPY®の基本機能について説明します。
インストールされているIARシステムズ製品のパッケージによって、C-SPYが含まれている場合といない場合があります。チュートリアルでは、C-SPYシミュレータの使用を前提としています。
アプリケーションのデバッグ
前のチュートリアルで作成した、project1.outアプリケーションを、C-SPYで実行します。C-SPYには、変数のモニタ、ブレークポイントの設定、逆アセンブリモードでのコード表示、レジスタとメモリのモニタ、[ターミナルI/O]ウィンドウなどへのプログラム出力の出力などの機能があります。
デバッガの起動
C-SPYデバッガを起動する前に、いくつかのオプションを設定する必要があります。
1
プロジェクト>オプションを選択して、デバッガカテゴリを選択します。設定ページで、ドライバドロップダウンリストからシミュレータが選択されていることと、[Run to main]が選択されていることを確認します。[OK]をクリックします。
2
プロジェクト>ダウンロードしてデバッグを選択します。別の方法として、ツールバーのダウンロードしてデバッグボタンをクリックすることもできます。C-SPYが起動され、project1.out アプリケーションがロードされます。IDEですでに開かれているウィンドウの他に、C-SPY固有のウィンドウセットが開きます。
ウィンドウの編成
IDEでは、複数のウィンドウを特定の位置にドッキングして、タブグループとして編成できます。また、ウィンドウをフローティング化することができます。フローティングウィンドウは、常に他のウィンドウよりも前に表示されます。フローティングウィンドウのサイズや位置を変更しても、現在開かれている他のウィンドウは影響を受けません。
IAR Embedded Workbench® IDEメインウィンドウの下端にあるステータスバーには、ウィンドウのサイズを変更するためのヘルプが用意されています。詳細については、 『ARM®用IDEプロジェクト管理およびビルドガイド』を参照してください。
以下のウィンドウとウィンドウの内容が開き、画面に表示されていることを確認します。その内容は、アクティブビルド設定[tutorials - project1]が表示される[ワークスペース]ウィンドウ、ソースファイルTutor.cUtilities.cが表示されるエディタウィンドウ、および[デバッグログ]ウィンドウです。
ソース文の検証
1
2
エディタウィンドウにファイルTutor.cが表示された状態で、まずデバッ>ステップオーバコマンドを使用して、ステップオーバします。
別の方法として、ツールバーのステップオーバボタンをクリックすることもできます。
InitFib関数の呼出し位置までステップ実行します。
3
デバッグ>ステップインを選択して、InitFib関数にステップインします。
別の方法として、ツールバーのステップインボタンをクリックすることもできます。
ソースレベルでステップオーバコマンドとステップインコマンドを使用すると、一度に1つずつアプリケーションの文を実行できます。ステップインは、関数やサブルーチン呼出しの内部でもステップ実行を続けます。一方、ステップオーバは、1ステップで1つの関数呼出しを実行します。詳細については、『C-SPY® ARM®用デバッグガイド』を参照してください。
ステップインを実行すると、アクティブウィンドウがUtilities.cに切り替ります。これは、InitFib関数がこのファイルに存在するためです。
4
forループに到達するまでステップインコマンドを実行します。
5
forループの先頭に戻るまでステップオーバを実行します。ステップポイントが文レベルではなく、関数呼出しレベルであることに注意してください。
文レベルで実行することもできます。デバッグ>次の実行文が設定されましたを選択すると、一度に1つずつ文を実行します。別の方法として、ツールバーの次の実行文が設定されましたボタンをクリックすることもできます。
このコマンドがステップオーバコマンドやステップインコマンドと異なる動作をすることに注意してください。
変数の検証
C-SPYでは、ソースコードの変数や式をモニタして、アプリケーションを実行したときのそれらの値をトレースできます。いくつかの方法で変数を参照できます。たとえば、ソースウィンドウで変数をマウスポインタで指す方法や、[自動]、[ローカル]、[ライブウォッチ]、[静的]、または[ウォッチ]のいずれかのウィンドウを開く方法があります。このチュートリアルでは、これらの方法の一部を説明します。変数の検証の詳細については、『C-SPY® ARM®用デバッグガイド』を参照してください。
注: 最適化レベルとしてなしが使用されている場合、すべての非静的変数はそのスコープが継続している間は有効であり、したがって、そのような変数は完全にデバッグ可能です。それよりも高いレベルの最適化が使用されている場合は、変数は完全にデバッグできない可能性があります。
[自動]ウィンドウの使用
1
表示>自動を選択して、[自動]ウィンドウを開きます。
[自動]ウィンドウには、最後に変更された式の現在の値が表示されます。
2
ウォッチポイントの設定
次に、[ウォッチ]ウィンドウを使用して変数を検証します。
3
表示>ウォッチを選択して、[ウォッチ]ウィンドウを開きます。このウィンドウは、デフォルトで現在開いている[自動]ウィンドウとともにグループ化されて、タブグループを構成していることに注目してください。
4
以下の手順に従って、変数iにウォッチポイントを設定します。[ウォッチ]ウィンドウで点線の長方形をクリックします。表示される入力フィールドに、「i」と入力して、Enterキーを押します。
エディタウィンドウから[ウォッチ]ウィンドウに変数をドラッグしても、ウォッチポイントを設定できます。
5
InitFib関数のFib配列を選択して、[ウォッチ]ウィンドウにドラッグします。
[ウォッチ]ウィンドウには、iFibの現在の値が表示されます。Fib配列を展開すると、さらに詳細にモニタできます。
6
さらに何回かステップを実行して、iFibの値が変化する様子をモニタします。
7
ブレークポイントの設定とモニタ
C-SPYには、多くの機能を備えた強力なブレークポイントシステムが用意されています。ブレークポイントの詳細については、『C-SPY® ARM®用デバッグガイド』を参照してください。
最も使いやすいのは、対話的に設定する方法です。文の内部か近くに挿入ポイントを配置してからブレークポイントの切替えコマンドを選択し、ブレークポイントを対話的に設定します。
1
以下の方法を使用して、function call GetFib(i)にブレークポイントを設定します。 最初に、エディタウィンドウで[Utilities.c]タブをクリックし、挿入ポイントを配置する文をクリックします。次に、編集>ブレークポイントの切替えを選択します。
別の方法として、ツールバーのブレークポイントの切替えボタンをクリックすることもできます。
ブレークポイントが、この関数呼出しに設定されます。関数呼出しが強調表示され、余白に赤色の点でブレークポイント位置が示されます。
定義済みのブレークポイントを全て表示するには表示>ブレークポインを選択して、[ブレークポイント]ウィンドウを開きます。[デバッグログ]ウィンドウに、ブレークポイントの実行に関する情報が表示されます。
ブレークポイントまでの実行
2
別の方法として、ツールバーの実行ボタンをクリックすることもできます。
設定されたブレークポイントまでアプリケーションが実行されます。[ウォッチ]ウィンドウにはFib式の値が表示され、[デバッグログ]ウィンドウにはブレークポイントに関する情報が表示されます。
3
ブレークポイントを削除するには、ブレークポイントを選択し、右クリックしてコンテキストメニューでブレークポイントの切替えコード)]を選択するか、編集メニューでブレークポイントの切替えを選択します。
逆アセンブリモードのデバッグ
C-SPYでは、通常はC/C++ソースモードを使用するほうが短時間で直接的にデバッグできます。ただし、低レベルルーチンも完全に制御する必要がある場合は、逆アセンブリモードでデバッグすることもできます。このモードでは、1つのステップが1つのアセンブラ命令に対応します。C-SPYでは、2つのモードを自由に切り替えることができます。
1
まずアプリケーションをリセットするには、ツールバーのリセットボタンをクリックします。
2
[逆アセンブリ]ウィンドウをまだ開いていない場合、表示>逆アセンブを選択して開きます。現在のC文に対応するアセンブラコードが表示されます。
コードカバレッジ情報を表示するには、[逆アセンブリ]ウィンドウで右クリックしてコードカバレッジ>有効を選択し、コンテキストメニューからコードカバレッジ>表示を選択します。
[逆アセンブリ]ウィンドウでステップコマンドを試しても、コードカバレッジ情報が緑の菱形で表示されることを確認します。
メモリのモニタ
[メモリ]ウィンドウを使用すると、選択したメモリエリアをモニタできます。以下の例では、配列Fibに対応するメモリがモニタされます。
1
表示>メモリを選択して、[メモリ]ウィンドウを開きます。
2
[Utilities.c]ウィンドウをアクティブにして、[Fib]を選択します。それをCソースウィンドウから[メモリ]ウィンドウにドラッグします。
[メモリ]ウィンドウでFibに対応するメモリの内容が選択されます。
3
メモリの内容を16ビットのデータ単位で表示するには、[メモリ]ウィンドウのツールバーにあるドロップダウンの矢印メニューから[x2 Units]コマンドを選択します。
必ずしもすべてのメモリ単位がCアプリケーションのInitFib関数で初期化されたわけではない場合、ステップオーバを継続すると、メモリの内容がどのように更新されるか分かります。
メモリの内容を変更するには、[メモリ]ウィンドウで値を編集します。編集するメモリの内容に挿入ポイントを配置して、値を入力します。
[メモリ]ウィンドウを閉じます。
ターミナルI/Oの表示
場合によっては、stdinstdoutを使用するアプリケーションの構文を、ハードウェアを使用しないでデバッグする必要があります。C-SPYでは、[ターミナルI/O]ウィンドウを使用して、stdinstdoutをシミュレーションできます。
注: [ターミナルI/O]ウィンドウは、セミホスティングまたはIARブレークポイント出力オプションを使用してプロジェクトをリンクした場合にのみ、C-SPYで使用できます。これは、stdinstdoutをデバッガの[ターミナルI/O]ウィンドウに接続する低レベルルーチンが、リンクされていることを意味します(アプリケーションのリンクを参照)。
1
表示>ターミナルI/Oを選択すると、I/O操作からの出力が表示されます。
ウィンドウに表示される内容は、アプリケーションをどこまで実行したかによって異なります。
プログラムの最後まで実行
1
アプリケーションの実行を完了するには、デバッグ>実行を選択します。
別の方法として、ツールバーの実行ボタンをクリックすることもできます。
C-SPYは、それ以上ブレークポイントを検出しなければ、そのままアプリケーションの最後に到達しました、プログラムの 最後まで実行メッセージを[デバッグログ]ウィンドウに出力します。
これで、アプリケーションからのすべての出力が[ターミナルI/O]ウィンドウに表示されました。
既存のアプリケーションをもう一度起動する場合は、デバッグ>リセッを選択するか、ツールバーのリセットボタンをクリックします。
2
C-SPYを終了するには、デバッグ>デバッグの停止を選択します。別の方法として、ツールバーのデバッグの停止ボタンをクリックすることもできます。IAR Embedded Workbench IDEのメインウィンドウが表示されます。
C-SPYには、他にも多くのデバッグ機能があります。マクロや割込みシミュレーションなど、その一部については、以降のチュートリアルの章で説明します。
C-SPYの詳細な使用方法については、『C-SPY® ARM®用デバッグガイド』を参照してください。