(57)【特許請求の範囲】
【請求項１】
マルチタスクプログラムを処理対象とするデバッグ装置において、
複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを１つ設定する設定手段と、
上記ブレークポイントに基づくタスクの停止が発生するときに、上記バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断する判断手段と、
上記判断手段が未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させる再開手段と、
上記判断手段が完了を判断するときに、サスペンド状態に設定したタスクを実行可能状態に戻す制御手段と、
上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させる実行手段とを備えることを、
特徴とするデバッグ装置。
【請求項２】
マルチタスクプログラムを処理対象とするデバッグ装置において、
複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを複数設定する設定手段と、
最初にタスクを停止させた上記ブレークポイントの属するバリア同期ポイントを特定する特定手段と、
上記ブレークポイントに基づくタスクの停止が発生するときに、上記特定手段の特定したバリア同期ポイントを判断対象として、該バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断する判断手段と、
上記判断手段が未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させる再開手段と、
上記判断手段が完了を判断するときに、サスペンド状態に設定したタスクを実行可能状態に戻す制御手段と、
上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させる実行手段とを備えることを、
特徴とするデバッグ装置。
【請求項３】
請求項２記載のデバッグ装置において、
上記実行手段は、上記特定手段の特定したバリア同期ポイント以外のバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させることを、
特徴とするデバッグ装置。
【請求項４】
設定手段と判断手段と再開手段と制御手段と実行手段とを備えて、マルチタスクプログラムを処理対象としてデバッグを行うデバッグ装置で実行されるデバッグ方法であって、
上記設定手段が、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを１つ設定し、
上記判断手段が、上記ブレークポイントに基づくタスクの停止が発生するときに、上記バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断し、
上記再開手段が、上記判断手段で未完了が判断されるときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させ、
上記制御手段が、上記判断手段で完了が判断されるときに、サスペンド状態に設定したタスクを実行可能状態に戻し、
上記実行手段が、上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させることを、
特徴とするデバッグ方法。
【請求項５】
設定手段と特定手段と判断手段と再開手段と制御手段と実行手段とを備えて、マルチタスクプログラムを処理対象としてデバッグを行うデバッグ装置で実行されるデバッグ方法であって、
上記設定手段が、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを複数設定し、
上記特定手段が、最初にタスクを停止させた上記ブレークポイントの属するバリア同期ポイントを特定し、
上記判断手段が、上記ブレークポイントに基づくタスクの停止が発生するときに、上記特定手段の特定したバリア同期ポイントを判断対象として、該バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断し、
上記再開手段が、上記判断手段で未完了が判断されるときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させ、
上記制御手段が、上記判断手段で完了が判断されるときに、サスペンド状態に設定したタスクを実行可能状態に戻し、
上記実行手段が、上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させることを、
特徴とするデバッグ方法。
【請求項６】
請求項５記載のデバッグ方法において、
上記実行手段は、上記特定手段の特定したバリア同期ポイント以外のバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させることを、
特徴とするデバッグ方法。
【請求項７】
マルチタスクプログラムを処理対象とするデバッグ装置の実現に用いられるプログラムが記録されるプログラム記録媒体であって、
複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを１つ設定する設定処理と、
上記ブレークポイントに基づくタスクの停止が発生するときに、上記バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断する判断処理と、
上記判断処理で未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させる再開処理と、
上記判断処理で完了を判断するときに、サスペンド状態に設定したタスクを実行可能状態に戻す制御処理と、
上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させる実行処理とをコンピュータに実行させるプログラムが記録されることを、
特徴とするプログラム記録媒体。
【請求項８】
マルチタスクプログラムを処理対象とするデバッグ装置の実現に用いられるプログラムが記録されるプログラム記録媒体であって、
複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを複数設定する設定処理と、
最初にタスクを停止させた上記ブレークポイントの属するバリア同期ポイントを特定する特定処理と、
上記ブレークポイントに基づくタスクの停止が発生するときに、上記特定処理で特定したバリア同期ポイントを判断対象として、該バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断する判断処理と、
上記判断処理で未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させる再開処理と、
上記判断処理で完了を判断するときに、サスペンド状態に設定したタスクを実行可能状態に戻す制御処理と、
上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させる実行処理とをコンピュータに実行させるプログラムが記録されることを、
特徴とするプログラム記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マルチタスクプログラムを処理対象とするデバッグ装置及び方法と、そのデバッグ装置の実現に用いられるプログラムが記録されるプログラム記録媒体とに関し、特に、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させることを実現するデバッグ装置及び方法と、そのデバッグ装置の実現に用いられるプログラムが記録されるプログラム記録媒体とに関する。
【０００２】
近年のコンピュータシステムの発達による低価格化に伴い、複数のＣＰＵを用いたコンピュータシステムが増加しており、それらのＣＰＵを効率的に利用するために、複数のタスクが同時に並列動作して１つのジョブを実行するマルチタスクプログラムが増えている。
【０００３】
このマルチタスクプログラムの中には、プロセス内で相互依存の関係のある複数のスレッドを並列実行させるマルチスレッドプログラムや、相互依存の関係のある複数のプロセスを並列実行させるマルチプロセスプログラムや、後者のマルチプロセスプログラムにおいて、そのプロセスを複数のコンピュータシステムに分散させて実行させるネットワーク並列プログラムなどがある。
【０００４】
相互依存の関係にある複数のタスクで構成されるこれらのマルチタスクプログラムを正しく動作させるには、目的となる複数のタスクが正しいタイミング（プログラム位置）で同期している必要がある。これが欠けると、マルチタスクプログラムは正しく動作しないことが起こる。
【０００５】
これから、マルチタスクプログラムをデバッグするために、目的となる複数のタスクが正しいタイミングで同期しているのか否かを効率的にデバッグできるようにする技術の構築が求められている。
【０００６】
【従来の技術】
複数のタスクが同時に並列実行するマルチタスクプログラムをデバッグする従来技術として、特開平２−３００９４２  号公報に、オペレーティングシステム上で動作するタスクの中から複数個のタスクを指定する構成を採って、その指定されたタスクの何れかのタスクの実行が停止（デバッガの設定するブレークポイントにより停止する）された場合に、指定された他のタスクも同時に停止させていくというタスクデバッグ技術が開示されている。
【０００７】
また、特開平４−３１４１４１  号公報にも、デバッグのために、マルチタスクジョブを構成する任意のタスクが予め設定された停止点あるいは例外を発生した時点で、そのタスクと同一マルチタスクジョブグループ内のすべてのタスクの実行を停止させ、任意の時点でそのマルチタスクジョブグループのすべてのタスクの実行を再開させていくというマルチタスク制御技術が開示されている。
【０００８】
更に、デバッグ処理とは直接関係しないが、特開昭６３−４３３９  号公報には、プラント制御を構成する複数のタスクを使ってプラントを制御するときに、停止する必要のないプラントの系までも停止してしまうという不都合を解消するために、あるタスクが停止されるときには同時に停止されなければならないような関係にあるタスクグループを管理する構成を採って、あるタスクの実行中に、異常が検出されてオペレーティングシステムがそのタスクを停止させる場合には、同じグループに属する他のタスクも停止させていくというタスク管理技術が開示されている。
【０００９】
【発明が解決しようとする課題】
しかしながら、このような従来のデバッグ技術に従っていると、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できないという問題点がある。
【００１０】
すなわち、上述した特開平２−３００９４２  号公報や特開平４−３１４１４１  号公報に記載されている従来技術に従っていると、グルーピングされたタスクの何れかのタスクの実行が停止された場合に、そのグループに属する他のタスクも同時に停止させていくという構成を採っていることから、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できないのである。
【００１１】
ここで、このようなバリア同期は、複数のタスクがそれぞれの分担個所を分担して初期化処理を行うとか、複数のタスクがそれぞれの分担個所を分担して計算処理を行うといったような処理を行うマルチタスクプログラムをデバッグしていく際に必要となる。
【００１２】
このバリア同期を実現する１つの方法として、デバッグ対象となるマルチタスクプログラムを書き換えてバリア同期機構を組み込み、バリア同期が完了したことの保証できるプログラム位置に、デバッガを用いてブレークポイント（プログラムを停止させる命令を埋め込む）を設定して、その位置までマルチタスクプログラムを実行させていくという方法を用いることが考えられる。
【００１３】
しかしながら、このような方法を用いると、バリア同期機構を追加するためにデバッグ対象となるマルチタスクプログラムを書き換えることから、本来の原因を隠蔽するとか、組み込むバリア同期機構に不備がある場合に、そのための調査作業を行わなくてはならないとか、新たなバグを発生する危険性があるといったような様々な問題点がある。
【００１４】
本発明はかかる事情に鑑みてなされたものであって、マルチタスクプログラムを処理対象とするときにあって、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させることを実現する新たなデバッグ装置及び方法の提供と、そのデバッグ装置の実現に用いられるプログラムが記録される新たなプログラム記録媒体の提供を目的とする。
【００１５】
【課題を解決するための手段】
図１に本発明の原理構成を図示する。
【００１６】
図中、１は本発明を具備するデバッグ装置であって、デバッグ対象となるマルチタスクプログラム１０と、デバッグ処理手段１１と、設定手段１２と、バリア同期ポイント管理手段１３と、特定手段１４と、判断手段１５と、再開手段１６と、制御手段１７とを備える。
【００１７】
デバッグ処理手段１１は、マルチタスクプログラム１０のデバッグを行う。
【００１８】
設定手段１２は、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを１つ又は複数設定する。
【００１９】
バリア同期ポイント管理手段１３は、設定手段１２の設定したバリア同期ポイントの情報を管理する。
【００２０】
特定手段１４は、設定手段１２が複数のバリア同期ポイントを設定したときに動作して、最初にタスクを停止させたブレークポイントの属するバリア同期ポイントを特定する。
【００２１】
判断手段１５は、設定手段１２が１つのバリア同期ポイントを設定したときには、そのバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、そのバリア同期ポイント配下の存在する全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。
【００２２】
また、判断手段１５は、設定手段１２が複数のバリア同期ポイントを設定したときには、いずれかのバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、特定手段１４の特定したバリア同期ポイントを判断対象として、そのバリア同期ポイント配下の存在する全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。
【００２３】
再開手段１６は、判断手段１５が未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラム１０の実行を再開させる。
【００２４】
制御手段１７は、判断手段１５が完了を判断するときに、バリア同期の完了を判断して、サスペンド状態に設定したタスクを実行可能状態に戻す。
【００２５】
このように構成される本発明のデバッグ装置１では、設定手段１２は、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを１つ設定し、これを受けて、デバッグ処理手段１１は、それらのブレークポイントに応じたプログラム停止命令をマルチタスクプログラム１０に埋め込むとともに、バリア同期ポイント管理手段１３は、その設定されたバリア同期ポイントの情報を管理する。
【００２６】
続いて、マルチタスクプログラム１０が起動されると、ブレークポイントに到達したタスクは、埋め込まれたプログラム停止命令に従って動作を停止して、その旨をデバッグ処理手段１１に通知し、デバッグ処理手段１１からこの通知を受け取ると、判断手段１５は、設定手段１２の設定したバリア同期ポイント配下の全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。
【００２７】
これを受けて、再開手段１６は、判断手段１５が未完了を判断すると、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラム１０の実行を再開させる。一方、制御手段１７は、判断手段１５が完了を判断すると、バリア同期の完了を判断して、サスペンド状態に設定したタスクを実行可能状態に戻す。
【００２８】
このとき、バリア同期ポイントを構成しないブレークポイントが設定される場合には、バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、そのブレークポイントを無視してマルチタスクプログラム１０の実行を再開させる実行手段を備えることで、バリア同期を迅速に実行できるように処理することがある。
【００２９】
また、このように構成される本発明のデバッグ装置１では、設定手段１２は、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを複数設定し、これを受けて、デバッグ処理手段１１は、それらのブレークポイントに応じたプログラム停止命令をマルチタスクプログラム１０に埋め込むとともに、バリア同期ポイント管理手段１３は、その設定されたバリア同期ポイントの情報を管理する。
【００３０】
続いて、マルチタスクプログラム１０が起動されると、ブレークポイントに到達したタスクは、埋め込まれたプログラム停止命令に従って動作を停止して、その旨をデバッグ処理手段１１に通知する。
【００３１】
デバッグ処理手段１１からこの最初の通知を受け取ると、特定手段１４は、最初にタスクを停止させたブレークポイントの属するバリア同期ポイントを特定することで、設定された複数のバリア同期ポイントの中からバリア同期の対象となるバリア同期ポイントを特定し、これを受けて、その後、デバッグ処理手段１１からこの通知を受け取ると、判断手段１５は、特定手段１４の特定したバリア同期ポイント配下の全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。
【００３２】
これを受けて、再開手段１６は、判断手段１５が未完了を判断すると、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラム１０の実行を再開させる。一方、制御手段１７は、判断手段１５が完了を判断すると、バリア同期の完了を判断して、サスペンド状態に設定したタスクを実行可能状態に戻す。
【００３３】
このとき、特定手段１４の特定したバリア同期ポイント以外のバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、そのブレークポイントを無視してマルチタスクプログラム１０の実行を再開させる実行手段を備えることで、バリア同期を迅速に実行できるように処理することがある。
【００３４】
そして、このとき、バリア同期ポイントを構成しないブレークポイントが設定される場合には、バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、そのブレークポイントを無視してマルチタスクプログラム１０の実行を再開させる実行手段を備えることで、バリア同期を迅速に実行できるように処理することがある。
【００３５】
このようにして、本発明によれば、マルチタスクプログラム１０をデバッグするときに、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できるようになる。
【００３６】
これから、複数のタスクがそれぞれの分担個所を分担して初期化処理を行うとか、複数のタスクがそれぞれの分担個所を分担して計算処理を行うといったような処理を行うマルチタスクプログラムのデバッグを効率的に実行できるようになる。
【００３７】
そして、本発明によれば、複数のバリア同期ポイントを設定可能とするときにあって、最初にブレークポイントに到達したバリア同期ポイントをバリア同期の対象とする構成を採ることから、バリア同期に基づくデバッグをプログラムの実行順序に整合させて行うことができるようになる。
【００３８】
【発明の実施の形態】
以下、実施の形態に従って本発明を詳細に説明する。
【００３９】
デバッグの対象となるマルチタスクプログラムとして、プロセス内に相互依存の関係にある複数のスレッドを並列実行させるマルチスレッドプログラムを想定して、任意のスレッドだけに効力を持つブレークポイントを設定できる機能と、目的のスレッドだけを実行再開させる機能とを持つマルチスレッドデバッガに適用した実施例に従って、本発明を詳細に説明する。
【００４０】
なお、マルチスレッドプログラムは、スタック域は各スレッドで固有であるが、命令域やデータ域はプログラム内の全スレッドで共有される特性を持っている。
【００４１】
図２に、本発明のデバッガ装置１の一実施例を図示する。
【００４２】
図中、２０はデバッグ対象となるマルチスレッドプログラム、３０はマルチスレッドプログラム２０をデバッグするマルチスレッドデバッガ、４０はブレークポイントを管理するブレークポイント管理機構、５０は本発明を実現すべく備えられるバリア同期ポイント設定プログラム、６０は本発明を実現すべく備えられるバリア同期ポイント管理機構、７０は本発明を実現すべく備えられるバリア同期ポイント実行制御プログラムである。
【００４３】
このマルチスレッドデバッガ３０は、プログラマなどから入力されてくる各種指示を処理して、マルチスレッドプログラム２０に対して、ブレークポイントを設定したり解除したり、プログラムの実行や実行再開を指示したりといったような従来のマルチスレッドデバッガが持つ一般的な機能を処理する。
【００４４】
ブレークポイント管理機構４０は、ブレークポイントの設定や解除などといったブレークポイントに関する管理を行うものであり、マルチスレッドデバッガ３０に組み込まれて備えられることもある。
【００４５】
バリア同期ポイント設定プログラム５０は、本発明を実現すべくフロッピィディスクや回線などを介してインストールされてメモリ上に展開され、マルチスレッドプログラム２０を設定先として、バリア同期の対象となるブレークポイント（バリア同期先のスレッドと、そのバリア同期停止位置とを規定する）を設定することで、バリア同期ポイントを設定する。
【００４６】
例えば、マルチスレッドプログラム２０の１１行目のプログラム位置で、スレッド１，２，３，４，５をバリア同期により停止させるというようなバリア同期ポイントを設定するのである。
【００４７】
バリア同期ポイント管理機構６０は、バリア同期ポイント設定プログラム５０により設定されたバリア同期ポイントの情報を管理するバリア同期ポイント情報管理域６１と、本発明を実現すべくフロッピィディスクや回線などを介してインストールされてメモリ上に展開され、バリア同期ポイント設定プログラム５０により設定されたバリア同期ポイントの情報をバリア同期ポイント情報管理域６１に登録するバリア同期ポイント情報登録プログラム６２とを備える。
【００４８】
バリア同期ポイント実行制御プログラム７０は、本発明を実現すべくフロッピィディスクや回線などを介してインストールされてメモリ上に展開され、バリア同期ポイント情報管理域６１に管理されるバリア同期ポイント情報を参照しつつ、本発明に特徴的なバリア同期の制御処理を実行する。
【００４９】
図３に、バリア同期ポイント情報管理域６１に管理されるバリア同期ポイント情報のデータ構造の一実施例を図示する。
【００５０】
この図に示すように、バリア同期ポイント情報管理域６１は、バリア同期ポイントのＩＤを管理するバリア同期ポイント管理ブロック６１０−ｉ（ｉ＝１〜ｎ）と、ブレークポイントの情報を管理するブレークポイント管理ブロック６１１−ｉ（ｉ＝１，２，．．．）と、バリア同期の動作に入っているバリア同期ポイントがどれであるのかを管理する動作中バリア同期ポイント管理ブロック６１２とを使って、バリア同期情報を管理する構成を採っている。
【００５１】
このバリア同期ポイント管理ブロック６１０−ｉは、図４に示すように、前後に接続されるバリア同期ポイント管理ブロック６１０−ｉへの管理チェーンと、自ブロックの管理するバリア同期ポイントのＩＤと、そのバリア同期ポイントの構成ブレークポイントを管理する先頭のブレークポイント管理ブロック６１１−ｉへの管理チェーン（構成ブレークポイント用管理チェーン）とを管理する。
【００５２】
一方、ブレークポイント管理ブロック６１１−ｉは、図５に示すように、前後に接続されるブレークポイント管理ブロック６１１−ｉへの管理チェーンと、自ブロックの管理するブレークポイントのＩＤと、そのブレークポイントのプログラム位置と、そのブレークポイントの設定されるスレッドの識別子と、そのブレークポイントがバリア同期ポイントを構成するブレークポイントであるのか否かを示すフラグ（バリア同期ポイントフラグ）と、同一バリア同期ポイントの構成ブレークポイントを管理するブレークポイント管理ブロック６１１−ｉへの管理チェーン（バリア同期用管理チェーン）とを管理する。
【００５３】
一方、動作中バリア同期ポイント管理ブロック６１２は、図６に示すように、バリア同期の動作に入っているバリア同期ポイントがある場合には、そのバリア同期ポイントを管理するバリア同期ポイント管理ブロック６１０−ｉへのチェーンを管理し、バリア同期の動作に入っていない場合には、ＮＵＬＬポインタを管理する。
【００５４】
このようなデータ構造を持つバリア同期ポイント管理ブロック６１０−ｉ／ブレークポイント管理ブロック６１１−ｉを使い、“１”〜“ｎ”という識別子を持つｎ個のバリア同期ポイントが設定されている場合にあって、“１”という識別子を持つバリア同期ポイントが、“１”という識別子を持つブレークポイント（プログラム位置＝１１行、設定先スレッド識別子＝１）と、“２”という識別子を持つブレークポイント（プログラム位置＝１１行、設定先スレッド識別子＝２）などのブレークポイントから構成されている場合には、例えば、図３に示すようなチェーンを張ることで、“１”という識別子を持つバリア同期ポイントの情報を管理するのである。
【００５５】
そして、動作中バリア同期ポイント管理ブロック６１２を使って、例えば、図３に示すようなチェーンを張ることで、バリア同期の動作に入っているバリア同期ポイントが“１”という識別子を持つバリア同期ポイントであるということを管理するのである。
【００５６】
なお、この管理形態では、全てのブレークポイント（バリア同期ポイントとならないものもある）に対応付けて用意されて、それらのブレークポイントの情報を管理するブレークポイント管理ブロック６１１−ｉ（ｉ＝１，２，．．．）を用意する構成を採って、その中から、バリア同期ポイントを構成するものをバリア同期用管理チェーンで接続することで、各バリア同期ポイントの持つブレークポイントを管理するという方法を用いているが、本発明を実現するためだけであれば、バリア同期ポイントを構成しないブレークポイントを管理するブレークポイント管理ブロック６１１−ｉ（例えば、図３中のブレークポイント管理ブロック６１１−３）については、省略することが可能である。
【００５７】
図７に、バリア同期ポイント情報登録プログラム６２の実行する処理フローの一実施例、図８ないし図１０に、バリア同期ポイント実行制御プログラム７０の実行する処理フローの一実施例を図示する。次に、これらの処理フローに従って、このように構成される実施例の処理について詳細に説明する。
【００５８】
バリア同期ポイント情報登録プログラム６２は、マルチスレッドデバッガ３０を介して、バリア同期ポイント設定プログラム５０の設定したバリア同期ポイントを受け取ることで起動されると、設定されたバリア同期ポイントを順番に選択し、その選択した各バリア同期ポイントに対して図７の処理フローの処理を施していくことで、設定されたバリア同期ポイントの情報をバリア同期ポイント情報管理域６１に登録していくように処理する。
【００５９】
すなわち、バリア同期ポイント情報登録プログラム６２は、起動されると、図７の処理フローに示すように、先ず最初に、ステップ１で、選択したバリア同期ポイントに対応付けて、バリア同期ポイント管理ブロック６１０−ｉを作成して、それと既に作成されているバリア同期ポイント管理ブロック６１０−ｉとの間にチェーンを張る。
【００６０】
続いて、ステップ２で、選択したバリア同期ポイントを解析して、スレッド単位のブレークポイントに分割する。続いて、ステップ３で、分割した全てのブレークポイントを選択したのか否かを判断して、全てのブレークポイントを選択したことを判断するときには、選択したバリア同期ポイントの情報の登録完了を判断して、選択したバリア同期ポイントについての処理を終了する。
【００６１】
一方、ステップ３で、分割した全てのブレークポイントを選択していないことを判断するときには、ステップ４に進んで、分割したブレークポイントの中から未選択のものを１つ選択する。続いて、ステップ５で、選択したブレークポイントがブレークポイント管理機構４０にて既に管理されているのか否かを判断して、未管理のものである場合には、ステップ６に進んで、ブレークポイント管理機構４０に依頼することで、選択したブレークポイントをブレークポイント管理機構４０の管理下に置く。
【００６２】
ブレークポイント管理機構４０の管理下にあるブレークポイントについては、そのブレークポイントを管理するブレークポイント管理ブロック６１１−ｉが作成されているので、このステップ６では、ブレークポイント管理機構４０の管理下にないブレークポイントを処理対象として、ブレークポイント管理機構４０に依頼することで、そのブレークポイントを管理するブレークポイント管理ブロック６１１−ｉを作成してもらうように処理するのである。
【００６３】
このようにして作成されるブレークポイント管理ブロック６１１−ｉの管理するブレークポイントについては、マルチスレッドデバッガ３０が、指定されるスレッドの指定されるプログラム位置にプログラム停止命令を挿入していくことで、ブレークポイントとして機能させていくように処理することになる。
【００６４】
続いて、ステップ７で、選択したブレークポイントを管理するブレークポイント管理ブロック６１１−ｉの持つバリア同期ポイントフラグをＯＮすることで、そのブレークポイントがバリア同期ポイントを構成するブレークポイントである旨を記録する。
【００６５】
続いて、ステップ８で、作成したバリア同期ポイント管理ブロック６１０−ｉの持つ構成ブレークポイント管理チェーンからのチェーンに、選択したブレークポイントを管理するブレークポイント管理ブロック６１１−ｉを接続して、ステップ３に戻る。
【００６６】
このようにして、バリア同期ポイント情報登録プログラム６２は、バリア同期ポイント設定プログラム５０の設定したバリア同期ポイントを受け取ると、バリア同期ポイント管理ブロック６１０−ｉとブレークポイント管理ブロック６１１−ｉとを使い、図３に示したような形で、このバリア同期ポイントの情報をバリア同期ポイント情報管理域６１に登録していくように処理するのである。
【００６７】
次に、バリア同期ポイント実行制御プログラム７０の実行する処理について説明する。
【００６８】
マルチスレッドデバッガ３０は、バリア同期ポイント情報登録プログラム６２が処理を終了すると、マルチスレッドプログラム２０を起動して、その実行中に、いずれかのスレッドが何らかの原因で停止するとバリア同期ポイント実行制御プログラム７０を呼び出していくことで、マルチスレッドプログラム２０のデバッグ処理に入る。
【００６９】
このようにして呼び出されると、バリア同期ポイント実行制御プログラム７０は、図８ないし図１０の処理フローに示すように、先ず最初に、ステップ１で、スレッドの停止原因がブレークポイントによるものであるのか否かを判断して、スレッドの停止原因がブレークポイントによるものでないことを判断するときには、自プログラムの処理する内容でないことを判断して、そのままマルチスレッドデバッガ３０に制御を戻す。
【００７０】
一方、ステップ１で、スレッドの停止原因がブレークポイントによるものであることを判断するときには、ステップ２に進んで、動作中バリア同期ポイント管理ブロック６１２にＮＵＬＬポインタが登録されているのか否かを判断することで、バリア同期の動作中であるのか否かを判断する。
【００７１】
すなわち、後述することから分かるように、バリア同期の動作中であるときには、動作中バリア同期ポイント管理ブロック６１２に、バリア同期動作中のバリア同期ポイントを管理するバリア同期ポイント管理ブロック６１０−ｉへのチェーンが登録されているので、動作中バリア同期ポイント管理ブロック６１２にＮＵＬＬポインタが登録されているのか否かを判断することで、バリア同期の動作中であるのか否かを判断するのである。
【００７２】
なお、マルチスレッドデバッガ３０は、マルチスレッドプログラム２０の実行開始にあたって、動作中バリア同期ポイント管理ブロック６１２にＮＵＬＬポインタを書き込んでいくという初期化処理を行う。
【００７３】
この判断処理に従って、動作中バリア同期ポイント管理ブロック６１２にＮＵＬＬポインタが登録されていることで、バリア同期の動作中でないことを判断するときには、ステップ３に進んで、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＮを表示しているのか否かを判断して、ＯＦＦを表示していることを判断するときには、バリア同期の対象ではないブレークポイントが停止原因であることを判断して、そのままマルチスレッドデバッガ３０に制御を戻すことで、通常のブレークポイントに対するデバッグ処理に入るように制御する。
【００７４】
一方、ステップ３の判断処理に従って、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＮを表示していることを判断するときには、バリア同期の開始を判断して、ステップ４に進んで、動作中バリア同期ポイント管理ブロック６１２に、そのブレークポイント管理ブロック６１１−ｉへリンクするバリア同期ポイント管理ブロック６１０−ｉへのチェーンを登録する。
【００７５】
続いて、ステップ５で、停止したスレッドをサスペンド状態（マルチスレッドプログラム２０の実行再開時に、そのスレッドの実行を再開しない状態にする）に設定し、続くステップ６で、プログラマに対してバリア同期が開始した旨のメッセージを表示してから、続くステップ７で、マルチスレッドプログラム２０の実行を再開させて、マルチスレッドデバッガ３０に制御を戻す。
【００７６】
一方、ステップ２の判断処理で、動作中バリア同期ポイント管理ブロック６１２にバリア同期ポイント管理ブロック６１０−ｉへのチェーンが登録されていることを判断するときには、ステップ８（図９の処理フロー）に進んで、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＮを表示しているのか否かを判断する。
【００７７】
この判断処理により、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＦＦを表示していることを判断するときには、ステップ９に進んで、バリア同期ポイントでないブレークポイントに到達した旨のメッセージを表示してから、続くステップ１０で、マルチスレッドプログラム２０の実行を再開させて、マルチスレッドデバッガ３０に制御を戻す。
【００７８】
すなわち、既にバリア同期に入っているので、通常のブレークポイントについては無視して、バリア同期動作中のバリア同期ポイントを構成する次のブレークポイントへの到達を実現すべく、マルチスレッドプログラム２０の実行を再開させるのである。
【００７９】
一方、ステップ８で、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＮを表示していることを判断するときには、ステップ１１に進んで、そのブレークポイント管理ブロック６１１−ｉが動作中バリア同期ポイント管理ブロック６１２からのチェーンに繋がっているのか否かを判断する。
【００８０】
この判断処理により、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉが動作中バリア同期ポイント管理ブロック６１２からのチェーンに繋がっていないことを判断するときには、ステップ１２に進んで、バリア同期の動作中でないバリア同期ポイントのブレークポイントに到達した旨のメッセージを表示してから、続くステップ１３で、マルチスレッドプログラム２０の実行を再開させて、マルチスレッドデバッガ３０に制御を戻す。
【００８１】
すなわち、バリア同期動作に入れるのは、複数設定されるバリア同期ポイントの中の最初にブレークポイントに到達したものだけであるので、それ以外のバリア同期ポイントのブレークポイントについては無視して、バリア同期動作中のバリア同期ポイントを構成する次のブレークポイントへの到達を実現すべく、マルチスレッドプログラム２０の実行を再開させるのである。
【００８２】
一方、ステップ１１で、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉが動作中バリア同期ポイント管理ブロック６１２からのチェーンに繋がっていることを判断するときには、ステップ１４に進んで、そのチェーンに繋がるブレークポイント管理ブロック６１１−ｉを参照することで、バリア同期動作中のバリア同期ポイント配下のブレークポイントの設定されるスレッドを特定して、それらの全てのスレッドの停止が完了したのか否かを判断することで、バリア同期が完了したのか否かを判断する。
【００８３】
このとき、バリア同期動作中のバリア同期ポイントの中に、その時点では存在しないスレッドを設定先とするブレークポイントが含まれることがあるが、このときには、そのスレッドについては停止しているものと見なして、この判断処理を実行する。
【００８４】
すなわち、現在存在しないスレッドがバリア同期ポイントで指定されることがある（プログラマがスレッドの存在の有無を知らないことがある）ので、そのようなスレッドを設定先とするブレークポイントを除きつつ、バリア同期動作中のバリア同期ポイント配下の存在する全てのブレークポイントに基づくスレッドの停止が完了したのか否かを判断することで、バリア同期が完了したのか否かを判断するのである。
【００８５】
この判断処理により、バリア同期が完了していないことを判断するときには、ステップ１５に進んで、停止したスレッドをサスペンド状態（マルチスレッドプログラム２０の実行再開時に、そのスレッドの実行を再開しない状態にする）に設定し、続くステップ１６で、プログラマに対してバリア同期中である旨のメッセージを表示してから、続くステップ１７（図１０の処理フロー）で、マルチスレッドプログラム２０の実行を再開させて、マルチスレッドデバッガ３０に制御を戻す。
【００８６】
一方、ステップ１４で、バリア同期が完了したことを判断するときには、ステップ１８（図１０の処理フロー）に進んで、プログラマに対してバリア同期が完了した旨のメッセージを表示し、続くステップ１９で、バリア同期のためにサスペンド状態にしたスレッドを実行可能状態に戻してから、マルチスレッドデバッガ３０に制御を戻す。
【００８７】
このようにして、バリア同期ポイント実行制御プログラム７０は、図１１に示すように、バリア同期ポイント設定プログラム５０により複数のバリア同期ポイントが設定されると、その中から、最初にスレッドを停止させたバリア同期ポイントをバリア同期の対象として設定し、そのバリア同期ポイントの指定するブレークポイントに到達したスレッドをサスペンド状態にしながら、そのバリア同期ポイント配下の存在する全てのブレークポイントに基づくスレッドの停止が完了すると、サスペンド状態にしたスレッドを実行可能状態に戻して、マルチスレッドデバッガ３０に制御を戻していくように処理するのである。
【００８８】
このように、本発明によれば、マルチスレッドプログラム２０をデバッグするときに、目的となる任意のスレッドをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できるようになるのである。
【００８９】
次に、図１２に示すマルチスレッドプログラム２０を具体例にして、本発明により実現されるバリア同期について具体的に説明する。
【００９０】
この図１２に示すマルチスレッドプログラム２０は、図１３に示すように、広域変数である配列ａｒｒａｙ［５０］  の０〜９に“０”を書き込み、１０〜１９に“１０”を書き込み、２０〜２９に“２０”を書き込み、３０〜３９に“３０”を書き込み、４０〜４９に“４０”を書き込むという処理を実行するものであり、図１４に示すように、４つのスレッド（ＴＨＲー２〜５）を生成して、この生成する４つのスレッドと、初期スレッドとして機能する関数ｍａｉｎ（）とを使って、この書込処理を実行するものである。
【００９１】
図１２に示すマルチスレッドプログラム２０のプログラム動作について説明するならば、関数ｍａｉｎ（）（２０行）が起動されると、２７行に記述されるｆｏｒ  文の指定する繰り返し回数（４回）に従って、２９行に記述されるシステム関数により４つのスレッドが生成される。
【００９２】
このようにして生成されるスレッドは、２９行の記述に従って、ｂｅｇｉｎ［ｉ］のアドレスを渡しつつ、関数ＰＥ（）（１４行）を呼び出す。ここで、２７行及び２８行の記述に従って、ｂｅｇｉｎ［ｉ］には、
ｂｅｇｉｎ［０］＝０    ｂｅｇｉｎ［１］＝１０      ｂｅｇｉｎ［２］＝２０      ｂｅｇｉｎ［３］＝３０
という値が設定されている。
【００９３】
スレッドから呼び出されると、関数ＰＥ（）は、１６行の記述に従って、ｂｅｇｉｎ［ｉ］の実体を渡しつつ、関数ｓｕｂ（）（６行）を呼び出す。一方、関数ｍａｉｎ（）は、３２行の記述に従って、「ｂｅｇｉｎ［４］＝４０  」を渡しつつ、関数ｓｕｂ（）  を呼び出す。
【００９４】
このようにして呼び出されると、関数ｓｕｂ（）  は、１０行の記述に従って、図１３に示したように、配列ａｒｒａｙ［５０］  の０〜９に“０”を書き込み、１０〜１９に“１０”を書き込み、２０〜２９に“２０”を書き込み、３０〜３９に“３０”を書き込み、４０〜４９に“４０”を書き込むという処理を実行する。
【００９５】
この関数ｓｕｂ（）  による処理を受けて、初期スレッドとして機能する関数ｍａｉｎ（）は、自分の作成した全てのスレッドがこの処理を終了するのを待ち合わせて、その待ち合わせを終えると、５つのスレッドにより設定された配列ａｒｒａｙ［５０］  の内容を表示して、処理を終了する。
【００９６】
このようにして、４つのスレッドは、一斉に単独で関数ＰＥ０から動作し始め、スレッドの作成時に渡された引数をそのまま関数ｓｕｂ（）（配列への設定処理を行う関数）に渡して実行させる。このとき、初期スレッドである関数ｍａｉｎ０は、スレッドの作成に続いて他のスレッドと同様に関数ｓｕｂ（）  を実行させる。
【００９７】
この時点で、５つのスレッドは、引数を変えて関数ｓｕｂ（）  を同時に動作させていることになる。すなわち、同じ位置の同じ命令列（関数ｓｕｂ（））を同時に５つのスレッドで動作させていくことになる。
【００９８】
この図１２に示すマルチスレッドプログラム２０をデバッグする場合に、図１３に示すような書込処理が正常に行われたのかを確認する必要がある。
【００９９】
そこで、本発明を使い、５つのスレッド＜ＴＨＲ−１＞〜＜ＴＨＲ−５＞に対して、図１２に示すマルチスレッドプログラム２０の１１行をブレークポイントするバリア同期ポイントを設定することで、５つのスレッド＜ＴＨＲ−１＞〜＜ＴＨＲ−５＞をその１１行でバリア同期させて、この書込処理が正常に行われたのか否かを確認するデバッグ処理を行う。
【０１００】
このバリア同期ポイントを設定する場合、最初に停止するスレッドは不定だが、例えば、最初に、スレッド＜ＴＨＲ−２＞がバリア同期ポイントを構成するブレークポイントによって停止するとし、それに続いて、スレッド＜ＴＨＲ−３＞が停止し、それに続いて、スレッド＜ＴＨＲ−４＞が停止し、それに続いて、スレッド＜ＴＨＲ−５＞が停止し、最後に、スレッド＜ＴＨＲ−１＞が停止していくとする。
【０１０１】
この場合には、上述した処理に従って、スレッド＜ＴＨＲ−２＞が１１行で停止することでバリア同期が動作を開始し、そのスレッド＜ＴＨＲ−２＞をサスペンド状態にした後、マルチスレッドプログラム２０の実行を再開させる。
【０１０２】
続いて、スレッド＜ＴＨＲ−３＞が１１行で停止し、それに応じてサスペンド状態にし、続いて、スレッド＜ＴＨＲ−４＞が１１行で停止し、それに応じてサスペンド状態にし、続いて、スレッド＜ＴＨＲ−５＞が１１行で停止し、それに応じてサスペンド状態にしていく。
【０１０３】
最後に、スレッド＜ＴＨＲ−１＞が１１行で停止し、これによりプログラマが指定した現在存在している全てのスレッドがバリア同期ポイントで停止したことでバリア同期動作が完了したことを認識して、その旨をプログラマに通知し、このバリア同期のためにサスペンド状態にしたスレッド＜ＴＨＲ−２＞、スレッド＜ＴＨＲ−３＞、スレッド＜ＴＨＲ−４＞、スレッド＜ＴＨＲ−５＞を実行再開可能状態にして、マルチスレッドデバッガ３０に制御を戻していく。
【０１０４】
このようにして、本発明を用いることで、図１２に示すようなマルチスレッドプログラム２０のデバッグが可能になる。
【０１０５】
上述した実施例では、複数のバリア同期ポイントの設定を可能とする構成を開示したが、１つのバリア同期ポイントの設定のみを許可するという構成を採ることも可能である。この実施例に従う場合には、設定されるバリア同期ポイントがバリア同期の対象となることから、動作中バリア同期ポイント管理ブロック６１２を備える必要はなく、その代わりに、バリア同期の動作中であるのか否かを表示するフラグを用意することになる。
【０１０６】
この実施例に従う場合、バリア同期ポイント実行制御プログラム７０は、図８ないし図１０の処理フローに代えて、図１５及び図１６の処理フローの処理を実行することになる。
【０１０７】
すなわち、いずれかのスレッドが何らかの原因で停止することでマルチスレッドデバッガ３０から呼び出されると、バリア同期ポイント実行制御プログラム７０は、図１５及び図１６の処理フローに示すように、先ず最初に、ステップ１で、スレッドの停止原因がブレークポイントによるものであるのか否かを判断して、スレッドの停止原因がブレークポイントによるものでないことを判断するときには、自プログラムの処理する内容でないことを判断して、そのままマルチスレッドデバッガ３０に制御を戻す。
【０１０８】
一方、ステップ１で、スレッドの停止原因がブレークポイントによるものであることを判断するときには、ステップ２に進んで、バリア同期の動作中であるのか否かを表示するフラグがＯＮになっているのか否かを判断することで、バリア同期の動作中であるのか否かを判断する。なお、このフラグは、マルチスレッドプログラム２０の実行開始時にＯＦＦにセットされる。
【０１０９】
この判断処理に従って、バリア同期の動作中でないことを判断するときには、ステップ３に進んで、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＮを表示しているのか否かを判断して、ＯＦＦを表示していることを判断するときには、バリア同期の対象ではないブレークポイントが停止原因であることを判断して、そのままマルチスレッドデバッガ３０に制御を戻すことで、通常のブレークポイントに対するデバッグ処理に入るように制御する。
【０１１０】
一方、ステップ３の判断処理に従って、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＮを表示していることを判断するときには、バリア同期の開始を判断して、ステップ４に進んで、バリア同期の動作中であるのか否かを表示するフラグをＯＮにすることで、バリア同期の動作中であることを記録する。
【０１１１】
続いて、ステップ５で、停止したスレッドをサスペンド状態に設定し、続くステップ６で、プログラマに対してバリア同期が開始した旨のメッセージを表示してから、続くステップ７で、マルチスレッドプログラム２０の実行を再開させて、マルチスレッドデバッガ３０に制御を戻す。
【０１１２】
一方、ステップ２の判断処理で、バリア同期の動作中であることを判断するときには、ステップ８（図１６の処理フロー）に進んで、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＮを表示しているのか否かを判断する。
【０１１３】
この判断処理により、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＦＦを表示していることを判断するときには、ステップ９に進んで、バリア同期ポイントでないブレークポイントに到達した旨のメッセージを表示してから、続くステップ１０で、マルチスレッドプログラム２０の実行を再開させて、マルチスレッドデバッガ３０に制御を戻す。
【０１１４】
すなわち、既にバリア同期に入っているので、通常のブレークポイントについては無視して、バリア同期ポイントを構成する次のブレークポイントへの到達を実現すべく、マルチスレッドプログラム２０の実行を再開させるのである。
【０１１５】
一方、ステップ８で、停止原因となったブレークポイントを管理するブレークポイント管理ブロック６１１−ｉのバリア同期ポイントフラグがＯＮを表示していることを判断するときには、ステップ１１に進んで、そのブレークポイント管理ブロック６１１−ｉにバリア同期用管理チェーン（図５に示したもの）で繋がるブレークポイント管理ブロック６１１−ｉを参照することで、バリア同期ポイント配下のブレークポイントの設定されるスレッドを特定して、それらの全てのスレッドの停止が完了したのか否かを判断することで、バリア同期が完了したのか否かを判断する。
【０１１６】
このとき、バリア同期ポイントの中に、その時点では存在しないスレッドを設定先とするブレークポイントが含まれることがあるが、このときには、そのスレッドについては停止しているものと見なして、この判断処理を実行する。
【０１１７】
すなわち、現在存在しないスレッドがバリア同期ポイントで指定されることがあるので、そのようなスレッドを設定先とするブレークポイントを除きつつ、バリア同期ポイント配下の存在する全てのブレークポイントに基づくスレッドの停止が完了したのか否かを判断することで、バリア同期が完了したのか否かを判断するのである。
【０１１８】
この判断処理により、バリア同期が完了していないことを判断するときには、ステップ１２に進んで、停止したスレッドをサスペンド状態に設定し、続くステップ１３で、プログラマに対してバリア同期中である旨のメッセージを表示してから、続くステップ１４で、マルチスレッドプログラム２０の実行を再開させて、マルチスレッドデバッガ３０に制御を戻す。
【０１１９】
一方、ステップ１１で、バリア同期が完了したことを判断するときには、ステップ１５に進んで、プログラマに対してバリア同期が完了した旨のメッセージを表示し、続くステップ１６で、バリア同期のためにサスペンド状態にしたスレッドを実行可能状態に戻してから、マルチスレッドデバッガ３０に制御を戻す。
【０１２０】
このようにして、バリア同期ポイント実行制御プログラム７０は、１つのバリア同期ポイントの設定のみを許可するという構成を採る場合には、図１５及び図１６の処理フローの処理を実行することで、マルチスレッドプログラム２０に対するバリア同期を実行するのである。
【０１２１】
図示実施例に従って本発明を説明したが、本発明はこれに限定されるものではない。例えば、実施例では、マルチスレッドプログラム２０に対してのバリア同期を具体例にして本発明を説明したが、本発明は、相互依存の関係のある複数のプロセスを並列実行させるマルチプロセスプログラムなどのような他のマルチタスクプログラムに対してもそのまま適用できる。
【０１２２】
【発明の効果】
以上説明したように、本発明によれば、マルチタスクプログラムをデバッグするときに、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できるようになる。
【０１２３】
これから、複数のタスクがそれぞれの分担個所を分担して初期化処理を行うとか、複数のタスクがそれぞれの分担個所を分担して計算処理を行うといったような処理を行うマルチタスクプログラムのデバッグを効率的に実行できるようになる。
【０１２４】
そして、本発明によれば、複数のバリア同期ポイントを設定可能とするときにあって、最初にブレークポイントに到達したバリア同期ポイントをバリア同期の対象とする構成を採ることから、バリア同期に基づくデバッグをプログラムの実行順序に整合させて行うことができるようになる。
【図面の簡単な説明】
【図１】本発明の原理構成図である。
【図２】本発明の一実施例である。
【図３】バリア同期ポイント管理の一実施例である。
【図４】バリア同期ポイント管理ブロックの一実施例である。
【図５】ブレークポイント管理ブロックの一実施例である。
【図６】動作中バリア同期ポイント管理ブロックの一実施例である。
【図７】バリア同期ポイント情報登録プログラムの処理フローである。
【図８】バリア同期ポイント実行制御プログラムの処理フローである。
【図９】バリア同期ポイント実行制御プログラムの処理フローである。
【図１０】バリア同期ポイント実行制御プログラムの処理フローである。
【図１１】実施例の処理の説明図である。
【図１２】マルチスレッドプログラムの一例である。
【図１３】マルチスレッドプログラムの説明図である。
【図１４】マルチスレッドプログラムの説明図である。
【図１５】バリア同期ポイント実行制御プログラムの処理フローである。
【図１６】バリア同期ポイント実行制御プログラムの処理フローである。
【符号の説明】
１    デバッグ装置
１０  マルチタスクプログラム
１１  デバッグ処理手段
１２  設定手段
１３  バリア同期ポイント管理手段
１４  特定手段
１５  判断手段
１６  再開手段
１７  制御手段
【図１】
0003571976.tif 000002
【図２】
0003571976.tif 000003
【図３】
0003571976.tif 000004
【図４】
0003571976.tif 000005
【図５】
0003571976.tif 000006
【図６】
0003571976.tif 000007
【図７】
0003571976.tif 000008
【図８】
0003571976.tif 000009
【図９】
0003571976.tif 000010
【図１０】
0003571976.tif 000011
【図１１】
0003571976.tif 000012
【図１２】
0003571976.tif 000013
【図１３】
0003571976.tif 000014
【図１４】
0003571976.tif 000015
【図１５】
0003571976.tif 000016
【図１６】
0003571976.tif 000017