JP2006185360A - プログラムデバッグ装置、プログラムデバッグ方法及びプログラム - Google Patents
プログラムデバッグ装置、プログラムデバッグ方法及びプログラム Download PDFInfo
- Publication number
- JP2006185360A JP2006185360A JP2004380801A JP2004380801A JP2006185360A JP 2006185360 A JP2006185360 A JP 2006185360A JP 2004380801 A JP2004380801 A JP 2004380801A JP 2004380801 A JP2004380801 A JP 2004380801A JP 2006185360 A JP2006185360 A JP 2006185360A
- Authority
- JP
- Japan
- Prior art keywords
- parent
- child relationship
- program
- identification information
- debug
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】 コンピュータ上で複数のプロセスが実行されるプログラムのデバッグ作業を効率的に行うことができるプログラムを提供すること。
【解決手段】 コンピュータ上で複数のプロセスを実行するプログラムに対してデバッグ処理を行うためのプログラムによって、コンピュータを、複数のプロセスの一部又は全部の親子関係を示す親子関係テーブルを記憶する親子関係テーブル記憶部42、デバッグ処理の対象となるプロセスを識別するプロセス識別情報を取得するとともに、親子関係テーブルに基づいて、取得されるプロセス識別情報により識別されるプロセスの関連プロセスを選出する命令対象プロセス選択部46、選出される関連プロセスに対してデバッグ処理を行うための命令部48として機能させる。
【選択図】 図3
【解決手段】 コンピュータ上で複数のプロセスを実行するプログラムに対してデバッグ処理を行うためのプログラムによって、コンピュータを、複数のプロセスの一部又は全部の親子関係を示す親子関係テーブルを記憶する親子関係テーブル記憶部42、デバッグ処理の対象となるプロセスを識別するプロセス識別情報を取得するとともに、親子関係テーブルに基づいて、取得されるプロセス識別情報により識別されるプロセスの関連プロセスを選出する命令対象プロセス選択部46、選出される関連プロセスに対してデバッグ処理を行うための命令部48として機能させる。
【選択図】 図3
Description
本発明はプログラムデバッグ装置、プログラムデバッグ方法及びプログラムに関し、特にマルチプロセスデバッガに関する。
デバッガは、コンピュータプログラムの不具合(バグ)の発見を支援するためのコンピュータプログラムである。デバッガ(シンボリックデバッガ)を用いることにより、ユーザが任意にソースプログラム中にブレークポイントを設定して、該ブレークポイントに対応する命令箇所でプログラムの実行を中断させることができる(ブレークポイント機能)。さらに、決まった処理量(例えば1命令)ずつプログラムを実行させたり(ステップ実行機能)、或いはプログラム実行中にレジスタやメモリの内容を確認したりすることもできるようになる(ウォッチ機能(又はトレース機能))。
特に、下記非特許文献1に開示されたGDB(The GNU Source-Level Debugger)では、コンピュータで実行される複数のプロセスうち一部又は全部を任意に指定して、それら指定されたプロセスの実行を中断させたり、それらの実行を再開させたりすることができる。
リチャード ストールマン,ポーランド ペッシュ,スタン シェブス他、"Debugging with GDB"、[online]、平成12年3月、[平成12年12月21日検索]、インターネット<URL:http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gdb-5.0/gdb-ja_toc.html>
リチャード ストールマン,ポーランド ペッシュ,スタン シェブス他、"Debugging with GDB"、[online]、平成12年3月、[平成12年12月21日検索]、インターネット<URL:http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gdb-5.0/gdb-ja_toc.html>
しかしながら、コンピュータ上で複数のプロセスが実行されるプログラムのデバッグ作業を従来のデバッガを用いて行うと、次のような問題がある。すなわち、あるプロセスにブレークポイントを設定すると、そのブレークポイントに対応する命令箇所で同プロセスの実行が中断されるに過ぎなかったり、或いは実行中の全プロセスの実行が中断されてしまったりする。このため、ブレークポイントを設定したプロセスの子プロセスに不具合がある場合には、いずれにしても、その不具合を発見することが困難であった。
本発明は上記課題に鑑みてなされたものであって、その目的は、コンピュータ上で複数のプロセスが実行されるプログラムのデバッグ作業を効率的に行うことができるプログラムデバッグ装置、プログラムデバッグ方法及びプログラムを提供することにある。
上記課題を解決するために、本発明に係るプログラムデバッグ装置は、コンピュータ上で複数のプロセスを実行するプログラムに対してデバッグ処理を行うためのプログラムデバッグ装置であって、前記複数のプロセスの一部又は全部の親子関係を示す親子関係テーブルを記憶する親子関係テーブル記憶手段と、前記デバッグ処理の対象となるプロセスを識別するプロセス識別情報を取得するプロセス識別情報取得手段と、前記親子関係テーブルに基づいて、前記プロセス識別情報取得手段により取得されるプロセス識別情報により識別されるプロセスの関連プロセスを選出する関連プロセス選出手段と、前記関連プロセス選出手段により選出される関連プロセスに対して、前記デバッグ処理を行うデバッグ処理手段と、を含むことを特徴とする。
また、本発明に係るプログラムデバッグ方法は、コンピュータ上で複数のプロセスを実行するプログラムに対してデバッグ処理を行うためのプログラムデバッグ方法であって、前記複数のプロセスの一部又は全部の親子関係を示す親子関係テーブルを記憶手段に記憶する親子関係テーブルステップと、前記デバッグ処理の対象となるプロセスを識別するプロセス識別情報を取得するプロセス識別情報取得ステップと、前記親子関係テーブルに基づいて、前記プロセス識別情報取得ステップで取得されるプロセス識別情報により識別されるプロセスの関連プロセスを選出する関連プロセス選出ステップと、前記関連プロセス選出ステップで選出される関連プロセスに対して、前記デバッグ処理を行うデバッグ処理ステップと、を含むことを特徴とする。
さらに、本発明に係るプログラムは、複数のプロセスを実行するプログラムに対してデバッグ処理を行うためのプログラムであって、前記複数のプロセスの一部又は全部の親子関係を示す親子関係テーブルを記憶する親子関係テーブル記憶手段、前記デバッグ処理の対象となるプロセスを識別するプロセス識別情報を取得するプロセス識別情報取得手段、前記親子関係テーブルに基づいて、前記プロセス識別情報取得手段により取得されるプロセス識別情報により識別されるプロセスの関連プロセスを選出する関連プロセス選出手段、及び前記関連プロセス選出手段により選出される関連プロセスに対して、前記デバッグ処理を行うデバッグ処理手段としてコンピュータを機能させるためのプログラムである。
本発明によれば、デバッグ対象であるプログラムにより実行される複数のプロセスのうち一部又は全部の親子関係を示す親子関係テーブルが記憶される。そして、デバッグ処理の対象となるプロセスを識別するプロセス識別情報が取得され、このプロセス識別情報により識別されるプロセスの関連プロセスが、親子関係テーブルに基づいて選出される。このとき、親子関係テーブルに基づいて、プロセス識別情報取得手段により取得されるプロセス識別情報により識別されるプロセス、及び該プロセスの直接並びに間接の子プロセスを関連プロセスとして選出するようにしてもよい。そして、選出される関連プロセスに対してデバッグ処理が行われる。こうすれば、プロセス識別情報により識別されるプロセスのみならず、親子関係テーブルに基づいて選出される関連プロセスに対してまで、デバッグ処理を行うことができ、デバッグ作業を効率化することができる。
本発明の一態様では、前記デバッグ処理は、前記関連プロセス選出手段により選出される関連プロセスの実行停止又は実行再開のための処理である。こうすれば、関連プロセスの実行を一括して停止又は再開させることができる。
また、本発明の一態様では、前記複数のプロセスのうち前記コンピュータ上で実行中のプロセスの親子関係を示す親子関係データを取得するとともに、該親子関係データに基づいて前記親子関係テーブル記憶手段に記憶される前記親子関係テーブルを更新する親子関係更新手段をさらに含む。こうすれば、現にコンピュータで実行中のプロセスの親子関係に基づき、親子関係テーブルを更新できるようになる。
この態様では、前記親子関係更新手段は、前記コンピュータ上で新規にプロセスが生成される場合に、該プロセスの親子関係を示す親子関係データを取得するとともに、該親子関係データに基づいて前記親子関係テーブル記憶手段に記憶される前記親子関係テーブルを更新するようにしてもよい。こうすれば、新規にプロセスが生成される場合に、速やかに親子関係テーブルを更新することができる。
また、本発明の一態様では、前記親子関係更新手段は、前記コンピュータ上で既に実行されているプロセスが消滅する場合に、該プロセスに関するデータを前記親子関係テーブル記憶手段に記憶される前記親子関係テーブルから削除する。こうすれば、プロセスが消滅する場合に、速やかに親子関係テーブルを更新することができる。
また、本発明の一態様では、前記プロセス識別情報取得手段は、ユーザにより入力される前記デバッグ処理に関する命令に含まれるプロセス識別情報を取得する。こうすれば、ユーザによる命令の入力に応じて、該命令に含まれるプロセス識別情報によって識別されるプロセスの関連プロセスに対してデバッグ処理を行うことができる。
また、本発明の一態様では、前記プロセス識別情報取得手段は、前記コンピュータ上で発生する特定種類のイベントに関連するプロセスを識別するプロセス識別情報を取得する。こうすれば、特定種類のイベントの発生に応じて、該イベントに関連するプロセスの関連プロセスに対してデバッグ処理を行うことができる。
以下、本発明の一実施形態について図面に基づき詳細に説明する。
図1は、本発明の一実施形態に係るプログラム開発環境の一例を示す図である。このプログラム開発環境10は、本発明の一実施形態に係るプログラムデバッグ方法を適用したものであり、図示しないデータ通信ネットワークによって通信接続されたターゲットコンピュータ12及びホストコンピュータ14を含んで構成されている。ターゲットコンピュータ12は、本発明の一実施形態に係るプログラムデバッグ装置として機能するコンピュータであり、ホストコンピュータ14はターゲットコンピュータ12上で実行されるプログラムのデバッグを行うためのコンピュータである。これらのコンピュータとしては、例えば公知のパーソナルコンピュータシステム、或いはワークステーション等を用いて構成することができる。
ターゲットコンピュータ12では、OS(オペレーティングシステム)20が動作しており、ユーザアプリケーションプログラム16とデバッグエージェントプログラム18がインストールされている。そして、OS20上で、ユーザアプリケーションプログラム16とデバッグエージェントプログラム18が実行される。ユーザアプリケーションプログラム16は、複数のプロセスを実行するプログラムであり、ユーザのデバッグ作業の対象である。デバッグエージェントプログラム18は、OS20上で動作する一種のアプリケーションプログラムであって、ホストコンピュータ14からの制御に従って動作し、またOS20から取得したデバッグ用の各種データをホストコンピュータ14に送信するようになっている。OS20は、各種デバッグ用のプログラムを含んでおり、デバッグエージェントプログラム18ではこれらのプログラムを利用してユーザアプリケーションプログラム16のデバッグ(各プロセスの実行中断、実行再開、メモリやレジスタの内容確認等)を行うことができるようになっている。
ホストコンピュータ14では、OS22が動作しており、該OS22上でデバッグ通信プログラム24及びホストデバッガプログラム26が実行される。ホストデバッガプログラム26は、ユーザアプリケーションプログラム16のデバッグ作業を行うための一種のアプリケーションプログラムであり、ユーザアプリケーションプログラム16により起動されるプロセスのうち一部又は全部を指定して、その実行中断や実行再開を指示することができる。また、ユーザアプリケーションプログラム16の任意の命令箇所にブレークポイントを設定したり、ターゲットコンピュータ12のメモリやレジスタにデータを書き込み、又そこからデータを読み出したり、プロセスリストの取得やプロセスの状態情報の取得を行ったりすることができる。さらに、デバッグエージェントプログラム18では、ユーザアプリケーションプログラム16に設定されたブレークポイントの到来(ヒットイベント)、プログラム例外の発生、ステップ実行の終了を監視するようになっている。そして、これらの事象が生じた場合には、それを示すデータをホストデバッガプログラム26に通知する。ホストデバッガプログラム26では、こうして通知される各種のデータをディスプレイ等に表示する。
デバッグ通信プログラム24は、ホストデバッガプログラム26とデバッグエージェントプログラム18とのデータ通信を中継するものであり、ホストデバッガプログラム26のデータをデバッグエージェントプログラム18で処理可能なデータに変換し、或いは逆に、デバッグエージェントプログラム18のデータをホストデバッガプログラム26で処理可能なデータに変換している。
ここで、デバッグエージェントプログラム18の機能構成について説明する。図2は、ターゲットコンピュータ12上でデバッグエージェントプログラム18によって実現される機能を示す機能ブロック図である。デバッグエージェントプログラム18は、ターゲットコンピュータ12によって実行されることで、デバッグプロトコル送受信ブロック28、プロセス制御ブロック30、デバッグ処理ブロック32及びイベント処理ブロック34の機能を実現するものである。デバッグプロトコル送受信ブロック28は、送信部28a、プロトコルエンコード部28b、受信部28c及びプロトコルデコード部28dを含んで構成されている。プロセス制御ブロック30は、コマンド解析部30a及びデバッグプロセス管理部30bを含んで構成されている。デバッグ処理ブロック32は、静的情報処理部32a及び実行制御部32bを含んで構成されている。
まず、デバッグプロトコル送受信ブロック28は、データ通信ネットワークを介してホストコンピュータ14上で実行されているデバッグ通信プログラム24と通信を行う。具体的には、プロトコルエンコード部28bは、デバッグ処理ブロック32から渡される処理結果をデバッグ通信プログラム24で解釈可能なデータに変換する。送信部28aは、プロトコルエンコード部28bによりエンコードされたデバッグ処理ブロック32の処理結果をデバッグ通信プログラム24に送信する。ホストデバッガプログラム26では、こうしてデバッグ通信プログラム24に送信される処理結果を表示等する。受信部28cは、デバッグ通信プログラム24から送信されるデータを受信する。このデータは、ホストデバッガプログラム26から入力されるものであり、実行中断命令、実行再開命令、メモリ読み出し命令、レジスタ読み出し命令等を示す。実行中断命令や実行再開命令は、実行中断又は実行再開すべきプロセスを識別するプロセスID(識別情報)を含む。プロトコルデコード部28dは、受信部28cにより受信されるデータをプロセス制御ブロック30で解釈可能なデータに変換する。こうして変換されたデータはプロセス制御ブロック30に渡される。
プロセス制御ブロック30は、デバッグプロトコル送受信ブロック28から渡されるデータを解析し、該データが示す命令に応じたデバッグ命令をデバッグ処理ブロック32に発行する。具体的には、コマンド解析部30aはプロトコルデコード部28dから渡されるデータを解析し、該データが示す命令が実行中断命令、実行再開命令、メモリ読み出し命令、レジスタ読み出し命令等のいずれであるかを判断する。メモリ読み出し命令やレジスタ読み出し命令であれば、そのままデバッグ処理ブロック32に対してそれらの命令に応じたデバッグ命令を発行する。一方、実行中断命令や実行再開命令であれば、それらの命令の内容をデバッグプロセス管理部30bに渡す。
デバッグプロセス管理部30bは、実行中断命令や実行再開命令に含まれるプロセスIDを後述する親子関係テーブルに照査し、該プロセスIDにより識別されるプロセスの関連プロセスを選出する。この関連プロセスは、具体的には直接又は間接の子プロセスの全てである。デバッグプロセス管理部30bは、こうして選出する関連プロセス(実行中断命令や実行再開命令に含まれるプロセスIDによって識別されるプロセスを含む。)の実行中断や実行再開のためのデバッグ命令をデバッグ処理ブロック32に対して発行する。
デバッグ処理ブロック32は、コマンド解析部30a又はデバッグ処理ブロック32により発行されるデバッグ命令に従い、デバッグ処理を実行する。すなわち、静的情報処理部32aは、コマンド解析部30aにより発行されるデバッグ命令に応じてメモリやレジスタの読み出しを行い、その内容をデバッグプロトコル送受信ブロック28のプロトコルエンコード部28bに渡す。実行制御部32bは、デバッグ処理ブロック32により発行されるデバッグ命令に応じて複数プロセスの実行中断や実行再開を行う。
イベント処理ブロック34は、OS20での特定イベントの発生を検知する。特定イベントは、ここではスレッドの生成イベント、スレッドの消滅イベント、プロセスの生成イベント、プロセスの消滅イベント、予めユーザアプリケーションプログラム16に設定したブレークポイントに対応する命令箇所の到来(ブレークのヒットイベント)、プログラム例外、ステップ実行の終了イベントである。スレッドの生成イベントやスレッドの消滅イベントの発生を検知すると、その旨をデバッグプロトコル送受信ブロック28に渡す。これによりこれらイベントの発生がホストコンピュータ14(さらに特定的にはホストデバッガプログラム26)に通知される。一方、プロセスの生成イベントの発生を検知すると、その旨をプロセス制御ブロック30のデバッグプロセス管理部30bに渡す。これにより、新たに発生したプロセスの親子関係の管理がデバッグプロセス管理部30bにて開始される。プロセスの消滅イベントの発生を検知した場合も、その旨をデバッグプロセス管理部30bに渡す。これにより、消滅したプロセスの親子関係の管理がデバッグプロセス管理部30bにて終了される。ブレークのヒットイベントの発生を検知すると、該ヒットイベントに係るブレークポイントが設定されたプロセスのPID(プロセスID)を含むプロセス実行中断命令をデバッグプロセス管理部30bに渡す。デバッグプロセス管理部30bでは、親子関係テーブルに基づき、どのプロセスに対して実行中断処理を行うべきかを判断し、それらのプロセスの実行を中断させるためのデバッグ命令をデバッグ処理ブロック32に発行する。プログラム例外を検知すると、OS20に含まれる例外ハンドラを実行する。また、ステップ実行の終了イベントを検知すると、該ステップ実行の終了イベントに係るプロセスのPIDを含むプロセス実行中断命令をデバッグプロセス管理部30bに渡す。デバッグプロセス管理部30bでは、親子関係テーブルに基づき、どのプロセスに対して中断処理を行うべきかを判断し、それらのプロセスの実行を中断させるためのデバッグ命令をデバッグ処理ブロック32に発行する。
ここで、図3を参照しながらデバッグプロセス管理部30bについてさらに説明する。同図に示すように、デバッグプロセス管理部30bは、親子関係テーブル更新部40、親子関係テーブル記憶部42、命令発行プロセスリスト記憶部44、命令対象プロセス選択部46及び命令部48を含んで構成されている。親子関係テーブル記憶部42は、ターゲットコンピュータ14のメモリを含んで構成されるものであり、デバッグ対象となるプロセスの親子関係を示す親子関係テーブルを記憶する。図4は、ターゲットコンピュータ12で実行中の複数のプロセスの親子関係の一例を示す図であり、図5は、親子関係を示す親子関係テーブルを示す図である。図5に示すように、親子関係テーブルは、管理対象PIDと親プロセスPIDと子プロセスPIDとを対応づけて記憶している。管理対象PIDは、親子関係の管理を行うプロセス、すなわちデバッグ対象である実行中のプロセスを識別する識別情報(PID)である。親プロセスPIDは、対応する管理対象PIDにより識別されるプロセスの親プロセスを識別する識別情報(PID)である。親プロセスが存在しない場合、或いは判明しない場合にはヌル値(図中横線で示される。)が格納される。子プロセスPIDは、対応する管理対象PIDにより識別されるプロセスの子プロセスを識別する識別情報(PID)である。子プロセスが存在しない場合、或いは判明しない場合にはヌル値(図中横線で示される。)が格納される。
親子関係テーブル更新部40は、イベント処理ブロック34からプロセスの生成イベントの発生が通知される場合に、その生成されたプロセスのPIDを管理対象PIDとするレコードを親子関係テーブルに追加し、その生成されたプロセスの親プロセスのPIDを親子関係テーブルの当該レコードの親プロセスPID欄に格納する。また、同レコードの子プロセスPID欄にヌル値を格納する。さらに、生成されたプロセスの親プロセスのPIDを管理対象PIDとする、登録済みのレコードを参照し、その子プロセスPID欄に生成されたプロセスのPIDを格納する。以上の処理は、親子関係登録処理として後に詳述する。親子関係テーブル更新部40では、イベント処理ブロック34からプロセスの消滅イベントの発生が通知される場合に、その消滅したプロセスのPIDを管理対象PIDとするレコードを親子関係テーブルから削除する。さらに、その消滅したプロセスのPIDをその他のレコードの親プロセスPID欄や子プロセスPID欄から削除する。
命令対象プロセス選択部46は、イベント処理ブロック34やコマンド解析部30aからプロセス実行中断命令又はプロセス実行再開命令を渡される場合に、それら命令に含まれるPIDにより識別されるプロセスの直接の子プロセスのPIDを親子関係テーブルから読み出す。さらに、その読み出したPIDにより識別されるプロセスの直接の子プロセス(元のPIDにより識別されるプロセスから見て間接の子プロセス)のPIDを親子関係テーブルから読み出す。この処理を繰り返すことにより、直接又は間接の子プロセスの全てについてPIDを取得することができる。これらのPIDは、ターゲットコンピュータ12のメモリを含んで構成された命令発行プロセスリスト記憶部44に順次記憶される。命令部48は、命令発行プロセスリスト記憶部44に記憶されたPIDを読み出し、それらPIDにより識別されるプロセスに対して、イベント処理ブロック34やコマンド解析部30aから渡されるプロセス実行中断命令又はプロセス実行再開命令を実行するよう、デバッグ命令をデバッグ処理ブロック32に発行する。こうして、イベント処理ブロック34やコマンド解析部30aからプロセス実行中断命令が渡される場合に、それら命令に含まれるPIDによって識別されるプロセスの直接又は間接の子プロセスの全ての実行を中断させることができる。また、コマンド解析部30aからプロセス実行再開命令が渡される場合に、それら命令に含まれるPIDによって識別されるプロセスの直接又は間接の子プロセスの全ての実行を再開させることができる。
ここで、デバッグエージェントプログラム18の主要な処理をフロー図に基づいて説明する。図6は、デバッグエージェントプログラム18による親子関係登録処理を示すフロー図である。同図に示す親子関係登録処理は、イベント処理ブロック34からプロセスの生成イベントの発生が検知されたことが通知されると、デバッグプロセス管理部30bに含まれる親子関係テーブル更新部40により実行されるものである。この処理では、まずプロセスの生成イベントのイベント情報を取得する(S101)。イベント情報は、生成されたプロセスのPIDを含んでおり、このPIDが親子関係テーブルのいずれかのレコードの管理対象PID欄に既に記憶されているか否かを調べる(S102)。そして、記憶されていれば親子関係登録処理を終了する。一方、記憶されていなければ、S101において取得したイベント情報に含まれるPIDの親子関係データをOS20に問い合わせ、取得する(S103)。親子関係データは、S101において取得したイベント情報に含まれるPIDによって識別されるプロセスの親プロセス及び子プロセスのPIDを含んでいる。そして、親子関係データに含まれる親プロセスのPIDが、親子関係テーブルのいずれかのレコードの管理対象PID欄に既に記憶されているか否かを調べる(S104)。そして、記憶されていれば、そのレコードの子プロセスPID欄に、S101で取得したイベント情報に含まれるPIDを格納する(S105)。記憶されていなければ、このS105の処理をスキップする。最後に、親子関係テーブルに新規レコードを追加し、その管理対象PID欄にS101で取得したイベント情報に含まれるPIDを格納する。このとき、親プロセス欄及び子プロセス欄にはヌル値を格納する。
以上のようにして、新たにプロセスが生成された場合に該プロセスに関する親子関係を親子関係テーブルに記憶させることができる。
次に、図7は、デバッグエージェントプログラム18によるデバッグ処理を示すフロー図である。この処理は、ホストデバッガプログラム26からデバッグ命令が入力され、該デバッグ命令がデバッグ通信プログラム24によってデバッグエージェントプログラム18に送信される場合に実行されるものである。同図に示すように、この処理では、まず受信部28cがデバッグ命令を受信し(S201)、このデバッグ命令をプロトコルデコード部28dがデコードする(S202)。次に、コマンド解析部30aは、デコードされたデバッグ命令を解析し、その命令の種類を取得する(S203)。このとき、命令の種類が特定のもの、すなわちプロセスの実行中断命令又は実行再開命令であれば(S204)、複数プロセス命令処理を実行する(S205)。この処理により、実行中断命令や実行再開命令に含まれるPIDによって識別されるプロセスの直接又は間接の子プロセスの全てに対して、実行中断処理又は実行再開処理を実行するよう、デバッグ命令がデバッグ処理ブロック32に発行される。一方、命令の種類が特定のものでなければ、ホストデバッガプログラム26から入力された命令内容を変えず、デバッグ命令をデバッグ処理ブロック32に発行する(S206)。その後、プロトコルエンコード部28bは、デバッグ命令の処理結果をデコードし(S207)、それを送信部28aがホストコンピュータ14に送信する。
以上の処理によれば、特にプロセスの実行中断命令又は実行再開命令がホストデバッガプログラム26に入力される場合に、それらの命令に含まれるPIDによって識別されるプロセスのみならず、その直接又は間接の子プロセスの全てについて実行中断処理又は実行再開処理が実行されるようになる。
図8は、デバッグエージェントプログラム18による複数プロセス命令処理を示すフロー図である。同図に示す処理は、図7のS205や図9のS403で実行されるものである。図8に示すように、この処理では、まず直接の命令対象となるプロセスのPIDを取得する(S301)。そして、このPIDが管理対象PID欄に格納されたレコードを親子関係テーブルから読み出し、その子プロセスPID欄からPIDをよみだす(S302)。そして、それらのPIDを命令発行プロセスリスト記憶部44に格納する(S303)。さらに、命令発行プロセスリスト記憶部44に格納されたPIDが親プロセスPID欄に格納されたレコードが親子関係テーブルに存在するか否かを調べる(S304)。そして、このようなレコードがあれば、そのレコードの子プロセスPID欄からPIDを取得して命令発行プロセスリスト記憶部44に追加記憶する(S305)。この場合、S304の処理を再び実行する。S304においてレコードが存在しないと判断すると、命令部48は命令発行プロセスリスト44に記憶されたPIDについて、プロセス実行中断命令やプロセス実行再開命令を発行する(S306)。
以上の処理によれば、あるPIDが取得される場合にそのPIDにより識別されるプロセスの直接又は間接の子プロセスの全てについて、それらのPIDを確実に取得することができる。
最後に、図9は、デバッグエージェントプログラム18によるイベント処理を示すフロー図である。同図に示す処理は、イベント処理ブロック34を中心に実行されるものであり、イベント発生を検出すると(S401)、それが特定イベントであるか否かを判断する(S402)。そして、特定イベント、すなわちブレークのヒットイベント又はステップ実行の終了イベントであれば、デバッグプロセス管理部30bに対して、図8に示す複数プロセス命令処理を実行させる(S403)。その後、デバッグ処理ブロック32が命令の結果を取得し、それをプロトコルエンコード部28bがエンコードする(S404)。そして、エンコードされた命令結果をホストコンピュータ14に送信する(S405)。一方、S402において、イベントが特定イベントでないと判断されると、イベント処理ブロック34はプロトコルエンコード部28bにイベント発生を通知する。これにより、プロトコルエンコード部28bがイベント発生を示すデータをエンコードし、それを送信部28aがホストコンピュータ14に送信する(S406)。
以上の処理によれば、OS20においてブレークのヒットイベントやステップ実行の終了イベントが発生すれば、それらのイベントに関連するプロセスの直接又は間接の子プロセスの全てに対して、それらの実行を中断させることができる。
以上説明した実施形態では、デバッグ対象であるプログラムにより実行される複数のプロセスのうち一部又は全部の親子関係を示す親子関係テーブルが親子関係テーブル記憶部42に記憶される。そして、デバッグ処理の対象となるプロセスを識別するPIDが取得され、このPIDにより識別されるプロセスの直接又は間接の子プロセスの全てが、親子関係テーブルに基づいて選出される。そして、それら選出されるプロセスに対してデバッグ処理が行われる。こうして、本実施形態によれば、取得されたPIDにより識別されるプロセスのみならず、親子関係テーブルに基づいて選出される直接又は間接の子プロセスの全てに対してまで、デバッグ処理を行うことができ、デバッグ作業を効率化することができる。
なお、本発明は上記実施形態に限定されるものではなく、種々の変形実施が可能である。例えば、以上の説明ではターゲットコンピュータ12とは異なるホストコンピュータ14においてホストデバッガプログラム26を実行するようにしたが、ターゲットコンピュータ12においてホストデバッガプログラム26又はそれと同等のプログラムを実行させるようにしてもよい。こうすれば、1つのコンピュータでプログラムのデバッグ作業を行うことができる。
10 プログラム開発環境(コンピュータネットワークシステム)、12 ターゲットコンピュータ、14 ホストコンピュータ、16 ユーザアプリケーションプログラム、18 デバッグエージェントプログラム、20,22 オペレーティングシステム、24 デバッグ通信プログラム、26 ホストデバッガプログラム、28 デバッグプログラム送受信ブロック、28a 送信部、28b プロトコルエンコード部、28c 受信部、28d プロトコルデコード部、30 プロセス制御ブロック、30a コマンド解析部、30b デバッグプロセス管理部、32 デバッグ処理ブロック、32a 静的情報処理部、32b 実行制御部、34 イベント処理ブロック、40 親子関係テーブル更新部、42 親子関係テーブル記憶部、44 命令発効プロセスリスト記憶部、46 命令対象プロセス選択部、48 命令部。
Claims (10)
- コンピュータ上で複数のプロセスを実行するプログラムに対してデバッグ処理を行うためのプログラムデバッグ装置であって、
前記複数のプロセスの一部又は全部の親子関係を示す親子関係テーブルを記憶する親子関係テーブル記憶手段と、
前記デバッグ処理の対象となるプロセスを識別するプロセス識別情報を取得するプロセス識別情報取得手段と、
前記親子関係テーブルに基づいて、前記プロセス識別情報取得手段により取得されるプロセス識別情報により識別されるプロセスの関連プロセスを選出する関連プロセス選出手段と、
前記関連プロセス選出手段により選出される関連プロセスに対して、前記デバッグ処理を行うデバッグ処理手段と、
を含むことを特徴とするプログラムデバッグ装置。 - 請求項1に記載のプログラムデバッグ装置において、
前記デバッグ処理は、前記関連プロセス選出手段により選出される関連プロセスの実行停止又は実行再開のための処理である、
ことを特徴とするプログラムデバッグ装置。 - 請求項1又は2に記載のプログラムデバッグ装置において、
前記複数のプロセスのうち前記コンピュータ上で実行中のプロセスの親子関係を示す親子関係データを取得するとともに、該親子関係データに基づいて前記親子関係テーブル記憶手段に記憶される前記親子関係テーブルを更新する親子関係更新手段をさらに含む、
ことを特徴とするプログラムデバッグ装置。 - 請求項3に記載のプログラムデバッグ装置において、
前記親子関係更新手段は、前記コンピュータ上で新規にプロセスが生成される場合に、該プロセスの親子関係を示す親子関係データを取得するとともに、該親子関係データに基づいて前記親子関係テーブル記憶手段に記憶される前記親子関係テーブルを更新する、
ことを特徴とするプログラムデバッグ装置。 - 請求項3又は4に記載のプログラムデバッグ装置において、
前記親子関係更新手段は、前記コンピュータ上で既に実行されているプロセスが消滅する場合に、該プロセスに関するデータを前記親子関係テーブル記憶手段に記憶される前記親子関係テーブルから削除する、
ことを特徴とするプログラムデバッグ装置。 - 請求項1乃至5のいずれかに記載のプログラムデバッグ装置において、
前記プロセス識別情報取得手段は、ユーザにより入力される前記デバッグ処理に関する命令に含まれるプロセス識別情報を取得する、
ことを特徴とするプログラムデバッグ装置。 - 請求項1乃至5のいずれかに記載のプログラムデバッグ装置において、
前記プロセス識別情報取得手段は、前記コンピュータ上で発生する特定種類のイベントに関連するプロセスを識別するプロセス識別情報を取得する、
ことを特徴とするプログラムデバッグ装置。 - 請求項1乃至7のいずれかに記載のプログラムデバッグ装置において、
前記関連プロセス選出手段は、前記親子関係テーブルに基づいて、前記プロセス識別情報取得手段により取得されるプロセス識別情報により識別されるプロセス、及び該プロセスの直接並びに間接の子プロセスを前記関連プロセスとして選出する、
ことを特徴とするプログラムデバッグ装置。 - コンピュータ上で複数のプロセスを実行するプログラムに対してデバッグ処理を行うためのプログラムデバッグ方法であって、
前記複数のプロセスの一部又は全部の親子関係を示す親子関係テーブルを記憶手段に記憶する親子関係テーブルステップと、
前記デバッグ処理の対象となるプロセスを識別するプロセス識別情報を取得するプロセス識別情報取得ステップと、
前記親子関係テーブルに基づいて、前記プロセス識別情報取得ステップで取得されるプロセス識別情報により識別されるプロセスの関連プロセスを選出する関連プロセス選出ステップと、
前記関連プロセス選出ステップで選出される関連プロセスに対して、前記デバッグ処理を行うデバッグ処理ステップと、
を含むことを特徴とするプログラムデバッグ方法。 - 複数のプロセスを実行するプログラムに対してデバッグ処理を行うためのプログラムであって、
前記複数のプロセスの一部又は全部の親子関係を示す親子関係テーブルを記憶する親子関係テーブル記憶手段、
前記デバッグ処理の対象となるプロセスを識別するプロセス識別情報を取得するプロセス識別情報取得手段、
前記親子関係テーブルに基づいて、前記プロセス識別情報取得手段により取得されるプロセス識別情報により識別されるプロセスの関連プロセスを選出する関連プロセス選出手段、及び
前記関連プロセス選出手段により選出される関連プロセスに対して、前記デバッグ処理を行うデバッグ処理手段
としてコンピュータを機能させるためのプログラム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004380801A JP2006185360A (ja) | 2004-12-28 | 2004-12-28 | プログラムデバッグ装置、プログラムデバッグ方法及びプログラム |
PCT/JP2005/016492 WO2006070510A1 (ja) | 2004-12-28 | 2005-09-08 | プログラムデバッグ装置、プログラムデバッグ方法及び情報記憶媒体 |
TW094145131A TW200634515A (en) | 2004-12-28 | 2005-12-19 | Program debugging device, program debugging method, and information recording medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004380801A JP2006185360A (ja) | 2004-12-28 | 2004-12-28 | プログラムデバッグ装置、プログラムデバッグ方法及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006185360A true JP2006185360A (ja) | 2006-07-13 |
Family
ID=36614637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004380801A Pending JP2006185360A (ja) | 2004-12-28 | 2004-12-28 | プログラムデバッグ装置、プログラムデバッグ方法及びプログラム |
Country Status (3)
Country | Link |
---|---|
JP (1) | JP2006185360A (ja) |
TW (1) | TW200634515A (ja) |
WO (1) | WO2006070510A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012079130A (ja) * | 2010-10-01 | 2012-04-19 | Fujitsu Ltd | デバッグ支援プログラム、デバッグ支援装置、及びデバッグ支援方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9395983B2 (en) | 2008-08-20 | 2016-07-19 | Freescale Semiconductor, Inc. | Debug instruction for execution by a first thread to generate a debug event in a second thread to cause a halting operation |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02118733A (ja) * | 1988-10-28 | 1990-05-07 | Nec Corp | タスクの実行制御方式 |
JPH03247633A (ja) * | 1990-02-26 | 1991-11-05 | Du Pont Mitsui Fluorochem Co Ltd | 熱可塑性樹脂発泡用揮発性発泡剤 |
JPH04338836A (ja) * | 1991-05-16 | 1992-11-26 | Ricoh Co Ltd | 画像形成装置の制御方式 |
JPH0546431A (ja) * | 1991-08-07 | 1993-02-26 | Nec Corp | マルチプロセスデバツグ装置 |
JPH064361A (ja) * | 1992-06-18 | 1994-01-14 | Hokuriku Nippon Denki Software Kk | トレース情報収集方式 |
JPH07200347A (ja) * | 1993-12-28 | 1995-08-04 | Nec Corp | プロセス対応型デバッグ方式 |
JPH086813A (ja) * | 1994-06-23 | 1996-01-12 | Hitachi Ltd | トレース制御方式 |
JPH08320809A (ja) * | 1995-05-25 | 1996-12-03 | Hitachi Ltd | 外乱プロセス排除方式 |
JPH09259002A (ja) * | 1996-03-22 | 1997-10-03 | Hitachi Ltd | デバッグ支援装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2990286B2 (ja) * | 1990-03-08 | 1999-12-13 | 株式会社日立製作所 | マルチスレッド環境の計算機システム |
-
2004
- 2004-12-28 JP JP2004380801A patent/JP2006185360A/ja active Pending
-
2005
- 2005-09-08 WO PCT/JP2005/016492 patent/WO2006070510A1/ja not_active Application Discontinuation
- 2005-12-19 TW TW094145131A patent/TW200634515A/zh unknown
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02118733A (ja) * | 1988-10-28 | 1990-05-07 | Nec Corp | タスクの実行制御方式 |
JPH03247633A (ja) * | 1990-02-26 | 1991-11-05 | Du Pont Mitsui Fluorochem Co Ltd | 熱可塑性樹脂発泡用揮発性発泡剤 |
JPH04338836A (ja) * | 1991-05-16 | 1992-11-26 | Ricoh Co Ltd | 画像形成装置の制御方式 |
JPH0546431A (ja) * | 1991-08-07 | 1993-02-26 | Nec Corp | マルチプロセスデバツグ装置 |
JPH064361A (ja) * | 1992-06-18 | 1994-01-14 | Hokuriku Nippon Denki Software Kk | トレース情報収集方式 |
JPH07200347A (ja) * | 1993-12-28 | 1995-08-04 | Nec Corp | プロセス対応型デバッグ方式 |
JPH086813A (ja) * | 1994-06-23 | 1996-01-12 | Hitachi Ltd | トレース制御方式 |
JPH08320809A (ja) * | 1995-05-25 | 1996-12-03 | Hitachi Ltd | 外乱プロセス排除方式 |
JPH09259002A (ja) * | 1996-03-22 | 1997-10-03 | Hitachi Ltd | デバッグ支援装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012079130A (ja) * | 2010-10-01 | 2012-04-19 | Fujitsu Ltd | デバッグ支援プログラム、デバッグ支援装置、及びデバッグ支援方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2006070510A1 (ja) | 2006-07-06 |
TW200634515A (en) | 2006-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4388518B2 (ja) | スレッドデバッグ装置、スレッドデバッグ方法及びプログラム | |
JP4222370B2 (ja) | デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム | |
KR100715704B1 (ko) | 인터럽트 제어 장치 및 방법 | |
US8327336B2 (en) | Enhanced thread stepping | |
US20070168972A1 (en) | Debugging a computer program | |
JP4476193B2 (ja) | 情報処理方法および情報処理装置 | |
US20110126175A1 (en) | Debugging method and debugging device using hardware breakpoints | |
JP2006185360A (ja) | プログラムデバッグ装置、プログラムデバッグ方法及びプログラム | |
US6772372B2 (en) | System and method for monitoring unaligned memory accesses | |
JP2010015364A (ja) | マルチプロセッサシステム及び情報処理装置 | |
JP2007004516A (ja) | 組込みシステムのプログラムデバッグ方法 | |
JP2003280756A (ja) | 情報処理装置のデバッグ手段 | |
JP2007213396A (ja) | デバッグシステム、オペレーションシステム、デバッグ方法、プログラム | |
JP2009064233A (ja) | デバッグ装置、デバッグ方法、及びデバッグプログラム | |
JP5367556B2 (ja) | デバッグ支援方法 | |
JP2004318658A (ja) | デバッグ制御装置及びその制御方法 | |
JPH06161817A (ja) | スレッドオンラインデバッグ装置 | |
JP3029355B2 (ja) | 命令のシングルステップ実行方式 | |
JP2006350676A (ja) | 組込みシステムのプログラムデバッグ方法 | |
JP2006277429A (ja) | バイパス経路を利用した命令の動的変更方法 | |
WO2013157084A1 (ja) | トレース情報取得装置および方法 | |
JP2001147830A (ja) | リアルタイムosの状態変更方法 | |
Wallach | Gemini Lite: a non-intrusive debugger for Windows NT | |
JPS638946A (ja) | プログラムデバツグサポ−ト方式 | |
JPH0695910A (ja) | 異常処理のための対話型デバッグ制御方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060606 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20061114 |