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