4.12 プロセッサ例外処理

ARM® プロセッサは、例外ベクタと呼ばれる固定アドレスのいずれかにジャンプすることで例外イベントを処理します。

スーパーバイザコール(SVC)以外のこれらのイベントは通常のプログラムフローの一部ではなく、ソフトウェアのバグが原因で予期せずに発生する場合があります。そのため、ほとんどの ARM プロセッサにはこれらの例外をトラップするためのベクタキャッチ機能が搭載されています。この機能はベアメタルプロジェクトや開発の初期段階にあるプロジェクトに最も役立ちます。OS の実行中は、仮想メモリなどの正当な目的にこれらの例外が使用されることもあります。
ベクタキャッチが有効になっているときの効果は、選択したベクタテーブルエントリにブレークポイントを設定した場合と同様になります。ただし、ベクタキャッチはプロセッサの専用ハードウェアを使用し、貴重なブレークポイントリソースを使い切ることはありません。
デバッガでベクタキャッチを管理するには、以下のいずれかの操作を行います。
  • [ブレークポイント]ビューメニューから[信号の管理]を選択します。
    情報を停止または出力する個々のシグナルを選択して、[OK]をクリックします。結果は[コマンド]ビューに表示されます。
  • handle コマンドを使用して、[コマンド]ビューに結果を表示します。

ヒント

Handまた、info signals コマンドを使用して、ハンドラの現在の設定を表示することもできます。
図 4-9 [信号の管理]ダイアログ
[信号の管理]ダイアログ

使用可能なベクタキャッチイベントは、接続しているプロセッサによって異なります。

例 4-4 例

例外が発生したときに例外をキャッチして、イベントを記録し、アプリケーションを停止するようデバッガで指定するには、例外に基づく停止をイネーブルする必要があります。以下の例では、NON-SECURE_FIQ 例外が発生すると、デバッガが停止してメッセージが出力されます。その後で、ハンドラがある場合は、それをステップ実行または実行できます。
例外ハンドラのデバッグ
handle NON-SECURE_FIQ stop        # Enable stop and print on a NON-SECURE_FIQ exception
例外が発生したときに停止を伴わずにハンドラを呼び出すには、例外に基づく停止をディセーブルする必要があります。
例外の無視
handle NON-SECURE_FIQ nostop      # Disable stop on a NON-SECURE_FIQ exception
関連する概念
6.9 共有ライブラリのデバッグについて
6.10.2 Linux カーネルのデバッグについて
6.10.3 Linux カーネルモジュールのデバッグについて
関連する参考文書
4.10 アプリケーションのステップ実行
5.1 ターゲット実行環境の検査
5.2 コールスタックの検査
4.11 Unix シグナルの処理
10.4 [Breakpoints]ビュー
10.6 [Commands]ビュー
10.35 [Manage Signals]ダイアログボックス
関連情報
DS-5 デバッガコマンド
非機密扱いPDF file icon PDF 版ARM DUI0446VJ
Copyright © 2010-2015 ARM.All rights reserved.