割り込みサービス ルーチン (ISR) でブレークポイントを使用できますか?
3 に答える
はい -エミュレータで。
そうでなければ、いいえ。やってのけるのは難しく、いずれにせよ悪い考えです。ISR は (通常) ハードウェアで動作することが想定されており、各命令間に 0.5 秒のギャップを残すと、ハードウェアは非常に異なる動作をする可能性があります。
代わりに、ある種のログシステムをセットアップしてください。
ISR はまた、他のプロセスから CPU を不当に「盗む」ため、多くのオペレーティング システムでは、ISR を非常に短くし、厳密に必要なこと (緊急のハードウェアの処理や、イベントを適切に処理するタスクのスケジューリングなど) のみを行うことを推奨しています。 )。したがって、理論的には、ISR は非常に単純であるため、デバッグする必要はありません。
問題がハードウェアの動作である場合は、代わりに、私が提案したように何らかのログを使用してください。ハードウェアが命令間の長い時間のギャップを本当に気にしない場合は、ほとんどのドライバーをユーザー空間に書き込むだけで済みます。その上でデバッガーを使用できます。
プラットフォームによっては、通常は JTAG インターフェイスを使用して、プロセッサのデバッグ ポートにアクセスすることでこれを行うことができます。そのメソッドのタイミングに関係するすべてを大幅に変更しているため、デバッグ セッションが役に立たない可能性があることに注意してください。しかし、繰り返しになりますが、多くのバグはこの方法でキャッチできます。また、JTAG デバッガーは多くの場合、MMU ベースのメモリ マッピングを考慮しないため、MMU ベースのメモリ マッピングにも注意してください。
Windows では、カーネル デバッガーがアタッチされているため、実際に割り込みハンドラーにブレークポイントを配置できます。