(57)【要約】【課題】オペレーティングシステムが対応していないハードウェア・デバッグアシスト機構をアプリケーションデバッガから利用可能にする。【解決手段】オペレーティングシステムより低位で動作するファームウェアで、デバッグアシスト機構からのイベントをハンドリングし、これを既知のデバッグ割り込みに変換してオペレーティングシステムに通知する。これによって、アプリケーションデバッガはデバッグアシスト機構からのデバッグイベントを受信できるようになる。【選択図】図１
2009282726.tif 000002
【特許請求の範囲】
【請求項１】
計算機のデバッグアシスト機構の制御とデバッグアシスト機構が生成したデバッグイベントのハンドリングが可能な計算機ファームウェアを内蔵し、
そのファームウェアが、特定のデバッグイベントを契機に、オペレーティングシステムで処理可能なデバッグ割り込みをエミュレーションする機能を有することを特徴とするデバッグシステム。
【請求項２】
前記デバッグアシスト機構とファームウェアの機能を内蔵した請求項１記載のデバッグシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は汎用オペレーティングシステム上でのデバッグ方法に関する
【背景技術】
【０００２】
汎用オペレーティングシステムで使用するアプリケーションデバッガは、オペレーティングシステムが提供するデバッグ機能を用いて実現されている。オペレーティングシステムのデバッグ機能は純粋にソフトウェア的に実現されている場合もあるが、一部は計算機ハードウェアのデバッグアシスト機構を用いて実現されている。
【０００３】
例えば、特許文献１がこれに該当する。デバッガがデバッグ対象プロセスに中断点を設ける場合、デバッガは対象プロセスと中断点のアドレスをオペレーティングシステムに通知する。オペレーティングシステムは、対象プロセスのコンテキストを変更し、対象プロセスの実行時にプロセッサのデバッグレジスタに中断点アドレスを設定する。対象プロセスが中断点に達するとデバッグ割り込みが発生し、これをハンドリングしたオペレーティングシステムは、対象プロセスを停止させ、アプリケーションデバッガに対象プロセスの中断を示すデバッグイベントを通知する。
【０００４】
上記に限らず、計算機ハードウェアには様々な中断条件を設定するためのデバッグアシスト機構が搭載されている。
【０００５】
【特許文献１】特開２００７−２１３３９６号公報
【特許文献２】特開２００２−５５８４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
実際に計算機ハードウェアのデバッグアシスト機構がアプリケーションデバッガから利用できるか否かは、オペレーティングシステムに依存する。特許文献１では、デバッグアシスト機構の利用は、オペレーティングシステムが適切にデバッグレジスタの管理やデバッグ割り込みのハンドリングを行うことが前提になっている。しかしながら、汎用オペレーティングシステムでは、機種固有のデバッグアシスト機構の利用は考慮されていない。そのため、計算機ハードウェアに有効なデバッグアシスト機構を設けても、汎用オペレーティングシステム上で動作するアプリケーションデバッガからはこれを利用できないという問題がある。
【０００７】
一方で特許文献２ではデバッグ対象の計算機に搭載された汎用オペレーティングシステムとは論理的に独立した装置にデバッガを配置し、これにアプリケーションのデバッグ機能を追加する手段が述べられている。この構成であればオペレーティングシステムの制約を受けることなく、計算機ハードウェアのデバッグアシスト機構を利用することが可能である。しかし、特許文献２のデバッガからはオペレーティングシステムが提供するデバッグ機能は利用することができないため、オペレーティングシステム上で動作するデバッガに比べてその機能は制限されることになる。
【０００８】
本発明の目的は、上記問題を解決し、汎用オペレーティングシステムが対応していない機種固有のデバッグアシスト機構を、特に汎用オペレーティングシステム上で動作するアプリケーションデバッガから利用可能にすることにある。
【課題を解決するための手段】
【０００９】
本発明のデバッグアシスト機構及びファームウェアは、アプリケーションデバッガからファームウェアを呼び出すためのインタフェースを具備し、また、デバッグアシスト機構が生成するデバッグイベントはファームウェアが直接ハンドリングし、アプリケーションデバッガから与えられた条件のデバッグイベントが発生した場合に、プロセッサのデバッグ割り込みをエミュレーションしてオペレーティングシステムに通知することを特徴とする。
【００１０】
本発明のデバッグアシスト機構及びファームウェア及び本発明を使用したアプリケーションデバッガは以下のように動作する。
【００１１】
アプリケーションデバッガは、予めデバッグ対象のプロセスにアタッチして、デバッグ対象プロセスで発生したデバッグ割り込みをオペレーティングシステムから通知されるように設定しておく。
【００１２】
アプリケーションデバッガは利用者の指示に応じて、ファームウェアに対してデバッグ対象プロセスの識別情報とそのプロセスの中断条件を通知する。デバッグ対象プロセスの識別情報としては、例えばプロセス空間を識別する空間レジスタの値やページテーブルアドレスなどが利用できる。また、アプリケーションデバッガからファームウェアへの通知手段としては、プロセッサの命令拡張や擬似デバイスを介するといった方法がある。
【００１３】
ファームウェアはアプリケーションデバッガから通知された中断条件をデバッグアシスト機構に設定した後、アプリケーションデバッガに制御を戻す。
【００１４】
その後、アプリケーションデバッガは対象プロセスの実行を再開し、中断条件の発生を待機する。
【００１５】
デバッグアシスト機構が中断条件の発生を検出すると、ファームウェアのデバッグイベントハンドラが呼び出される。ファームウェアのデバッグイベントハンドラでは、デバッグイベンを生成したプロセスがデバッグ対象プロセスであれば、オペレーティングシステムで処理可能な既存のデバッグ割り込みをエミュレーションして、オペレーティングシステムにデバッグイベントの発生を通知する。デバッグイベンを生成したプロセスがデバッグ対象プロセスか否かは、その時点での空間レジスタの値やページテーブルアドレスが、アプリケーションデバッガから通知された値と一致しているかで判定できる。
【００１６】
オペレーティングシステムは、これを既存のデバッグ割り込みハンドラで処理し、デバッグ対象プロセスを中断させた後、既存のイベントと同様に中断点到達がアプリケーションデバッガに通知される。
【発明の効果】
【００１７】
本発明を用いれば、既存のオペレーティングシステムに手を加えることなく、特定計算機固有のデバッグアシスト機構の利用が可能になる。また、本発明のデバッグアシスト機構及びファームウェアはオペレーティングシステムに依存しないため、オペレーティングシステムが異なる複数のシステムでこれを利用することも可能である。さらに、既存のアプリケーションデバッガの自然な機能拡張としてこれを利用できるため、利用者に対してシームレスなデバッグ環境を提供することができる。
【発明を実施するための最良の形態】
【００１８】
まず、図１で本発明の概要を説明する。従来、アプリケーションデバッガ１４がデバッグ対象プロセス１５に中断点を設ける場合、システムコール等を介してオペレーティングシステム１３のデバッグ機能１３１に中断点の設定を委託する。デバッグ機能１３１は、適宜ハードウェア１１のデバッグアシスト機構１１１の設定を行い、デバッグ対象プロセス１５の監視を行わせる。デバッグ対象プロセス１５が中断点に達すると、デバッグアシスト機構１１１はデバッグ割り込みを生成し、オペレーティングシステム１３のデバッグ割り込みハンドラ１３２にプロセッサの制御を移す。デバッグ割り込みハンドラ１３２では、デバッグ対象プロセス１５を停止させた後、アプリケーションデバッガ１４にこれがアタッチしているデバッグ対象プロセス１５が中断したことを通知する。これに対して、本発明のデバッグアシスト機構１１２及びファームウェア１２は、前記従来のデバッグシステムの付加装置として機能する。新たなデバッグアシスト機構１１２を用いて対象プロセス１５に中断点を設ける場合、アプリケーションデバッガ１４は、ファームウェア１２に対して直接中断条件を指示する。ファームウェア１２は新たなデバッグアシスト機構１１２の設定を行い、対象プロセス１５の監視を行わせる。デバッグ対象プロセス１５が中断点に達すると、新たなデバッグアシスト機構１１２は拡張割り込みを生成して、ファームウェア１２のイベントハンドラ１２１にプロセッサの制御を移す。イベントハンドラ１２１は、アプリケーションデバッガ１４から与えられた中断条件の判定を行い、中断条件に一致していれば従来のデバッグ割り込みをエミュレーションして、オペレーティングシステム１３のデバッグ割り込みハンドラ１３２にプロセッサの制御を移す。その後、デバッグ割り込みハンドラ１３２では、従来のデバッグ割り込みの処理と同様にデバッグ対象プロセス１５を停止させた後、アプリケーションデバッガ１４にデバッグ対象プロセス１５の中断を通知する。
【００１９】
次に本発明の具体的な実施の形態として、仮想計算機への実装例を、図２以下を用いて説明する。この実施形態では、図１のデバッグアシスト機構１１２とファームウェア１２に相当する機能を、それぞれハイパーバイザ２１の機能として実装する。ハイパーバイザ２１のデバッグアシスト機構２１１が仮想計算機２０上で実行されるデバッグ対象プロセス１５を監視する。デバッグ対象プロセス１５が中断点に達するとデバッグアシスト機構２１１は仮想計算機２０の実行を一時停止し、イベントハンドラ２１２にプロセッサの制御を移す。イベントハンドラ２１２は中断条件を判定し、必要があれば仮想計算機２０の状態をデバッグ割り込みが発生した状態にして実行を再開する。仮想計算機２０上のオペレーティングシステム１３は、従来と同様にデバッグ割り込みの処理を行い、アプリケーションデバッガ１４にデバッグ対象プロセス１５の中断を通知する。
【００２０】
ハイパーバイザ２１に組み込むデバッグアシスト機構２１１には、実際のハードウェア１１の制約を超えて、様々な中断条件を設定する機能を設けることができる。例えば、仮想計算機システムでは、システムコール命令など特定の命令の実行はハイパーバイザ２１でトラップできる。これらの命令の実行を中断条件とするデバッグアシスト機構２１１を構成するのは図３に示すように容易である。ハイパーバイザ２１でトラップした命令が中断条件として指定された命令であった場合（ステップ３０）に、イベントハンドラ２１２を呼び出す（ステップ３１）ようにすれば良い。イベントハンドラ２１２で特にハンドルしない場合は、通常どおりトラップした１命令をエミュレーション（ステップ３２）した後、仮想計算機を再開する。
【００２１】
また、これと同様の方法でアプリケーションデバッガ１４からハイパーバイザ２１を直接呼び出すためのインタフェースを設けることができる。例えば、図４のようにオペレーティングシステム１３が使用しないシステムコールをハイパーバイザ２１のインタフェースとして使うことができる。ハイパーバイザ２１でトラップした命令が、システムコール命令であり（ステップ４０）、かつ、システムコール番号がハイパーバイザ２１のインタフェース用に定義したものであった場合（ステップ４１）に、アプリケーションデバッガ１４からの呼び出しであるものとみなして、デバッグアシスト機構２１１の設定を行う（ステップ４２）。その際は、システムコール命令の実行をスキップし（ステップ４３）、オペレーティングシステム１３が呼び出されないようにする。インタフェース用のシステムコール以外の場合は、通常どおりトラップした１命令をエミュレーション（ステップ４４）する。
【００２２】
アプリケーションデバッガ１４は、このインタフェースを用いてハイパーバイザ２１を呼び出し、図５の中断条件テーブル５０を渡す。中断条件テーブル５０には、中断すべき命令を示す命令識別番号５０１、デバッグ対象プロセス１５を識別するための空間番号５０２を含む。空間番号５０２はプロセスごとに割り当てられているプロセス空間を識別する番号であり、例えばインテル社のＩＡ３２プロセッサであればページディレクトリテーブルアドレスがこれにあたる。この値は、アプリケーションデバッガ１４が、オペレーティングシステム１３のデバッグ機能１３１等を用いて取得したものである。一方、呼び出されたハイパーバイザ２１は、デバッグアシスト機構２１１に対して命令識別番号５０１に該当する命令の実行を中断条件として設定する。
【００２３】
中断条件が設定された状態で、仮想計算機２０が当該命令を実行すると、デバッグアシスト機構２１はイベントハンドラ２１２を呼び出す。イベントハンドラ２１２では、図６に示す判定を行った後、必要に応じて仮想計算機２０に対してデバッグ割り込みをエミュレーションする。まず、中断した命令がデバッグ対象プロセス１５で実行されたものかを判断するために、その時点で仮想計算機２０が使用していた空間番号が中断条件テーブル５０の空間番号５０２に一致しているかを判定する（ステップ６０）。オペレーティングシステム１３がデバッグ割り込みを処理可能な状態かを判断するために、仮想計算機２０がユーザーモードの状態かを判定する（ステップ６１）。最後に、デバッグ割り込みを重複して生成しないように、デバッグ割り込みが生成済みかを判定する（ステップ６２）。これらの判定条件が全て成立する場合に、既存のデバッグ割り込みのエミュレーション（ステップ６３）を行う。その後仮想計算機２０を再開すると、直ちにデバッグ割り込みハンドラ１３２が呼び出され、デバッグ対象プロセス１５の中断とアプリケーションデバッガ１４への通知が行われる。
【図面の簡単な説明】
【００２４】
【図１】本発明のデバッグアシスト機能とファームウェアを組み込んだデバッグシステムの概略図。
【図２】本発明のデバッグアシスト機能とファームウェアを仮想計算機システムに組み込んだ場合のシステム概略図。
【図３】ハイパーバイザでデバッグアシスト機能をエミュレーションする場合の簡単な実施例（処理手順）。
【図４】アプリケーションデバッガから直接操作可能なインタフェースを実現するための実施例（処理手順）。
【図５】アプリケーションデバッガからハイパーバイザに渡す情報の形式。
【図６】ハイパーバイザに組み込むイベントハンドラの実施例（処理手順）。
【符号の説明】
【００２５】
１１…計算機ハードウェア、１１１…既存のオペレーティングシステムで扱えるデバッグアシスト機構、１１２…既存のオペレーティングシステムで扱えないデバッグアシスト機構、１２…計算機に付加するファームウェア、１２１…デバッグアシスト機構１１２が生成するイベントをハンドリングするイベントハンドラ、１３…既存のオペレーティングシステム、１３１…オペレーティングシステムの具備するデバッグ機能、１３２…デバッグアシスト機構１１１が生成するソフトウェア割り込みをハンドリングするデバッグ割り込みハンドラ、１４…デバッグ対象プロセスに中断点を設けるアプリケーションデバッガ、１５…アプリケーションデバッガにアタッチされるデバッグ対象プロセス、２０…仮想計算機、２１…仮想計算機を実現するハイパーバイザプログラム、２１１…ハイパーバイザがエミュレーションするデバッグアシスト機構、２１２…デバッグアシスト機構２１１が生成したデバッグイベントをハンドリングするイベントハンドラ、５０…アプリケーションデバッガからハイパーバイザに渡す中断条件テーブル、５０１…中断する命令の種類を示す識別番号、５０２…デバッグ対象プロセスを識別するための空間番号。
【図１】
2009282726.tif 000003
【図２】
2009282726.tif 000004
【図３】
2009282726.tif 000005
【図４】
2009282726.tif 000006
【図５】
2009282726.tif 000007
【図６】
2009282726.tif 000008