JP3571976B2 - デバッグ装置及び方法並びにプログラム記録媒体 - Google Patents
デバッグ装置及び方法並びにプログラム記録媒体 Download PDFInfo
- Publication number
- JP3571976B2 JP3571976B2 JP31622099A JP31622099A JP3571976B2 JP 3571976 B2 JP3571976 B2 JP 3571976B2 JP 31622099 A JP31622099 A JP 31622099A JP 31622099 A JP31622099 A JP 31622099A JP 3571976 B2 JP3571976 B2 JP 3571976B2
- Authority
- JP
- Japan
- Prior art keywords
- breakpoint
- barrier synchronization
- synchronization point
- task
- program
- 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.)
- Expired - Fee Related
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
- G06F11/3632—Software debugging of specific synchronisation aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
Description
【発明の属する技術分野】
本発明は、マルチタスクプログラムを処理対象とするデバッグ装置及び方法と、そのデバッグ装置の実現に用いられるプログラムが記録されるプログラム記録媒体とに関し、特に、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させることを実現するデバッグ装置及び方法と、そのデバッグ装置の実現に用いられるプログラムが記録されるプログラム記録媒体とに関する。
【0002】
近年のコンピュータシステムの発達による低価格化に伴い、複数のCPUを用いたコンピュータシステムが増加しており、それらのCPUを効率的に利用するために、複数のタスクが同時に並列動作して1つのジョブを実行するマルチタスクプログラムが増えている。
【0003】
このマルチタスクプログラムの中には、プロセス内で相互依存の関係のある複数のスレッドを並列実行させるマルチスレッドプログラムや、相互依存の関係のある複数のプロセスを並列実行させるマルチプロセスプログラムや、後者のマルチプロセスプログラムにおいて、そのプロセスを複数のコンピュータシステムに分散させて実行させるネットワーク並列プログラムなどがある。
【0004】
相互依存の関係にある複数のタスクで構成されるこれらのマルチタスクプログラムを正しく動作させるには、目的となる複数のタスクが正しいタイミング(プログラム位置)で同期している必要がある。これが欠けると、マルチタスクプログラムは正しく動作しないことが起こる。
【0005】
これから、マルチタスクプログラムをデバッグするために、目的となる複数のタスクが正しいタイミングで同期しているのか否かを効率的にデバッグできるようにする技術の構築が求められている。
【0006】
【従来の技術】
複数のタスクが同時に並列実行するマルチタスクプログラムをデバッグする従来技術として、特開平2−300942 号公報に、オペレーティングシステム上で動作するタスクの中から複数個のタスクを指定する構成を採って、その指定されたタスクの何れかのタスクの実行が停止(デバッガの設定するブレークポイントにより停止する)された場合に、指定された他のタスクも同時に停止させていくというタスクデバッグ技術が開示されている。
【0007】
また、特開平4−314141 号公報にも、デバッグのために、マルチタスクジョブを構成する任意のタスクが予め設定された停止点あるいは例外を発生した時点で、そのタスクと同一マルチタスクジョブグループ内のすべてのタスクの実行を停止させ、任意の時点でそのマルチタスクジョブグループのすべてのタスクの実行を再開させていくというマルチタスク制御技術が開示されている。
【0008】
更に、デバッグ処理とは直接関係しないが、特開昭63−4339 号公報には、プラント制御を構成する複数のタスクを使ってプラントを制御するときに、停止する必要のないプラントの系までも停止してしまうという不都合を解消するために、あるタスクが停止されるときには同時に停止されなければならないような関係にあるタスクグループを管理する構成を採って、あるタスクの実行中に、異常が検出されてオペレーティングシステムがそのタスクを停止させる場合には、同じグループに属する他のタスクも停止させていくというタスク管理技術が開示されている。
【0009】
【発明が解決しようとする課題】
しかしながら、このような従来のデバッグ技術に従っていると、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できないという問題点がある。
【0010】
すなわち、上述した特開平2−300942 号公報や特開平4−314141 号公報に記載されている従来技術に従っていると、グルーピングされたタスクの何れかのタスクの実行が停止された場合に、そのグループに属する他のタスクも同時に停止させていくという構成を採っていることから、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できないのである。
【0011】
ここで、このようなバリア同期は、複数のタスクがそれぞれの分担個所を分担して初期化処理を行うとか、複数のタスクがそれぞれの分担個所を分担して計算処理を行うといったような処理を行うマルチタスクプログラムをデバッグしていく際に必要となる。
【0012】
このバリア同期を実現する1つの方法として、デバッグ対象となるマルチタスクプログラムを書き換えてバリア同期機構を組み込み、バリア同期が完了したことの保証できるプログラム位置に、デバッガを用いてブレークポイント(プログラムを停止させる命令を埋め込む)を設定して、その位置までマルチタスクプログラムを実行させていくという方法を用いることが考えられる。
【0013】
しかしながら、このような方法を用いると、バリア同期機構を追加するためにデバッグ対象となるマルチタスクプログラムを書き換えることから、本来の原因を隠蔽するとか、組み込むバリア同期機構に不備がある場合に、そのための調査作業を行わなくてはならないとか、新たなバグを発生する危険性があるといったような様々な問題点がある。
【0014】
本発明はかかる事情に鑑みてなされたものであって、マルチタスクプログラムを処理対象とするときにあって、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させることを実現する新たなデバッグ装置及び方法の提供と、そのデバッグ装置の実現に用いられるプログラムが記録される新たなプログラム記録媒体の提供を目的とする。
【0015】
【課題を解決するための手段】
図1に本発明の原理構成を図示する。
【0016】
図中、1は本発明を具備するデバッグ装置であって、デバッグ対象となるマルチタスクプログラム10と、デバッグ処理手段11と、設定手段12と、バリア同期ポイント管理手段13と、特定手段14と、判断手段15と、再開手段16と、制御手段17とを備える。
【0017】
デバッグ処理手段11は、マルチタスクプログラム10のデバッグを行う。
【0018】
設定手段12は、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを1つ又は複数設定する。
【0019】
バリア同期ポイント管理手段13は、設定手段12の設定したバリア同期ポイントの情報を管理する。
【0020】
特定手段14は、設定手段12が複数のバリア同期ポイントを設定したときに動作して、最初にタスクを停止させたブレークポイントの属するバリア同期ポイントを特定する。
【0021】
判断手段15は、設定手段12が1つのバリア同期ポイントを設定したときには、そのバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、そのバリア同期ポイント配下の存在する全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。
【0022】
また、判断手段15は、設定手段12が複数のバリア同期ポイントを設定したときには、いずれかのバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、特定手段14の特定したバリア同期ポイントを判断対象として、そのバリア同期ポイント配下の存在する全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。
【0023】
再開手段16は、判断手段15が未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラム10の実行を再開させる。
【0024】
制御手段17は、判断手段15が完了を判断するときに、バリア同期の完了を判断して、サスペンド状態に設定したタスクを実行可能状態に戻す。
【0025】
このように構成される本発明のデバッグ装置1では、設定手段12は、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを1つ設定し、これを受けて、デバッグ処理手段11は、それらのブレークポイントに応じたプログラム停止命令をマルチタスクプログラム10に埋め込むとともに、バリア同期ポイント管理手段13は、その設定されたバリア同期ポイントの情報を管理する。
【0026】
続いて、マルチタスクプログラム10が起動されると、ブレークポイントに到達したタスクは、埋め込まれたプログラム停止命令に従って動作を停止して、その旨をデバッグ処理手段11に通知し、デバッグ処理手段11からこの通知を受け取ると、判断手段15は、設定手段12の設定したバリア同期ポイント配下の全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。
【0027】
これを受けて、再開手段16は、判断手段15が未完了を判断すると、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラム10の実行を再開させる。一方、制御手段17は、判断手段15が完了を判断すると、バリア同期の完了を判断して、サスペンド状態に設定したタスクを実行可能状態に戻す。
【0028】
このとき、バリア同期ポイントを構成しないブレークポイントが設定される場合には、バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、そのブレークポイントを無視してマルチタスクプログラム10の実行を再開させる実行手段を備えることで、バリア同期を迅速に実行できるように処理することがある。
【0029】
また、このように構成される本発明のデバッグ装置1では、設定手段12は、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを複数設定し、これを受けて、デバッグ処理手段11は、それらのブレークポイントに応じたプログラム停止命令をマルチタスクプログラム10に埋め込むとともに、バリア同期ポイント管理手段13は、その設定されたバリア同期ポイントの情報を管理する。
【0030】
続いて、マルチタスクプログラム10が起動されると、ブレークポイントに到達したタスクは、埋め込まれたプログラム停止命令に従って動作を停止して、その旨をデバッグ処理手段11に通知する。
【0031】
デバッグ処理手段11からこの最初の通知を受け取ると、特定手段14は、最初にタスクを停止させたブレークポイントの属するバリア同期ポイントを特定することで、設定された複数のバリア同期ポイントの中からバリア同期の対象となるバリア同期ポイントを特定し、これを受けて、その後、デバッグ処理手段11からこの通知を受け取ると、判断手段15は、特定手段14の特定したバリア同期ポイント配下の全てのブレークポイントに基づくタスクの停止が完了したのか否かを判断する。
【0032】
これを受けて、再開手段16は、判断手段15が未完了を判断すると、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラム10の実行を再開させる。一方、制御手段17は、判断手段15が完了を判断すると、バリア同期の完了を判断して、サスペンド状態に設定したタスクを実行可能状態に戻す。
【0033】
このとき、特定手段14の特定したバリア同期ポイント以外のバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、そのブレークポイントを無視してマルチタスクプログラム10の実行を再開させる実行手段を備えることで、バリア同期を迅速に実行できるように処理することがある。
【0034】
そして、このとき、バリア同期ポイントを構成しないブレークポイントが設定される場合には、バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、そのブレークポイントを無視してマルチタスクプログラム10の実行を再開させる実行手段を備えることで、バリア同期を迅速に実行できるように処理することがある。
【0035】
このようにして、本発明によれば、マルチタスクプログラム10をデバッグするときに、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できるようになる。
【0036】
これから、複数のタスクがそれぞれの分担個所を分担して初期化処理を行うとか、複数のタスクがそれぞれの分担個所を分担して計算処理を行うといったような処理を行うマルチタスクプログラムのデバッグを効率的に実行できるようになる。
【0037】
そして、本発明によれば、複数のバリア同期ポイントを設定可能とするときにあって、最初にブレークポイントに到達したバリア同期ポイントをバリア同期の対象とする構成を採ることから、バリア同期に基づくデバッグをプログラムの実行順序に整合させて行うことができるようになる。
【0038】
【発明の実施の形態】
以下、実施の形態に従って本発明を詳細に説明する。
【0039】
デバッグの対象となるマルチタスクプログラムとして、プロセス内に相互依存の関係にある複数のスレッドを並列実行させるマルチスレッドプログラムを想定して、任意のスレッドだけに効力を持つブレークポイントを設定できる機能と、目的のスレッドだけを実行再開させる機能とを持つマルチスレッドデバッガに適用した実施例に従って、本発明を詳細に説明する。
【0040】
なお、マルチスレッドプログラムは、スタック域は各スレッドで固有であるが、命令域やデータ域はプログラム内の全スレッドで共有される特性を持っている。
【0041】
図2に、本発明のデバッガ装置1の一実施例を図示する。
【0042】
図中、20はデバッグ対象となるマルチスレッドプログラム、30はマルチスレッドプログラム20をデバッグするマルチスレッドデバッガ、40はブレークポイントを管理するブレークポイント管理機構、50は本発明を実現すべく備えられるバリア同期ポイント設定プログラム、60は本発明を実現すべく備えられるバリア同期ポイント管理機構、70は本発明を実現すべく備えられるバリア同期ポイント実行制御プログラムである。
【0043】
このマルチスレッドデバッガ30は、プログラマなどから入力されてくる各種指示を処理して、マルチスレッドプログラム20に対して、ブレークポイントを設定したり解除したり、プログラムの実行や実行再開を指示したりといったような従来のマルチスレッドデバッガが持つ一般的な機能を処理する。
【0044】
ブレークポイント管理機構40は、ブレークポイントの設定や解除などといったブレークポイントに関する管理を行うものであり、マルチスレッドデバッガ30に組み込まれて備えられることもある。
【0045】
バリア同期ポイント設定プログラム50は、本発明を実現すべくフロッピィディスクや回線などを介してインストールされてメモリ上に展開され、マルチスレッドプログラム20を設定先として、バリア同期の対象となるブレークポイント(バリア同期先のスレッドと、そのバリア同期停止位置とを規定する)を設定することで、バリア同期ポイントを設定する。
【0046】
例えば、マルチスレッドプログラム20の11行目のプログラム位置で、スレッド1,2,3,4,5をバリア同期により停止させるというようなバリア同期ポイントを設定するのである。
【0047】
バリア同期ポイント管理機構60は、バリア同期ポイント設定プログラム50により設定されたバリア同期ポイントの情報を管理するバリア同期ポイント情報管理域61と、本発明を実現すべくフロッピィディスクや回線などを介してインストールされてメモリ上に展開され、バリア同期ポイント設定プログラム50により設定されたバリア同期ポイントの情報をバリア同期ポイント情報管理域61に登録するバリア同期ポイント情報登録プログラム62とを備える。
【0048】
バリア同期ポイント実行制御プログラム70は、本発明を実現すべくフロッピィディスクや回線などを介してインストールされてメモリ上に展開され、バリア同期ポイント情報管理域61に管理されるバリア同期ポイント情報を参照しつつ、本発明に特徴的なバリア同期の制御処理を実行する。
【0049】
図3に、バリア同期ポイント情報管理域61に管理されるバリア同期ポイント情報のデータ構造の一実施例を図示する。
【0050】
この図に示すように、バリア同期ポイント情報管理域61は、バリア同期ポイントのIDを管理するバリア同期ポイント管理ブロック610−i(i=1〜n)と、ブレークポイントの情報を管理するブレークポイント管理ブロック611−i(i=1,2,...)と、バリア同期の動作に入っているバリア同期ポイントがどれであるのかを管理する動作中バリア同期ポイント管理ブロック612とを使って、バリア同期情報を管理する構成を採っている。
【0051】
このバリア同期ポイント管理ブロック610−iは、図4に示すように、前後に接続されるバリア同期ポイント管理ブロック610−iへの管理チェーンと、自ブロックの管理するバリア同期ポイントのIDと、そのバリア同期ポイントの構成ブレークポイントを管理する先頭のブレークポイント管理ブロック611−iへの管理チェーン(構成ブレークポイント用管理チェーン)とを管理する。
【0052】
一方、ブレークポイント管理ブロック611−iは、図5に示すように、前後に接続されるブレークポイント管理ブロック611−iへの管理チェーンと、自ブロックの管理するブレークポイントのIDと、そのブレークポイントのプログラム位置と、そのブレークポイントの設定されるスレッドの識別子と、そのブレークポイントがバリア同期ポイントを構成するブレークポイントであるのか否かを示すフラグ(バリア同期ポイントフラグ)と、同一バリア同期ポイントの構成ブレークポイントを管理するブレークポイント管理ブロック611−iへの管理チェーン(バリア同期用管理チェーン)とを管理する。
【0053】
一方、動作中バリア同期ポイント管理ブロック612は、図6に示すように、バリア同期の動作に入っているバリア同期ポイントがある場合には、そのバリア同期ポイントを管理するバリア同期ポイント管理ブロック610−iへのチェーンを管理し、バリア同期の動作に入っていない場合には、NULLポインタを管理する。
【0054】
このようなデータ構造を持つバリア同期ポイント管理ブロック610−i/ブレークポイント管理ブロック611−iを使い、“1”〜“n”という識別子を持つn個のバリア同期ポイントが設定されている場合にあって、“1”という識別子を持つバリア同期ポイントが、“1”という識別子を持つブレークポイント(プログラム位置=11行、設定先スレッド識別子=1)と、“2”という識別子を持つブレークポイント(プログラム位置=11行、設定先スレッド識別子=2)などのブレークポイントから構成されている場合には、例えば、図3に示すようなチェーンを張ることで、“1”という識別子を持つバリア同期ポイントの情報を管理するのである。
【0055】
そして、動作中バリア同期ポイント管理ブロック612を使って、例えば、図3に示すようなチェーンを張ることで、バリア同期の動作に入っているバリア同期ポイントが“1”という識別子を持つバリア同期ポイントであるということを管理するのである。
【0056】
なお、この管理形態では、全てのブレークポイント(バリア同期ポイントとならないものもある)に対応付けて用意されて、それらのブレークポイントの情報を管理するブレークポイント管理ブロック611−i(i=1,2,...)を用意する構成を採って、その中から、バリア同期ポイントを構成するものをバリア同期用管理チェーンで接続することで、各バリア同期ポイントの持つブレークポイントを管理するという方法を用いているが、本発明を実現するためだけであれば、バリア同期ポイントを構成しないブレークポイントを管理するブレークポイント管理ブロック611−i(例えば、図3中のブレークポイント管理ブロック611−3)については、省略することが可能である。
【0057】
図7に、バリア同期ポイント情報登録プログラム62の実行する処理フローの一実施例、図8ないし図10に、バリア同期ポイント実行制御プログラム70の実行する処理フローの一実施例を図示する。次に、これらの処理フローに従って、このように構成される実施例の処理について詳細に説明する。
【0058】
バリア同期ポイント情報登録プログラム62は、マルチスレッドデバッガ30を介して、バリア同期ポイント設定プログラム50の設定したバリア同期ポイントを受け取ることで起動されると、設定されたバリア同期ポイントを順番に選択し、その選択した各バリア同期ポイントに対して図7の処理フローの処理を施していくことで、設定されたバリア同期ポイントの情報をバリア同期ポイント情報管理域61に登録していくように処理する。
【0059】
すなわち、バリア同期ポイント情報登録プログラム62は、起動されると、図7の処理フローに示すように、先ず最初に、ステップ1で、選択したバリア同期ポイントに対応付けて、バリア同期ポイント管理ブロック610−iを作成して、それと既に作成されているバリア同期ポイント管理ブロック610−iとの間にチェーンを張る。
【0060】
続いて、ステップ2で、選択したバリア同期ポイントを解析して、スレッド単位のブレークポイントに分割する。続いて、ステップ3で、分割した全てのブレークポイントを選択したのか否かを判断して、全てのブレークポイントを選択したことを判断するときには、選択したバリア同期ポイントの情報の登録完了を判断して、選択したバリア同期ポイントについての処理を終了する。
【0061】
一方、ステップ3で、分割した全てのブレークポイントを選択していないことを判断するときには、ステップ4に進んで、分割したブレークポイントの中から未選択のものを1つ選択する。続いて、ステップ5で、選択したブレークポイントがブレークポイント管理機構40にて既に管理されているのか否かを判断して、未管理のものである場合には、ステップ6に進んで、ブレークポイント管理機構40に依頼することで、選択したブレークポイントをブレークポイント管理機構40の管理下に置く。
【0062】
ブレークポイント管理機構40の管理下にあるブレークポイントについては、そのブレークポイントを管理するブレークポイント管理ブロック611−iが作成されているので、このステップ6では、ブレークポイント管理機構40の管理下にないブレークポイントを処理対象として、ブレークポイント管理機構40に依頼することで、そのブレークポイントを管理するブレークポイント管理ブロック611−iを作成してもらうように処理するのである。
【0063】
このようにして作成されるブレークポイント管理ブロック611−iの管理するブレークポイントについては、マルチスレッドデバッガ30が、指定されるスレッドの指定されるプログラム位置にプログラム停止命令を挿入していくことで、ブレークポイントとして機能させていくように処理することになる。
【0064】
続いて、ステップ7で、選択したブレークポイントを管理するブレークポイント管理ブロック611−iの持つバリア同期ポイントフラグをONすることで、そのブレークポイントがバリア同期ポイントを構成するブレークポイントである旨を記録する。
【0065】
続いて、ステップ8で、作成したバリア同期ポイント管理ブロック610−iの持つ構成ブレークポイント管理チェーンからのチェーンに、選択したブレークポイントを管理するブレークポイント管理ブロック611−iを接続して、ステップ3に戻る。
【0066】
このようにして、バリア同期ポイント情報登録プログラム62は、バリア同期ポイント設定プログラム50の設定したバリア同期ポイントを受け取ると、バリア同期ポイント管理ブロック610−iとブレークポイント管理ブロック611−iとを使い、図3に示したような形で、このバリア同期ポイントの情報をバリア同期ポイント情報管理域61に登録していくように処理するのである。
【0067】
次に、バリア同期ポイント実行制御プログラム70の実行する処理について説明する。
【0068】
マルチスレッドデバッガ30は、バリア同期ポイント情報登録プログラム62が処理を終了すると、マルチスレッドプログラム20を起動して、その実行中に、いずれかのスレッドが何らかの原因で停止するとバリア同期ポイント実行制御プログラム70を呼び出していくことで、マルチスレッドプログラム20のデバッグ処理に入る。
【0069】
このようにして呼び出されると、バリア同期ポイント実行制御プログラム70は、図8ないし図10の処理フローに示すように、先ず最初に、ステップ1で、スレッドの停止原因がブレークポイントによるものであるのか否かを判断して、スレッドの停止原因がブレークポイントによるものでないことを判断するときには、自プログラムの処理する内容でないことを判断して、そのままマルチスレッドデバッガ30に制御を戻す。
【0070】
一方、ステップ1で、スレッドの停止原因がブレークポイントによるものであることを判断するときには、ステップ2に進んで、動作中バリア同期ポイント管理ブロック612にNULLポインタが登録されているのか否かを判断することで、バリア同期の動作中であるのか否かを判断する。
【0071】
すなわち、後述することから分かるように、バリア同期の動作中であるときには、動作中バリア同期ポイント管理ブロック612に、バリア同期動作中のバリア同期ポイントを管理するバリア同期ポイント管理ブロック610−iへのチェーンが登録されているので、動作中バリア同期ポイント管理ブロック612にNULLポインタが登録されているのか否かを判断することで、バリア同期の動作中であるのか否かを判断するのである。
【0072】
なお、マルチスレッドデバッガ30は、マルチスレッドプログラム20の実行開始にあたって、動作中バリア同期ポイント管理ブロック612にNULLポインタを書き込んでいくという初期化処理を行う。
【0073】
この判断処理に従って、動作中バリア同期ポイント管理ブロック612にNULLポインタが登録されていることで、バリア同期の動作中でないことを判断するときには、ステップ3に進んで、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがONを表示しているのか否かを判断して、OFFを表示していることを判断するときには、バリア同期の対象ではないブレークポイントが停止原因であることを判断して、そのままマルチスレッドデバッガ30に制御を戻すことで、通常のブレークポイントに対するデバッグ処理に入るように制御する。
【0074】
一方、ステップ3の判断処理に従って、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがONを表示していることを判断するときには、バリア同期の開始を判断して、ステップ4に進んで、動作中バリア同期ポイント管理ブロック612に、そのブレークポイント管理ブロック611−iへリンクするバリア同期ポイント管理ブロック610−iへのチェーンを登録する。
【0075】
続いて、ステップ5で、停止したスレッドをサスペンド状態(マルチスレッドプログラム20の実行再開時に、そのスレッドの実行を再開しない状態にする)に設定し、続くステップ6で、プログラマに対してバリア同期が開始した旨のメッセージを表示してから、続くステップ7で、マルチスレッドプログラム20の実行を再開させて、マルチスレッドデバッガ30に制御を戻す。
【0076】
一方、ステップ2の判断処理で、動作中バリア同期ポイント管理ブロック612にバリア同期ポイント管理ブロック610−iへのチェーンが登録されていることを判断するときには、ステップ8(図9の処理フロー)に進んで、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがONを表示しているのか否かを判断する。
【0077】
この判断処理により、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがOFFを表示していることを判断するときには、ステップ9に進んで、バリア同期ポイントでないブレークポイントに到達した旨のメッセージを表示してから、続くステップ10で、マルチスレッドプログラム20の実行を再開させて、マルチスレッドデバッガ30に制御を戻す。
【0078】
すなわち、既にバリア同期に入っているので、通常のブレークポイントについては無視して、バリア同期動作中のバリア同期ポイントを構成する次のブレークポイントへの到達を実現すべく、マルチスレッドプログラム20の実行を再開させるのである。
【0079】
一方、ステップ8で、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがONを表示していることを判断するときには、ステップ11に進んで、そのブレークポイント管理ブロック611−iが動作中バリア同期ポイント管理ブロック612からのチェーンに繋がっているのか否かを判断する。
【0080】
この判断処理により、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iが動作中バリア同期ポイント管理ブロック612からのチェーンに繋がっていないことを判断するときには、ステップ12に進んで、バリア同期の動作中でないバリア同期ポイントのブレークポイントに到達した旨のメッセージを表示してから、続くステップ13で、マルチスレッドプログラム20の実行を再開させて、マルチスレッドデバッガ30に制御を戻す。
【0081】
すなわち、バリア同期動作に入れるのは、複数設定されるバリア同期ポイントの中の最初にブレークポイントに到達したものだけであるので、それ以外のバリア同期ポイントのブレークポイントについては無視して、バリア同期動作中のバリア同期ポイントを構成する次のブレークポイントへの到達を実現すべく、マルチスレッドプログラム20の実行を再開させるのである。
【0082】
一方、ステップ11で、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iが動作中バリア同期ポイント管理ブロック612からのチェーンに繋がっていることを判断するときには、ステップ14に進んで、そのチェーンに繋がるブレークポイント管理ブロック611−iを参照することで、バリア同期動作中のバリア同期ポイント配下のブレークポイントの設定されるスレッドを特定して、それらの全てのスレッドの停止が完了したのか否かを判断することで、バリア同期が完了したのか否かを判断する。
【0083】
このとき、バリア同期動作中のバリア同期ポイントの中に、その時点では存在しないスレッドを設定先とするブレークポイントが含まれることがあるが、このときには、そのスレッドについては停止しているものと見なして、この判断処理を実行する。
【0084】
すなわち、現在存在しないスレッドがバリア同期ポイントで指定されることがある(プログラマがスレッドの存在の有無を知らないことがある)ので、そのようなスレッドを設定先とするブレークポイントを除きつつ、バリア同期動作中のバリア同期ポイント配下の存在する全てのブレークポイントに基づくスレッドの停止が完了したのか否かを判断することで、バリア同期が完了したのか否かを判断するのである。
【0085】
この判断処理により、バリア同期が完了していないことを判断するときには、ステップ15に進んで、停止したスレッドをサスペンド状態(マルチスレッドプログラム20の実行再開時に、そのスレッドの実行を再開しない状態にする)に設定し、続くステップ16で、プログラマに対してバリア同期中である旨のメッセージを表示してから、続くステップ17(図10の処理フロー)で、マルチスレッドプログラム20の実行を再開させて、マルチスレッドデバッガ30に制御を戻す。
【0086】
一方、ステップ14で、バリア同期が完了したことを判断するときには、ステップ18(図10の処理フロー)に進んで、プログラマに対してバリア同期が完了した旨のメッセージを表示し、続くステップ19で、バリア同期のためにサスペンド状態にしたスレッドを実行可能状態に戻してから、マルチスレッドデバッガ30に制御を戻す。
【0087】
このようにして、バリア同期ポイント実行制御プログラム70は、図11に示すように、バリア同期ポイント設定プログラム50により複数のバリア同期ポイントが設定されると、その中から、最初にスレッドを停止させたバリア同期ポイントをバリア同期の対象として設定し、そのバリア同期ポイントの指定するブレークポイントに到達したスレッドをサスペンド状態にしながら、そのバリア同期ポイント配下の存在する全てのブレークポイントに基づくスレッドの停止が完了すると、サスペンド状態にしたスレッドを実行可能状態に戻して、マルチスレッドデバッガ30に制御を戻していくように処理するのである。
【0088】
このように、本発明によれば、マルチスレッドプログラム20をデバッグするときに、目的となる任意のスレッドをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できるようになるのである。
【0089】
次に、図12に示すマルチスレッドプログラム20を具体例にして、本発明により実現されるバリア同期について具体的に説明する。
【0090】
この図12に示すマルチスレッドプログラム20は、図13に示すように、広域変数である配列array[50] の0〜9に“0”を書き込み、10〜19に“10”を書き込み、20〜29に“20”を書き込み、30〜39に“30”を書き込み、40〜49に“40”を書き込むという処理を実行するものであり、図14に示すように、4つのスレッド(THRー2〜5)を生成して、この生成する4つのスレッドと、初期スレッドとして機能する関数main()とを使って、この書込処理を実行するものである。
【0091】
図12に示すマルチスレッドプログラム20のプログラム動作について説明するならば、関数main()(20行)が起動されると、27行に記述されるfor 文の指定する繰り返し回数(4回)に従って、29行に記述されるシステム関数により4つのスレッドが生成される。
【0092】
このようにして生成されるスレッドは、29行の記述に従って、begin[i]のアドレスを渡しつつ、関数PE()(14行)を呼び出す。ここで、27行及び28行の記述に従って、begin[i]には、
begin[0]=0 begin[1]=10 begin[2]=20 begin[3]=30
という値が設定されている。
【0093】
スレッドから呼び出されると、関数PE()は、16行の記述に従って、begin[i]の実体を渡しつつ、関数sub()(6行)を呼び出す。一方、関数main()は、32行の記述に従って、「begin[4]=40 」を渡しつつ、関数sub() を呼び出す。
【0094】
このようにして呼び出されると、関数sub() は、10行の記述に従って、図13に示したように、配列array[50] の0〜9に“0”を書き込み、10〜19に“10”を書き込み、20〜29に“20”を書き込み、30〜39に“30”を書き込み、40〜49に“40”を書き込むという処理を実行する。
【0095】
この関数sub() による処理を受けて、初期スレッドとして機能する関数main()は、自分の作成した全てのスレッドがこの処理を終了するのを待ち合わせて、その待ち合わせを終えると、5つのスレッドにより設定された配列array[50] の内容を表示して、処理を終了する。
【0096】
このようにして、4つのスレッドは、一斉に単独で関数PE0から動作し始め、スレッドの作成時に渡された引数をそのまま関数sub()(配列への設定処理を行う関数)に渡して実行させる。このとき、初期スレッドである関数main0は、スレッドの作成に続いて他のスレッドと同様に関数sub() を実行させる。
【0097】
この時点で、5つのスレッドは、引数を変えて関数sub() を同時に動作させていることになる。すなわち、同じ位置の同じ命令列(関数sub())を同時に5つのスレッドで動作させていくことになる。
【0098】
この図12に示すマルチスレッドプログラム20をデバッグする場合に、図13に示すような書込処理が正常に行われたのかを確認する必要がある。
【0099】
そこで、本発明を使い、5つのスレッド<THR−1>〜<THR−5>に対して、図12に示すマルチスレッドプログラム20の11行をブレークポイントするバリア同期ポイントを設定することで、5つのスレッド<THR−1>〜<THR−5>をその11行でバリア同期させて、この書込処理が正常に行われたのか否かを確認するデバッグ処理を行う。
【0100】
このバリア同期ポイントを設定する場合、最初に停止するスレッドは不定だが、例えば、最初に、スレッド<THR−2>がバリア同期ポイントを構成するブレークポイントによって停止するとし、それに続いて、スレッド<THR−3>が停止し、それに続いて、スレッド<THR−4>が停止し、それに続いて、スレッド<THR−5>が停止し、最後に、スレッド<THR−1>が停止していくとする。
【0101】
この場合には、上述した処理に従って、スレッド<THR−2>が11行で停止することでバリア同期が動作を開始し、そのスレッド<THR−2>をサスペンド状態にした後、マルチスレッドプログラム20の実行を再開させる。
【0102】
続いて、スレッド<THR−3>が11行で停止し、それに応じてサスペンド状態にし、続いて、スレッド<THR−4>が11行で停止し、それに応じてサスペンド状態にし、続いて、スレッド<THR−5>が11行で停止し、それに応じてサスペンド状態にしていく。
【0103】
最後に、スレッド<THR−1>が11行で停止し、これによりプログラマが指定した現在存在している全てのスレッドがバリア同期ポイントで停止したことでバリア同期動作が完了したことを認識して、その旨をプログラマに通知し、このバリア同期のためにサスペンド状態にしたスレッド<THR−2>、スレッド<THR−3>、スレッド<THR−4>、スレッド<THR−5>を実行再開可能状態にして、マルチスレッドデバッガ30に制御を戻していく。
【0104】
このようにして、本発明を用いることで、図12に示すようなマルチスレッドプログラム20のデバッグが可能になる。
【0105】
上述した実施例では、複数のバリア同期ポイントの設定を可能とする構成を開示したが、1つのバリア同期ポイントの設定のみを許可するという構成を採ることも可能である。この実施例に従う場合には、設定されるバリア同期ポイントがバリア同期の対象となることから、動作中バリア同期ポイント管理ブロック612を備える必要はなく、その代わりに、バリア同期の動作中であるのか否かを表示するフラグを用意することになる。
【0106】
この実施例に従う場合、バリア同期ポイント実行制御プログラム70は、図8ないし図10の処理フローに代えて、図15及び図16の処理フローの処理を実行することになる。
【0107】
すなわち、いずれかのスレッドが何らかの原因で停止することでマルチスレッドデバッガ30から呼び出されると、バリア同期ポイント実行制御プログラム70は、図15及び図16の処理フローに示すように、先ず最初に、ステップ1で、スレッドの停止原因がブレークポイントによるものであるのか否かを判断して、スレッドの停止原因がブレークポイントによるものでないことを判断するときには、自プログラムの処理する内容でないことを判断して、そのままマルチスレッドデバッガ30に制御を戻す。
【0108】
一方、ステップ1で、スレッドの停止原因がブレークポイントによるものであることを判断するときには、ステップ2に進んで、バリア同期の動作中であるのか否かを表示するフラグがONになっているのか否かを判断することで、バリア同期の動作中であるのか否かを判断する。なお、このフラグは、マルチスレッドプログラム20の実行開始時にOFFにセットされる。
【0109】
この判断処理に従って、バリア同期の動作中でないことを判断するときには、ステップ3に進んで、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがONを表示しているのか否かを判断して、OFFを表示していることを判断するときには、バリア同期の対象ではないブレークポイントが停止原因であることを判断して、そのままマルチスレッドデバッガ30に制御を戻すことで、通常のブレークポイントに対するデバッグ処理に入るように制御する。
【0110】
一方、ステップ3の判断処理に従って、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがONを表示していることを判断するときには、バリア同期の開始を判断して、ステップ4に進んで、バリア同期の動作中であるのか否かを表示するフラグをONにすることで、バリア同期の動作中であることを記録する。
【0111】
続いて、ステップ5で、停止したスレッドをサスペンド状態に設定し、続くステップ6で、プログラマに対してバリア同期が開始した旨のメッセージを表示してから、続くステップ7で、マルチスレッドプログラム20の実行を再開させて、マルチスレッドデバッガ30に制御を戻す。
【0112】
一方、ステップ2の判断処理で、バリア同期の動作中であることを判断するときには、ステップ8(図16の処理フロー)に進んで、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがONを表示しているのか否かを判断する。
【0113】
この判断処理により、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがOFFを表示していることを判断するときには、ステップ9に進んで、バリア同期ポイントでないブレークポイントに到達した旨のメッセージを表示してから、続くステップ10で、マルチスレッドプログラム20の実行を再開させて、マルチスレッドデバッガ30に制御を戻す。
【0114】
すなわち、既にバリア同期に入っているので、通常のブレークポイントについては無視して、バリア同期ポイントを構成する次のブレークポイントへの到達を実現すべく、マルチスレッドプログラム20の実行を再開させるのである。
【0115】
一方、ステップ8で、停止原因となったブレークポイントを管理するブレークポイント管理ブロック611−iのバリア同期ポイントフラグがONを表示していることを判断するときには、ステップ11に進んで、そのブレークポイント管理ブロック611−iにバリア同期用管理チェーン(図5に示したもの)で繋がるブレークポイント管理ブロック611−iを参照することで、バリア同期ポイント配下のブレークポイントの設定されるスレッドを特定して、それらの全てのスレッドの停止が完了したのか否かを判断することで、バリア同期が完了したのか否かを判断する。
【0116】
このとき、バリア同期ポイントの中に、その時点では存在しないスレッドを設定先とするブレークポイントが含まれることがあるが、このときには、そのスレッドについては停止しているものと見なして、この判断処理を実行する。
【0117】
すなわち、現在存在しないスレッドがバリア同期ポイントで指定されることがあるので、そのようなスレッドを設定先とするブレークポイントを除きつつ、バリア同期ポイント配下の存在する全てのブレークポイントに基づくスレッドの停止が完了したのか否かを判断することで、バリア同期が完了したのか否かを判断するのである。
【0118】
この判断処理により、バリア同期が完了していないことを判断するときには、ステップ12に進んで、停止したスレッドをサスペンド状態に設定し、続くステップ13で、プログラマに対してバリア同期中である旨のメッセージを表示してから、続くステップ14で、マルチスレッドプログラム20の実行を再開させて、マルチスレッドデバッガ30に制御を戻す。
【0119】
一方、ステップ11で、バリア同期が完了したことを判断するときには、ステップ15に進んで、プログラマに対してバリア同期が完了した旨のメッセージを表示し、続くステップ16で、バリア同期のためにサスペンド状態にしたスレッドを実行可能状態に戻してから、マルチスレッドデバッガ30に制御を戻す。
【0120】
このようにして、バリア同期ポイント実行制御プログラム70は、1つのバリア同期ポイントの設定のみを許可するという構成を採る場合には、図15及び図16の処理フローの処理を実行することで、マルチスレッドプログラム20に対するバリア同期を実行するのである。
【0121】
図示実施例に従って本発明を説明したが、本発明はこれに限定されるものではない。例えば、実施例では、マルチスレッドプログラム20に対してのバリア同期を具体例にして本発明を説明したが、本発明は、相互依存の関係のある複数のプロセスを並列実行させるマルチプロセスプログラムなどのような他のマルチタスクプログラムに対してもそのまま適用できる。
【0122】
【発明の効果】
以上説明したように、本発明によれば、マルチタスクプログラムをデバッグするときに、目的となる任意のタスクをそれぞれの目的となる任意のプログラム位置に停止させていくというバリア同期を実現できるようになる。
【0123】
これから、複数のタスクがそれぞれの分担個所を分担して初期化処理を行うとか、複数のタスクがそれぞれの分担個所を分担して計算処理を行うといったような処理を行うマルチタスクプログラムのデバッグを効率的に実行できるようになる。
【0124】
そして、本発明によれば、複数のバリア同期ポイントを設定可能とするときにあって、最初にブレークポイントに到達したバリア同期ポイントをバリア同期の対象とする構成を採ることから、バリア同期に基づくデバッグをプログラムの実行順序に整合させて行うことができるようになる。
【図面の簡単な説明】
【図1】本発明の原理構成図である。
【図2】本発明の一実施例である。
【図3】バリア同期ポイント管理の一実施例である。
【図4】バリア同期ポイント管理ブロックの一実施例である。
【図5】ブレークポイント管理ブロックの一実施例である。
【図6】動作中バリア同期ポイント管理ブロックの一実施例である。
【図7】バリア同期ポイント情報登録プログラムの処理フローである。
【図8】バリア同期ポイント実行制御プログラムの処理フローである。
【図9】バリア同期ポイント実行制御プログラムの処理フローである。
【図10】バリア同期ポイント実行制御プログラムの処理フローである。
【図11】実施例の処理の説明図である。
【図12】マルチスレッドプログラムの一例である。
【図13】マルチスレッドプログラムの説明図である。
【図14】マルチスレッドプログラムの説明図である。
【図15】バリア同期ポイント実行制御プログラムの処理フローである。
【図16】バリア同期ポイント実行制御プログラムの処理フローである。
【符号の説明】
1 デバッグ装置
10 マルチタスクプログラム
11 デバッグ処理手段
12 設定手段
13 バリア同期ポイント管理手段
14 特定手段
15 判断手段
16 再開手段
17 制御手段
Claims (8)
- マルチタスクプログラムを処理対象とするデバッグ装置において、
複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを1つ設定する設定手段と、
上記ブレークポイントに基づくタスクの停止が発生するときに、上記バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断する判断手段と、
上記判断手段が未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させる再開手段と、
上記判断手段が完了を判断するときに、サスペンド状態に設定したタスクを実行可能状態に戻す制御手段と、
上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させる実行手段とを備えることを、
特徴とするデバッグ装置。 - マルチタスクプログラムを処理対象とするデバッグ装置において、
複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを複数設定する設定手段と、
最初にタスクを停止させた上記ブレークポイントの属するバリア同期ポイントを特定する特定手段と、
上記ブレークポイントに基づくタスクの停止が発生するときに、上記特定手段の特定したバリア同期ポイントを判断対象として、該バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断する判断手段と、
上記判断手段が未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させる再開手段と、
上記判断手段が完了を判断するときに、サスペンド状態に設定したタスクを実行可能状態に戻す制御手段と、
上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させる実行手段とを備えることを、
特徴とするデバッグ装置。 - 請求項2記載のデバッグ装置において、
上記実行手段は、上記特定手段の特定したバリア同期ポイント以外のバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させることを、
特徴とするデバッグ装置。 - 設定手段と判断手段と再開手段と制御手段と実行手段とを備えて、マルチタスクプログラムを処理対象としてデバッグを行うデバッグ装置で実行されるデバッグ方法であって、
上記設定手段が、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを1つ設定し、
上記判断手段が、上記ブレークポイントに基づくタスクの停止が発生するときに、上記バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断し、
上記再開手段が、上記判断手段で未完了が判断されるときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させ、
上記制御手段が、上記判断手段で完了が判断されるときに、サスペンド状態に設定したタスクを実行可能状態に戻し、
上記実行手段が、上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させることを、
特徴とするデバッグ方法。 - 設定手段と特定手段と判断手段と再開手段と制御手段と実行手段とを備えて、マルチタスクプログラムを処理対象としてデバッグを行うデバッグ装置で実行されるデバッグ方法であって、
上記設定手段が、複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを複数設定し、
上記特定手段が、最初にタスクを停止させた上記ブレークポイントの属するバリア同期ポイントを特定し、
上記判断手段が、上記ブレークポイントに基づくタスクの停止が発生するときに、上記特定手段の特定したバリア同期ポイントを判断対象として、該バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断し、
上記再開手段が、上記判断手段で未完了が判断されるときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させ、
上記制御手段が、上記判断手段で完了が判断されるときに、サスペンド状態に設定したタスクを実行可能状態に戻し、
上記実行手段が、上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させることを、
特徴とするデバッグ方法。 - 請求項5記載のデバッグ方法において、
上記実行手段は、上記特定手段の特定したバリア同期ポイント以外のバリア同期ポイント配下のブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させることを、
特徴とするデバッグ方法。 - マルチタスクプログラムを処理対象とするデバッグ装置の実現に用いられるプログラムが記録されるプログラム記録媒体であって、
複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを1つ設定する設定処理と、
上記ブレークポイントに基づくタスクの停止が発生するときに、上記バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断する判断処理と、
上記判断処理で未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させる再開処理と、
上記判断処理で完了を判断するときに、サスペンド状態に設定したタスクを実行可能状態に戻す制御処理と、
上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させる実行処理とをコンピュータに実行させるプログラムが記録されることを、
特徴とするプログラム記録媒体。 - マルチタスクプログラムを処理対象とするデバッグ装置の実現に用いられるプログラムが記録されるプログラム記録媒体であって、
複数のタスクのそれぞれに設定されるブレークポイントで構成されるバリア同期ポイントを複数設定する設定処理と、
最初にタスクを停止させた上記ブレークポイントの属するバリア同期ポイントを特定する特定処理と、
上記ブレークポイントに基づくタスクの停止が発生するときに、上記特定処理で特定したバリア同期ポイントを判断対象として、該バリア同期ポイント配下の全ての上記ブレークポイントに基づくタスクの停止が完了したのか否かを判断する判断処理と、
上記判断処理で未完了を判断するときに、その判断対象となった停止タスクをサスペンド状態にしてから、マルチタスクプログラムの実行を再開させる再開処理と、
上記判断処理で完了を判断するときに、サスペンド状態に設定したタスクを実行可能状態に戻す制御処理と、
上記バリア同期ポイントを構成しないブレークポイントが設定される場合に、上記バリア同期ポイントを構成するブレークポイントに基づくタスクの停止に応答してバリア同期の動作に入った後、上記バリア同期ポイントを構成しないブレークポイントに基づくタスクの停止が発生するときに、該ブレークポイントを無視してマルチタスクプログラムの実行を再開させる実行処理とをコンピュータに実行させるプログラムが記録されることを、
特徴とするプログラム記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31622099A JP3571976B2 (ja) | 1999-11-08 | 1999-11-08 | デバッグ装置及び方法並びにプログラム記録媒体 |
US09/620,077 US6718484B1 (en) | 1999-11-08 | 2000-07-20 | Debugging method and apparatus for multitask programs and recording medium storing a program realizing the debugging method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31622099A JP3571976B2 (ja) | 1999-11-08 | 1999-11-08 | デバッグ装置及び方法並びにプログラム記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001134466A JP2001134466A (ja) | 2001-05-18 |
JP3571976B2 true JP3571976B2 (ja) | 2004-09-29 |
Family
ID=18074652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP31622099A Expired - Fee Related JP3571976B2 (ja) | 1999-11-08 | 1999-11-08 | デバッグ装置及び方法並びにプログラム記録媒体 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6718484B1 (ja) |
JP (1) | JP3571976B2 (ja) |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3810631B2 (ja) * | 2000-11-28 | 2006-08-16 | 富士通株式会社 | 情報処理プログラムを記録した記録媒体 |
US7644394B2 (en) * | 2001-11-30 | 2010-01-05 | International Business Machines Corporation | Object-oriented creation breakpoints |
US7398519B2 (en) * | 2001-11-30 | 2008-07-08 | International Business Machines Corporation | Inheritance breakpoints for use in debugging object-oriented computer programs |
US9003376B2 (en) * | 2002-08-09 | 2015-04-07 | Texas Instruments Incorporated | Software breakpoints with tailoring for multiple processor shared memory or multiple thread systems |
US7216346B2 (en) | 2002-12-31 | 2007-05-08 | International Business Machines Corporation | Method and apparatus for managing thread execution in a multithread application |
JP4403794B2 (ja) * | 2003-02-28 | 2010-01-27 | 株式会社デンソー | 制御プログラムの検査方法及び検査装置及び検査プログラム |
US7493615B2 (en) * | 2003-05-01 | 2009-02-17 | Sun Microsystems, Inc. | Apparatus and method for synchronizing multiple threads in an out-of-order microprocessor |
US7383539B2 (en) * | 2003-09-18 | 2008-06-03 | International Business Machines Corporation | Managing breakpoints in a multi-threaded environment |
US7353427B2 (en) * | 2004-04-08 | 2008-04-01 | International Business Machines Corporation | Method and apparatus for breakpoint analysis of computer programming code using unexpected code path conditions |
US20050229163A1 (en) * | 2004-04-08 | 2005-10-13 | International Business Machines Corporation | Thread-scoped breakpoints |
DE102004062852A1 (de) * | 2004-12-27 | 2006-07-06 | Siemens Ag | Steuerung einer Maschine mit Debuggfunktionalität |
US7742905B2 (en) * | 2005-02-25 | 2010-06-22 | Coware, Inc. | Method and system for dynamically adjusting speed versus accuracy of computer platform simulation |
US7716031B2 (en) * | 2005-02-25 | 2010-05-11 | Coware, Inc. | Interface converter for unified view of multiple computer system simulations |
US7770170B2 (en) * | 2005-07-12 | 2010-08-03 | Microsoft Corporation | Blocking local sense synchronization barrier |
FR2894694A1 (fr) * | 2005-12-09 | 2007-06-15 | St Microelectronics Sa | Procede et dispositif de mise au point d'un programme execute par un processeur multitache |
GB0613289D0 (en) * | 2006-07-04 | 2006-08-16 | Imagination Tech Ltd | Synchronisation of execution threads on a multi-threaded processor |
US7925791B2 (en) * | 2006-07-17 | 2011-04-12 | The Math Works, Inc. | Recoverable error detection for concurrent computing programs |
US20080127118A1 (en) * | 2006-10-02 | 2008-05-29 | Bulent Kasman | Method and system for dynamic patching of software |
US7865778B2 (en) * | 2007-02-20 | 2011-01-04 | International Business Machines Corporation | Method and system for detecting synchronization errors in programs |
JP4997144B2 (ja) * | 2007-03-27 | 2012-08-08 | 株式会社東芝 | マルチタスク処理装置およびその方法 |
CN101295279B (zh) * | 2007-04-29 | 2012-05-09 | 国际商业机器公司 | 多线程环境下的调试程序的方法和系统 |
US9009020B1 (en) * | 2007-12-12 | 2015-04-14 | F5 Networks, Inc. | Automatic identification of interesting interleavings in a multithreaded program |
US8739133B2 (en) | 2007-12-21 | 2014-05-27 | International Business Machines Corporation | Multi-threaded debugger support |
JP5022262B2 (ja) * | 2008-02-12 | 2012-09-12 | 株式会社アドバンテスト | デバッグ中にツールを使用可能な試験システム及び方法 |
US20100281469A1 (en) * | 2009-04-30 | 2010-11-04 | Nec Laboratories America, Inc. | Symbolic predictive analysis for concurrent programs |
JP2011070256A (ja) * | 2009-09-24 | 2011-04-07 | Toshiba Corp | デバッガおよびプログラム |
DE102009050161A1 (de) * | 2009-10-21 | 2011-04-28 | Siemens Aktiengesellschaft | Verfahren und Vorrichtung zum Testen eines Systems mit zumindest einer Mehrzahl von parallel ausführbaren Softwareeinheiten |
WO2012127534A1 (ja) * | 2011-03-23 | 2012-09-27 | 富士通株式会社 | バリア同期方法、バリア同期装置及び演算処理装置 |
JP5994601B2 (ja) * | 2012-11-27 | 2016-09-21 | 富士通株式会社 | 並列計算機、並列計算機の制御プログラム及び並列計算機の制御方法 |
US9218223B2 (en) | 2013-08-13 | 2015-12-22 | Qualcomm Incorporated | Barrier synchronization with dynamic width calculation |
GB2580428B (en) * | 2019-01-11 | 2021-08-25 | Graphcore Ltd | Handling exceptions in a machine learning processor |
CN112306845A (zh) * | 2019-07-31 | 2021-02-02 | 腾讯科技(深圳)有限公司 | 一种并发测试方法、装置、设备及介质 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2509811B2 (ja) | 1986-06-25 | 1996-06-26 | 株式会社日立製作所 | タスク管理方式 |
JPH01114946A (ja) * | 1987-10-28 | 1989-05-08 | Nec Corp | 同期型デバグ方式 |
JPH07120302B2 (ja) | 1989-05-16 | 1995-12-20 | 日本電気株式会社 | タスクデバッグ方式 |
JPH03113648A (ja) * | 1989-09-28 | 1991-05-15 | Mitsubishi Electric Corp | プログラムデバツグ方式 |
JPH03244040A (ja) * | 1990-02-21 | 1991-10-30 | Nec Corp | 並列走行型デバグ方式 |
US5365228A (en) * | 1991-03-29 | 1994-11-15 | International Business Machines Corporation | SYNC-NET- a barrier synchronization apparatus for multi-stage networks |
JPH04314141A (ja) | 1991-04-12 | 1992-11-05 | Nec Software Ltd | マルチタスク制御方法とその機構 |
JPH0588933A (ja) * | 1991-09-27 | 1993-04-09 | Hitachi Ltd | デバツグ機能を有する並列処理システム |
US5581778A (en) * | 1992-08-05 | 1996-12-03 | David Sarnoff Researach Center | Advanced massively parallel computer using a field of the instruction to selectively enable the profiling counter to increase its value in response to the system clock |
JPH08185340A (ja) * | 1994-12-27 | 1996-07-16 | Toshiba Corp | 並列プログラムデバッグ方法および並列プログラム可視化装置 |
US5721921A (en) * | 1995-05-25 | 1998-02-24 | Cray Research, Inc. | Barrier and eureka synchronization architecture for multiprocessors |
JPH09259002A (ja) * | 1996-03-22 | 1997-10-03 | Hitachi Ltd | デバッグ支援装置 |
US5768538A (en) * | 1996-04-30 | 1998-06-16 | International Business Machines Corporation | Barrier synchronization method wherein members dynamic voting controls the number of synchronization phases of protocols and progression to each new phase |
JP3532037B2 (ja) * | 1996-07-31 | 2004-05-31 | 富士通株式会社 | 並列計算機 |
JPH10187486A (ja) * | 1996-12-27 | 1998-07-21 | Fujitsu Ltd | マルチプロセッサシステムのプログラムデバッグ方法 |
JPH10269185A (ja) * | 1997-03-25 | 1998-10-09 | Hitachi Ltd | バリア同期方法 |
-
1999
- 1999-11-08 JP JP31622099A patent/JP3571976B2/ja not_active Expired - Fee Related
-
2000
- 2000-07-20 US US09/620,077 patent/US6718484B1/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US6718484B1 (en) | 2004-04-06 |
JP2001134466A (ja) | 2001-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3571976B2 (ja) | デバッグ装置及び方法並びにプログラム記録媒体 | |
JP4222370B2 (ja) | デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム | |
US8136097B2 (en) | Thread debugging device, thread debugging method and information storage medium | |
US8327336B2 (en) | Enhanced thread stepping | |
KR101325229B1 (ko) | 비대칭 멀티프로세서 장치의 진단연산 수행 | |
JP3965142B2 (ja) | コンピュータ・プログラムをデバックするための方法、システムおよびソフトウェア・プロダクト | |
JP6086230B2 (ja) | 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法 | |
KR102025078B1 (ko) | 단일 스텝 실행을 이용한 코드 진단 | |
US20080066055A1 (en) | Reversing execution of instructions in a debugger | |
US20040205719A1 (en) | Hop method for stepping parallel hardware threads | |
JP2000066904A (ja) | マルチタスク制御方法及び記憶媒体 | |
JPH02294739A (ja) | 障害検出方式 | |
JP2004302731A (ja) | 情報処理装置および障害診断方法 | |
US20190034259A1 (en) | Systems and Methods for Implementing a Thread Trace Log | |
JP2010015364A (ja) | マルチプロセッサシステム及び情報処理装置 | |
TWI736564B (zh) | 用於診斷執行指令串流的處理器之方法、設備、及系統 | |
JPH08185378A (ja) | Dce型分散情報処理環境内に分散したアプリケーションのデバッグ支援ツール | |
JP2800577B2 (ja) | デバッグ装置 | |
JP2928139B2 (ja) | 試験プログラム走行装置 | |
WO2010038280A1 (ja) | 仮想計算機システム及びデッドロック解除方法 | |
JP2004318658A (ja) | デバッグ制御装置及びその制御方法 | |
JP2007213396A (ja) | デバッグシステム、オペレーションシステム、デバッグ方法、プログラム | |
JP2001147830A (ja) | リアルタイムosの状態変更方法 | |
JPS62212865A (ja) | マルチプロセツサ制御方式 | |
JPH07244536A (ja) | レジューム支援機構 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040413 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040528 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040622 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040625 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080702 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090702 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100702 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100702 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110702 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110702 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120702 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120702 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130702 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |