3.13 プロセッサ例外処理

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

スーパーバイザコール(SVC)またはセキュアモニターコール(SMC)を除き、これらのイベントは通常のプログラムフローの一部ではありません。ソフトウェアのバグなどが原因で、イベントは予期せず発生する場合があります。そのため、ほとんどの ARM プロセッサにはこれらの例外をトラップするためのベクタキャッチ機能が搭載されています。この機能はベアメタルプロジェクトや開発の初期段階にあるプロジェクトに最も役立ちます。OS の実行中は、仮想メモリ処理などの正当な目的にこれらの例外が使用されることもあります。
ベクトルキャッチを有効にすると、選択したベクタテーブルエントリにブレークポイントを配置するのと同様の効果があります。ただしこの場合、ベクタキャッチはプロセッサの専用ハードウェアを使用し、貴重なブレークポイントリソースを使い切ることはありません。

使用可能なベクタキャッチイベントは、接続しているプロセッサによって異なります。
デバッガでベクタキャッチを管理するには、以下のいずれかの操作を行います。
  • ブレークポイントビューメニューから[信号の管理]を選択して、 [信号の管理」ダイアログボックスを表示します。
    情報が必要な個々の信号には、停止または印刷オプションのいずれかを選択します。停止オプションは、実行を停止して、メッセージを印刷します。印刷オプションは、メッセージを印刷しますが、実行は継続します。コマンドビューにこれらのメッセージを表示できます。
    図 3-9 [信号の管理]ダイアログ
    [信号の管理]ダイアログ

  • handle コマンドを使用して、コマンドビューに結果を表示します。

ヒント

Handまた、 info signals コマンドを使用して、ハンドラの現在の設定を表示することもできます。

例 3-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 カーネルモジュールのデバッグについて
関連する参考文書
3.2 アプリケーションの実行、停止、およびステップ実行
5.1 ターゲット実行環境の検査
5.2 コールスタックの検査
3.12 UNIX シグナルの処理
11.4 [Breakpoints]ビュー
11.6 [Commands]ビュー
11.35 [Manage Signals]ダイアログボックス
関連情報
DS-5 デバッガコマンド
非機密扱いPDF file icon PDF 版ARM DUI0446WJ
Copyright © 2010-2015 ARM.All rights reserved.