JP2009282726A - デバッグシステム - Google Patents
デバッグシステム Download PDFInfo
- Publication number
- JP2009282726A JP2009282726A JP2008133762A JP2008133762A JP2009282726A JP 2009282726 A JP2009282726 A JP 2009282726A JP 2008133762 A JP2008133762 A JP 2008133762A JP 2008133762 A JP2008133762 A JP 2008133762A JP 2009282726 A JP2009282726 A JP 2009282726A
- Authority
- JP
- Japan
- Prior art keywords
- debug
- assist mechanism
- operating system
- debugging
- target process
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】オペレーティングシステムが対応していないハードウェア・デバッグアシスト機構をアプリケーションデバッガから利用可能にする。
【解決手段】オペレーティングシステムより低位で動作するファームウェアで、デバッグアシスト機構からのイベントをハンドリングし、これを既知のデバッグ割り込みに変換してオペレーティングシステムに通知する。これによって、アプリケーションデバッガはデバッグアシスト機構からのデバッグイベントを受信できるようになる。
【選択図】図1
【解決手段】オペレーティングシステムより低位で動作するファームウェアで、デバッグアシスト機構からのイベントをハンドリングし、これを既知のデバッグ割り込みに変換してオペレーティングシステムに通知する。これによって、アプリケーションデバッガはデバッグアシスト機構からのデバッグイベントを受信できるようになる。
【選択図】図1
Description
本発明は汎用オペレーティングシステム上でのデバッグ方法に関する
汎用オペレーティングシステムで使用するアプリケーションデバッガは、オペレーティングシステムが提供するデバッグ機能を用いて実現されている。オペレーティングシステムのデバッグ機能は純粋にソフトウェア的に実現されている場合もあるが、一部は計算機ハードウェアのデバッグアシスト機構を用いて実現されている。
例えば、特許文献1がこれに該当する。デバッガがデバッグ対象プロセスに中断点を設ける場合、デバッガは対象プロセスと中断点のアドレスをオペレーティングシステムに通知する。オペレーティングシステムは、対象プロセスのコンテキストを変更し、対象プロセスの実行時にプロセッサのデバッグレジスタに中断点アドレスを設定する。対象プロセスが中断点に達するとデバッグ割り込みが発生し、これをハンドリングしたオペレーティングシステムは、対象プロセスを停止させ、アプリケーションデバッガに対象プロセスの中断を示すデバッグイベントを通知する。
上記に限らず、計算機ハードウェアには様々な中断条件を設定するためのデバッグアシスト機構が搭載されている。
実際に計算機ハードウェアのデバッグアシスト機構がアプリケーションデバッガから利用できるか否かは、オペレーティングシステムに依存する。特許文献1では、デバッグアシスト機構の利用は、オペレーティングシステムが適切にデバッグレジスタの管理やデバッグ割り込みのハンドリングを行うことが前提になっている。しかしながら、汎用オペレーティングシステムでは、機種固有のデバッグアシスト機構の利用は考慮されていない。そのため、計算機ハードウェアに有効なデバッグアシスト機構を設けても、汎用オペレーティングシステム上で動作するアプリケーションデバッガからはこれを利用できないという問題がある。
一方で特許文献2ではデバッグ対象の計算機に搭載された汎用オペレーティングシステムとは論理的に独立した装置にデバッガを配置し、これにアプリケーションのデバッグ機能を追加する手段が述べられている。この構成であればオペレーティングシステムの制約を受けることなく、計算機ハードウェアのデバッグアシスト機構を利用することが可能である。しかし、特許文献2のデバッガからはオペレーティングシステムが提供するデバッグ機能は利用することができないため、オペレーティングシステム上で動作するデバッガに比べてその機能は制限されることになる。
本発明の目的は、上記問題を解決し、汎用オペレーティングシステムが対応していない機種固有のデバッグアシスト機構を、特に汎用オペレーティングシステム上で動作するアプリケーションデバッガから利用可能にすることにある。
本発明のデバッグアシスト機構及びファームウェアは、アプリケーションデバッガからファームウェアを呼び出すためのインタフェースを具備し、また、デバッグアシスト機構が生成するデバッグイベントはファームウェアが直接ハンドリングし、アプリケーションデバッガから与えられた条件のデバッグイベントが発生した場合に、プロセッサのデバッグ割り込みをエミュレーションしてオペレーティングシステムに通知することを特徴とする。
本発明のデバッグアシスト機構及びファームウェア及び本発明を使用したアプリケーションデバッガは以下のように動作する。
アプリケーションデバッガは、予めデバッグ対象のプロセスにアタッチして、デバッグ対象プロセスで発生したデバッグ割り込みをオペレーティングシステムから通知されるように設定しておく。
アプリケーションデバッガは利用者の指示に応じて、ファームウェアに対してデバッグ対象プロセスの識別情報とそのプロセスの中断条件を通知する。デバッグ対象プロセスの識別情報としては、例えばプロセス空間を識別する空間レジスタの値やページテーブルアドレスなどが利用できる。また、アプリケーションデバッガからファームウェアへの通知手段としては、プロセッサの命令拡張や擬似デバイスを介するといった方法がある。
ファームウェアはアプリケーションデバッガから通知された中断条件をデバッグアシスト機構に設定した後、アプリケーションデバッガに制御を戻す。
その後、アプリケーションデバッガは対象プロセスの実行を再開し、中断条件の発生を待機する。
デバッグアシスト機構が中断条件の発生を検出すると、ファームウェアのデバッグイベントハンドラが呼び出される。ファームウェアのデバッグイベントハンドラでは、デバッグイベンを生成したプロセスがデバッグ対象プロセスであれば、オペレーティングシステムで処理可能な既存のデバッグ割り込みをエミュレーションして、オペレーティングシステムにデバッグイベントの発生を通知する。デバッグイベンを生成したプロセスがデバッグ対象プロセスか否かは、その時点での空間レジスタの値やページテーブルアドレスが、アプリケーションデバッガから通知された値と一致しているかで判定できる。
オペレーティングシステムは、これを既存のデバッグ割り込みハンドラで処理し、デバッグ対象プロセスを中断させた後、既存のイベントと同様に中断点到達がアプリケーションデバッガに通知される。
本発明を用いれば、既存のオペレーティングシステムに手を加えることなく、特定計算機固有のデバッグアシスト機構の利用が可能になる。また、本発明のデバッグアシスト機構及びファームウェアはオペレーティングシステムに依存しないため、オペレーティングシステムが異なる複数のシステムでこれを利用することも可能である。さらに、既存のアプリケーションデバッガの自然な機能拡張としてこれを利用できるため、利用者に対してシームレスなデバッグ環境を提供することができる。
まず、図1で本発明の概要を説明する。従来、アプリケーションデバッガ14がデバッグ対象プロセス15に中断点を設ける場合、システムコール等を介してオペレーティングシステム13のデバッグ機能131に中断点の設定を委託する。デバッグ機能131は、適宜ハードウェア11のデバッグアシスト機構111の設定を行い、デバッグ対象プロセス15の監視を行わせる。デバッグ対象プロセス15が中断点に達すると、デバッグアシスト機構111はデバッグ割り込みを生成し、オペレーティングシステム13のデバッグ割り込みハンドラ132にプロセッサの制御を移す。デバッグ割り込みハンドラ132では、デバッグ対象プロセス15を停止させた後、アプリケーションデバッガ14にこれがアタッチしているデバッグ対象プロセス15が中断したことを通知する。これに対して、本発明のデバッグアシスト機構112及びファームウェア12は、前記従来のデバッグシステムの付加装置として機能する。新たなデバッグアシスト機構112を用いて対象プロセス15に中断点を設ける場合、アプリケーションデバッガ14は、ファームウェア12に対して直接中断条件を指示する。ファームウェア12は新たなデバッグアシスト機構112の設定を行い、対象プロセス15の監視を行わせる。デバッグ対象プロセス15が中断点に達すると、新たなデバッグアシスト機構112は拡張割り込みを生成して、ファームウェア12のイベントハンドラ121にプロセッサの制御を移す。イベントハンドラ121は、アプリケーションデバッガ14から与えられた中断条件の判定を行い、中断条件に一致していれば従来のデバッグ割り込みをエミュレーションして、オペレーティングシステム13のデバッグ割り込みハンドラ132にプロセッサの制御を移す。その後、デバッグ割り込みハンドラ132では、従来のデバッグ割り込みの処理と同様にデバッグ対象プロセス15を停止させた後、アプリケーションデバッガ14にデバッグ対象プロセス15の中断を通知する。
次に本発明の具体的な実施の形態として、仮想計算機への実装例を、図2以下を用いて説明する。この実施形態では、図1のデバッグアシスト機構112とファームウェア12に相当する機能を、それぞれハイパーバイザ21の機能として実装する。ハイパーバイザ21のデバッグアシスト機構211が仮想計算機20上で実行されるデバッグ対象プロセス15を監視する。デバッグ対象プロセス15が中断点に達するとデバッグアシスト機構211は仮想計算機20の実行を一時停止し、イベントハンドラ212にプロセッサの制御を移す。イベントハンドラ212は中断条件を判定し、必要があれば仮想計算機20の状態をデバッグ割り込みが発生した状態にして実行を再開する。仮想計算機20上のオペレーティングシステム13は、従来と同様にデバッグ割り込みの処理を行い、アプリケーションデバッガ14にデバッグ対象プロセス15の中断を通知する。
ハイパーバイザ21に組み込むデバッグアシスト機構211には、実際のハードウェア11の制約を超えて、様々な中断条件を設定する機能を設けることができる。例えば、仮想計算機システムでは、システムコール命令など特定の命令の実行はハイパーバイザ21でトラップできる。これらの命令の実行を中断条件とするデバッグアシスト機構211を構成するのは図3に示すように容易である。ハイパーバイザ21でトラップした命令が中断条件として指定された命令であった場合(ステップ30)に、イベントハンドラ212を呼び出す(ステップ31)ようにすれば良い。イベントハンドラ212で特にハンドルしない場合は、通常どおりトラップした1命令をエミュレーション(ステップ32)した後、仮想計算機を再開する。
また、これと同様の方法でアプリケーションデバッガ14からハイパーバイザ21を直接呼び出すためのインタフェースを設けることができる。例えば、図4のようにオペレーティングシステム13が使用しないシステムコールをハイパーバイザ21のインタフェースとして使うことができる。ハイパーバイザ21でトラップした命令が、システムコール命令であり(ステップ40)、かつ、システムコール番号がハイパーバイザ21のインタフェース用に定義したものであった場合(ステップ41)に、アプリケーションデバッガ14からの呼び出しであるものとみなして、デバッグアシスト機構211の設定を行う(ステップ42)。その際は、システムコール命令の実行をスキップし(ステップ43)、オペレーティングシステム13が呼び出されないようにする。インタフェース用のシステムコール以外の場合は、通常どおりトラップした1命令をエミュレーション(ステップ44)する。
アプリケーションデバッガ14は、このインタフェースを用いてハイパーバイザ21を呼び出し、図5の中断条件テーブル50を渡す。中断条件テーブル50には、中断すべき命令を示す命令識別番号501、デバッグ対象プロセス15を識別するための空間番号502を含む。空間番号502はプロセスごとに割り当てられているプロセス空間を識別する番号であり、例えばインテル社のIA32プロセッサであればページディレクトリテーブルアドレスがこれにあたる。この値は、アプリケーションデバッガ14が、オペレーティングシステム13のデバッグ機能131等を用いて取得したものである。一方、呼び出されたハイパーバイザ21は、デバッグアシスト機構211に対して命令識別番号501に該当する命令の実行を中断条件として設定する。
中断条件が設定された状態で、仮想計算機20が当該命令を実行すると、デバッグアシスト機構21はイベントハンドラ212を呼び出す。イベントハンドラ212では、図6に示す判定を行った後、必要に応じて仮想計算機20に対してデバッグ割り込みをエミュレーションする。まず、中断した命令がデバッグ対象プロセス15で実行されたものかを判断するために、その時点で仮想計算機20が使用していた空間番号が中断条件テーブル50の空間番号502に一致しているかを判定する(ステップ60)。オペレーティングシステム13がデバッグ割り込みを処理可能な状態かを判断するために、仮想計算機20がユーザーモードの状態かを判定する(ステップ61)。最後に、デバッグ割り込みを重複して生成しないように、デバッグ割り込みが生成済みかを判定する(ステップ62)。これらの判定条件が全て成立する場合に、既存のデバッグ割り込みのエミュレーション(ステップ63)を行う。その後仮想計算機20を再開すると、直ちにデバッグ割り込みハンドラ132が呼び出され、デバッグ対象プロセス15の中断とアプリケーションデバッガ14への通知が行われる。
11…計算機ハードウェア、111…既存のオペレーティングシステムで扱えるデバッグアシスト機構、112…既存のオペレーティングシステムで扱えないデバッグアシスト機構、12…計算機に付加するファームウェア、121…デバッグアシスト機構112が生成するイベントをハンドリングするイベントハンドラ、13…既存のオペレーティングシステム、131…オペレーティングシステムの具備するデバッグ機能、132…デバッグアシスト機構111が生成するソフトウェア割り込みをハンドリングするデバッグ割り込みハンドラ、14…デバッグ対象プロセスに中断点を設けるアプリケーションデバッガ、15…アプリケーションデバッガにアタッチされるデバッグ対象プロセス、20…仮想計算機、21…仮想計算機を実現するハイパーバイザプログラム、211…ハイパーバイザがエミュレーションするデバッグアシスト機構、212…デバッグアシスト機構211が生成したデバッグイベントをハンドリングするイベントハンドラ、50…アプリケーションデバッガからハイパーバイザに渡す中断条件テーブル、501…中断する命令の種類を示す識別番号、502…デバッグ対象プロセスを識別するための空間番号。
Claims (2)
- 計算機のデバッグアシスト機構の制御とデバッグアシスト機構が生成したデバッグイベントのハンドリングが可能な計算機ファームウェアを内蔵し、
そのファームウェアが、特定のデバッグイベントを契機に、オペレーティングシステムで処理可能なデバッグ割り込みをエミュレーションする機能を有することを特徴とするデバッグシステム。 - 前記デバッグアシスト機構とファームウェアの機能を内蔵した請求項1記載のデバッグシステム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008133762A JP2009282726A (ja) | 2008-05-22 | 2008-05-22 | デバッグシステム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008133762A JP2009282726A (ja) | 2008-05-22 | 2008-05-22 | デバッグシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009282726A true JP2009282726A (ja) | 2009-12-03 |
Family
ID=41453122
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008133762A Pending JP2009282726A (ja) | 2008-05-22 | 2008-05-22 | デバッグシステム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009282726A (ja) |
-
2008
- 2008-05-22 JP JP2008133762A patent/JP2009282726A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7992042B2 (en) | Debug support device, and program for directing computer to perform debugging method | |
US8230399B2 (en) | Method for system call interception in user space | |
EP2548115B1 (en) | Apparatus and method for handling exception events | |
EP3306470B1 (en) | Method and apparatus for executing non-maskable interrupt | |
US9092255B2 (en) | Multi-core processor system, computer product, and control method for interrupt execution | |
JP2002268914A (ja) | 特権命令の実行を監視する方法 | |
JPH06168146A (ja) | 仮想計算機方式 | |
WO2012016438A1 (zh) | 一种调试器及其调试方法 | |
JP2015514240A (ja) | 低特権状態からのランタイム・インストルメンテーション制御の変更 | |
JP2006099331A5 (ja) | ||
RU2010149275A (ru) | Восстановление управления ресурсом обработки, который исполняет внешний контекст исполнения | |
CN111045730B (zh) | 一种用于risc-v架构的硬件快速中断处理系统及其方法 | |
JP2009282726A (ja) | デバッグシステム | |
US9959225B2 (en) | Computer apparatus and control method of computer apparatus | |
JP2010015364A (ja) | マルチプロセッサシステム及び情報処理装置 | |
US7350196B1 (en) | Mechanism for lossless function entry and return tracing | |
JP2002268915A (ja) | 非整列メモリアクセスを監視するシステムおよび方法 | |
KR20140069936A (ko) | 하이퍼바이저 컴퍼넌트를 업그레이드하는 방법 및 그 시스템 | |
JP4140286B2 (ja) | 計算機システム | |
JP4833792B2 (ja) | データ解析システム | |
US20060122821A1 (en) | Method for detecting and processing sensitive non-privileged processor instructions in a virtual machine computer system | |
JP2006079142A (ja) | マルチプロセッサ装置 | |
JPS61184644A (ja) | 仮想計算機システム制御方式 | |
JPS59146341A (ja) | Osのマイクロプログラム制御方式 | |
JPH04291632A (ja) | データ処理装置及びデータ処理方法 |