JP2009064233A - デバッグ装置、デバッグ方法、及びデバッグプログラム - Google Patents

デバッグ装置、デバッグ方法、及びデバッグプログラム Download PDF

Info

Publication number
JP2009064233A
JP2009064233A JP2007231407A JP2007231407A JP2009064233A JP 2009064233 A JP2009064233 A JP 2009064233A JP 2007231407 A JP2007231407 A JP 2007231407A JP 2007231407 A JP2007231407 A JP 2007231407A JP 2009064233 A JP2009064233 A JP 2009064233A
Authority
JP
Japan
Prior art keywords
breakpoint
thread
information
debugging
control unit
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.)
Withdrawn
Application number
JP2007231407A
Other languages
English (en)
Inventor
Makoto Shimamoto
誠 島本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2007231407A priority Critical patent/JP2009064233A/ja
Publication of JP2009064233A publication Critical patent/JP2009064233A/ja
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】複数のブレークポイントを連動させたマルチスレッドアプリケーションのデバッグ手段を提供する。
【解決手段】複数のブレークポイント間に依存関係を定義し連動させることにより、マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、従来のデバッグではできなかったブレークポイント間の同期制御とスレッド間の同期制御を行うことを可能とし、排他制御のデバッグ時などに行う、複数スレッドの処理のタイミング制御を容易に実現することを可能とする。また、あるブレークポイントの位置の処理を実行中のスレッドを別のブレークポイントをトリガーとして停止させるという従来のデバッグ手段にはないデバッグ手段を実現可能とする。
【選択図】図1

Description

本発明は、デバッグ装置に関し、特に複数のブレークポイントを連動させたマルチスレッドアプリケーションのデバッグ装置に関する。
既存のマルチスレッド環境における非同期処理のデバッグでは、デバッグ対象プログラムに対しブレークポイントを利用したデバッグや人手を介したステップ実行等による手段でデバッグを行っていた。しかし、この手段では、再現が困難な同期制御が存在する場合があり、ユーザは各スレッドが所望の状態になるまでステップ実行などにより手作業でプログラムを進める手間を要していた。
例えば、第1の課題として、マルチスレッドアプリケーションにおける非同期処理のシンボリックデバッグ時、特に排他制御など複数のスレッドの処理タイミングにより異なる動作をする処理のシンボリックデバッグにおいて、理論上起こりうる全てのスレッドの処理タイミングを再現し、解析する必要がある。
これに対し、従来ではブレークポイントを排他制御の直前付近に配置し、排他制御に関わるスレッドを一旦全て停止し、その上で所望のスレッドの処理タイミングになるようにオペレータがスレッドの再開を人手で制御する手段などが多く行われていた。
しかし、この手段ではあるスレッドが特定のブレークポイントに到達したことを契機に別のブレークポイントを有効にしたい場合に、人手によりブレークポイントの切り替えを行っていたのでは切り替えに時間がかかり、停止させたいスレッドが切り替え前に通過してしまうケースがある。つまり、人手の介入を要して再現することが困難であるケースや、再現するのに手間を要するケースが存在する。
また、第2の課題として、あるスレッドがブレークポイントに到達した瞬間に、別の特定のスレッドの処理のみを停止し、その状態をチェックしたい場合に対するデバッグ手段は従来のデバッグ手段のみでは実現不可能であった。
関連する技術として、特開2000−172532号公報(特許文献1)に「マルチタスクデバッグ装置及びマルチタスクデバッグ方法」が開示されている。この技術では、マルチタスク環境下でのデバッグの際に、デバッグ対象でないタスクに属するブレークポイントの発生を抑制し、併せてタスク切り替え時のブレークポイントの設定・解除に関連するオーバーヘッドを軽減している。
また、特開2001−134466号公報(特許文献2)に「デバッグ装置及び方法並びにプログラム記録媒体」が開示されている。この技術では、タスクに設定される複数のブレークポイントを1つのバリア同期ポイントとして、そのバリア同期ポイントを1つ又は複数設定する。1つのバリア同期ポイントを設定したときには、そのバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、そのバリア同期ポイント配下の存在する全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。なお、この技術では、デバッグの対象となるマルチタスクプログラムとして、プロセス内に相互依存の関係にある複数のスレッドを並列実行させるマルチスレッドプログラムを想定して、任意のスレッドだけに効力を持つブレークポイントを設定できる。なお、プロセスとは、OS(Operating System)からメモリ領域などの割り当てを受けて処理を実行しているプログラムの動作中のインスタンスを意味し、全ての変数やその他の状態を含む。
また、特開2005−352591号公報(特許文献3)に「マルチプロセッサシステム、デバッグ方法、及びプログラム」が開示されている。この技術では、ブレークポイントの設定に関して、ブレークポイント設定テーブルを用いて、複数のCPUにおいてブレークポイント発生条件を個別に設定できるようにし、それらの条件が全て満たされ、かつ、ブレークポイント設定テーブルとブレークポイント履歴テーブルとが一致した場合にデバッグ対象プログラムの実行を中断し、デバッガプログラムを呼び出すようにする。
また、特開平02−300942号公報(特許文献4)に「タスクデバッグ方式」が開示されている。この技術では、ブレークポイントによってあるタスクが停止した時、予め設定されているブレークポイントを設定されたタスクに関係あるタスクを同時に停止できる。
また、特開平04−314141号公報(特許文献5)に「マルチタスク制御方法とその機構」が開示されている。この技術では、マルチタスクジョブを構成する任意のタスクがブレークポイントに達した時点あるいは例外を発生した時点で、同一マルチタスクジョブを構成する全てのタスクに関し、その実行環境を保持した状態で実行を抑止する。
特開2000−172532号公報 特開2001−134466号公報 特開2005−352591号公報 特開平02−300942号公報 特開平04−314141号公報
上記の第1の課題に対しては、次のように切り替え作業をソフトウェア的に実現することで、人手による場合よりも高速な切り替え作業を実現する。複数のブレークポイント、特に他のブレークポイントの制御のトリガーとなるブレークポイントとそのブレークポイントに依存するブレークポイントとの間に依存関係を持たせ、あるスレッドがトリガーとなるブレークポイントに到達した場合、そのブレークポイントに依存するブレークポイントに対し、ブレークポイントのアクティブ化や非アクティブ化などの処理を行うことで可能となると考えられる。
また、第2の課題に対しても、停止対象となるスレッドが進入する処理の呼び出し位置に非アクティブなブレークポイントを設定し、あるスレッドがトリガーとなるブレークポイントに到達した場合に、デバッガが標準で提供する手段によりデバッグ対象プロセスのスレッドスタック情報を取得し、依存する非アクティブなブレークポイント位置の処理内にいるスレッドをチェックすることで停止するスレッドを特定し、そのスレッドに対して停止処理を実行することで可能となると考えられる。
以下に、[発明を実施するための最良の形態]で使用される番号を括弧付きで用いて、課題を解決するための手段を説明する。これらの番号は、[特許請求の範囲]の記載と[発明を実施するための最良の形態]との対応関係を明らかにするために付加されたものである。但し、それらの番号を、[特許請求の範囲]に記載されている発明の技術的範囲の解釈に用いてはならない。
本発明のデバッグ装置は、他のブレークポイントの制御のトリガーとなる第1ブレークポイントと第1ブレークポイントに依存する第2ブレークポイントとの間に依存関係を持たせる依存情報蓄積装置(30)と、スレッドが第1ブレークポイントに到達した場合、第2ブレークポイントに対してアクティブ化に関する処理を行うブレークポイント制御部(10)とを具備する。
本発明のデバッグ装置は、停止対象となるスレッドが進入する処理の呼び出し位置に非アクティブな第2ブレークポイントが設定されており、所定のスレッドがトリガーとなる第1ブレークポイントに到達した場合に、デバッグ対象プロセス(60)のスレッドスタック情報を取得し、第1ブレークポイントに依存する非アクティブな第2ブレークポイント位置の処理内にいるスレッドをチェックして停止するスレッドを特定し、特定されたスレッドに対して停止処理を実行するスレッド制御部(11)とを更に具備する。
依存情報蓄積装置(30)は、第1ブレークポイントのID、第1ブレークポイントが設定されているソースファイル名、ソースファイルにおいて第1ブレークポイントが設定されている行番号、第1ブレークポイントが有効かどうかを示すアクティブの値、及び、第2ブレークポイントのID、第2ブレークポイントが設定されているソースファイル名、ソースファイルにおいて第2ブレークポイントが設定されている行番号、第2ブレークポイントが有効かどうかを示すアクティブの値に関する情報を有するブレークポイント情報テーブル(31)と、第1ブレークポイントと第2ブレークポイントとの依存関係、及び第2ブレークポイントに対して行われる動作を示すアクションの値に関する情報を有する依存ブレークポイント情報テーブル(32)とを具備する。
ブレークポイント制御部(10)は、シンボリックデバッガ(20)から送られてくるオブジェクトコードの情報を基に、依存情報蓄積装置(30)から現在実行中の行の位置に対するトリガーとなる第1ブレークポイントの情報と、第1ブレークポイントに依存する第2ブレークポイントの情報を検索し、第2ブレークポイントのアクションの値を調べ、「active(有効)」であれば第2ブレークポイントのアクティブの値を「true(真)」に設定し、「inactive(無効)」又は「stop(停止)」であれば第2ブレークポイントの情報からソースファイル名と行番号を取得してスレッド制御部(11)に送り、第2ブレークポイントに対する処理が終了すると、最後に第1ブレークポイントの処理を実行し、シンボリックデバッガ(20)に処理を返す。
スレッド制御部(11)は、ブレークポイント制御部(10)から送られたソースファイル名と行番号の情報を受け取ると、シンボリックデバッガ(20)に対し、デバッグ対象プロセス(60)中のスレッド情報を取得するコマンドを送り、得られたスレッド情報からスレッドのスタック情報を取得し、ブレークポイント制御部(10)から送られたソースファイル名と行番号とに一致するブレークポイントに到達しているスレッドが存在するかを判定し、存在すればスレッドIDをキーにシンボリックデバッガ(20)に対し当該スレッドを処理するコマンドを送信して処理をブレークポイント制御部(10)に返す。
スレッド制御部(11)は、第2ブレークポイントのアクションの値が「inactive(無効)」である場合、ブレークポイント制御部(10)から送られたソースファイル名と行番号とに一致するブレークポイントで停止しているスレッドが存在するかを判定し、存在すればスレッドIDをキーにシンボリックデバッガ(20)に対し当該スレッドを再開するコマンドを送信して処理をブレークポイント制御部(10)に返す。
スレッド制御部(11)は、第2ブレークポイントのアクションの値が「stop(停止)」である場合、ブレークポイント制御部(10)から送られたソースファイル名と行番号とに一致するブレークポイントを通過しているスレッドが存在するかを判定し、存在すればスレッドIDをキーにシンボリックデバッガ(20)に対し当該スレッドを停止するコマンドを送信して処理をブレークポイント制御部(10)に返す。
また、別の視点から見ると、本発明のデバッグ装置は、複数のブレークポイント間に依存関係を定義する依存情報蓄積装置(30)と、マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、複数のブレークポイント間の依存関係に基づき、複数のブレークポイント間の同期制御を行うブレークポイント制御部(10)と、所定のブレークポイントの位置の処理を実行中のスレッドを、別のブレークポイントをトリガーとして停止させるスレッド制御部(11)とを具備する。スレッド制御部(11)は、排他制御のデバッグ時に、複数スレッドの処理のタイミング制御を行う。
このように、本発明では複数のブレークポイント間に依存関係を定義し連動させることにより、マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、従来のデバッグではできなかったブレークポイント間の同期制御とスレッド間の同期制御を行うことを可能とし、排他制御のデバッグ時などに行う、複数スレッドの処理のタイミング制御を容易に実現することを可能とする。また、あるブレークポイントの位置の処理を実行中のスレッドを別のブレークポイントをトリガーとして停止させるという従来のデバッグ手段にはないデバッグ手段を実現可能とする。
第1の効果は、マルチスレッドアプリケーションのデバッグ作業時に、人手による同期制御よりも高速に複数のブレークポイントを同期制御することができることにある。その理由は、各ブレークポイント間に依存関係を持たせることで、ソフトウェア的に切り替え作業を行うことができるためである。
第2の効果は、マルチスレッドアプリケーションのデバッグ作業時に、ブレークポイントの位置の処理を実行中のスレッドを別のブレークポイントをトリガーとして停止することができることにある。その理由は、複数のブレークポイントを同期制御させることができるので、別のブレークポイントをトリガーとしブレークポイントの位置の処理を実行中のスレッドを特定することができるためである。
以下に、本発明の第1実施例について添付図面を参照して説明する。
図1を参照すると、本発明のデバッグ装置100は、ブレークポイント制御部10と、スレッド制御部11と、シンボリックデバッガ20と、依存情報蓄積装置30と、ファイルサーバ40と、ソースビュー50を含む。また、本発明のデバッグ装置100は、シンボリックデバッガ20を介して、デバッグ対象プロセス60とデータの送受信を行う。
ブレークポイント制御部10は、全ての依存するブレークポイントに対しアクティブの値のチェックとその値に対する処理を行う。スレッド制御部11は、停止しているスレッドが存在すれば当該スレッドを再開する。シンボリックデバッガ20は、ソースファイル上の対応個所を参照できるようになっているデバッガであり、ソースレベルでのデバッグ機能を持つ。依存情報蓄積装置30は、図2に示すテーブルとデータ構造(「ブレークポイント情報テーブル31」及び「依存ブレークポイント情報テーブル32」)を持ち、ブレークポイント情報を保存するためにテーブル間に関係性を定義できる機能を持つ。ファイルサーバ40は、デバッグ対象プロセス60のソースファイルを管理する。ソースビュー50は、ソースファイル上のデバッグ対象行を表示する。デバッグ対象プロセス60は、デバッグ対象プロセス自体、及び当該プロセスを実行する装置を示す。但し、実際には、本発明のデバッグ装置100及びデバッグ対象プロセス60は、物理的な装置に限らず、仮想マシン(Virtual Machine)でも良い。
ブレークポイント制御部10とスレッド制御部11は概略つぎのように動作する。
ブレークポイント制御部10は、シンボリックデバッガ20から送られてくるオブジェクトコードの情報を基に依存情報蓄積装置30から現在実行中の行の位置に対するトリガーとなるブレークポイントの情報と、依存するブレークポイントの情報を検索する。得られた依存するブレークポイント情報のアクションの値を調べ、アクションの値が「active(有効)」であれば依存するブレークポイント情報のアクティブの値を「true(真)」に設定する。アクションの値が「inactive(無効)」であれば依存するブレークポイントの情報からファイル名と行番号を取得し、それをスレッド制御部11に送る。依存するブレークポイントが複数存在する場合は、全ての依存するブレークポイントに対し、アクティブの値のチェックとその値に対する処理を行う。全ての依存するブレークポイントに対し処理が終了すると、最後にトリガーとなったブレークポイントの処理を実行し、シンボリックデバッガ20に処理を返す。
スレッド制御部11は、ブレークポイント制御部10から送られてくるソースファイル名と行番号の情報を受け取ると、まずシンボリックデバッガ20に対し、標準で提供されているデバッグ対象プロセス60中の全スレッド情報を取得するコマンドを送る。得られたスレッド情報から、各スレッドのスタック情報を取得し、ブレークポイント制御部10から送られたソースファイル名と行番号とに一致するブレークポイントで停止しているスレッドが存在するかを判定する。存在すればスレッドIDをキーにシンボリックデバッガ20に対し当該スレッドを再開するコマンドを送信し、その後、処理をブレークポイント制御部10に返す。
図2を参照して、ブレークポイント情報テーブル31及び依存ブレークポイント情報テーブル32について説明する。
依存情報蓄積装置30内の「ブレークポイント情報テーブル31」と「依存ブレークポイント情報テーブル32」は、ブレークポイントIDをキーに関連性がある。ここでは、ブレークポイント情報テーブル31は、「ブレークポイントID」と、「ファイル名」と、「行番号」と、「アクティブ」を示す情報を有する。依存ブレークポイント情報テーブル32は、「ブレークポイントID」と、「依存ブレークポイントID」と、「アクション」を示す情報を有する。また、各テーブルの情報はそれぞれ次のような意味を持つ。
ブレークポイント情報テーブル31において、「ブレークポイントID」はブレークポイントを一意に識別するIDである。「ファイル名」は当該ブレークポイントが設定されているソースファイル名である。「行番号」はブレークポイントが設定されているソースファイルでの当該ブレークポイントが設定されている行番号である。「アクティブ」は当該ブレークポイントが有効かどうかを示す情報を保持する。この例の場合は、アクティブであれば「true(真)」を、非アクティブであれば「false(偽)」を設定する。
依存ブレークポイント情報テーブル32において、「ブレークポイントID」はブレークポイントを一意に識別するIDである。「依存ブレークポイントID」はブレークポイントIDで識別されるトリガーとなるブレークポイントに対して、依存関係を持つブレークポイントを一意に識別するブレークポイントIDである。「アクション」には依存するブレークポイントに対し行う動作を示すアクションの値が設定されている。この例の場合は、ブレークポイントを有効化する「active(有効)」か、無効化する「inactive(無効)」を設定する。また、各テーブルに対しての情報の入力はソースビュー50から当該ソースファイルに対してGUI(Graphical User Interface)機能により、或いは、シンボリックデバッガ20で標準で提供されるブレークポイント設定コマンドにより設定可能とする。
次に、図3A,図3B,及び図4のフローチャートを参照して、本発明の第1実施例の動作について詳細に説明する。
図3A,図3Bを参照して、本実施例におけるブレークポイント制御装置10の動作について説明する。
(1)ステップS101
ブレークポイント制御部10はシンボリックデバッガ20からデバッグ対象プロセス60が送信したソースファイル名と行番号とスレッドIDを含むオブジェクトコードを受信する。
(2)ステップS102
オブジェクトコードを受信したブレークポイント制御部10はオブジェクトコードからソースファイル名と行番号を取得する。
(3)ステップS103
取得したソースファイル名と行番号をキーに依存情報蓄積装置30のブレークポイント情報テーブル31からブレークポイント情報を検索する。
(4)ステップS104
該当するソースファイルの位置に対しブレークポイント情報が登録されているかを判定する。
(5)ステップS105
登録されていなければ処理をシンボリックデバッガ20に戻し、更にシンボリックデバッガ20から処理を戻されたデバッグ対象プロセス60は次の行の処理に移行する。
(6)ステップS106
また、ブレークポイント情報が登録されていれば検索結果からそのブレークポイントに対し依存ブレークポイントが存在するかをチェックするため、ブレークポイントIDをキーに依存ブレークポイント情報テーブル32を検索する。
(7)ステップS107
依存するブレークポイントが存在するかを判定する。すなわち、キーにしたブレークポイントIDに対応する依存ブレークポイントIDが依存ブレークポイント情報テーブル32中に存在するかを判定する。
(8)ステップS108
依存するブレークポイントが存在しなければ、トリガーとなったブレークポイントの処理、つまりトリガーとなったブレークポイントに到達したスレッドを停止するコマンドをシンボリックデバッガ20に送信する。その後、処理をシンボリックデバッガ20に戻す。
(9)ステップS109
依存ブレークポイントが存在すれば検索結果からアクションの情報を取得する。
(10)ステップS110
アクションが「active(有効)」かどうかを判定する。
(11)ステップS111
アクションが「active(有効)」であれば、得られた依存ブレークポイントIDをキーにブレークポイント情報テーブル31から依存ブレークポイントのブレークポイント情報を検索し、当該ブレークポイントのアクティブ情報を「true(真)」に変更し、次の依存するブレークポイントの処理へ戻る。
(12)ステップS112
アクションが「inactive(無効)」であれば、得られた依存ブレークポイントIDをキーにブレークポイント情報テーブル31から依存するブレークポイント情報を検索する。
(13)ステップS113
当該ブレークポイントのアクティブ情報を「false(偽)」に変更する。
(14)ステップS114
そして、検索結果のブレークポイント情報からソースファイル名と行番号を取得し、スレッド制御部11に送信する。
図4を参照して、本実施例におけるスレッド制御部11の動作について説明する。
(1)ステップS201
スレッド制御部11は、ブレークポイント制御部10からソースファイル名と行番号を取得する。
(2)ステップS202
次に、シンボリックデバッガ20に対し、全スレッドの情報を取得するコマンドを送信する。
(3)ステップS203
その結果、ブレークポイント制御部10から取得したソースファイル名と行番号をキーに、当該位置で停止しているスレッドがあるか判断する。
(4)ステップS204
停止しているスレッドが存在すれば、そのスレッドIDをキーに当該スレッドを再開するコマンドをシンボリックデバッガ20に送信する。
(5)ステップS205
全スレッドに対し処理が終わるとブレークポイント制御部10に処理を返す。
図3A,図3Bを参照して、上記の続きのブレークポイント制御部10での処理について説明する。
(6)ステップS107
その後、図3A,図3BのステップS114に戻ると、ブレークポイント制御部10では次の依存するブレークポイントの処理へ戻る。
(7)ステップS108
処理するブレークポイントがなくなるとシンボリックデバッガ20にトリガーとなったブレークポイントの処理を実行するコマンドを送信する。
(8)ステップS105
その後、次のシンボリックデバッガ20に処理を開始するコマンドを送信し、更にシンボリックデバッガ20から処理を戻されたデバッグ対象プロセス60は次の行の処理に移行する。
これにより、ブレークポイントを同期制御することができ、第1の課題が解決される。
なお、本発明に係るデバッグ方法は、プログラムによりコンピュータ上で実施することが可能である。
以下に、本発明の第2実施例について説明する。
本実施例の構成は第1実施例と同じである。しかし、依存関係蓄積装置30の依存ブレークポイント情報テーブル32の「アクション」の値を示す情報に、依存するブレークポイントを通過したスレッドを停止する意味を表す「stop(停止)」を新たに定義する。また、それに合わせ、ブレークポイント制御部10とスレッド制御部11は概略つぎのように動作させる。
ブレークポイント制御部10は、第1実施例と同様にシンボリックデバッガ20から送られてくるオブジェクトコードの情報を基に、依存情報蓄積装置30から現在実行中の行の位置にブレークポイントが設定されているかと、依存するブレークポイント情報を取得する。取得した依存するブレークポイント情報からアクションの値を取得し、値が「stop(停止)」でなければ次の依存するブレークポイントの処理に戻る。「stop(停止)」であれば依存情報蓄積装置30から依存するブレークポイントの情報を取得し、取得した情報から得たファイル名と行番号をスレッド制御部11に送信する。依存するブレークポイントが複数存在する場合は、全ての依存するブレークポイントに対し、アクティブの値のチェックとその値に対する処理を行う。全ての依存するブレークポイントに対し処理が終了すると、最後にトリガーとなったブレークポイントの処理を実行し、シンボリックデバッガ20に処理を返す。
スレッド制御部11は、ブレークポイント制御部10から送られてくるソースファイル名と行番号の情報を受け取ると、まずシンボリックデバッガ20に対し、標準で提供されているデバッグ対象プロセス60中の全スレッド情報を取得するコマンドを送る。得られたスレッド情報から、各スレッドのスタック情報を取得し、ブレークポイント制御部10から送られたソースファイル名と行番号とに一致するブレークポイントを通過しているスレッドが存在するかを判定する。存在すればスレッドIDをキーにシンボリックデバッガ20に対し当該スレッドを停止するコマンドを送信し、その後、処理をブレークポイント制御部10に返す。
次に、図5A,図5B,及び図6のフローチャートを参照して本発明の第2の実施例の動作について詳細に説明する。
図5A,図5Bを参照して、本実施例におけるブレークポイント制御装置10の動作について説明する。
(1)ステップS301
ブレークポイント制御部10はシンボリックデバッガ20からデバッグ対象プロセス60が送信したファイル名と行番号とスレッドIDを含むオブジェクトコードを受信する。
(2)ステップS302
オブジェクトコードを受信したブレークポイント制御部10はオブジェクトコードからファイル名と行番号を取得する。
(3)ステップS303
取得したファイル名と行番号をキーに依存情報蓄積装置30のブレークポイント情報テーブル31からブレークポイント情報を検索する。
(4)ステップS304
該当するソースファイルの位置に対しブレークポイント情報が登録されているかを判定する。
(5)ステップS305
登録されていなければ処理をシンボリックデバッガ20に戻し、更にシンボリックデバッガ20から処理を戻されたデバッグ対象プロセス60は次の行の処理に移行する。
(6)ステップS306
また、ブレークポイント情報が登録されていれば検索結果からそのブレークポイントに対し依存ブレークポイントが存在するかをチェックするため、ブレークポイントIDをキーに依存ブレークポイント情報テーブル32を検索する。
(7)ステップS307
依存するブレークポイントが存在するかを判定する。すなわち、キーにしたブレークポイントIDに対応する依存ブレークポイントIDが依存ブレークポイント情報テーブル32中に存在するかを判定する。
(8)ステップS308
依存するブレークポイントが存在しなければ、トリガーとなったブレークポイントの処理、つまりトリガーとなったブレークポイントに到達したスレッドを停止するコマンドをシンボリックデバッガ20に送信する。その後、処理をシンボリックデバッガ20に戻す。
(9)ステップS309
依存ブレークポイントが存在すれば検索結果からアクションの情報を取得する。
(10)ステップS310
アクションが「stop(停止)」かどうかを判定する。アクションが「stop(停止)」でなければ次の依存するブレークポイントの処理へ戻る。
(11)ステップS311
アクションが「stop(停止)」であれば、得られた依存ブレークポイントIDをキーにブレークポイント情報テーブル31から依存するブレークポイント情報を検索する。
(12)ステップS312
検索結果のブレークポイント情報からファイル名と行番号を取得し、スレッド制御部11に送信する。
図6を参照して、本実施例におけるスレッド制御部11の動作について説明する。
(1)ステップS401
ブレークポイント制御部10からファイル名と行番号を取得する。
(2)ステップS402
次に、シンボリックデバッガ20に対し、全スレッドの情報を取得するコマンドを送信する。
(3)ステップS403
その結果、ブレークポイント制御部10から取得したファイル名と行番号をキーに、当該位置を通過しているスレッドがあるか判断する。
(4)ステップS404
通過しているスレッドが存在すれば、そのスレッドIDをキーに当該スレッドを停止するコマンドをシンボリックデバッガ20に送信する。
(5)ステップS405
全スレッドに対し処理が終わるとブレークポイント制御部10に処理を返す。
図5A,図5Bを参照して、上記の続きのブレークポイント制御部10での処理について説明する。
(6)ステップS307
その後、図5A,図5Bの312に戻ると、ブレークポイント制御部10では次の依存するブレークポイントの処理へ戻る。
(7)ステップS308
処理するブレークポイントがなくなるとシンボリックデバッガ20にトリガーとなったブレークポイントの処理を実行するコマンドを送信する。
(8)ステップS305
その後、次のシンボリックデバッガ20に処理を開始するコマンドを送信し、更にシンボリックデバッガ20から処理を戻されたデバッグ対象プロセス60は次の行の処理に移行する。
これにより、あるスレッドがトリガーとなるブレークポイントを通過したことを契機に、依存するブレークポイントを通過したスレッドを停止することができ、第2の課題が解決される。
本発明によれば、複数ブレークポイントを全て通過したスレッドのみ停止するといったデバッグ方法にも利用できる。例えば、ある単一スレッドが依存関係を持つ複数ブレークポイントを通過した場合に最後に通過するトリガーとなるブレークポイントで依存関係を持つブレークポイントを全て通過しているかをスレッド制御部11により判別し、通過していればスレッド停止を有効にするといった手段により実現できる。
以上のように、本発明は、複数のブレークポイント間に依存関係を定義し制御することにより、ソフトウェアによる高速なブレークポイント間の同期制御をすることを可能にする。
また、複数のブレークポイント間に依存関係を定義し制御することにより、ブレークポイントの位置の処理を実行中のスレッドを別のブレークポイントをトリガーとして停止することを可能にする。
図1は、本発明のデバッグ装置の構成例を示すブロック図である。 図2は、ブレークポイント情報テーブル及び依存ブレークポイント情報テーブルを説明するための図である。 図3Aは、第1実施例の動作を示す第1のフローチャートである。 図3Bは、第1実施例の動作を示す第1のフローチャートである。 図4は、第1実施例の動作を示す第2のフローチャートである。 図5Aは、第2実施例の動作を示す第1のフローチャートである。 図5Bは、第2実施例の動作を示す第1のフローチャートである。 図6は、第2実施例の動作を示す第2のフローチャートである。
符号の説明
10… ブレークポイント制御部
11… スレッド制御部
20… シンボリックデバッガ
30… 依存情報蓄積装置
31… ブレークポイント情報テーブル
32… 依存ブレークポイント情報テーブル
40… ファイルサーバ
50… ソースビュー
60… デバッグ対象プロセス
100… デバッグ装置

Claims (17)

  1. 他のブレークポイントの制御のトリガーとなる第1ブレークポイントと前記第1ブレークポイントに依存する第2ブレークポイントとの間に依存関係を持たせる依存情報蓄積装置と、
    スレッドが前記第1ブレークポイントに到達した場合、前記第2ブレークポイントに対してアクティブ化に関する処理を行うブレークポイント制御部と
    を具備する
    デバッグ装置。
  2. 請求項1に記載のデバッグ装置であって、
    停止対象となるスレッドが進入する処理の呼び出し位置に非アクティブな前記第2ブレークポイントが設定されており、所定のスレッドがトリガーとなる前記第1ブレークポイントに到達した場合に、デバッグ対象プロセスのスレッドスタック情報を取得し、前記第1ブレークポイントに依存する非アクティブな前記第2ブレークポイント位置の処理内にいるスレッドをチェックして停止するスレッドを特定し、前記特定されたスレッドに対して停止処理を実行するスレッド制御部と
    を更に具備する
    デバッグ装置。
  3. 請求項1又は2に記載のデバッグ装置であって、
    前記依存情報蓄積装置は、
    前記第1ブレークポイントのID、前記第1ブレークポイントが設定されているソースファイル名、前記ソースファイルにおいて前記第1ブレークポイントが設定されている行番号、前記第1ブレークポイントが有効かどうかを示すアクティブの値、及び、前記第2ブレークポイントのID、前記第2ブレークポイントが設定されているソースファイル名、前記ソースファイルにおいて前記第2ブレークポイントが設定されている行番号、前記第2ブレークポイントが有効かどうかを示すアクティブの値に関する情報を有するブレークポイント情報テーブルと、
    前記第1ブレークポイントと前記第2ブレークポイントとの依存関係、及び前記第2ブレークポイントに対して行われる動作を示すアクションの値に関する情報を有する依存ブレークポイント情報テーブルと
    を具備する
    デバッグ装置。
  4. 請求項3に記載のデバッグ装置であって、
    前記ブレークポイント制御部は、シンボリックデバッガから送られてくるオブジェクトコードの情報を基に、前記依存情報蓄積装置から現在実行中の行の位置に対するトリガーとなる前記第1ブレークポイントの情報と、前記第1ブレークポイントに依存する前記第2ブレークポイントの情報を検索し、前記第2ブレークポイントのアクションの値を調べ、「active(有効)」であれば前記第2ブレークポイントのアクティブの値を「true(真)」に設定し、「inactive(無効)」又は「stop(停止)」であれば前記第2ブレークポイントの情報からソースファイル名と行番号を取得して前記スレッド制御部に送り、前記第2ブレークポイントに対する処理が終了すると、最後に前記第1ブレークポイントの処理を実行し、前記シンボリックデバッガに処理を返す
    デバッグ装置。
  5. 請求項4に記載のデバッグ装置であって、
    前記スレッド制御部は、前記ブレークポイント制御部から送られたソースファイル名と行番号の情報を受け取ると、前記シンボリックデバッガに対し、デバッグ対象プロセス中のスレッド情報を取得するコマンドを送り、得られたスレッド情報からスレッドのスタック情報を取得し、前記ブレークポイント制御部から送られたソースファイル名と行番号とに一致するブレークポイントに到達しているスレッドが存在するかを判定し、存在すればスレッドIDをキーに前記シンボリックデバッガに対し当該スレッドを処理するコマンドを送信して処理を前記ブレークポイント制御部に返す
    デバッグ装置。
  6. 請求項5に記載のデバッグ装置であって、
    前記スレッド制御部は、前記第2ブレークポイントのアクションの値が「inactive(無効)」である場合、前記ブレークポイント制御部から送られたソースファイル名と行番号とに一致するブレークポイントで停止しているスレッドが存在するかを判定し、存在すればスレッドIDをキーに前記シンボリックデバッガに対し当該スレッドを再開するコマンドを送信して処理を前記ブレークポイント制御部に返す
    デバッグ装置。
  7. 請求項5に記載のデバッグ装置であって、
    前記スレッド制御部は、前記第2ブレークポイントのアクションの値が「stop(停止)」である場合、前記ブレークポイント制御部から送られたソースファイル名と行番号とに一致するブレークポイントを通過しているスレッドが存在するかを判定し、存在すればスレッドIDをキーに前記シンボリックデバッガに対し当該スレッドを停止するコマンドを送信して処理を前記ブレークポイント制御部に返す
    デバッグ装置。
  8. 複数のブレークポイント間に依存関係を定義する依存情報蓄積装置と、
    マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、前記複数のブレークポイント間の依存関係に基づき、前記複数のブレークポイント間の同期制御を行うブレークポイント制御部と
    を具備する
    デバッグ装置。
  9. 請求項8に記載のデバッグ装置であって、
    所定のブレークポイントの位置の処理を実行中のスレッドを、別のブレークポイントをトリガーとして停止させるスレッド制御部と
    を更に具備する
    デバッグ装置。
  10. 請求項9に記載のデバッグ装置であって、
    前記スレッド制御部は、排他制御のデバッグ時に、複数スレッドの処理のタイミング制御を行う
    デバッグ装置。
  11. (a)複数のブレークポイント間に依存関係を定義するステップと、
    (b)マルチスレッドアプリケーションにおける非同期処理のデバッグ時に、前記複数のブレークポイント間の依存関係に基づき、前記複数のブレークポイント間の同期制御、及びスレッド間の同期制御を行うステップと
    を含む
    デバッグ方法。
  12. 請求項11に記載のデバッグ方法であって、
    (c)所定のブレークポイントの位置の処理を実行中のスレッドを、別のブレークポイントをトリガーとして停止させるステップと
    を更に含む
    デバッグ方法。
  13. 請求項11又は12に記載のデバッグ方法であって、
    (d)排他制御のデバッグ時に、複数スレッドの処理のタイミング制御を行うステップ
    を更に含む
    デバッグ方法。
  14. 請求項11乃至13のいずれか一項に記載のデバッグ方法であって、
    前記(b)ステップは、
    (b1)シンボリックデバッガから送られてくるオブジェクトコードの情報を基に、現在実行中の行の位置に対するトリガーとなるブレークポイントの情報と、前記トリガーとなるブレークポイントに依存する依存ブレークポイントの情報を検索するステップと、
    (b2)得られた前記依存ブレークポイントの情報のアクションの値を調べ、「active(有効)」であれば前記依存ブレークポイントの情報のアクティブの値を「true(真)」に設定し、「inactive(無効)」又は「stop(停止)」であれば前記依存ブレークポイントの情報からソースファイル名と行番号を取得するステップと、
    (b3)ソースファイル名と行番号の情報を取得すると、前記シンボリックデバッガに対し、デバッグ対象プロセス中のスレッド情報を取得するコマンドを送るステップと、
    (b4)得られたスレッド情報からスレッドのスタック情報を取得し、ソースファイル名と行番号とに一致するブレークポイントに到達しているスレッドが存在するかを判定し、存在すればスレッドIDをキーに前記シンボリックデバッガに対し当該スレッドを処理するコマンドを送信するステップと、
    (b5)前記依存ブレークポイントに対しアクティブの値のチェックと前記アクティブの値に対する処理を行い、前記依存ブレークポイントに対し処理が終了すると、最後にトリガーとなったブレークポイントの処理を実行し、前記シンボリックデバッガに処理を返すステップと
    を含む
    デバッグ方法。
  15. 請求項14に記載のデバッグ方法であって、
    前記(b4)ステップは、
    (b41)前記依存ブレークポイントの情報のアクションの値が「inactive(無効)」である場合、得られたスレッド情報からスレッドのスタック情報を取得し、ソースファイル名と行番号とに一致するブレークポイントで停止しているスレッドが存在するかを判定し、存在すればスレッドIDをキーに前記シンボリックデバッガに対し当該スレッドを再開するコマンドを送信するステップと
    を含む
    デバッグ方法。
  16. 請求項14に記載のデバッグ方法であって、
    前記(b4)ステップは、
    (b42)前記依存ブレークポイントの情報のアクションの値が「stop(停止)」である場合、得られたスレッド情報からスレッドのスタック情報を取得し、ソースファイル名と行番号とに一致するブレークポイントを通過しているスレッドが存在するかを判定し、存在すればスレッドIDをキーに前記シンボリックデバッガに対し当該スレッドを停止するコマンドを送信するステップと
    を含む
    デバッグ方法。
  17. 請求項11乃至16のいずれか一項に記載のデバッグ方法を、コンピュータに実行させるためのデバッグプログラム。
JP2007231407A 2007-09-06 2007-09-06 デバッグ装置、デバッグ方法、及びデバッグプログラム Withdrawn JP2009064233A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007231407A JP2009064233A (ja) 2007-09-06 2007-09-06 デバッグ装置、デバッグ方法、及びデバッグプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007231407A JP2009064233A (ja) 2007-09-06 2007-09-06 デバッグ装置、デバッグ方法、及びデバッグプログラム

Publications (1)

Publication Number Publication Date
JP2009064233A true JP2009064233A (ja) 2009-03-26

Family

ID=40558767

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007231407A Withdrawn JP2009064233A (ja) 2007-09-06 2007-09-06 デバッグ装置、デバッグ方法、及びデバッグプログラム

Country Status (1)

Country Link
JP (1) JP2009064233A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014164378A (ja) * 2013-02-22 2014-09-08 Nec Corp 並列デバッグシステム、並列デバッグ方法、及び、並列デバッグプログラム
JP5945779B2 (ja) * 2010-06-14 2016-07-05 パナソニックIpマネジメント株式会社 マルチスレッド並列実行装置、放送ストリーム再生装置、放送ストリーム蓄積装置、蓄積ストリーム再生装置、蓄積ストリーム再符号化装置、集積回路、マルチスレッド並列実行方法、マルチスレッドコンパイラ

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5945779B2 (ja) * 2010-06-14 2016-07-05 パナソニックIpマネジメント株式会社 マルチスレッド並列実行装置、放送ストリーム再生装置、放送ストリーム蓄積装置、蓄積ストリーム再生装置、蓄積ストリーム再符号化装置、集積回路、マルチスレッド並列実行方法、マルチスレッドコンパイラ
JP2014164378A (ja) * 2013-02-22 2014-09-08 Nec Corp 並列デバッグシステム、並列デバッグ方法、及び、並列デバッグプログラム

Similar Documents

Publication Publication Date Title
US8136097B2 (en) Thread debugging device, thread debugging method and information storage medium
US8327336B2 (en) Enhanced thread stepping
US10191835B2 (en) Multi-threaded debugger support
US7992042B2 (en) Debug support device, and program for directing computer to perform debugging method
JP4476193B2 (ja) 情報処理方法および情報処理装置
JP5326374B2 (ja) プロセッサ、性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法
JP2001134466A (ja) デバッグ装置及び方法並びにプログラム記録媒体
US7353498B2 (en) Multi-process debugger
JP2006277115A (ja) 異常検出プログラムおよび異常検出方法
KR20120139403A (ko) 게임 서버의 작업 파일 실행 장치 및 방법
JP2002014841A (ja) デバッグカーネルシステム
KR101027005B1 (ko) 시각적 디버깅 장치 및 방법
JP2009064233A (ja) デバッグ装置、デバッグ方法、及びデバッグプログラム
EP2168045A1 (en) Exception-based error handling in an array-based language
CN115237728A (zh) 一种实时操作系统运行状态的可视化监视方法
US20190034259A1 (en) Systems and Methods for Implementing a Thread Trace Log
JP2007213396A (ja) デバッグシステム、オペレーションシステム、デバッグ方法、プログラム
JP2006079261A (ja) プログラムのデバッグ方法とその装置
JP3075359B2 (ja) プログラムデバッグ開始処理方式
KR100649301B1 (ko) 마이크로쓰레드를 이용한 인터럽트 처리 장치
WO2010038280A1 (ja) 仮想計算機システム及びデッドロック解除方法
CN117707931A (zh) 跨内核态和用户态的操作系统源代码调试方法及装置
JPH08305607A (ja) マルチプロセッサシステムのプログラムデバッグ方法およびデバッガ
JP2006079142A (ja) マルチプロセッサ装置
JP2006185360A (ja) プログラムデバッグ装置、プログラムデバッグ方法及びプログラム

Legal Events

Date Code Title Description
A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20100402