※旧タイトル『DS-5 活用テクニック~トレース機能の使い方』のアップデート版です。
インテル® SoC FPGA 向けのソフトウェア統合開発環境として標準採用される Arm 純正ツールが Arm® DS-5 for Intel® SoC FPGA Edition (DS-5) から Arm® Development Studio for Intel® SoC FPGA Edition (Arm® DS) へと変更になりました。Arm® DS は DS-5 の後継製品となっており使い勝手は大きくは変わりません。このシリーズ記事の内容も Arm® DS / DS-5 両方に適用できるものが大半ですが、違いがある箇所はその旨明記する形でアップデートしています。
***
はじめに
この記事では、SoC FPGA 向けのソフトウェア統合開発環境として利用可能な Arm® DS / DS-5 の使い方に関する補足情報を記載します。
今回は、ソフトウェアのデバッグ作業時には必ずと言っていいほど使用される「ブレークポイント」の種類とその違い、実際の使い方についてご紹介します。この記事では基本的な内容のみを記載していますので、デバッガーの使い方の詳細については、Arm® DS / DS-5 のマニュアルを参照してください。
参考情報:Arm® Development Studio ドキュメントページ(Arm® Developer サイト)
参考情報:DS-5 ドキュメントページ(Arm® Developer サイト)
1. Arm® DS / DS-5 のブレークポイント機能
1-1. ブレークポイントの種類
一般的にブレークポイントの種類には、ハードウェア(HW)ブレークポイントとソフトウェア (SW)ブレークポイントの2通りが存在しますが、Arm® DS / DS-5 においても HW ブレークポイントと SW ブレークポイントを使い分けることが可能です。
現在設定されているブレークポイントが HW と SW のどちらになっているかは、下図に示すアイコンで区別できるようになっています。もしくは、専用の画面(ブレークポイント・ビュー)の表示で確認することもできます。
注記:
Arm® DS の場合、標準の画面配置上にはブレークポイント・ビューが表示されていません。Arm® DS の画面上部の[Window]メニューから[Show View]→[ブレークポイント]より追加してください。
【図 1】 ブレークポイントの表示
1-2. ブレークポイントの指定方法
ブレークポイントの指定方法を【図 2】に示します。基本的にはソースコードの左側(もしくは逆アセンブル画面の左側)をクリックして行います。指定済みのブレークポイントをまとめて確認・変更したい場合には【図 3】のブレークポイント・ビューでの操作がおすすめです。
注記:
右クリックメニューからブレークポイントを設定する場合、Arm® DS と DS-5 でメニューの名称が異なります。Arm® DS の場合は「DS ブレークポイント」以下から指定したい項目を選択します。
【図 2】 ブレークポイント指定方法 1(ソースコードでの操作)
【図 3】 ブレークポイント指定方法 2(専用画面での操作)
ブレークポイント・ビューの操作メニューの中で、「ブレークポイントの無効化」と「ファイルに移動」が便利で特におすすめです。
「ブレークポイントの無効化」は、リスト左側のチェックボックスの ON/OFF 切り替えのみで、登録済みのブレークポイントを一時的に無効化することができます。無効化中はブレークポイントの処理が実行されても CPU はブレークしません。
また「ファイルに移動」メニューでは、ブレークポイントとして登録されているソースコードの該当行を一発で表示させることができるので、複雑なプログラムをデバッグする際に役立ちます。
他にも便利な機能が用意されているので実際にデバッガを操作して確認してみてください(ブレークポイントのプロパティーを変更することで複雑なブレーク条件を指定することもできるようになっています)。
1-3. HW ブレークと SW ブレークの違い
以下の表に HW ブレークと SW ブレークの違い、特徴をまとめます。
| 種類 | 特徴 | 設定可能数 |
| HW ブレーク | ● HW が持つブレーク機構を用いて動作(プログラムの書き換えを伴わない) ● HW に登録されたアドレスの実行を検知すると CPU がブレーク ● ブレークポイント数(登録可能なアドレス数)に HW 的な上限がある |
6 |
| SW ブレーク | ● ブレーク対象の CPU 命令を専用の BREAK 命令に差し替える(プログラムの書き換えを伴う) ● BREAK 命令実行により CPU がブレーク ● ブレークポイント数に上限は無い |
無制限 |
HW ブレークと SW ブレークの最も大きな違いは、プログラムの書き換えを伴うか否かです。
SW ブレークポイントはプログラムの書き換えを伴います。そのため、デバッグ中にプログラムがリロードさるような場合や、不具合によりブレークポイント周辺のプログラムメモリーが破壊されるようなケースには対応できません。また、メモリーの保護機能や Flash 上のプログラムを直接実行する(XIP)など、プログラムエリアの書き換えが行えないシステムでは使用することができません。
HW ブレークポイントであれば、プログラムの書き換えを伴わないため、SW ブレークポイントのような制約事項はありません。
HW ブレークポイントの方が機能的には優れていますが、登録可能なブレークポイント数に上限があります。そのため、登録したいブレークポイントが多い場合には、SW ブレークと HW ブレークを併用して使用することになります。
2. ブレークポイントの使用例
以下、ブレークポイントの便利な使い方について2通りの例を紹介します。
2-1. ユースケース1:例外発生の瞬間を捕捉
リセットやアボートなど、異常系の例外割り込み発生に備えて、割り込みベクターにブレークポイントを設定しておくと、不具合の発生箇所を調査する際に非常に役立ちます。
ソフトウェアが異常な動作を行った結果、不正なアドレスへの Read / Write アクセスが発生してデータアボートなどの例外割り込みが発生することがありますが、割り込みベクターにブレークポイントをセットしておくことで、例外発生の瞬間を捉えることができます。
以下の記事で紹介するトレース機能を併用することで、例外発生の直前にソフトウェアが行った処理を遡って確認することもできます。
参考情報:Arm DS 活用テクニック~トレース機能の使い方
割り込みベクターにブレークポイントを設定する方法を下図に示します。
【図 4】 ブレークポイント使用例 1(例外発生の捕捉)
2-2. ユースケース2:ブレーク条件の指定
Arm® DS / DS-5 のブレークポイント機能は、指定箇所のコードが実行された場合に無条件にブレークを行う以外に、ブレーク条件を与えることもできるようになっています。
例えば、ある処理が 100 回実行された以降の動作をデバッグしたい場合などに有用です。具体的には、ブレークポイントの停止条件の「無視する回数」に 99 を指定すると 100 回目でブレークする動作となります。
回数以外にも条件式を与えることで複雑な条件を作ることも可能になっているので、いちど各種設定をお試し頂くことをおすすめします。
ブレーク条件の指定方法を下図に示します。
【図 5】 ブレークポイント使用例 2(ブレーク条件の指定)
おわりに
以上、今回はブレークポイント機能の使い方をご紹介させていただきました。ブレークポイント自体はデバッガーとして当たり前の機能ですが、Arm® DS / DS-5 には複雑なブレーク条件の指定など、便利な機能が多数備わります。これらの機能を活用して、ソフトウェアの検証作業や不具合調査の効率化に役立てていただければ幸いです。
おすすめ記事/資料はこちら
SoC FPGA 向けデバッガー(Arm® DS / DS-5)の使い方
Altera® SoC FPGA まとめページ
Altera® FPGA の開発フロー