(57)【要約】【課題】複数のブレークポイントを連動させたマルチスレッドアプリケーションのデバッグ手段を提供する。【解決手段】複数のブレークポイント間に依存関係を定義し連動させることにより、マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、従来のデバッグではできなかったブレークポイント間の同期制御とスレッド間の同期制御を行うことを可能とし、排他制御のデバッグ時などに行う、複数スレッドの処理のタイミング制御を容易に実現することを可能とする。また、あるブレークポイントの位置の処理を実行中のスレッドを別のブレークポイントをトリガーとして停止させるという従来のデバッグ手段にはないデバッグ手段を実現可能とする。【選択図】図１
2009064233.tif 000002
【特許請求の範囲】
【請求項１】
他のブレークポイントの制御のトリガーとなる第１ブレークポイントと前記第１ブレークポイントに依存する第２ブレークポイントとの間に依存関係を持たせる依存情報蓄積装置と、
スレッドが前記第１ブレークポイントに到達した場合、前記第２ブレークポイントに対してアクティブ化に関する処理を行うブレークポイント制御部と
を具備する
デバッグ装置。
【請求項２】
請求項１に記載のデバッグ装置であって、
停止対象となるスレッドが進入する処理の呼び出し位置に非アクティブな前記第２ブレークポイントが設定されており、所定のスレッドがトリガーとなる前記第１ブレークポイントに到達した場合に、デバッグ対象プロセスのスレッドスタック情報を取得し、前記第１ブレークポイントに依存する非アクティブな前記第２ブレークポイント位置の処理内にいるスレッドをチェックして停止するスレッドを特定し、前記特定されたスレッドに対して停止処理を実行するスレッド制御部と
を更に具備する
デバッグ装置。
【請求項３】
請求項１又は２に記載のデバッグ装置であって、
前記依存情報蓄積装置は、
前記第１ブレークポイントのＩＤ、前記第１ブレークポイントが設定されているソースファイル名、前記ソースファイルにおいて前記第１ブレークポイントが設定されている行番号、前記第１ブレークポイントが有効かどうかを示すアクティブの値、及び、前記第２ブレークポイントのＩＤ、前記第２ブレークポイントが設定されているソースファイル名、前記ソースファイルにおいて前記第２ブレークポイントが設定されている行番号、前記第２ブレークポイントが有効かどうかを示すアクティブの値に関する情報を有するブレークポイント情報テーブルと、
前記第１ブレークポイントと前記第２ブレークポイントとの依存関係、及び前記第２ブレークポイントに対して行われる動作を示すアクションの値に関する情報を有する依存ブレークポイント情報テーブルと
を具備する
デバッグ装置。
【請求項４】
請求項３に記載のデバッグ装置であって、
前記ブレークポイント制御部は、シンボリックデバッガから送られてくるオブジェクトコードの情報を基に、前記依存情報蓄積装置から現在実行中の行の位置に対するトリガーとなる前記第１ブレークポイントの情報と、前記第１ブレークポイントに依存する前記第２ブレークポイントの情報を検索し、前記第２ブレークポイントのアクションの値を調べ、「ａｃｔｉｖｅ（有効）」であれば前記第２ブレークポイントのアクティブの値を「ｔｒｕｅ（真）」に設定し、「ｉｎａｃｔｉｖｅ（無効）」又は「ｓｔｏｐ（停止）」であれば前記第２ブレークポイントの情報からソースファイル名と行番号を取得して前記スレッド制御部に送り、前記第２ブレークポイントに対する処理が終了すると、最後に前記第１ブレークポイントの処理を実行し、前記シンボリックデバッガに処理を返す
デバッグ装置。
【請求項５】
請求項４に記載のデバッグ装置であって、
前記スレッド制御部は、前記ブレークポイント制御部から送られたソースファイル名と行番号の情報を受け取ると、前記シンボリックデバッガに対し、デバッグ対象プロセス中のスレッド情報を取得するコマンドを送り、得られたスレッド情報からスレッドのスタック情報を取得し、前記ブレークポイント制御部から送られたソースファイル名と行番号とに一致するブレークポイントに到達しているスレッドが存在するかを判定し、存在すればスレッドＩＤをキーに前記シンボリックデバッガに対し当該スレッドを処理するコマンドを送信して処理を前記ブレークポイント制御部に返す
デバッグ装置。
【請求項６】
請求項５に記載のデバッグ装置であって、
前記スレッド制御部は、前記第２ブレークポイントのアクションの値が「ｉｎａｃｔｉｖｅ（無効）」である場合、前記ブレークポイント制御部から送られたソースファイル名と行番号とに一致するブレークポイントで停止しているスレッドが存在するかを判定し、存在すればスレッドＩＤをキーに前記シンボリックデバッガに対し当該スレッドを再開するコマンドを送信して処理を前記ブレークポイント制御部に返す
デバッグ装置。
【請求項７】
請求項５に記載のデバッグ装置であって、
前記スレッド制御部は、前記第２ブレークポイントのアクションの値が「ｓｔｏｐ（停止）」である場合、前記ブレークポイント制御部から送られたソースファイル名と行番号とに一致するブレークポイントを通過しているスレッドが存在するかを判定し、存在すればスレッドＩＤをキーに前記シンボリックデバッガに対し当該スレッドを停止するコマンドを送信して処理を前記ブレークポイント制御部に返す
デバッグ装置。
【請求項８】
複数のブレークポイント間に依存関係を定義する依存情報蓄積装置と、
マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、前記複数のブレークポイント間の依存関係に基づき、前記複数のブレークポイント間の同期制御を行うブレークポイント制御部と
を具備する
デバッグ装置。
【請求項９】
請求項８に記載のデバッグ装置であって、
所定のブレークポイントの位置の処理を実行中のスレッドを、別のブレークポイントをトリガーとして停止させるスレッド制御部と
を更に具備する
デバッグ装置。
【請求項１０】
請求項９に記載のデバッグ装置であって、
前記スレッド制御部は、排他制御のデバッグ時に、複数スレッドの処理のタイミング制御を行う
デバッグ装置。
【請求項１１】
（ａ）複数のブレークポイント間に依存関係を定義するステップと、
（ｂ）マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、前記複数のブレークポイント間の依存関係に基づき、前記複数のブレークポイント間の同期制御、及びスレッド間の同期制御を行うステップと
を含む
デバッグ方法。
【請求項１２】
請求項１１に記載のデバッグ方法であって、
（ｃ）所定のブレークポイントの位置の処理を実行中のスレッドを、別のブレークポイントをトリガーとして停止させるステップと
を更に含む
デバッグ方法。
【請求項１３】
請求項１１又は１２に記載のデバッグ方法であって、
（ｄ）排他制御のデバッグ時に、複数スレッドの処理のタイミング制御を行うステップ
を更に含む
デバッグ方法。
【請求項１４】
請求項１１乃至１３のいずれか一項に記載のデバッグ方法であって、
前記（ｂ）ステップは、
（ｂ１）シンボリックデバッガから送られてくるオブジェクトコードの情報を基に、現在実行中の行の位置に対するトリガーとなるブレークポイントの情報と、前記トリガーとなるブレークポイントに依存する依存ブレークポイントの情報を検索するステップと、
（ｂ２）得られた前記依存ブレークポイントの情報のアクションの値を調べ、「ａｃｔｉｖｅ（有効）」であれば前記依存ブレークポイントの情報のアクティブの値を「ｔｒｕｅ（真）」に設定し、「ｉｎａｃｔｉｖｅ（無効）」又は「ｓｔｏｐ（停止）」であれば前記依存ブレークポイントの情報からソースファイル名と行番号を取得するステップと、
（ｂ３）ソースファイル名と行番号の情報を取得すると、前記シンボリックデバッガに対し、デバッグ対象プロセス中のスレッド情報を取得するコマンドを送るステップと、
（ｂ４）得られたスレッド情報からスレッドのスタック情報を取得し、ソースファイル名と行番号とに一致するブレークポイントに到達しているスレッドが存在するかを判定し、存在すればスレッドＩＤをキーに前記シンボリックデバッガに対し当該スレッドを処理するコマンドを送信するステップと、
（ｂ５）前記依存ブレークポイントに対しアクティブの値のチェックと前記アクティブの値に対する処理を行い、前記依存ブレークポイントに対し処理が終了すると、最後にトリガーとなったブレークポイントの処理を実行し、前記シンボリックデバッガに処理を返すステップと
を含む
デバッグ方法。
【請求項１５】
請求項１４に記載のデバッグ方法であって、
前記（ｂ４）ステップは、
（ｂ４１）前記依存ブレークポイントの情報のアクションの値が「ｉｎａｃｔｉｖｅ（無効）」である場合、得られたスレッド情報からスレッドのスタック情報を取得し、ソースファイル名と行番号とに一致するブレークポイントで停止しているスレッドが存在するかを判定し、存在すればスレッドＩＤをキーに前記シンボリックデバッガに対し当該スレッドを再開するコマンドを送信するステップと
を含む
デバッグ方法。
【請求項１６】
請求項１４に記載のデバッグ方法であって、
前記（ｂ４）ステップは、
（ｂ４２）前記依存ブレークポイントの情報のアクションの値が「ｓｔｏｐ（停止）」である場合、得られたスレッド情報からスレッドのスタック情報を取得し、ソースファイル名と行番号とに一致するブレークポイントを通過しているスレッドが存在するかを判定し、存在すればスレッドＩＤをキーに前記シンボリックデバッガに対し当該スレッドを停止するコマンドを送信するステップと
を含む
デバッグ方法。
【請求項１７】
請求項１１乃至１６のいずれか一項に記載のデバッグ方法を、コンピュータに実行させるためのデバッグプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグ装置に関し、特に複数のブレークポイントを連動させたマルチスレッドアプリケーションのデバッグ装置に関する。
【背景技術】
【０００２】
既存のマルチスレッド環境における非同期処理のデバッグでは、デバッグ対象プログラムに対しブレークポイントを利用したデバッグや人手を介したステップ実行等による手段でデバッグを行っていた。しかし、この手段では、再現が困難な同期制御が存在する場合があり、ユーザは各スレッドが所望の状態になるまでステップ実行などにより手作業でプログラムを進める手間を要していた。
【０００３】
例えば、第１の課題として、マルチスレッドアプリケーションにおける非同期処理のシンボリックデバッグ時、特に排他制御など複数のスレッドの処理タイミングにより異なる動作をする処理のシンボリックデバッグにおいて、理論上起こりうる全てのスレッドの処理タイミングを再現し、解析する必要がある。
【０００４】
これに対し、従来ではブレークポイントを排他制御の直前付近に配置し、排他制御に関わるスレッドを一旦全て停止し、その上で所望のスレッドの処理タイミングになるようにオペレータがスレッドの再開を人手で制御する手段などが多く行われていた。
【０００５】
しかし、この手段ではあるスレッドが特定のブレークポイントに到達したことを契機に別のブレークポイントを有効にしたい場合に、人手によりブレークポイントの切り替えを行っていたのでは切り替えに時間がかかり、停止させたいスレッドが切り替え前に通過してしまうケースがある。つまり、人手の介入を要して再現することが困難であるケースや、再現するのに手間を要するケースが存在する。
【０００６】
また、第２の課題として、あるスレッドがブレークポイントに到達した瞬間に、別の特定のスレッドの処理のみを停止し、その状態をチェックしたい場合に対するデバッグ手段は従来のデバッグ手段のみでは実現不可能であった。
【０００７】
関連する技術として、特開２０００−１７２５３２号公報（特許文献１）に「マルチタスクデバッグ装置及びマルチタスクデバッグ方法」が開示されている。この技術では、マルチタスク環境下でのデバッグの際に、デバッグ対象でないタスクに属するブレークポイントの発生を抑制し、併せてタスク切り替え時のブレークポイントの設定・解除に関連するオーバーヘッドを軽減している。
【０００８】
また、特開２００１−１３４４６６号公報（特許文献２）に「デバッグ装置及び方法並びにプログラム記録媒体」が開示されている。この技術では、タスクに設定される複数のブレークポイントを１つのバリア同期ポイントとして、そのバリア同期ポイントを１つ又は複数設定する。１つのバリア同期ポイントを設定したときには、そのバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、そのバリア同期ポイント配下の存在する全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。なお、この技術では、デバッグの対象となるマルチタスクプログラムとして、プロセス内に相互依存の関係にある複数のスレッドを並列実行させるマルチスレッドプログラムを想定して、任意のスレッドだけに効力を持つブレークポイントを設定できる。なお、プロセスとは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）からメモリ領域などの割り当てを受けて処理を実行しているプログラムの動作中のインスタンスを意味し、全ての変数やその他の状態を含む。
【０００９】
また、特開２００５−３５２５９１号公報（特許文献３）に「マルチプロセッサシステム、デバッグ方法、及びプログラム」が開示されている。この技術では、ブレークポイントの設定に関して、ブレークポイント設定テーブルを用いて、複数のＣＰＵにおいてブレークポイント発生条件を個別に設定できるようにし、それらの条件が全て満たされ、かつ、ブレークポイント設定テーブルとブレークポイント履歴テーブルとが一致した場合にデバッグ対象プログラムの実行を中断し、デバッガプログラムを呼び出すようにする。
【００１０】
また、特開平０２−３００９４２号公報（特許文献４）に「タスクデバッグ方式」が開示されている。この技術では、ブレークポイントによってあるタスクが停止した時、予め設定されているブレークポイントを設定されたタスクに関係あるタスクを同時に停止できる。
【００１１】
また、特開平０４−３１４１４１号公報（特許文献５）に「マルチタスク制御方法とその機構」が開示されている。この技術では、マルチタスクジョブを構成する任意のタスクがブレークポイントに達した時点あるいは例外を発生した時点で、同一マルチタスクジョブを構成する全てのタスクに関し、その実行環境を保持した状態で実行を抑止する。
【００１２】
【特許文献１】特開２０００−１７２５３２号公報
【特許文献２】特開２００１−１３４４６６号公報
【特許文献３】特開２００５−３５２５９１号公報
【特許文献４】特開平０２−３００９４２号公報
【特許文献５】特開平０４−３１４１４１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上記の第１の課題に対しては、次のように切り替え作業をソフトウェア的に実現することで、人手による場合よりも高速な切り替え作業を実現する。複数のブレークポイント、特に他のブレークポイントの制御のトリガーとなるブレークポイントとそのブレークポイントに依存するブレークポイントとの間に依存関係を持たせ、あるスレッドがトリガーとなるブレークポイントに到達した場合、そのブレークポイントに依存するブレークポイントに対し、ブレークポイントのアクティブ化や非アクティブ化などの処理を行うことで可能となると考えられる。
【００１４】
また、第２の課題に対しても、停止対象となるスレッドが進入する処理の呼び出し位置に非アクティブなブレークポイントを設定し、あるスレッドがトリガーとなるブレークポイントに到達した場合に、デバッガが標準で提供する手段によりデバッグ対象プロセスのスレッドスタック情報を取得し、依存する非アクティブなブレークポイント位置の処理内にいるスレッドをチェックすることで停止するスレッドを特定し、そのスレッドに対して停止処理を実行することで可能となると考えられる。
【課題を解決するための手段】
【００１５】
以下に、［発明を実施するための最良の形態］で使用される番号を括弧付きで用いて、課題を解決するための手段を説明する。これらの番号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために付加されたものである。但し、それらの番号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１６】
本発明のデバッグ装置は、他のブレークポイントの制御のトリガーとなる第１ブレークポイントと第１ブレークポイントに依存する第２ブレークポイントとの間に依存関係を持たせる依存情報蓄積装置（３０）と、スレッドが第１ブレークポイントに到達した場合、第２ブレークポイントに対してアクティブ化に関する処理を行うブレークポイント制御部（１０）とを具備する。
【００１７】
本発明のデバッグ装置は、停止対象となるスレッドが進入する処理の呼び出し位置に非アクティブな第２ブレークポイントが設定されており、所定のスレッドがトリガーとなる第１ブレークポイントに到達した場合に、デバッグ対象プロセス（６０）のスレッドスタック情報を取得し、第１ブレークポイントに依存する非アクティブな第２ブレークポイント位置の処理内にいるスレッドをチェックして停止するスレッドを特定し、特定されたスレッドに対して停止処理を実行するスレッド制御部（１１）とを更に具備する。
【００１８】
依存情報蓄積装置（３０）は、第１ブレークポイントのＩＤ、第１ブレークポイントが設定されているソースファイル名、ソースファイルにおいて第１ブレークポイントが設定されている行番号、第１ブレークポイントが有効かどうかを示すアクティブの値、及び、第２ブレークポイントのＩＤ、第２ブレークポイントが設定されているソースファイル名、ソースファイルにおいて第２ブレークポイントが設定されている行番号、第２ブレークポイントが有効かどうかを示すアクティブの値に関する情報を有するブレークポイント情報テーブル（３１）と、第１ブレークポイントと第２ブレークポイントとの依存関係、及び第２ブレークポイントに対して行われる動作を示すアクションの値に関する情報を有する依存ブレークポイント情報テーブル（３２）とを具備する。
【００１９】
ブレークポイント制御部（１０）は、シンボリックデバッガ（２０）から送られてくるオブジェクトコードの情報を基に、依存情報蓄積装置（３０）から現在実行中の行の位置に対するトリガーとなる第１ブレークポイントの情報と、第１ブレークポイントに依存する第２ブレークポイントの情報を検索し、第２ブレークポイントのアクションの値を調べ、「ａｃｔｉｖｅ（有効）」であれば第２ブレークポイントのアクティブの値を「ｔｒｕｅ（真）」に設定し、「ｉｎａｃｔｉｖｅ（無効）」又は「ｓｔｏｐ（停止）」であれば第２ブレークポイントの情報からソースファイル名と行番号を取得してスレッド制御部（１１）に送り、第２ブレークポイントに対する処理が終了すると、最後に第１ブレークポイントの処理を実行し、シンボリックデバッガ（２０）に処理を返す。
【００２０】
スレッド制御部（１１）は、ブレークポイント制御部（１０）から送られたソースファイル名と行番号の情報を受け取ると、シンボリックデバッガ（２０）に対し、デバッグ対象プロセス（６０）中のスレッド情報を取得するコマンドを送り、得られたスレッド情報からスレッドのスタック情報を取得し、ブレークポイント制御部（１０）から送られたソースファイル名と行番号とに一致するブレークポイントに到達しているスレッドが存在するかを判定し、存在すればスレッドＩＤをキーにシンボリックデバッガ（２０）に対し当該スレッドを処理するコマンドを送信して処理をブレークポイント制御部（１０）に返す。
【００２１】
スレッド制御部（１１）は、第２ブレークポイントのアクションの値が「ｉｎａｃｔｉｖｅ（無効）」である場合、ブレークポイント制御部（１０）から送られたソースファイル名と行番号とに一致するブレークポイントで停止しているスレッドが存在するかを判定し、存在すればスレッドＩＤをキーにシンボリックデバッガ（２０）に対し当該スレッドを再開するコマンドを送信して処理をブレークポイント制御部（１０）に返す。
【００２２】
スレッド制御部（１１）は、第２ブレークポイントのアクションの値が「ｓｔｏｐ（停止）」である場合、ブレークポイント制御部（１０）から送られたソースファイル名と行番号とに一致するブレークポイントを通過しているスレッドが存在するかを判定し、存在すればスレッドＩＤをキーにシンボリックデバッガ（２０）に対し当該スレッドを停止するコマンドを送信して処理をブレークポイント制御部（１０）に返す。
【００２３】
また、別の視点から見ると、本発明のデバッグ装置は、複数のブレークポイント間に依存関係を定義する依存情報蓄積装置（３０）と、マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、複数のブレークポイント間の依存関係に基づき、複数のブレークポイント間の同期制御を行うブレークポイント制御部（１０）と、所定のブレークポイントの位置の処理を実行中のスレッドを、別のブレークポイントをトリガーとして停止させるスレッド制御部（１１）とを具備する。スレッド制御部（１１）は、排他制御のデバッグ時に、複数スレッドの処理のタイミング制御を行う。
【００２４】
このように、本発明では複数のブレークポイント間に依存関係を定義し連動させることにより、マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、従来のデバッグではできなかったブレークポイント間の同期制御とスレッド間の同期制御を行うことを可能とし、排他制御のデバッグ時などに行う、複数スレッドの処理のタイミング制御を容易に実現することを可能とする。また、あるブレークポイントの位置の処理を実行中のスレッドを別のブレークポイントをトリガーとして停止させるという従来のデバッグ手段にはないデバッグ手段を実現可能とする。
【発明の効果】
【００２５】
第１の効果は、マルチスレッドアプリケーションのデバッグ作業時に、人手による同期制御よりも高速に複数のブレークポイントを同期制御することができることにある。その理由は、各ブレークポイント間に依存関係を持たせることで、ソフトウェア的に切り替え作業を行うことができるためである。
第２の効果は、マルチスレッドアプリケーションのデバッグ作業時に、ブレークポイントの位置の処理を実行中のスレッドを別のブレークポイントをトリガーとして停止することができることにある。その理由は、複数のブレークポイントを同期制御させることができるので、別のブレークポイントをトリガーとしブレークポイントの位置の処理を実行中のスレッドを特定することができるためである。
【発明を実施するための最良の形態】
【００２６】
以下に、本発明の第１実施例について添付図面を参照して説明する。
図１を参照すると、本発明のデバッグ装置１００は、ブレークポイント制御部１０と、スレッド制御部１１と、シンボリックデバッガ２０と、依存情報蓄積装置３０と、ファイルサーバ４０と、ソースビュー５０を含む。また、本発明のデバッグ装置１００は、シンボリックデバッガ２０を介して、デバッグ対象プロセス６０とデータの送受信を行う。
【００２７】
ブレークポイント制御部１０は、全ての依存するブレークポイントに対しアクティブの値のチェックとその値に対する処理を行う。スレッド制御部１１は、停止しているスレッドが存在すれば当該スレッドを再開する。シンボリックデバッガ２０は、ソースファイル上の対応個所を参照できるようになっているデバッガであり、ソースレベルでのデバッグ機能を持つ。依存情報蓄積装置３０は、図２に示すテーブルとデータ構造（「ブレークポイント情報テーブル３１」及び「依存ブレークポイント情報テーブル３２」）を持ち、ブレークポイント情報を保存するためにテーブル間に関係性を定義できる機能を持つ。ファイルサーバ４０は、デバッグ対象プロセス６０のソースファイルを管理する。ソースビュー５０は、ソースファイル上のデバッグ対象行を表示する。デバッグ対象プロセス６０は、デバッグ対象プロセス自体、及び当該プロセスを実行する装置を示す。但し、実際には、本発明のデバッグ装置１００及びデバッグ対象プロセス６０は、物理的な装置に限らず、仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）でも良い。
【００２８】
ブレークポイント制御部１０とスレッド制御部１１は概略つぎのように動作する。
【００２９】
ブレークポイント制御部１０は、シンボリックデバッガ２０から送られてくるオブジェクトコードの情報を基に依存情報蓄積装置３０から現在実行中の行の位置に対するトリガーとなるブレークポイントの情報と、依存するブレークポイントの情報を検索する。得られた依存するブレークポイント情報のアクションの値を調べ、アクションの値が「ａｃｔｉｖｅ（有効）」であれば依存するブレークポイント情報のアクティブの値を「ｔｒｕｅ（真）」に設定する。アクションの値が「ｉｎａｃｔｉｖｅ（無効）」であれば依存するブレークポイントの情報からファイル名と行番号を取得し、それをスレッド制御部１１に送る。依存するブレークポイントが複数存在する場合は、全ての依存するブレークポイントに対し、アクティブの値のチェックとその値に対する処理を行う。全ての依存するブレークポイントに対し処理が終了すると、最後にトリガーとなったブレークポイントの処理を実行し、シンボリックデバッガ２０に処理を返す。
【００３０】
スレッド制御部１１は、ブレークポイント制御部１０から送られてくるソースファイル名と行番号の情報を受け取ると、まずシンボリックデバッガ２０に対し、標準で提供されているデバッグ対象プロセス６０中の全スレッド情報を取得するコマンドを送る。得られたスレッド情報から、各スレッドのスタック情報を取得し、ブレークポイント制御部１０から送られたソースファイル名と行番号とに一致するブレークポイントで停止しているスレッドが存在するかを判定する。存在すればスレッドＩＤをキーにシンボリックデバッガ２０に対し当該スレッドを再開するコマンドを送信し、その後、処理をブレークポイント制御部１０に返す。
【００３１】
図２を参照して、ブレークポイント情報テーブル３１及び依存ブレークポイント情報テーブル３２について説明する。
依存情報蓄積装置３０内の「ブレークポイント情報テーブル３１」と「依存ブレークポイント情報テーブル３２」は、ブレークポイントＩＤをキーに関連性がある。ここでは、ブレークポイント情報テーブル３１は、「ブレークポイントＩＤ」と、「ファイル名」と、「行番号」と、「アクティブ」を示す情報を有する。依存ブレークポイント情報テーブル３２は、「ブレークポイントＩＤ」と、「依存ブレークポイントＩＤ」と、「アクション」を示す情報を有する。また、各テーブルの情報はそれぞれ次のような意味を持つ。
【００３２】
ブレークポイント情報テーブル３１において、「ブレークポイントＩＤ」はブレークポイントを一意に識別するＩＤである。「ファイル名」は当該ブレークポイントが設定されているソースファイル名である。「行番号」はブレークポイントが設定されているソースファイルでの当該ブレークポイントが設定されている行番号である。「アクティブ」は当該ブレークポイントが有効かどうかを示す情報を保持する。この例の場合は、アクティブであれば「ｔｒｕｅ（真）」を、非アクティブであれば「ｆａｌｓｅ（偽）」を設定する。
【００３３】
依存ブレークポイント情報テーブル３２において、「ブレークポイントＩＤ」はブレークポイントを一意に識別するＩＤである。「依存ブレークポイントＩＤ」はブレークポイントＩＤで識別されるトリガーとなるブレークポイントに対して、依存関係を持つブレークポイントを一意に識別するブレークポイントＩＤである。「アクション」には依存するブレークポイントに対し行う動作を示すアクションの値が設定されている。この例の場合は、ブレークポイントを有効化する「ａｃｔｉｖｅ（有効）」か、無効化する「ｉｎａｃｔｉｖｅ（無効）」を設定する。また、各テーブルに対しての情報の入力はソースビュー５０から当該ソースファイルに対してＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）機能により、或いは、シンボリックデバッガ２０で標準で提供されるブレークポイント設定コマンドにより設定可能とする。
【００３４】
次に、図３Ａ，図３Ｂ，及び図４のフローチャートを参照して、本発明の第１実施例の動作について詳細に説明する。
【００３５】
図３Ａ，図３Ｂを参照して、本実施例におけるブレークポイント制御装置１０の動作について説明する。
（１）ステップＳ１０１
ブレークポイント制御部１０はシンボリックデバッガ２０からデバッグ対象プロセス６０が送信したソースファイル名と行番号とスレッドＩＤを含むオブジェクトコードを受信する。
（２）ステップＳ１０２
オブジェクトコードを受信したブレークポイント制御部１０はオブジェクトコードからソースファイル名と行番号を取得する。
（３）ステップＳ１０３
取得したソースファイル名と行番号をキーに依存情報蓄積装置３０のブレークポイント情報テーブル３１からブレークポイント情報を検索する。
（４）ステップＳ１０４
該当するソースファイルの位置に対しブレークポイント情報が登録されているかを判定する。
（５）ステップＳ１０５
登録されていなければ処理をシンボリックデバッガ２０に戻し、更にシンボリックデバッガ２０から処理を戻されたデバッグ対象プロセス６０は次の行の処理に移行する。
（６）ステップＳ１０６
また、ブレークポイント情報が登録されていれば検索結果からそのブレークポイントに対し依存ブレークポイントが存在するかをチェックするため、ブレークポイントＩＤをキーに依存ブレークポイント情報テーブル３２を検索する。
（７）ステップＳ１０７
依存するブレークポイントが存在するかを判定する。すなわち、キーにしたブレークポイントＩＤに対応する依存ブレークポイントＩＤが依存ブレークポイント情報テーブル３２中に存在するかを判定する。
（８）ステップＳ１０８
依存するブレークポイントが存在しなければ、トリガーとなったブレークポイントの処理、つまりトリガーとなったブレークポイントに到達したスレッドを停止するコマンドをシンボリックデバッガ２０に送信する。その後、処理をシンボリックデバッガ２０に戻す。
（９）ステップＳ１０９
依存ブレークポイントが存在すれば検索結果からアクションの情報を取得する。
（１０）ステップＳ１１０
アクションが「ａｃｔｉｖｅ（有効）」かどうかを判定する。
（１１）ステップＳ１１１
アクションが「ａｃｔｉｖｅ（有効）」であれば、得られた依存ブレークポイントＩＤをキーにブレークポイント情報テーブル３１から依存ブレークポイントのブレークポイント情報を検索し、当該ブレークポイントのアクティブ情報を「ｔｒｕｅ（真）」に変更し、次の依存するブレークポイントの処理へ戻る。
（１２）ステップＳ１１２
アクションが「ｉｎａｃｔｉｖｅ（無効）」であれば、得られた依存ブレークポイントＩＤをキーにブレークポイント情報テーブル３１から依存するブレークポイント情報を検索する。
（１３）ステップＳ１１３
当該ブレークポイントのアクティブ情報を「ｆａｌｓｅ（偽）」に変更する。
（１４）ステップＳ１１４
そして、検索結果のブレークポイント情報からソースファイル名と行番号を取得し、スレッド制御部１１に送信する。
【００３６】
図４を参照して、本実施例におけるスレッド制御部１１の動作について説明する。
（１）ステップＳ２０１
スレッド制御部１１は、ブレークポイント制御部１０からソースファイル名と行番号を取得する。
（２）ステップＳ２０２
次に、シンボリックデバッガ２０に対し、全スレッドの情報を取得するコマンドを送信する。
（３）ステップＳ２０３
その結果、ブレークポイント制御部１０から取得したソースファイル名と行番号をキーに、当該位置で停止しているスレッドがあるか判断する。
（４）ステップＳ２０４
停止しているスレッドが存在すれば、そのスレッドＩＤをキーに当該スレッドを再開するコマンドをシンボリックデバッガ２０に送信する。
（５）ステップＳ２０５
全スレッドに対し処理が終わるとブレークポイント制御部１０に処理を返す。
【００３７】
図３Ａ，図３Ｂを参照して、上記の続きのブレークポイント制御部１０での処理について説明する。
（６）ステップＳ１０７
その後、図３Ａ，図３ＢのステップＳ１１４に戻ると、ブレークポイント制御部１０では次の依存するブレークポイントの処理へ戻る。
（７）ステップＳ１０８
処理するブレークポイントがなくなるとシンボリックデバッガ２０にトリガーとなったブレークポイントの処理を実行するコマンドを送信する。
（８）ステップＳ１０５
その後、次のシンボリックデバッガ２０に処理を開始するコマンドを送信し、更にシンボリックデバッガ２０から処理を戻されたデバッグ対象プロセス６０は次の行の処理に移行する。
【００３８】
これにより、ブレークポイントを同期制御することができ、第１の課題が解決される。
【００３９】
なお、本発明に係るデバッグ方法は、プログラムによりコンピュータ上で実施することが可能である。
【００４０】
以下に、本発明の第２実施例について説明する。
本実施例の構成は第１実施例と同じである。しかし、依存関係蓄積装置３０の依存ブレークポイント情報テーブル３２の「アクション」の値を示す情報に、依存するブレークポイントを通過したスレッドを停止する意味を表す「ｓｔｏｐ（停止）」を新たに定義する。また、それに合わせ、ブレークポイント制御部１０とスレッド制御部１１は概略つぎのように動作させる。
【００４１】
ブレークポイント制御部１０は、第１実施例と同様にシンボリックデバッガ２０から送られてくるオブジェクトコードの情報を基に、依存情報蓄積装置３０から現在実行中の行の位置にブレークポイントが設定されているかと、依存するブレークポイント情報を取得する。取得した依存するブレークポイント情報からアクションの値を取得し、値が「ｓｔｏｐ（停止）」でなければ次の依存するブレークポイントの処理に戻る。「ｓｔｏｐ（停止）」であれば依存情報蓄積装置３０から依存するブレークポイントの情報を取得し、取得した情報から得たファイル名と行番号をスレッド制御部１１に送信する。依存するブレークポイントが複数存在する場合は、全ての依存するブレークポイントに対し、アクティブの値のチェックとその値に対する処理を行う。全ての依存するブレークポイントに対し処理が終了すると、最後にトリガーとなったブレークポイントの処理を実行し、シンボリックデバッガ２０に処理を返す。
【００４２】
スレッド制御部１１は、ブレークポイント制御部１０から送られてくるソースファイル名と行番号の情報を受け取ると、まずシンボリックデバッガ２０に対し、標準で提供されているデバッグ対象プロセス６０中の全スレッド情報を取得するコマンドを送る。得られたスレッド情報から、各スレッドのスタック情報を取得し、ブレークポイント制御部１０から送られたソースファイル名と行番号とに一致するブレークポイントを通過しているスレッドが存在するかを判定する。存在すればスレッドＩＤをキーにシンボリックデバッガ２０に対し当該スレッドを停止するコマンドを送信し、その後、処理をブレークポイント制御部１０に返す。
【００４３】
次に、図５Ａ，図５Ｂ，及び図６のフローチャートを参照して本発明の第２の実施例の動作について詳細に説明する。
【００４４】
図５Ａ，図５Ｂを参照して、本実施例におけるブレークポイント制御装置１０の動作について説明する。
（１）ステップＳ３０１
ブレークポイント制御部１０はシンボリックデバッガ２０からデバッグ対象プロセス６０が送信したファイル名と行番号とスレッドＩＤを含むオブジェクトコードを受信する。
（２）ステップＳ３０２
オブジェクトコードを受信したブレークポイント制御部１０はオブジェクトコードからファイル名と行番号を取得する。
（３）ステップＳ３０３
取得したファイル名と行番号をキーに依存情報蓄積装置３０のブレークポイント情報テーブル３１からブレークポイント情報を検索する。
（４）ステップＳ３０４
該当するソースファイルの位置に対しブレークポイント情報が登録されているかを判定する。
（５）ステップＳ３０５
登録されていなければ処理をシンボリックデバッガ２０に戻し、更にシンボリックデバッガ２０から処理を戻されたデバッグ対象プロセス６０は次の行の処理に移行する。
（６）ステップＳ３０６
また、ブレークポイント情報が登録されていれば検索結果からそのブレークポイントに対し依存ブレークポイントが存在するかをチェックするため、ブレークポイントＩＤをキーに依存ブレークポイント情報テーブル３２を検索する。
（７）ステップＳ３０７
依存するブレークポイントが存在するかを判定する。すなわち、キーにしたブレークポイントＩＤに対応する依存ブレークポイントＩＤが依存ブレークポイント情報テーブル３２中に存在するかを判定する。
（８）ステップＳ３０８
依存するブレークポイントが存在しなければ、トリガーとなったブレークポイントの処理、つまりトリガーとなったブレークポイントに到達したスレッドを停止するコマンドをシンボリックデバッガ２０に送信する。その後、処理をシンボリックデバッガ２０に戻す。
（９）ステップＳ３０９
依存ブレークポイントが存在すれば検索結果からアクションの情報を取得する。
（１０）ステップＳ３１０
アクションが「ｓｔｏｐ（停止）」かどうかを判定する。アクションが「ｓｔｏｐ（停止）」でなければ次の依存するブレークポイントの処理へ戻る。
（１１）ステップＳ３１１
アクションが「ｓｔｏｐ（停止）」であれば、得られた依存ブレークポイントＩＤをキーにブレークポイント情報テーブル３１から依存するブレークポイント情報を検索する。
（１２）ステップＳ３１２
検索結果のブレークポイント情報からファイル名と行番号を取得し、スレッド制御部１１に送信する。
【００４５】
図６を参照して、本実施例におけるスレッド制御部１１の動作について説明する。
（１）ステップＳ４０１
ブレークポイント制御部１０からファイル名と行番号を取得する。
（２）ステップＳ４０２
次に、シンボリックデバッガ２０に対し、全スレッドの情報を取得するコマンドを送信する。
（３）ステップＳ４０３
その結果、ブレークポイント制御部１０から取得したファイル名と行番号をキーに、当該位置を通過しているスレッドがあるか判断する。
（４）ステップＳ４０４
通過しているスレッドが存在すれば、そのスレッドＩＤをキーに当該スレッドを停止するコマンドをシンボリックデバッガ２０に送信する。
（５）ステップＳ４０５
全スレッドに対し処理が終わるとブレークポイント制御部１０に処理を返す。
【００４６】
図５Ａ，図５Ｂを参照して、上記の続きのブレークポイント制御部１０での処理について説明する。
（６）ステップＳ３０７
その後、図５Ａ，図５Ｂの３１２に戻ると、ブレークポイント制御部１０では次の依存するブレークポイントの処理へ戻る。
（７）ステップＳ３０８
処理するブレークポイントがなくなるとシンボリックデバッガ２０にトリガーとなったブレークポイントの処理を実行するコマンドを送信する。
（８）ステップＳ３０５
その後、次のシンボリックデバッガ２０に処理を開始するコマンドを送信し、更にシンボリックデバッガ２０から処理を戻されたデバッグ対象プロセス６０は次の行の処理に移行する。
【００４７】
これにより、あるスレッドがトリガーとなるブレークポイントを通過したことを契機に、依存するブレークポイントを通過したスレッドを停止することができ、第２の課題が解決される。
【００４８】
本発明によれば、複数ブレークポイントを全て通過したスレッドのみ停止するといったデバッグ方法にも利用できる。例えば、ある単一スレッドが依存関係を持つ複数ブレークポイントを通過した場合に最後に通過するトリガーとなるブレークポイントで依存関係を持つブレークポイントを全て通過しているかをスレッド制御部１１により判別し、通過していればスレッド停止を有効にするといった手段により実現できる。
【００４９】
以上のように、本発明は、複数のブレークポイント間に依存関係を定義し制御することにより、ソフトウェアによる高速なブレークポイント間の同期制御をすることを可能にする。
【００５０】
また、複数のブレークポイント間に依存関係を定義し制御することにより、ブレークポイントの位置の処理を実行中のスレッドを別のブレークポイントをトリガーとして停止することを可能にする。
【図面の簡単な説明】
【００５１】
【図１】図１は、本発明のデバッグ装置の構成例を示すブロック図である。
【図２】図２は、ブレークポイント情報テーブル及び依存ブレークポイント情報テーブルを説明するための図である。
【図３Ａ】図３Ａは、第１実施例の動作を示す第１のフローチャートである。
【図３Ｂ】図３Ｂは、第１実施例の動作を示す第１のフローチャートである。
【図４】図４は、第１実施例の動作を示す第２のフローチャートである。
【図５Ａ】図５Ａは、第２実施例の動作を示す第１のフローチャートである。
【図５Ｂ】図５Ｂは、第２実施例の動作を示す第１のフローチャートである。
【図６】図６は、第２実施例の動作を示す第２のフローチャートである。
【符号の説明】
【００５２】
１０…  ブレークポイント制御部
１１…  スレッド制御部
２０…  シンボリックデバッガ
３０…  依存情報蓄積装置
３１…  ブレークポイント情報テーブル
３２…  依存ブレークポイント情報テーブル
４０…  ファイルサーバ
５０…  ソースビュー
６０…  デバッグ対象プロセス
１００…  デバッグ装置
【図１】
2009064233.tif 000003
【図２】
2009064233.tif 000004
【図３Ａ】
2009064233.tif 000005
【図３Ｂ】
2009064233.tif 000006
【図４】
2009064233.tif 000007
【図５Ａ】
2009064233.tif 000008
【図５Ｂ】
2009064233.tif 000009
【図６】
2009064233.tif 000010