(57)【要約】      （修正有）【課題】分散型コンピュータ・システム上でコンピュータ・プログラムをデバッグする。【解決手段】クライアント・ノード１００−５における第１のデバッグエージェント１５６−５は、サーバ・ノードＡ１００−１で実行されるサーバ・プログラム１５０−１にブレークポイントをセットするデバッグコマンドを受信すると、クライアントプログラム１５０−５が作成したパケットに、デバッグ・コマンドを付加して、サーバ・ノードＡに送信する。第２のデバッグ・エージェント１５６−１は、デバッグ・コマンドをパケットから除去し、要求されたブレークポイントをサーバ・プログラム内にセットし、次いで、パケットをサーバ・プログラムに転送する。サーバ・プログラムの実行がブレークポイントに到達すると、第２のデバッグ・エージェントは、サーバ・プログラム実行を停止させ、サーバ・プログラムの状態を第１のデバッグ・エージェントに送信する。【選択図】図２
2011258185.tif 000002
【特許請求の範囲】
【請求項１】
第１のデバッグ・エージェントにおいて、第１のコンピュータにおける第１のプログラムからパケットを受信するステップと、
前記パケットに、デバッグ・コマンドと、前記第１のデバッグ・エージェントの識別子とを付加するステップと、
前記デバッグ・コマンドと前記第１のデバッグ・エージェントの前記識別子とを含む前記パケットを受信コンピュータに送信するステップであって、前記デバッグ・コマンドが、前記受信コンピュータ上で実行される第２のプログラムの実行を停止させる、ステップと、
前記第１のコンピュータにおいて、停止された前記第２のプログラムの状態を受信するステップと、
前記第１のコンピュータにおいて、前記第２のプログラムの前記状態を提示するステップと、
を含む、方法。
【請求項２】
前記パケットを受信することに応答して、前記受信コンピュータにおける第２のデバッグ・エージェントが、前記第２のプログラム内にブレークポイントをセットし、前記第２のプログラムが、前記ブレークポイントにおいて実行を停止する、請求項１に記載の方法。
【請求項３】
前記パケットを受信することに応答して、前記受信コンピュータにおける第２のデバッグ・エージェントが、前記受信コンピュータのメモリ内の位置に対するアドレス・ウォッチを開始し、前記第２のプログラムが、前記メモリ内の前記位置における内容が変更されたことに応答して実行を停止する、請求項１に記載の方法。
【請求項４】
前記第２のデバッグ・エージェントが、前記パケットから前記デバッグ・コマンドと前記第１のデバッグ・エージェントの前記識別子とを除去し、前記デバッグ・コマンドと前記第１のデバッグ・エージェントの前記識別子とをもたない前記パケットを前記第２のプログラムに送信する、請求項１に記載の方法。
【請求項５】
前記受信コンピュータを識別する処理ノード識別子を前記パケットに付加するステップをさらに含む、請求項１に記載の方法。
【請求項６】
前記デバッグ・コマンドと前記第１のデバッグ・エージェントの前記識別子とを含む前記パケットを受信コンピュータに送信するステップが、
前記デバッグ・コマンドと、前記第１のデバッグ・エージェントの前記識別子と、前記受信コンピュータを識別する前記処理ノード識別子とを含む前記パケットを宛先コンピュータに送信するステップをさらに含み、前記宛先コンピュータが前記パケットを前記受信コンピュータに送信する、請求項５に記載の方法。
【請求項７】
前記提示するステップが、前記第２のプログラムのプログラム・リストを提示するステップをさらに含む、請求項１に記載の方法。
【請求項８】
第１のデバッグ・エージェントにおいて第１のコンピュータにおける第１のプログラムからパケットを受信されたパケットにデバッグ・コマンドと、前記第１のデバッグ・エージェントの識別子とを付加したパケットを、受信コンピュータにおいて受信するステップと、
前記受信コンピュータにおいて、前記デバッグ・コマンドが、前記受信コンピュータ上で実行される第２のプログラムの実行を停止させるステップと、
前記第１のコンピュータにおいて提示するために、前記受信コンピュータが、停止された前記第２のプログラムの状態を送信するステップと、
を含む、方法。
【請求項９】
請求項１乃至８のいずれかの請求項に記載のすべてのステップをコンピュータに実行させる、デバッグ・プログラム。
【請求項１０】
請求項１乃至８のいずれかの請求項に記載のすべてのステップをそれぞれ実行する各手段を備える、デバッグ・システム
【請求項１１】
第１のデバッグ・エージェントにおいて、第１のコンピュータにおける第１のプログラムから、パケットを受信するステップと、
前記パケットに、デバッグ・コマンドと、処理ノード識別子と、前記第１のデバッグ・エージェントの識別子とを付加するステップと、
前記デバッグ・コマンドと、前記処理ノード識別子と、前記第１のデバッグ・エージェントの前記識別子とを含む前記パケットを宛先コンピュータに送信するステップであって、前記宛先コンピュータにおける第２のデバッグ・エージェントが、前記パケットを受信コンピュータに送信し、前記受信コンピュータにおける第３のデバッグ・エージェントが、前記パケットを前記受信コンピュータにおいて実行される第３のプログラムに送信し、前記第３のデバッグ・エージェントは、前記受信コンピュータを識別する受信ノード識別子が前記パケット内の前記処理ノード識別子と合致した場合に前記デバッグ・コマンドを実行し、前記デバッグ・コマンドの実行が前記第３のプログラムの実行を停止させ、前記第３のデバッグ・エージェントは、前記受信コンピュータを識別する前記受信ノード識別子が前記パケット内の前記処理ノード識別子と合致しない場合には前記デバッグ・コマンドを実行しない、ステップと、
前記第１のコンピュータにおける前記第１のデバッグ・エージェントにおいて、前記第３のプログラムの状態及び停止された前記第３のプログラムの識別子を受信するステップと、
前記第１のコンピュータにおいて、前記第３のプログラムの前記状態及び前記第３のプログラムのプログラム・リストを提示するステップと、
をコンピュータに実行させる、デバッグ・プログラム。
【請求項１２】
第１のデバッグ・エージェントを含む第１のコンピュータであって、前記第１のデバッグ・エージェントが、パケットを受信し、デバッグ・コマンドと、処理ノード識別子と、前記第１のデバッグ・エージェントの識別子とを前記パケットに付加する、第１のコンピュータと、
前記第１のコンピュータに通信可能に接続された受信コンピュータであって、第３のデバッグ・エージェントが、前記パケットを受信し、前記パケットを前記宛先コンピュータにおいて実行される第３のプログラムに送信し、前記第３のデバッグ・エージェントは、前記受信コンピュータを識別する受信ノード識別子が前記パケット内の前記処理ノード識別子と合致した場合に前記デバッグ・コマンドを実行し、前記デバッグ・コマンドの実行が前記受信コンピュータ上で実行される前記第３のプログラムの実行を停止させ、前記第３のデバッグ・エージェントは、前記受信コンピュータを識別する前記受信ノード識別子が前記パケット内の前記処理ノード識別子と合致しない場合には前記デバッグ・コマンドを実行せず、前記第３のデバッグ・エージェントは、前記第３のプログラムの状態及び停止された前記第３のプログラムの識別子を前記第１のデバッグ・エージェントに送信し、前記第１のデバッグ・エージェントは、前記第３のプログラムの状態及び前記第３のプログラムのリストを提示し、前記第３のプログラムは前記第１のコンピュータにおいて実行されない、受信コンピュータと
を備える、デバッグ・システム。
【請求項１３】
前記コマンドを実行することに応答して、前記第３のデバッグ・エージェントが前記第３のプログラム内にブレークポイントをセットし、前記第３のプログラムは前記ブレークポイントにおいて実行を停止する、請求項１２に記載のデバッグ・システム。
【請求項１４】
前記コマンドを実行することに応答して、前記第３のデバッグ・エージェントが前記受信コンピュータのメモリ内の位置に対するアドレス・ウォッチを開始し、前記第３のプログラムは、前記メモリ内の前記位置における内容が変更されたことに応答して実行を停止する、請求項１２に記載のデバッグ・システム。
【請求項１５】
前記パケットを前記第３のプログラムに送信するのに先立ち、前記第３のデバッグ・エージェントが、前記パケットから、前記デバッグ・コマンドと、前記第１のデバッグ・エージェントの前記識別子と、前記処理ノード識別子とを除去する、請求項１２に記載のデバッグ・システム。
【請求項１６】
前記第３のプログラムが停止されたことを示す割り込みに応答して、前記第３のデバッグ・エージェントが、前記割り込みを生じさせた前記デバッグ・コマンドを要求した前記第１のデバッグ・エージェントの前記識別子を見つけ出し、前記第３のプログラムの前記状態と、前記第３のプログラムの前記識別子と、停止された前記第３のプログラムのスレッドの識別子とを前記第１のデバッグ・エージェントに送信する、請求項１２に記載のデバッグ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の一実施形態は、一般に、コンピュータ・システムに関し、より具体的には、分散型コンピュータ・システム上でコンピュータ・プログラムをデバッグすることに関する。
【背景技術】
【０００２】
コンピュータ・システムは、典型的には、コンピュータ・プログラムと、半導体、トランジスタ、チップ、及び回路基板といったハードウェアとの組み合わせを含む。コンピュータ・プログラムはストレージ・デバイス内に格納され、プロセッサによって実行される。コンピュータ・プログラムがますます高度化され、複雑になるに従って、プログラムをデバッグすることが困難になってきている。バグとは、コンピュータ・プログラム内の問題、障害、又はエラーである。コンピュータ・プログラム内の疑わしい障害を突き止め、解析し、訂正することが、「デバッグ」として知られるプロセスである。典型的には、プログラマは、開発中のプログラムのデバッグを行うために「デバッガ」として一般に知られる別のコンピュータ・プログラムを用いる。
【０００３】
従来のデバッガは、典型的には、コンピュータ・プログラマがユーザ・インターフェースを介して要求することができる３つの主要なタイプの操作をサポートする。第１のタイプはブレークポイント又はアドレス・ウォッチ操作であり、プログラマは、ブレークポイントによって、プロセッサによるプログラムの実行を停止させる正確な命令を特定することができ、又はアドレス・ウォッチを介して、プロセッサが内容の変更について監視し、その時点でプログラムの実行が停止されるメモリ位置を特定することができる。その結果、プログラムがデバッガによって実行されると、プログラムは、ブレークポイントに到達するまで、又は監視されているメモリ位置の内容が書き込まれるまでプロセッサ上で通常の仕方で実行され、その時点でデバッガがプログラムの実行を停止させる。第２のタイプはステップ操作であり、これによりコンピュータ・プログラマはプロセッサにプログラム内の命令を１つずつ又はグループ毎に実行させることができる。各命令又は命令のグループが実行された後、デバッガはプログラムの実行を停止させる。ステップ操作又はブレークポイント操作のどちらかによってプログラムの実行が停止されると、従来のデバッガは、プログラマの要求に応答して、種々のストレージ位置に格納された内容を表示する第３のタイプの操作を提供する。種々の命令のところでプログラムを停止させ、種々のストレージ位置の内容を検査するこのデバッグ・プロセスによって、プログラマは最終的に、命令又はデータなどの格納内容が正しくない又は予期せぬ内容であるストレージ位置を見つけ出すことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の課題は、分散型コンピュータ・システム上でコンピュータ・プログラムをデバッグすることにある。
【課題を解決するための手段】
【０００５】
方法、デバッグ・プログラム、及びデバッグ・システムが提供される。一実施形態において、第１のコンピュータにおける第１のデバッグ・エージェントが、第１のプログラムからパケットを受信する。第１のデバッグ・エージェントは、デバッグ・コマンドと第１のデバッグ・エージェントの識別子とをパケットに付加し、そのパケットを受信コンピュータに送信する。受信コンピュータにおける第２のデバッグ・エージェントが、デバッグ・コマンドと第１のデバッグ・エージェントの識別子とをパケットから除去し、そのパケットを受信コンピュータにおいて実行される第２のプログラムに送信する。第２のデバッグ・エージェントはさらに、デバッグ・コマンドを実行し、これが、受信コンピュータ上で実行される第２のプログラムに、ブレークポイントにおいて実行を停止させるか、又はアドレス・ウォッチのメモリ位置が更新されたときに停止させる。第２のデバッグ・エージェントは、第２のプログラムの状態を第１のデバッグ・エージェントに送信し、第１のデバッグ・エージェントは、第１のコンピュータにおいて、第２のプログラムの状態及びリストを提示する。
【図面の簡単な説明】
【０００６】
【図１】本発明の一実施形態を実装するための例示的なシステムの高レベルのブロック図を示す。
【図２】本発明の一実施形態による分散デバッグ・システムの選択された構成要素を図示するブロック図を示す。
【図３】本発明の一実施形態による別の分散デバッグ・システムの選択された構成要素を図示するブロック図を示す。
【図４】本発明の一実施形態の選択された構成要素の対話を図示するブロック図を示す。
【図５】本発明の一実施形態による例示的なデバッグ・ユーザ・インターフェースのブロック図を示す。
【図６】本発明の一実施形態による別の例示的なデバッグ・ユーザ・インターフェースのブロック図を示す。
【図７】本発明の一実施形態による例示的な保存デバッグ・データのブロック図を示す。
【図８】本発明の一実施形態によるイネーブル・デバッグ・コマンドについての例示的な処理のフローチャートを示す。
【図９】本発明の一実施形態によるディスエーブル・デバッグ・コマンドについての例示的な処理のフローチャートを示す。
【図１０】本発明の一実施形態によるブレークポイント及び分散アドレス・ウォッチ・コマンドについての例示的な処理のフローチャートを示す。
【図１１】本発明の一実施形態による、データのパケットを送信するための例示的な処理のフローチャートを示す。
【図１２】本発明の一実施形態による、データのパケットを受信するための例示的な処理のフローチャートを示す。
【図１３】本発明の一実施形態による、割り込みを処理するための例示的な処理のフローチャートを示す。
【図１４】本発明の一実施形態による、ネットワークから受信した状態を処理するための例示的な処理のフローチャートを示す。
【発明を実施するための形態】
【０００７】
しかしながら、添付の図面は、本発明の例示的な実施形態のみを示すものであり、従って、本発明は他の均等に有効な実施形態を許容することができるので本発明の範囲を限定するものと見なされるものではないことに留意されたい。
【０００８】
図面を参照すると、いくつかの図にわたって同様の符号が同様の部分を表しており、図１は、本発明の一実施形態による、ネットワーク１３０に接続されたコンピュータ・システム１００の高レベルのブロック図表現を示す。コンピュータ・システム１００の主要な構成要素は、１つ又は複数のプロセッサ１０１、メイン・メモリ１０２、端末インターフェース１１１、ストレージ・インターフェース１１２、Ｉ／Ｏ（入力／出力）デバイス・インターフェース１１３、及びネットワーク・アダプタ１１４を含み、その全てが、構成要素間通信のために、メモリ・バス１０３、Ｉ／Ｏバス１０４、及びＩ／Ｏバス・インターフェース・ユニット１０５を介して直接又は間接に通信可能に結合される。
【０００９】
コンピュータ・システム１００は、ここでは総称的にプロセッサ１０１と呼ばれる１つ又は複数の汎用プログラム可能中央演算装置（ＣＰＵ）１０１Ａ、１０１Ｂ、１０１Ｃ、及び１０１Ｄを含む。一実施形態において、コンピュータ・システム１００は、比較的大規模なシステムにおいて典型的であるマルチ・プロセッサを含むが、別の実施形態においては、コンピュータ・システム１００は代替的に単一ＣＰＵシステムとすることができる。各々のプロセッサ１０１は、メイン・メモリ１０２内に格納された命令を実行し、１つ又は複数のレベルのオン・ボード・キャッシュを含んでいてもよい。
【００１０】
メイン・メモリ１０２は、データ及びプログラムを格納又はエンコードするための、ランダム・アクセス半導体メモリ、ストレージ・デバイス、又はストレージ媒体である。別の実施形態において、メイン・メモリ１０２はコンピュータ・システム１００の仮想メモリ全体を表し、コンピュータ・システム１００と結合しているか又はネットワーク１３０を介して接続された、他のコンピュータ・システムの仮想メモリも含むことができる。メイン・メモリ１０２は概念的には単一のモノリシックな実体であるが、他の実施形態において、メイン・メモリ１０２は、キャッシュと他のメモリ・デバイスとの階層構造のようなより複雑な構成である。例えば、メモリは多重レベルのキャッシュに存在していてもよく、これらのキャッシュは、１つのキャッシュが命令を保持する一方で別のキャッシュが１つ又は複数のプロセッサによって用いられる非命令的データを保持するように、機能によってさらに分けることができる。種々のいわゆる不均等メモリ・アクセス（ＮＵＭＡ）型コンピュータ・アーキテクチャのいずれにおいても公知であるように、メモリをさらに分散させて異なるＣＰＵ又はＣＰＵの組と関連付けることができる。
【００１１】
メイン・メモリ１０２は、プログラム１５０、パケット１５２、ネットワーク・リソース１５４、デバッグ・エージェント１５６、及び保存デバッグ・データ１５８を格納又はエンコードする。プログラム１５０、パケット１５２、ネットワーク・リソース１５４、デバッグ・エージェント１５６、及び保存デバッグ・データ１５８は、コンピュータ・システム１００の中のメモリ１０２内に格納されるものとして図示されているが、他の実施形態において、これらのうちの幾つか又は全ては、異なるコンピュータ・システム上に存在していてもよく、例えばネットワーク１３０を介して、遠隔的にアクセスすることができる。コンピュータ・システム１００は、コンピュータ・システム１００のプログラムが、多数の小型のストレージ実体へのアクセスではなく、あたかも大規模な単一のストレージ・エンティティへのアクセスのみを有するかのように振る舞うことを可能にする、仮想アドレス機構を用いることができる。よって、プログラム１５０、パケット１５２、ネットワーク・リソース１５４、デバッグ・エージェント１５６、及び保存デバッグ・データ１５８はメイン・メモリ１０２内に格納されているものとして図示されているが、これらの要素は必ずしも同時に全て完全に同じストレージ・デバイスに含まれている必要はない。さらに、プログラム１５０、パケット１５２、ネットワーク・リソース１５４、デバッグ・エージェント１５６、及び保存デバッグ・データ１５８は独立した実体として図示されているが、他の実施形態において、これらのうちの幾つか、これらのうちの幾つかの一部、又はこれらの全てが一体にパッケージ化されていてもよい。
【００１２】
プログラム１５０は、コンピュータ・システム１００のプロセッサ１０１上で実行されるコードと、コンピュータ・システム１００とネットワーク１３０を介して接続されている他のコンピュータ・システム上で実行されるプログラムのコピーとを含む。プログラム１５０は、デバッグ・エージェント１５６によってデバッグされるプログラムである。プログラム１５０は、ソース形式であろうと又はオブジェクト形式であろうと、任意のタイプの実行可能又は解釈可能なコード又はステートメントとすることができる。種々の実施形態において、プログラム１５０は、アプリケーション・プログラム、オペレーティング・システム・プログラム、ネットワーク・アプリケーション、アプリケーション・サーバ、サーバ・プログラム、グリッド・プログラム、科学計算マネージャ、クエリ・オプティマイザ、又はいずれかの他のタイプのプログラムとすることができる。
【００１３】
パケット１５２は、プログラム１５０が読み取り／書き込みし、ネットワーク１３０を介して他のコンピュータ・システムと送／受信するデータを含む。種々の実施形態において、パケット１５２は、データ、データベース、オブジェクト、クラス、コード、ファイル、ディレクトリとサブディレクトリとファイルとの階層構造、データ構造体、又は任意の他のタイプのデータ若しくは情報リポジトリを含むことができる。
【００１４】
ネットワーク・リソース１５４は、ネットワーク１３０を介したパケット１５２の送信及び受信を管理する。種々の実施形態において、ネットワーク・リソース１５４は、ソケット、ＡＰＩ（アプリケーション・プログラミング・インターフェース）、オブジェクト要求ブローカ、又は設定ファイルを含む。別の実施形態において、ネットワーク・リソース１５４は、コンピュータ・システム１００上で実行される命令又はステートメントのユニットを含む、プログラム、モジュール、メソッド、クラス、又はオブジェクトを含む。
【００１５】
デバッグ・エージェント１５６は、プログラム１５０内のブレークポイント及びアドレス・ウォッチをデバッグ・コマンドの受信に応答して管理し、このデバッグ・コマンドは、コマンド・ライン上で発行され、グラフィカル・ユーザ・インターフェースを通じて入力され、又はアプリケーションを介して発行することができる。ブレークポイントとは、ユーザがそこでプログラム１５０の実行が停止されることを望む、プログラム１５０内のステートメント又は命令である。アドレス・ウォッチは、メモリ位置（例えばアドレス、フィールド、オブジェクト、レコード、又はファイル）を監視し、プログラム１５０がそのメモリ位置の内容に対して変更、更新、又は書き込みを行うことに応答して、プログラム１５０の実行を停止させる。その結果、プログラム１５０がデバッグ・エージェント１５６によって実行されるとき、プログラム１５０は、ブレークポイントに到達するまで、又は監視されているメモリ位置が変更されるまで、プロセッサ１０１上で通常の仕方で実行される。次いでデバッグ・エージェント１５６は、ブレークポイント命令のところ又はメモリ位置を変更した命令のところで、プログラム１５０の実行を止め、結果及び／又はプログラム１５０の状態及び／又はコンピュータ・システム１００の状態を、ユーザ入力／出力デバイス１２１を介してデバッガ・ユーザ・インターフェース上で解析のためにユーザに対して表示する。
【００１６】
デバッグ・エージェント１５６は、例えばプログラム１５０内のブレークポイント位置における有効なステートメント又は命令を無効な命令に置き換えること、及びそのブレークポイントについてのレコードをブレークポイント・テーブルに作成することによって、プログラム１５０内にブレークポイントをセットする。デバッグ・エージェント１５６はプロセッサ１０１の機能を介してアドレス・ウォッチを始動し、これが、デバッグ・エージェント１５６によって指定されたメモリ位置を監視する。ブレークポイント及び／又はアドレス・ウォッチがセットされた後、ユーザは、プログラム１５０の実行を再開させる入力をデバッグ・ユーザ・インターフェースに与える。プログラム１５０の実行が無効なステートメント又は命令に最終的に遭遇したこと、又は監視されているメモリ位置の内容が最終的に変更されたことに応答して、システム例外又は割り込みが発生し、これがプログラム１５０の実行を停止させ、プロセッサ１０１の制御をデバッグ・エージェント１５６に渡す。デバッグ・エージェント１５６は次にデバッグ・ユーザ・インターフェースを介してユーザに制御を渡し、次いでユーザはユーザ・インターフェースを介してデバッグ・エージェント１５６に対してコマンドを発行することができ、デバッグ・エージェント１５６はこのコマンドを解釈して、入力ストレージ位置の内容を定めるステートメント又は命令を見つけ出して表示し、ストレージ位置の内容を表示し、ブレークポイント又はアドレス・ウォッチ機能をセット又は除去し、プログラム１５０の実行を再開し、又はいずれかの他の適切な操作を行う。
【００１７】
保存デバッグ・データ１５８は、デバッグ・エージェント１５６が保存したデータを含む。保存デバッグ・データ１５８は図７を参照して以下でさらに説明される。デバッグ・エージェント１５６は、図８、図９、図１０、図１１、図１２、図１３、及び図１４を参照して以下でさらに説明されるように、保存デバッグ・データ１５８を用いて分散デバッグを実施する。
【００１８】
一実施形態において、プログラム１５０、ネットワーク・リソース１５４、及びデバッグ・エージェント１５６のうちの１つ、幾つか、又は全ては、図８、図９、図１０、図１１、図１２、図１３、及び図１４を参照して以下で説明される機能を実行するための、プロセッサ１０１上で実行される命令若しくはステートメント、又はプロセッサ１０１上で実行される命令若しくはステートメントによって解釈される命令若しくはステートメントを含む。一実施形態において、プログラム１５０、ネットワーク・リソース１５４、及びデバッグ・エージェント１５６のうちの１つ、幾つか、又は全ては、プロセッサ・ベースのシステムの代わりに、又はこれに加えて、半導体デバイス、チップ、論理ゲート、回路、回路基板、及び／又は他の物理ハードウェア・デバイスによって、ハードウェアに実装される。
【００１９】
メモリ・バス１０３は、プロセッサ１０１、メイン・メモリ１０２、及びＩ／Ｏバス・インターフェース・ユニット１０５の間でデータを転送するための、データ通信経路を提供する。Ｉ／Ｏバス・インターフェース・ユニット１０５はさらに、種々のＩ／Ｏユニットとの間でデータを転送するためにシステムＩ／Ｏバス１０４に結合される。Ｉ／Ｏバス・インターフェース・ユニット１０５は、Ｉ／Ｏプロセッサ（ＩＯＰ）又はＩ／Ｏアダプタ（ＩＯＡ）としても知られる多数のＩ／Ｏインターフェース・ユニット１１１、１１２、１１３、及び１１４と、システムＩ／Ｏバス１０４を通じて通信する。
【００２０】
Ｉ／Ｏインターフェース・ユニットは、様々なストレージ及びＩ／Ｏデバイスとの通信をサポートする。例えば、端末インターフェース・ユニット１１１は、ユーザ出力デバイス（例えば映像表示デバイス、スピーカ、プリンタ、及び／又はテレビジョン・セット）及びユーザ入力デバイス（例えばキーボード、マウス、キーパッド、タッチパッド、トラックボール、ボタン、ライトペン又は他のポインティング・デバイス）を含むことができる１つ又は複数のユーザ入力／出力デバイス１２１の取り付けをサポートする。ユーザは、ユーザ入力／出力デバイス１２１及びコンピュータ・システム１００にユーザ・インターフェースを介して入力を与えるためにユーザ入力デバイスを操作することができ、かつ、ユーザ出力デバイスを介して出力を受け取ることができる。例えば、ユーザ・インターフェースは、表示デバイス上に表示され、スピーカを介して再生され、又はプリンタを介して印刷されるといったように、ユーザ入力／出力デバイス１２１を介して提示されることができる。
【００２１】
ストレージ・インターフェース・ユニット１１２は、１つ又は複数の直接アクセス・ストレージ・デバイス（ＤＡＳＤ）１２５及び１２６（これらは典型的には回転磁気ディスク・ドライブ・ストレージ・デバイスであるが、代替的に、ホストに対しては単一の大規模ストレージ・デバイスに見えるように構成されたディスク・ドライブのアレイを含む他のデバイスとすることができる）の取り付けをサポートする。別の実施形態において、デバイス１２５及び／又は１２６は、任意のタイプの二次ストレージ・デバイスを通じて実装することができる。メイン・メモリ１０２の内容又はその任意の部分を、必要に応じて、直接アクセス記憶装置１２５及び１２６に格納することができ、そこから取り出すことができる。
【００２２】
Ｉ／Ｏデバイス・インターフェース１１３は、プリンタ若しくはファックス機のような、種々の他の入力／出力デバイス又は他のタイプのデバイスのいずれかへのインターフェースを提供する。ネットワーク・アダプタ１１４は、コンピュータ・システム１００から他のデジタル・デバイス及びコンピュータ・システムへの、１つ又は複数の通信経路を提供する。そのような経路は、例えば１つ又は複数のネットワーク１３０を含むことができる。
【００２３】
メモリ・バス１０３は、図１においては、プロセッサ１０１とメイン・メモリ１０２とＩ／Ｏバス・インターフェース１０５との間に直接通信経路を提供する比較的単純な単一バス構造として示されているが、実際には、メモリ・バス１０３は多数の異なるバス又は通信経路を含むことができ、それらは、階層状、星状、又はウェブ状構成におけるポイント・ツー・ポイント・リンク、多重階層構造バス、平行及び冗長経路、又は任意の他の適切なタイプの構成のような種々の形態のうちのいずれかの形で配置することができる。さらにまた、Ｉ／Ｏバス・インターフェース１０５及びＩ／Ｏバス１０４は単一の個々のユニットとして示されているが、コンピュータ・システム１００は、実際には、多数のＩ／Ｏバス・インターフェース・ユニット１０５及び／又は多数のＩ／Ｏバス１０４を含むことができる。システムＩ／Ｏバス１０４を種々のＩ／Ｏデバイスに延びる種々の通信経路から隔てる多数のＩ／Ｏインターフェース・ユニットが示されているが、他の実施形態において、Ｉ／Ｏデバイスのうちの幾つか又は全てが直接、１つ又は複数のシステムＩ／Ｏバスに接続される。
【００２４】
種々の実施形態において、コンピュータ・システム１００は、マルチ・ユーザ「メインフレーム」型コンピュータ・システム、シングル・ユーザ・システム、又はユーザ・インターフェースを殆ど又は全くもたずに他のコンピュータ・システム（クライアント）からの要求を受信するサーバ若しくは同様のデバイスとすることができる。他の実施形態において、コンピュータ・システム１００は、デスクトップ・コンピュータ、ポータブル・コンピュータ、ラップトップ又はノートブック・コンピュータ、タブレット・コンピュータ、ポケット・コンピュータ、電話、ポケットベル、自動車、テレビ会議システム、電化製品、又は任意の他の適切なタイプの電子装置として実装することができる。
【００２５】
ネットワーク１３０は、いずれかの適切なネットワーク又はネットワークの組み合わせとすることができ、コンピュータ・システム１００への／からのデータ及び／又はコードの通信に適した任意の適切なプロトコルをサポートすることができる。種々の実施形態において、ネットワーク１３０は、コンピュータ・システム１００に直接又は間接に接続されたストレージ・デバイス又はストレージ・デバイスの組み合わせを表すことができる。別の実施形態において、ネットワーク１３０は無線通信をサポートすることができる。別の実施形態において、ネットワーク１３０は、電話線又はケーブルのような有線通信をサポートすることができる。別の実施形態において、ネットワーク１３０はインターネットとすることができ、ＩＰ（インターネット・プロトコル）をサポートすることができる。
【００２６】
別の実施形態において、ネットワーク１３０はローカル・エリア・ネットワーク（ＬＡＮ）又は広域ネットワーク（ＷＡＮ）とすることができる。別の実施形態において、ネットワーク１３０はホットスポット・サービス・プロバイダ・ネットワークとすることができる。別の実施形態において、ネットワーク１３０はイントラネットとすることができる。別の実施形態において、ネットワーク１３０はＧＰＲＳ（汎用パケット無線サービス）ネットワークとすることができる。別の実施形態において、ネットワーク１３０はＦＲＳ（Ｆａｍｉｌｙ  Ｒａｄｉｏ  Ｓｅｒｖｉｃｅ）ネットワークとすることができる。別の実施形態において、ネットワーク１３０はいずれかの適切なセルラー・データ・ネットワーク、セル・ベースの無線ネットワークとすることができる。さらに別の実施形態において、ネットワーク１３０はいずれかの適切なネットワーク又はネットワークの組み合わせとすることができる。１つのネットワーク１３０が示されているが、他の実施形態において、任意の数の（同じタイプ又は異なるタイプの）ネットワークが存在することができる。
【００２７】
図１は、コンピュータ・システム１００の代表的な主要な構成要素及びネットワーク１３０を高次のレベルで示すことを意図するものであること、個々の構成要素は図１で表されているものよりも複雑であり得ること、図１に示されるもの以外の構成要素又はこれらに付加される構成要素が存在し得ること、及びこのような構成要素の数、タイプ、及び構成は多様であり得ることを理解すべきである。そのような付加的な複雑性又は付加的な変形の幾つかの具体的な例は本明細書において開示されるが、これらは単なる例示であり、必ずしもこうした変形のうちの唯一のものであるとは限らないことが理解される。
【００２８】
図１に示される種々のプログラム構成要素及び本発明の種々の実施形態の実装は、種々のコンピュータ・アプリケーション、ルーチン、構成要素、プログラム、オブジェクト、モジュール、データ構造などを用いることを含む多数の手法で実装することができ、これ以降は「コンピュータ・プログラム」又は単に「プログラム」と呼ばれる。コンピュータ・プログラムは、種々の時点においてコンピュータ・システム１００の中の種々のメモリ及びストレージ・デバイス内に存在する１つ又は複数の命令又はステートメントを含み、この１つ又は複数の命令又はステートメントは、コンピュータ・システム１００の中の１つ又は複数のプロセッサによって読み出されて実行されたとき、又は１つ若しくは複数のプロセッサによって実行される命令によって解釈されたときに、コンピュータ・システム１００に、本発明の実施形態の種々の態様を構成するステップ又は要素を実行するのに必要なアクションを行わせる。
【００２９】
当業者であれば認識するように、本発明の実施形態の態様は、システム、方法、又はコンピュータ・プログラムとして具体化することができる。従って、本発明の実施形態の態様は、全体がハードウェアの実施形態、全体がプログラムの実施形態（ストレージ・デバイスに格納されたファームウェア、常駐プログラム、マイクロ・コードなどを含む）、又はプログラムの態様とハードウェアの態様との組み合わせの実施形態の形を取ることができ、本明細書においてはその全てを全体的に「回路」、「モジュール」、又は「システム」と呼ぶことができる。さらにまた、本発明の実施形態は、媒体上に具体化されたコンピュータ可読プログラム・コードを有する１つ又は複数のコンピュータ可読媒体に具体化されたコンピュータ・プログラムの形を取ることができる。
【００３０】
１つ又は複数のコンピュータ可読媒体の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光学、電磁気、赤外線、若しくは半導体システム、装置、若しくはデバイス、又は上記のものの任意の適切な組み合わせとすることができるが、これらに限定されるものではない。コンピュータ可読ストレージ媒体のより具体的な例（非網羅的なリスト）は、１つ又は複数の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ）又はフラッシュ・メモリ、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、又は上記のものの任意の適切な組み合わせを含むことができる。本文書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置、若しくはデバイスによって用いるため又はこれらと共に用いるためのプログラムを収容又は格納することができる任意の有形の媒体とすることができる。
【００３１】
コンピュータ可読信号媒体は、例えばベースバンド内に又は搬送波の一部としてコンピュータ可読プログラム・コードを具体化した、伝搬データ信号を含むことができる。このような伝搬信号は、電磁気、光、又はその任意の適切な組み合わせを含むがこれらに限定されない種々の形態をとることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置、若しくはデバイスによって用いるため又はこれらと共に用いるためのプログラムを通信、伝搬、又は伝送する、任意のコンピュータ可読媒体であり得る。
【００３２】
コンピュータ可読媒体上に具体化されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、無線周波数（ＲＦ）、又は上記のものの任意の適切な組み合わせを含むがこれらに限定されないいずれかの適切な媒体を用いて、伝送することができる。
【００３３】
本発明の実施形態の態様のための操作を実行するためのコンピュータ・プログラム・コードは、オブジェクト指向型プログラミング言語及び従来の手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。プログラム・コードは、全体をユーザのコンピュータ上で実行するか、一部をリモート・コンピュータ上で実行するか、又は全体をリモート・コンピュータ若しくはサーバ上で実行することができる。一番最後のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）又は広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続することができ、又は外部コンピュータとの接続を（例えば、インターネット・サービス・プロバイダを用いてインターネットを通じて）確立することもできる。
【００３４】
本発明の実施形態の態様は、方法、装置（システム）及びコンピュータ・プログラムのフローチャート図及び／又はブロック図を参照して、以下で説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読媒体に具体化されたコンピュータ・プログラム命令によって実施することができる。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又はマシンを生成する他のプログラム可能データ処理装置のプロセッサに与え、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックによって指定された機能／動作を実施するための手段を生成するようにしてもよい。
【００３５】
また、これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスに特定の方法で機能するように指示することができるコンピュータ可読媒体に格納し、それにより、そのコンピュータ可読媒体に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施する命令を含む製品を作るようにしてもよい。本発明の種々の実施形態を定めるコンピュータ・プログラムは、１つ又は複数のプロセッサに動作可能又は通信可能に（直接又は間接に）接続することができる種々の有形のコンピュータ可読ストレージ媒体を介してコンピュータ・システムに配信することができる。
【００３６】
また、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスにロードして、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で一連の操作ステップを行わせてコンピュータで実施されるプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実施するためのプロセスを提供するようにしてもよい。
【００３７】
図面のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法、及びコンピュータ・プログラムの可能な実装のアーキテクチャ、機能、及び操作を示す。この点に関して、フローチャート又はブロック図の中の各ブロックは、指定された論理機能を実施するための１つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装においては、ブロックに記載された機能が図面に記載された順序通りに行われない場合があることにも留意すべきである。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には、実質的に同時に実行されることがあり、ブロックが逆順に実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及び、ブロック図及び／又はフローチャート図におけるブロックの組み合わせは、指定の機能又は動作を行う専用ハードウェア・ベースのシステムによって、専用ハードウェアとコンピュータ命令との組み合わせによって、実装できることにも留意されたい。
【００３８】
また、本発明の実施形態は、クライアント企業、非営利団体、行政主体、又は内部組織構造とのサービス契約の一部として配信することができる。これらの実施形態の態様は、コンピュータ・システムが機能するように環境設定すること、及び本明細書に記載の方法の幾つか又は全てを実施するコンピュータ・サービス（例えばコンピュータ可読コード、ハードウェア、及びウェブ・サービス）を配置することを含むものとすることができる。これらの実施形態の態様はまた、クライアント企業を分析すること、分析に応じたレコメンデーションを作成すること、レコメンデーションの一部を実施するためのコンピュータ可読コードを生成すること、コンピュータ可読コードを既存のプロセス、コンピュータ・システム、及びコンピュータ・インフラストラクチャに組み込むこと、本明細書に記載の方法及びシステムの使用を計量すること、ユーザに費用を割り当てること、及びユーザにこれらの方法及びシステムの使用について課金することを含むことができる。
【００３９】
加えて、以下説明される種々のプログラムは、本発明の特定の実施形態においてそのプログラムが実装されるアプリケーションに基づいて識別することができる。しかし、下記のどの具体的なプログラム名称も単に便宜上用いられているに過ぎず、従って、本発明の実施形態は、そのような名称によって識別される及び／又は意味されるいずれかの特定のアプリケーションにおける使用のみに限定されるべきではない。
【００４０】
図１に示される例示的な環境は、本発明を限定することを意図するものではない。実際には、本発明の実施形態の範囲から逸脱することなく、他の代替的なハードウェア及び／又はプログラム環境を用いることができる。
【００４１】
図２は、本発明の一実施形態による分散デバッグ・システムの選択された構成要素を図示するブロック図を示す。分散デバッグ・システムは、ネットワーク１３０を介して接続された、サーバ・コンピュータ・システム・ノード１００−１、１００−２、及び１００−３と、負荷バランサ・コンピュータ・システム・サーバ・ノード１００−４と、クライアント・コンピュータ・システム・ノード１００−５とを含む。コンピュータ・システム・ノード１００−１、１００−２、１００−３、１００−４、及び１００−５はコンピュータ・システム１００（図１）の例であり、総称的にコンピュータ・システム１００で表される。クライアント・コンピュータ・システム・ノード１００−５は、ネットワーク１３０を介してサーバ・コンピュータ・システム・ノード１００−１、１００−２、及び１００−３と接続されるものとして図示されているが、別の実施形態において、クライアント・コンピュータ・システム・ノード１００−５は、ネットワーク１３０を介して負荷バランサ・サーバ・ノード１００−４に接続され、サーバ・コンピュータ・システム・ノード１００−１、１００−２、及び１００−３とは負荷バランサ・サーバ・ノード１００−４を介して通信可能に接続される。
【００４２】
サーバ・コンピュータ・システム・ノード１００−１は、サーバ・プログラム１５０−１と、ネットワーク・リソース１５４−１と、デバッグ・エージェント１５６−１と、保存デバッグ・データ１５８−１とを含む。サーバ・コンピュータ・システム・ノード１００−２は、サーバ・プログラム１５０−２と、ネットワーク・リソース１５４−２と、デバッグ・エージェント１５６−２と、保存デバッグ・データ１５８−２とを含む。サーバ・コンピュータ・システム・ノード１００−３は、サーバ・プログラム１５０−３と、ネットワーク・リソース１５４−３と、デバッグ・エージェント１５６−３と、保存デバッグ・データ１５８−３とを含む。負荷バランサ・コンピュータ・システム・サーバ・ノード１００−４は、サーバ・プログラム１５０−４と、ネットワーク・リソース１５４−４と、デバッグ・エージェント１５６−４と、保存デバッグ・データ１５８−４とを含む。クライアント・コンピュータ・システム・ノード１００−５は、プログラム１５０−５と、サーバ・プログラム１５０−１、１５０−２、１５０−３、及び１５０−４と、ネットワーク・リソース１５４−５と、デバッグ・エージェント１５６−５と、保存デバッグ・データ１５８−５とを含む。プログラム１５０−１、１５０−２、１５０−３、１５０−４、及び１５０−５はプログラム１５０（図１）の例であり、総称的にプログラム１５０で表される。ネットワーク・リソース１５４−１、１５４−２、１５４−３、１５４−４、及び１５４−５はネットワーク・リソース１５４（図１）の例であり、総称的にネットワーク・リソース１５４で表される。デバッグ・エージェント１５６−１、１５６−２、１５６−３、１５６−４、及び１５６−５はデバッグ・エージェント１５６（図１）の例であり、総称的にデバッグ・エージェント１５６で表される。保存デバッグ・データ１５８−１、１５８−２、１５８−３、１５８−４、及び１５８−５は保存デバッグ・データ１５８（図１）の例であり、総称的に保存デバッグ・データ１５８で表される。
【００４３】
プログラム１５０−１、１５０−２、１５０−３、１５０−４、及び１５０−５は、デバッグ・エージェント１５６−１、１５６−２、１５６−３、１５６−４、及び１５６−５がデバッグする命令を含む。一実施形態において、プログラム１５０−１、１５０−２、１５０−３、１５０−４、及び１５０−５は全て同じものである。別の実施形態において、プログラム１５０−１、１５０−２、１５０−３、１５０−４、及び１５０−５のうちの幾つか又は全ては互いに異なる。
【００４４】
クライアント・コンピュータ・システム・ノード１００−５におけるプログラム１５０−５は、クライアント・コンピュータ・システム・ノード１００−５におけるプロセッサ上で実行されるコードを含む。クライアント・コンピュータ・システム・ノード１００−５の中のサーバ・プログラム１５０−１、１５０−２、１５０−３、及び１５０−４はそれぞれ、サーバ・コンピュータ・システム・ノード１００−１、１００−２、及び１００−３、並びに負荷バランサコンピュータ・システム・ノード１００−４におけるサーバ・プログラム１５０−１、１５０−２、１５０−３、及びサーバ・プログラム１５０−４のコピーである。サーバ・プログラム１５０−１、１５０−２、１５０−３、及び１５０−４は、クライアント・コンピュータ・システム・ノード１００−５においては実行されない。その代わりに、クライアント・コンピュータ・システム・ノード１００−５は、プログラム１５０−５のプログラム・リスト及びその状態情報を表示することに加えて、図６を参照して以下でさらに説明されるように、デバッグを支援するために、サーバ・プログラム１５０−１、１５０−２、１５０−３、及び１５０−４のうちの１つ又は複数のプログラム・リスト及びその状態情報を表示することができる。プログラム・リストは、プログラムに含まれるソース・コード及び／又はコンパイルされたオブジェクト・コード命令若しくはステートメントを含む。プログラム・リストは、命令又はステートメントを識別する命令又はステートメントの番号、並びにリスト内の命令又はステートメントの順序を含むこともできる。
【００４５】
負荷バランサ・コンピュータ・システム・ノード１００−４は、データの要求又はパケット１５２をクライアント・コンピュータ・システム・ノード１００−５から受信し、それを処理のためにサーバ・コンピュータ・システム・ノード１００−１、１００−２、及び１００−３に分散させる。「クライアント」及び「サーバ」という用語の使用は便宜上のものであり、あるシナリオではクライアントとして動作するコンピュータ・システム・ノードが別のシナリオではサーバとして動作することができ、その逆もまた真である。
【００４６】
一実施形態において、ユーザは、プログラム１５０−１、１５０−２、１５０−３、１５０−４、及び／又は１５０−５をデバックするために、ユーザ入力／出力デバイス１２１（図１）を介してデバッグ・エージェント１５６−５と対話する。
【００４７】
プログラム１５０−５が停止している間に、ユーザは、入力／出力デバイス１２１を介して入力されるデバッグ・コマンドを介して、デバッグ・エージェント１５６−５が、サーバ・ノード１００−１、１００−２、１００−３、及び／又は１００−４上で実行されるサーバ・プログラム１５０−１、１５０−２、１５０−３、及び／又は１５０−４のうちの１つ又は複数の中の命令にブレークポイントをセットすることを要求するか、又はサーバ・ノード１００−１、１００−２、１００−３、及び／又は１００−４のメモリ内のアドレスの内容に対してアドレス・ウォッチを確立することを要求する。デバッグ・エージェント１５６−５は、デバッグ・コマンドを保存デバッグ・データ１５８−５内に保存する。次いでユーザは、入力／出力デバイス１２１（図１）を介して、デバッグ・エージェント１５６がクライアント１００−５上で実行されるプログラム１５０−５を開始することを要求する。プログラム１５０−５が実行され、負荷バランサ１００−４に送信するためのデータ及び／又はコマンドのパケット１５２を作成する。デバッグ・エージェント１５６−５は、パケット１５２をインターセプトし、保存されたデバッグ・コマンドとデバッグ・エージェント１５６−５の識別子とをパケット１５２に付加して、パケット１５２を負荷バランサ１００−４に送信し、負荷バランサ１００−４はパケット１５２をサーバ１００−１、１００−２、又は１００−３のうちの１つ又は複数に送信し、パケットはそこで処理され、取り扱われ、又は実行される。
【００４８】
それぞれのサーバ１００−１、サーバ１００−２、サーバ１００−３、又はサーバ１００−４におけるデバッグ・エージェント１５６−１、デバッグ・エージェント１５６−２、デバッグ・エージェント１５６−３、又はデバッグ・エージェント１５６−４は、それぞれのネットワーク・リソース１５４−１、１５４−２、１５４−３、又は１５４−４からパケット１５２をインターセプト又は受信し、デバッグ・コマンド及びデバッグ・エージェント１５６−５の識別子をパケット１５２から除去又は削除し、デバッグ・コマンド及びデバッグ・エージェント１５６−５の識別子をそれぞれの保存デバッグ・データ１５８−１、１５８−２、１５８−３、又は１５８−４内に保存し、要求されたブレークポイント又はアドレス・ウォッチをそれぞれのコンピュータ・ノード１００−１、１００−２、１００−３、又は１００−４において実行されるそれぞれのサーバ・プログラム１５０−１、１５０−２、１５０−３、又は１５０−４内にセットし、次いで、パケットをそれぞれのサーバ・プログラム１５０−１、１５０−２、１５０−３、又は１５０−４に転送する。
【００４９】
サーバ・プログラム１５０−１、１５０−２、１５０−３、又は１５０−４の実行が、ブレークポイントがセットされた命令、又はアドレス・ウォッチによって監視されているメモリ位置の内容を変更する命令に遭遇したことに応答して、デバッグ・エージェント１５６−１、１５６−２、１５６−３、又は１５６−４は、サーバ・プログラム１５０−１、１５０−２、１５０−３、又は１５０−４の実行を停止させ、保存デバッグ・データ１５８−１、１５８−２、１５８−３、又は１５８−４の中からデバッグ・エージェント１５６−５の識別子を見つけ出し、停止されたサーバ・プログラム１５０−１、１５０−２、１５０−３、又は１５０−４の状態をデバッグ・エージェント１５６−５に送信する。デバッグ・エージェント１５６−５は、クライアント・コンピュータ・システム・ノード１００−５において、コンピュータ・システム・ノード１００−１、１００−２、１００−３、又は１００−４において実行中にブレークポイントに遭遇したサーバ・プログラム１５０−１、１５０−２、１５０−３、又は１５０−４のコピーを見つけ出し、クライアント・コンピュータ・システム・ノード１００−５において、サーバ・プログラム１５０−１、１５０−２、１５０−３、又は１５０−４のコピーを状態情報と共に提示又は表示する。
【００５０】
図３は、本発明の一実施形態による分散デバッグ・システムの選択された構成要素を図示するブロック図を示す。図３の例示的な分散デバッグ・システムは、ネットワーク１３０を介して接続されたグリッド・コンピュータ・システム・ノード１００−６、１００−７、１００−８、１００−９、及び１００−１０を含む。グリッド・コンピュータ・システム・ノード１００−６、１００−７、１００−８、１００−９、及び１００−１０はコンピュータ・システム１００（図１）の例であり、総称的にコンピュータ・システム１００で表される。
【００５１】
グリッド・コンピュータ・システム・ノード１００−６は、グリッド・プログラム１５０−６と、オブジェクト１５２−６と、オブジェクト要求ブローカ１５４−６と、デバッグ・エージェント１５６−６と、保存デバッグ・データ１５８−６とを含む。グリッド・コンピュータ・システム・ノード１００−７は、グリッド・プログラム１５０−７と、オブジェクト１５２−７と、オブジェクト要求ブローカ１５４−７と、デバッグ・エージェント１５６−７と、保存デバッグ・データ１５８−７とを含む。グリッド・コンピュータ・システム・ノード１００−８は、グリッド・プログラム１５０−８と、オブジェクト１５２−８と、オブジェクト要求ブローカ１５４−８と、デバッグ・エージェント１５６−８と、保存デバッグ・データ１５８−８とを含む。グリッド・コンピュータ・システム・ノード１００−９は、グリッド・プログラム１５０−９と、オブジェクト１５２−９と、オブジェクト要求ブローカ１５４−９と、デバッグ・エージェント１５６−９と、保存デバッグ・データ１５８−９とを含む。クライアント・コンピュータ・システム・ノード１００−１０は、グリッド・プログラム１５０−６、１５０−７、１５０−８、１５０−９、及び１５０−１０と、オブジェクト１５２−１０と、オブジェクト要求ブローカ１５４−１０と、デバッグ・エージェント１５６−１０と、保存デバッグ・データ１５８−１０とを含む。
【００５２】
グリッド・プログラム１５０−６、１５０−７、１５０−８、１５０−９、及び１５０−１０はグリッド・プログラム１５０（図１）の例であり、総称的にグリッド・プログラム１５０で表される。オブジェクト１５２−６、１５２−７、１５２−８、１５２−９、及び１５２−１０はパケット１５２（図１）の例であり、総称的にパケット１５２で表される。オブジェクト要求ブローカ１５４−６、１５４−７、１５４−８、１５４−９、及び１５４−１０はネットワーク・リソース１５４（図１）の例であり、総称的にネットワーク・リソース１５４で表される。デバッグ・エージェント１５６−６、１５６−７、１５６−８、１５６−９、及び１５６−１０はデバッグ・エージェント１５６（図１）の例であり、総称的にデバッグ・エージェント１５６で表される。保存デバッグ・データ１５８−６、１５８−７、１５８−８、１５８−９、及び１５８−１０は保存デバッグ・データ１５８（図１）の例であり、総称的に保存デバッグ・データ１５８で表される。
【００５３】
グリッド・プログラム１５０−６、１５０−７、１５０−８、１５０−９、及び１５０−１０は、デバッグ・エージェント１５６−６、１５６−７、１５６−８、１５６−９、及び１５６−１０がデバッグする命令を含む。一実施形態において、グリッド・プログラム１５０−６、１５０−７、１５０−８、１５０−９、及び１５０−１０は全て同じものである。別の実施形態において、グリッド・プログラム１５０−６、１５０−７、１５０−８、１５０−９、及び１５０−１０のうちの幾つか又は全ては互いに異なる。
【００５４】
クライアント・コンピュータ・システム・ノード１００−１０におけるグリッド・プログラム１５０−１０は、クライアント・コンピュータ・システム・ノード１００−１０におけるプロセッサ上で実行されるコードを含む。クライアント・コンピュータ・システム・ノード１００−１０の中のグリッド・プログラム１５０−６、１５０−７、１５０−８、及び１５０−９はそれぞれ、グリッド・コンピュータ・システム・ノード１００−６、１００−７、及び１００−８、並びにグリッド・コンピュータ・システム・ノード１００−９におけるグリッド・プログラム１５０−６、１５０−７、１５０−８、及び１５０−９のコピーである。グリッド・プログラム１５０−６、１５０−７、１５０−８、及び１５０−９は、クライアント・コンピュータ・システム・ノード１００−１０においては実行されない。その代わりに、クライアント・コンピュータ・システム・ノード１００−１０は、グリッド・プログラム１５０−１０のプログラム・リスト及びその状態情報を表示することに加えて、図６を参照して以下でさらに説明されるように、デバッグを支援するために、グリッド・プログラム１５０−６、１５０−７、１５０−８、及び１５０−９のうちの１つ又は複数のプログラム・リスト及びその状態情報を表示することができる。「クライアント」という用語は便宜上で用いられているだけであり、１つのシナリオでクライアントとして動作するグリッド・コンピュータ・システム・ノードが別のシナリオではサーバとして動作することができ、その逆もまた真である。
【００５５】
オブジェクト要求ブローカ１５４−６、１５４−７、１５４−８、１５４−９、及び／又は１５４−１０は、オブジェクト１５２を、種々のグリッド・プログラム１５０−６、１５０−７、１５０−８、１５０−９、及び／又は１５０−１０によって処理させるために、グリッド・コンピュータ・システム・ノード１００−６、１００−７、１００−８、１００−９、及び／又は１００−１０のうちの種々のものに送信することができる。オブジェクトは、グリッド・コンピュータ・システム・ノードの間を何回でも移動することができる。
【００５６】
一実施形態において、ユーザは、グリッド・プログラム１５０−６、１５０−７、１５０−８、１５０−９、及び／又は１５０−１０をデバックするために、ユーザ入力／出力デバイス１２１（図１）を介してデバッグ・エージェント１５６−１０と対話する。グリッド・プログラム１５０−１０の実行が停止している間に、ユーザは、入力／出力デバイス１２１（図１）を介して入力されるデバッグ・コマンドを介して、デバッグ・エージェント１５６−１０が、オブジェクト１５２−１０又はオブジェクト１５２−１０内のいずれかの１つ又は複数のフィールド上に分散アドレス・ウォッチをセットすることを要求する。デバッグ・エージェント１５６−１０は、デバッグ・コマンドを保存デバッグ・データ１５８−１０内に保存する。次いでユーザは、ユーザ入力／出力デバイス１２１（図１）を介して、デバッグ・エージェント１５６−１０がクライアント１００−１０上で実行されるグリッド・プログラム１５０−１０を開始することを要求する。グリッド・プログラム１５０−１０が実行され、オブジェクト要求ブローカ１５４−１０を介してグリッド・コンピュータ・システム・ノード１００−６、１００−７、１００−８、及び／又は１００−９に送信するためのオブジェクト１５２−１０を作成する。デバッグ・エージェント１５６−１０は、オブジェクト１５２−１０をインターセプトし、保存されたデバッグ・コマンドとデバッグ・エージェント１５６−１０の識別子とをオブジェクト１５２−１０に付加して、オブジェクト１５２−１０をグリッド・コンピュータ・システム・ノード１００−６、１００−７、１００−８、及び／又は１００−９に送信する。
【００５７】
グリッド・コンピュータ・システム・ノード１００−６、１００−７、１００−８、又は１００−９におけるデバッグ・エージェント１５６−６、１５６−７、１５６−８、又は１５６−９は、オブジェクト要求ブローカ１５４−６、１５４−７、１５４−８、又は１５４−９を介してオブジェクト１５２−１０をインターセプトし、デバッグ・コマンド及びデバッグ・エージェント１５６−１０の識別子をオブジェクト１５２−１０から除去し、デバッグ・コマンド及びデバッグ・エージェント１５６−１０の識別子を保存デバッグ・データ１５８−６、１５８−７、１５８−８、又は１５８−９内に保存し、分散アドレス・ウォッチをオブジェクト１５２−１０上にセットし、次いで、オブジェクト１５２−１０を処理のためにグリッド・プログラム１５０−６、１５０−７、１５０−８、又は１５０−９に転送する。
【００５８】
グリッド・プログラム１５０−６、１５０−７、１５０−８、又は１５０−９の実行がオブジェクト１５２−１０又はオブジェクト１５２−１０内の１つ又は複数のフィールドを変更したことに応答して、デバッグ・エージェント１５６−６、１５６−７、１５６−８、又は１５６−９は、グリッド・プログラム１５０−６、１５０−７、１５０−８、又は１５０−９の実行を停止し、保存デバッグ・データ１５８−６、１５８−７、１５８−８、又は１５８−９の中からデバッグ・エージェント１５６−１０の識別子を見つけ出し、停止されたグリッド・プログラム１５０−６、１５０−７、１５０−８、又は１５０−９の状態をデバッグ・エージェント１５６−１０に送信する。デバッグ・エージェント１５６−１０は、コンピュータ・システム・ノード１００−６、１００−７、１００−８、又は１００−９において実行中にオブジェクト１５２−１０を変更したグリッド・プログラム１５０−６、１５０−７、１５０−８、又は１５０−９のコピーを見つけ出し、グリッド・プログラム１５０−６、１５０−７、１５０−８、又は１５０−９のコピーを状態情報と共に表示する。
【００５９】
図４は、本発明の一実施形態の選択された構成要素の対話を図示するブロック図を示す。デバッグ・エージェント１５６は、デバッグ・ユーザ・インターフェース４５４と、パーサ４５８と、インタープリタ４６０と、ブレークポイント・トラップ・ハンドラ４６４と、デバッグ・フック４６６とを含む。デバッグ・ユーザ・インターフェース４５４、パーサ４５８、インタープリタ４６０、ブレークポイント・トラップ・ハンドラ４６４、及びデバッグ・フック４６６は、プロセッサ１０１上で実行される命令、又はプロセッサ上で実行される命令によって解釈されるステートメントを含む。別の実施形態において、デバッグ・ユーザ・インターフェース４５４、パーサ４５８、インタープリタ４６０、ブレークポイント・トラップ・ハンドラ４６４、及びデバッグ・フック４６６は、プロセッサ・ベースのシステムの代わりに、又はこれに加えて、電子回路、論理ゲート、及び／又はチップによってハードウェアに実装される。
【００６０】
デバッグ・ユーザ・インターフェース４５４は、ユーザ入力／出力デバイス１２１を介してユーザと対話することによって、確立すべきブレークポイント及びアドレス・ウォッチを提供する。幾つかの実施形態において、ユーザは、物理ストレージ・アドレスをそこから相互参照することができる、プログラム１５０（図１）内の高水準言語（ＨＬＬ）参照、例えば行番号若しくはステートメント番号又はプログラム名若しくはモジュール名のようなソフトウェア・オブジェクト参照を参照するデバッガ・コマンドを発行することによって、これらのブレークポイントを定めることができる。種々の実施形態において、デバッガ・コマンドは、コマンド・ライン上で、又はグラフィカル・ユーザ・インターフェースを通じて、発行することができる。
【００６１】
パーサ４５８は、デバッグ・ユーザ・インターフェース４５４からのデバッグ・コマンドを構文解析してコードを作成し、このコードをインタープリタ４６０がプロセッサ１０１上での実行のために解釈する。パーサ４５８は、プログラム１５０と共に格納されたコンパイラ又はインタープリタによって生成されたテーブルを用いてデバッグ・コマンドを構文解析し、デバッグ・コマンド内のコード行番号、コード・ステートメント番号、変数名、オブジェクト名、又はフィールド名をメモリ１０２内の実際の物理ストレージ・アドレスに対してマッピングする。インタープリタ４６０は、この物理ストレージ・アドレスをメモリ内に、例えばブレークポイント・テーブル内に格納する。インタープリタ４６０はさらに、プログラム１５０内にブレークポイントをセットするため、及びプロセッサ機能を介してアドレス・ウォッチを確立するためのプログラムを動作させる。一実施形態において、インタープリタ４６０は、ブレークポイント命令を無効な命令に置き換えることによって、プログラム内のブレークポイント命令のところにブレークポイントをセットし、これがプロセッサ上で実行されたときに、プログラム１５０の実行を停止させ、プロセッサがシステム例外又は割り込みをブレークポイント・トラップ・ハンドラ４６４へと送信するようにさせる。
【００６２】
ユーザがブレークポイント及び／又はアドレス・ウォッチをセットすることを要求した後、ユーザは、デバッグ・ユーザ・インターフェース４５４に、プログラム１５０の実行を再開させることを要求する入力を与える。プログラム１５０の実行は、ブレークポイントとの遭遇、又はアドレス・ウォッチが確立されているストレージ位置における内容の変更を最終的にもたらし、これが、システム例外又は割り込みを発生させる。ブレークポイント・トラップ・ハンドラ４６４は、例外又は割り込みを受信し、例外又は割り込みに関する情報をデバッグ・フック４６６に渡す。
【００６３】
次いで、デバッグ・ユーザ・インターフェース４５４が、デバッガ・コマンドを取得するためにデバッグ・フック４６６を利用する。デバッグ・フック４６６は、デバッグ・ユーザ・インターフェース４５４とブレークポイント・トラップ・ハンドラ４６４との間にインターフェースが必要な事例について図示されている。一実施形態において、デバッグ・フック４６６は、図示していない結果バッファを利用して、デバッグ・ユーザ・インターフェース４５４のためのデータをキャッシュすることができる。
【００６４】
デバッグ・ユーザ・インターフェース４５４を介して入力された、ブレークポイント命令に遭遇したプログラムの実行の後でプログラムの実行の再開を要求するコマンドに応答して、インタープリタ４６０は、ブレークポイント位置にある無効な命令をプログラム１５０の元の有効な命令で置き換え、プロセッサ１０１上で実行されるプログラム１５０を再び開始する。
【００６５】
図５は、本発明の一実施形態による、ユーザＩ／Ｏデバイス１２１上に表示される例示的なデバッグ・ユーザ・インターフェースのブロック図を示す。例示的なデバッグ・ユーザ・インターフェースは、クライアント１００−５（図２）又は１００−１０（図３）において、ユーザＩ／Ｏデバイス１２１を介して表示される。
【００６６】
例示的なデバッグ・ユーザ・インターフェースは、プログラム・リスト５００と、プログラム・リスト（program listing）コマンド５８０、５８２、及び５８４と、セット・ブレークポイント（set breakpoint）コマンド５４５と、セット分散アドレス・ウォッチ（setdistributed address watch）コマンド５５０と、ラン・コマンド５５５と、イネーブル・デバッグ（enable debug）コマンド５６０と、ディスエーブル・デバッグ（disabledebug）コマンド５６５とを含む。種々のコマンド５８０、５８２、５８４、５５５、５６０、及び５６５は、表示デバイス上に表示されたボタンとして図示されており、これらはマウス、タッチパッド、トラックパッド、ポインティング・デバイス、又はキーボードのような入力デバイスを介して選択されるが、他の実施形態において、コマンドは、ダイアル、スライダ、ウィジェット、メニュー・オプション、ライン・コマンド、マイクロフォンと音声認識コマンドとを介して入力されるコマンド、又は任意の他の適切なタイプのユーザ入力として実装することができる。コマンド５４５及び５５０はライン・コマンドとして図示されているが、他の実施形態において、コマンド５４５及び５５０は、ボタン、ダイアル、スライダ、ウィジェット、メニュー・オプション、マイクロフォンと音声認識コマンドとを介して入力されるコマンド、又は任意の他の適切なタイプのユーザ入力として実装することができる。
【００６７】
プログラム・リスト５００は、プログラム１５０−１、１５０−２、１５０−３、１５０−４、１５０−５、１５０−６、１５０−７、１５０−８、１５０−９、又は１５０−１０内のソース及び／又はオブジェクト・コード・ステートメント又は命令のリストを表示する。プログラムの実行が停止された場合には、プログラム・リストはさらに、プログラムの実行が停止されたステートメント番号又は命令番号の指標５０５を含む。
【００６８】
プログラム・リスト・コマンド５８０、５８２、及び５８４は、デバッグ・エージェント１５６がプログラム・リスト５００をプログラム１５０−１、１５０−２、１５０−３、１５０−４、１５０−５、１５０−６、１５０−７、１５０−８、１５０−９、又は１５０−１０の間で変更することを要求する。プログラム・リスト・コマンド５８０、５８２、及び５８４に応答して、デバッグ・エージェント１５６は選択されたプログラムについてのプログラム・リストを表示し、これは、もしあれば、表示されたプログラムが実行されたコンピュータにおいてプログラムの実行が停止したステートメント番号又は命令番号の指標を含む。表示されたプログラムが実行されるコンピュータ・システム・ノードは、プログラム・リストが表示されるクライアントと同じでもよく、又は異なっていてもよい。
【００６９】
ブレークポイント・コマンド５４５は、デバッグ・エージェント１５６がコンピュータ・システム・ノードにおけるプログラム内の位置にブレークポイントをセットすることを要求する。ブレークポイントがセットされることが要求されるコンピュータ・システム・ノードは、ブレークポイント・コマンド５４５が発行されるクライアントと同じでもよく、又は異なっていてもよい。コマンドは、ステートメント番号若しくは命令番号によって、又は機能、モジュール、メソッド若しくはプロシージャによって、位置を指定することができる。
【００７０】
セット分散アドレス・ウォッチ・コマンド５５０は、デバッグ・エージェント１５６が、オブジェクトが格納されている又は将来格納されることになる１つのコンピュータ・システム・ノード又は全てのコンピュータ・システム・ノードにおいてメモリ・アドレス上にウォッチを確立することを要求する。アドレス・ウォッチがセットされることが要求されるコンピュータ・システム・ノードは、アドレス・ウォッチ・コマンド５５０が発行されるクライアントと同じでもよく、又は異なっていてもよい。分散アドレス・ウォッチ・コマンドは、オブジェクト名、ポインタ名、変数名、フィールド名、又はファイル名によってアドレスを指定することができる。分散アドレス・ウォッチ・コマンド５５０に応答して、デバッグ・エージェント１５６は、指定されたコンピュータ・システム・ノード又は全てのコンピュータ・システム・ノードにおけるプロセッサ内にアドレス・ウォッチ機能をセットし、これが、デバッグ・エージェント１５６が指定したアドレスにおけるメモリの内容をプロセッサが変更したときに、プロセッサに割り込み又はシステム例外を生じさせる。プログラムがアドレス・ウォッチによって指定されたストレージ位置の内容を変更するのに応答して、デバッグ・エージェント１５６は、ストレージを変更している命令のところでプログラムを止める。したがって、アドレス・ウォッチブレークポイント命令は、アドレス・ウォッチ・ブレークポイントとして監視されているメモリ・ページ内の位置にアクセスするロード又はストア命令である。
【００７１】
ラン・コマンド５５５は、どのコンピュータ・システム・ノードにおいてプログラムが実行されているかに関わりなく、プログラム・リスト５００によって表示されている停止されたプログラムの実行を再開することを要求する。ラン・コマンドに応答して、デバッグ・エージェント１５６は、停止されたプログラムの実行を再び開始する。デバッグ・ユーザ・インターフェースは、他のデバッグ・コマンド、例えば、停止されたプログラムを１つの命令又は指定された任意の数の命令にわたって実行することを要求するステップ・コマンドを含むことができる。
【００７２】
イネーブル・デバッグ・コマンド５６０は、デバッグ処理をイネーブルにすることを要求する。イネーブル・デバッグ・コマンド５６０に応答して、デバッグ・エージェント１５６は、ネットワーク・リソース１５４内のインストルメンテーション・コードをイネーブルにする。インストルメンテーション・コードは、パケット又はオブジェクト１５２をコンピュータ・システム・ノードに送信する／又はコンピュータ・システム・ノードから受信する要求の実行に応答して、デバッグ・エージェント１５６を呼び出す。
【００７３】
ディスエーブル・デバッグ・コマンド５６５は、デバッグ処理をオフにする又は停止することを要求する。ディスエーブル・デバッグ・コマンド５６５に応答して、デバッグ・エージェント１５６は、ネットワーク・リソース１５４内のインストルメンテーション・コードをディスエーブルにするので、もはやインストルメンテーション・コードは、パケット又はオブジェクト１５２をコンピュータ・システム・ノードに送信する／又はコンピュータ・システム・ノードから受信する要求の実行に応答してデバッグ・エージェント１５６を呼び出さないようになる。
【００７４】
図６は、本発明の一実施形態による、ユーザＩ／Ｏデバイス１２１上に表示される例示的なデバッグ・ユーザ・インターフェースのブロック図を示す。図６に図示される例示的なデバッグ・ユーザ・インターフェースは、クライアント１００−５（図２）又は１００−１０（図３）においてユーザＩ／Ｏデバイス１２１を介して表示される。
【００７５】
図６の例示的なデバッグ・ユーザ・インターフェースは、プログラム・リスト６００と、ディスプレイ状態（display state）コマンド６０５と、プログラム・リスト６００によって表されるサーバ・プログラム１５０−１（図２）の状態６１０の表示とを含む。プログラム・リスト６００は、プログラム・リスト６００が表示されるクライアント・コンピュータ・システム・ノード１００−５とは異なるコンピュータ・システム・ノードであるコンピュータ・システム・ノードＡ１００−１において実行されるサーバ・プログラム１５０−１（図２）内のソース及び／又はオブジェクト・コード・ステートメント又は命令のリストを表示する。クライアント・コンピュータ・システム・ノード１００−５におけるデバッグ・エージェント１５６は、プログラム・リスト・コマンド５８２に応答して、プログラム・リスト６００を表示する。
【００７６】
図６の例において、状態６１０は、サーバ・コンピュータ・システム・ノードＡ１００−１において実行されるプログラム１５０−１によって読み出される又は書き込まれる、変数「Ｊ」と名づけられた、サーバ・コンピュータ・システム・ノードＡ１００−１におけるメモリ位置の内容である。他の実施形態において、状態６１０は、いずれかのサーバ・コンピュータ・システム・ノード又はグリッド・コンピュータ・システム・ノードにおいて実行されるプログラムによって読み出される又は書き込まれるいずれかの変数、パラメータ、メモリ位置、ポインタ、データ構造体、ファイル、レジスタ、データベース・フィールド、又はレコードの内容とすることができる。一実施形態において、状態６１０は、ブレークポイントに遭遇した又はアドレス・ウォッチによって監視されているアドレスにおける内容を変更したステートメント又は命令の識別子、及びブレークポイントに遭遇した又はアドレス・ウォッチによって監視されているアドレスにおける内容を変更したプログラムのスレッドの識別子を含むことができる。プログラムの実行スレッドは、プログラムの２つ又はそれ以上の並列に動作するタスク又はスレッドの分岐の結果生じる。一実施形態において、複数のスレッドはメモリなどのリソースを共用するが、別の実施形態において、スレッドはメモリを共用しない。一実施形態において、複数のスレッドを異なるプロセッサにおいて同時に又は並列に実行することができる。別の実施形態において、複数のスレッドは時分割多重方式又はマルチタスク方式によって単一のプロセッサ上で実行され、この場合、単一のプロセッサは、スレッドが同時に実行されているとユーザが認識するほど十分に頻繁に生じるコンテキスト・スイッチを通じて異なるスレッド間での切り換えを行う。
【００７７】
他の実施形態において、状態６１０は、プログラム・リスト６００にリストが表示されているプログラムのコール・スタック、実行スタック、ラン・タイム・スタック、関数スタック、又は呼び出しスタックとすることができる。コール・スタックは、サブルーチンのリターン・アドレス（サブルーチンが終了した後で命令が戻る位置）、サブルーチンによって読み出し又は書き込みされるローカル変数の値、サブルーチンに渡されるパラメータ、数値演算又は論理演算のオペランドの評価スタック、サブルーチンの現在のインスタンスへのポインタ、エンクローズされたサブルーチンのコンテキスト、及び／又はサブルーチンの特権又は権限レベルのうちの幾つか又は全てを含む、実行中のプログラムのアクティブなメソッド、プロシージャ、又はサブルーチンの情報を格納する。
【００７８】
図７は、本発明の一実施形態による例示的な保存デバッグ・データ１５８のブロック図を示す。保存デバッグ・データ１５８は、保存デバッグ・データ１５８−１、１５８−２、１５８−３、１５８−４、１５８−５、１５８−６、１５８−７、１５８−８、１５８−９、及び１５８−１０の例であり、これらを総称的に表す。種々の実施形態において、かつ種々の時点において、保存デバッグ・データ１５８−１、１５８−２、１５８−３、１５８−４、１５８−５、１５８−６、１５８−７、１５８−８、１５８−９、及び１５８−１０の各々は異なるデータを含んでいてもよく、又はその幾つか若しくは全てが同一又は部分的に同一のデータを含んでいてもよい。
【００７９】
例示的な保存デバッグ・データ１５８は、例示的な行７０２及び７０４を含み、その各々がデバッグ・コマンド・フィールド７１０と、クライアント・コンピュータ・システム・デバッグ・エージェント識別子フィールド７１２と、処理コンピュータ・システム・ノード識別子フィールド７１４とを含む。デバッグ・コマンド・フィールド７１０は、同じ行内のクライアント・コンピュータ・システム・デバッグ・エージェント識別子フィールド７１２によって識別されるクライアント・デバッグ・エージェントがユーザ・インターフェースから受信したデバッグ・コマンドを格納する。一実施形態において、クライアント・コンピュータ・システム・デバッグ・エージェント識別子フィールド７１２は、デバッグ・エージェント１５６、並びに、クライアント・デバッグ・エージェントが実行されるクライアント・コンピュータ・システム・ノード又はクライアント・コンピュータ・システム・ノードのネットワーク・アドレスの両方を識別する。
【００８０】
処理コンピュータ・システム・ノード識別子フィールド７１４は、同じ行内のデバッグ・コマンドを処理、実行、又は実施すべきことをユーザがユーザ・インターフェースを介して要求したコンピュータ・システム・ノードの識別子を格納する。例えば、行７０２は、クライアント・コンピュータ・システム・ノード７１２「ノードＥ」におけるユーザ・インターフェースから受信したデバッグ・コマンド７１０「パケットを受信したときにブレークポイントをセットする」が、パケットを受信する処理コンピュータ・システム・ノード７１４「ノードＡ、ノードＢ、及びノードＣ」内のステートメントにブレークポイントをセットすることを要求することを示す。別の例として、行７０４は、クライアント・コンピュータ・システム・ノード７１２「ノードＥ」におけるユーザ・インターフェースから受信したデバッグ・コマンド７１０「オブジェクトＡの全てのフィールドに対して分散アドレス・ウォッチをセットする」が、全てのコンピュータ・システム・ノードにおいてアドレス・ウォッチ機能を確立することを要求することを示す。
【００８１】
図８は、本発明の一実施形態によるイネーブル・デバッグ・コマンドについての例示的な処理のフローチャートを示す。制御はブロック８００において開始する。
【００８２】
制御は次にブロック８０５へと続き、クライアントにおけるデバッグ・エージェント１５６がデバッグ・ユーザ・インターフェースからイネーブル・デバッグ・コマンド５６０を受信する。イネーブル・デバッグ・コマンド５６０に応答して、制御は次にブロック８１０へと続き、クライアント・コンピュータ・システム・ノードにおけるデバッグ・エージェント１５６が、クライアント・コンピュータ・システム・ノード及び全てのサーバ・コンピュータ・システム・ノード又はグリッド・コンピュータ・システム・ノードにおけるネットワーク・リソース１５４又はオブジェクト要求ブローカにおいてインストルメンテーション・コードをイネーブルにするか、オンにするか、又は付加する。一実施形態において、デバッグ・エージェント１５６は、全てのサーバ・コンピュータ・システム・ノード又はグリッド・コンピュータ・システム・ノードに対して、それぞれのネットワーク・リソース１５４又はオブジェクト要求ブローカにおいてインストルメンテーション・コードを付加するか、オンにするか、又はイネーブルにするように命令する要求を送信する。サーバ・コンピュータ・システム・ノード又はグリッド・コンピュータ・システム・ノードにおけるデバッグ・エージェント１５６は、要求を受信し、これに応答して、それぞれのネットワーク・リソース１５４又はオブジェクト要求ブローカにおいてインストルメンテーション・コードを付加するか、オンにするか、又はイネーブルにする。制御は次にブロック８９９へと続き、図８の論理が戻る。
【００８３】
図９は、本発明の一実施形態によるディスエーブル・デバッグ・コマンドについての例示的な処理のフローチャートを示す。制御はブロック９００において開始する。制御は次にブロック９０５へと続き、クライアント・コンピュータ・システム・ノードにおけるデバッグ・エージェント１５６が、デバッグ・ユーザ・インターフェースからディスエーブル・デバッグ・コマンド５６５を受信する。ディスエーブル・デバッグ・コマンドに応答して、制御は次にブロック９１０へと続き、クライアント・コンピュータ・システム・ノードにおけるデバッグ・エージェント１５６が、クライアント・コンピュータ・システム・ノード及び全てのサーバ・コンピュータ・システム・ノード又はグリッド・コンピュータ・システム・ノードにおけるネットワーク・リソース１５４又はオブジェクト要求ブローカにおいてインストルメンテーション・コードをディスエーブルにするか、オフにするか、又は除去する。一実施形態において、デバッグ・エージェント１５６は、全てのサーバ・コンピュータ・システム・ノード又はグリッド・コンピュータ・システム・ノードに対して、それぞれのネットワーク・リソース１５４又はオブジェクト要求ブローカにおいてインストルメンテーション・コードを除去するか、オフにするか、又はディスエーブルにするように命令する要求を送信する。サーバ・コンピュータ・システム・ノード又はグリッド・コンピュータ・システム・ノードにおけるデバッグ・エージェント１５６は、要求を受信し、これに応答して、それぞれのネットワーク・リソース１５４又はオブジェクト要求ブローカにおいてインストルメンテーション・コードを除去するか、オフにするか、又はディスエーブルにする。制御は次にブロック９９９へと続き、図９の論理が戻る。
【００８４】
図１０は、本発明の一実施形態によるブレークポイント及び分散アドレス・ウォッチ・コマンドについての例示的な処理のフローチャートを示す。制御はブロック１０００において開始する。制御は次にブロック１００５へと続き、クライアントにおけるデバッグ・エージェント１５６が、セット・ブレークポイント・コマンド５４５、セット分散アドレス・ウォッチ・コマンド５５０、ラン・コマンド５５５、又は任意の他の適切なデバッグ・コマンドといったデバッグ・コマンドをデバッグ・ユーザ・インターフェースから受信する。
【００８５】
デバッグ・コマンドの受信に応答して、制御は次にブロック１０１０へと続き、デバッグ・コマンドがクライアントにおいて実施されることをデバッグ・コマンドが指定している場合、又はデバッグ・コマンドが全てのコンピュータ・システム・ノードにおいて実施されることをデバッグ・コマンドが指定している場合には、デバッグ・エージェント１５６は、そのデバッグ・コマンドを実施又は実行し、例えば、クライアント・コンピュータ・システム・ノードにおいて実行されるプログラム内にブレークポイントをセットし、クライアント・コンピュータ・システム・ノードに格納されたオブジェクトに対してアドレス・ウォッチをセットし、クライアント・コンピュータ・システム・ノードにおいて実行されるプログラムを開始し、又はクライアント・コンピュータ・システム・ノードにおけるプログラムを１つの命令若しくはステートメント毎に又は指定された数の命令若しくはステートメント毎にステップで実行する。
【００８６】
デバッグ・コマンドがクライアント・コンピュータ・システム・ノードとは異なるサーバ／グリッド・ノードを指定している場合、又はデバッグ・コマンドが全てのノードを指定している場合には、クライアント・コンピュータ・システム・ノードにおけるデバッグ・エージェント１５６は、受信したデバッグ・コマンド（セット・ブレークポイント・コマンド、セット分散アドレス・ウォッチ・コマンド、ラン・コマンド、又はステップ・コマンド）、クライアント・デバッグ・エージェント１５６の識別子、及び処理ノード（デバッグ・コマンドが実施される、１つ又は複数の指定されたサーバ若しくはグリッド・コンピュータ・システム・ノード又は全てのノード）の識別子を、クライアント・コンピュータ・システム・ノードのメモリ内の保存デバッグ・データ１５８に保存する
【００８７】
制御は次にブロック１０９９へと続き、図１０の論理が戻る。
【００８８】
図１１は、本発明の一実施形態による、データ・パケットを送信するための例示的な処理のフローチャートを示す。制御はブロック１１００において開始する。
【００８９】
制御は次にブロック１１０５へと続き、クライアント・コンピュータ・システム・ノード又はいずれかのサーバ・コンピュータ・システム・ノード若しくはグリッド・コンピュータ・システム・ノードにおけるプログラムが、データのパケット１５２を作成するか、オブジェクトを作成するか、又は（図１２のブロック１２４０を参照して以下でより詳細に説明されるように）以前に別のコンピュータ・システム・ノードから受信した既存のパケット／オブジェクトを見つけ出し、そのパケット１５２又はオブジェクトをネットワーク・リソース１５４又はオブジェクト要求ブローカに送信する。パケットは、そのパケットの宛先コンピュータ・ノードを識別する宛先コンピュータ・ノード識別子を指定する。宛先ノード識別子によって識別される宛先コンピュータは、その宛先コンピュータにおいて実行される、パケットを受信及び処理することが意図されるプログラムを含む。制御は次にブロック１１１０へと続き、ネットワーク・リソース１５４又はオブジェクト要求ブローカが、自身のインストルメンテーション・コードがイネーブルにされているか又は存在しているかどうかを判定する。
【００９０】
ブロック１１１０における判定が真である場合には、インストルメンテーション・コードはイネーブルにされているか又は存在しているので、制御はブロック１１１５へと続き、ネットワーク・リソース１５４又はオブジェクト要求ブローカ内のインストルメンテーション・コードが、パケット１５２又はオブジェクトをネットワークを介して宛先コンピュータ・システム・ノード（宛先コンピュータ・ノード識別子によって識別される）に送信する代わりに、パケット１５２又はオブジェクトを（ネットワーク・リソース１５４と同じコンピュータ・ノードにある）デバッグ・エージェント１５６に送信する。制御は次にブロック１１２０へと続き、デバッグ・エージェント１５６が、パケット１５２又はオブジェクトを受信し、これに応答して、デバッグ・エージェント１５６のコンピュータ・システム・ノードになんらかの保存デバッグ・データ１５８が存在するかどうかを判定する。
【００９１】
ブロック１１２０における判定が真である場合には、保存デバッグ・データ１５８がデバッグ・エージェント１５６のコンピュータ・システム・ノードに存在しているので、制御はブロック１１２５へと続き、デバッグ・エージェント１５６は、保存デバッグ・データ１５８から、クライアント・デバッグ・エージェントの保存された識別子７１２と、そのデバッグ・コマンドについての１つ若しくは複数の処理ノードの保存された識別子７１４又は全てのノードの指標と、保存されたデバッグ・コマンド７１０とを、保存デバッグ・データ１５８内の全ての行について、パケット１５２又はオブジェクトに付加する。一実施形態において、処理ノード識別子は、パケットが送信されるコンピュータ・ノードを識別する宛先ノード識別子と同一である。別の実施形態において、処理ノード識別子は、宛先ノード識別子とは異なる。処理ノード識別子と宛先ノード識別子は、パケット又はオブジェクトが複数のノード間で送信される実施形態においては異なることがある。
【００９２】
例えば、図２において、クライアント・コンピュータ・システム・ノード１００−５におけるユーザが、サーバ１００−１、１００−２、又は１００−３のうちの１つ又は複数にブレークポイント又はアドレス・ウォッチをセットすることを望むが、負荷バランサ・サーバ・ノード１００−４にはセットすることを望まない場合であっても、クライアント・コンピュータ・システム・ノード１００−５からのパケットは最初に負荷バランサ・サーバ・ノード１００−４に送信され、そこから他のノードに送信される。したがって、クライアント・コンピュータ・システム・ノード１００−５がパケットを送信する宛先ノードは負荷バランサ・サーバ・ノード１００−４なので、クライアント・コンピュータ・システム・ノード１００−５におけるプログラム１５０−５は、パケット内の宛先ノード識別子が負荷バランサ・サーバ・ノード１００−４を示すようにセットするが、デバッグ・エージェント１５６−５は、処理ノード識別子７１４を、ユーザがブレークポイント又はアドレス・ウォッチをセットすることを望むサーバ１００−１、１００−２、及び／又は１００−３を示すようにセットする。
【００９３】
別の例として、図３において、クライアント・グリッド・ノード１００−１０におけるユーザが、グリッド・ノード１００−７にブレークポイント又はアドレス・ウォッチをセットすることを望むが、グリッド・プログラム１５０−１０がオブジェクトをグリッド・ノード１００−９に送信する場合がある。グリッド・ノード１００−９はその後、オブジェクトをグリッド・ノード１００−６に送信し、グリッド・ノード１００−６はオブジェクトをグリッド・ノード１００−８に送信し、グリッド・ノード１００−８は最終的にオブジェクトをグリッド・ノード１００−７に送信する。したがって、クライアント・グリッド・ノード１００−１０におけるデバッグ・エージェント１５６−１０は処理ノード識別子７１４をグリッド・ノード１００−７を示すようにセットするが、グリッド・プログラム１５０−１０はオブジェクト内の宛先ノード識別子をグリッド・ノード１００−９を示すようにセットする。
【００９４】
クライアント・デバッグ・エージェントの保存された識別子７１２は、保存されたデバッグ・コマンド７１０を最初に要求したクライアント・コンピュータ・システム・ノードにおけるクライアント・デバッグ・エージェントを識別し、このクライアント・コンピュータ・システム・ノードは、図１１の論理を現在実行中のコンピュータ・システム・ノードとは異なっていてもよいが必ずしも異なっているとは限らない。デバッグ・エージェント１５６は、保存デバッグ・データ１５８内の全てのレコード（全ての保存されたデバッグ・コマンド）にわたってブロック１１２５の処理を実施する。
【００９５】
制御は次にブロック１１３０に続き、デバッグ・エージェント１５６は、パケット１５２又はオブジェクトを、クライアント・デバッグ・エージェント１５６の識別子、デバッグ・コマンド、及びデバッグ・コマンドのための処理ノード識別子と共に、パケット／オブジェクトの宛先サーバ・コンピュータ・システム・ノード又は宛先グリッド・コンピュータ・システム・ノードに送信する。制御は次にブロック１１９９へと続き、図１１の論理が戻る。
【００９６】
ブロック１１２０における判定が偽である場合には、そのコンピュータ・システム・ノードにおける保存デバッグ・データ内に保存されたデバッグ・コマンドは存在していないので、制御はブロック１１３０へと続き、デバッグ・エージェント１５６は、保存されたデバッグ・コマンドも、保存された処理ノード識別子も、保存されたクライアント・デバッグ・エージェント識別子もパケット１５２又はオブジェクトに付加することなく、パケット１５２又はオブジェクトを宛先コンピュータ・システム・ノードに送信する。制御は次にブロック１１９９に続き、図１１の論理が戻る。
【００９７】
ブロック１１１０における判定が偽である場合には、ネットワーク・リソース１５４又はオブジェクト要求ブローカの中にインストルメンテーション・コードは存在しないか又はイネーブルにされていないので、制御はブロック１１３５へと続き、ネットワーク・リソース１５４又はオブジェクト要求ブローカは、パケット／オブジェクトをデバッグ・エージェントに送信することなく、また保存されたデバッグ・コマンドも、保存された処理ノード識別子も、保存されたクライアント・デバッグ・エージェント識別子もパケット１５２又はオブジェクトに付加することなく、パケット１５２又はオブジェクトを宛先コンピュータ・システム・ノードに送信する。制御は次にブロック１１９９へと続き、図１１の論理が戻る。
【００９８】
図１２は、本発明の一実施形態による、データ・パケット又はオブジェクトをネットワークから受信するための例示的な処理のフローチャートを示す。制御はブロック１２００において開始する。
【００９９】
制御は次にブロック１２０５へと続き、受信コンピュータ・ノードにおける（いずれかのクライアント・コンピュータ・システム・ノード又はいずれかのサーバ／グリッド・コンピュータ・システム・ノードにおける）ネットワーク・リソース１５４又はオブジェクト要求ブローカが、起点コンピュータ・システム・ノードからネットワーク１３０を介してパケット１５２又はオブジェクトを受信する。
【０１００】
制御は次にブロック１２１０へと続き、ネットワーク・リソース１５４又はオブジェクト要求ブローカは、受信したパケット１５２又はオブジェクトが、デバッグ・コマンド（例えば、セット・ブレークポイント・コマンド、セット・アドレス・ウォッチ・コマンド、ラン・コマンド、又はステップ・コマンド）、デバッグ・コマンドを始動したクライアント・デバッグ・エージェント１５６の識別子、及びデバッグ・コマンドが実施される処理ノードの識別子を含むかどうかを判定する。
【０１０１】
ブロック１２１０における判定が真である場合には、受信したパケット１５２又はオブジェクトはデバッグ・コマンド、クライアント・デバッグ・エージェント１５６の識別子、及び処理ノード識別子を含んでいるので、制御はブロック１２１５へと続き、ネットワーク・リソース１５４又はオブジェクト要求ブローカ内のインストルメンテーション・コードが、受信したパケット１５２又はオブジェクトを、パケット／オブジェクトをローカル・コンピュータ・システム・ノードにおけるグリッド／サーバ・プログラムに送信する代わりに、インストルメンテーション・コード及びデバッグ・エージェントが実行される、ローカル・コンピュータ・システム・ノードにおけるデバッグ・エージェント１５６に送信する。
【０１０２】
制御は次にブロック１２２０へと続き、デバッグ・エージェント１５６が、パケット／オブジェクト１５２を受信し、デバッグ・コマンド、クライアント・デバッグ・エージェント１５６の識別子、及び処理ノード識別子をパケット／オブジェクト１５２から除去する。制御は次にブロック１２２５に続き、デバッグ・エージェント１５６は、除去されたデバッグ・コマンド、除去された処理ノード識別子、及び除去されたクライアント・デバッグ・エージェントの識別子を保存デバッグ・データ１５８に保存する。
【０１０３】
制御は次にブロック１２３０へと続き、デバッグ・エージェント１５６は、受信コンピュータ・ノード（ネットワーク・リソース及びデバッグ・エージェントが実行されるノード）の受信コンピュータ・ノード識別子が、パケット１５２又はオブジェクト内の処理ノード識別子と合致する（その処理ノード識別子と同一である、その処理ノード識別子に含まれる若しくは包含される、又はそのうちの１つである）かどうかを判定する。ブロック１２３０における判定が真である場合には、受信コンピュータ・ノード識別子は処理ノード識別子と合致しているので、制御はブロック１２３５へと続き、デバッグ・エージェント１５６が、除去及び保存されたデバッグ・コマンドを実行又は実施する。例えば、デバッグ・エージェント１５６は、ローカル・プログラム内にブレークポイントをセットし、受信コンピュータ・ノード内のメモリ位置にアドレス・ウォッチを確立し、又は受信コンピュータ・ノードにおけるローカル・プログラムの実行を開始させ、又は指定の数の命令若しくはステートメント毎にステップで実行させる。制御は次にブロック１２４０へと続き、デバッグ・エージェント１５６は、パケット１５２又はオブジェクトを、そのデバッグ・エージェント１５６の受信コンピュータ・システム・ノードにおけるローカル・プログラムに、除去されたデバッグ・コマンド、除去された処理ノード識別子、及び除去されたクライアント・エージェント識別子なしで送信する。ローカル・プログラムは、同じ受信コンピュータ・ノードで実行され、パケット／オブジェクト１５２を、例えばデータの読み出し若しくは書き込みを行うことによって、又はパケット／オブジェクト１５２によって指示される要求若しくはコマンドを実施することによって、受信及び処理する。プログラムの処理は、上記で図１１を参照して説明されたように、パケット／オブジェクト１５２を別のコンピュータ・システム・ノードに送信するよう要求することを含むことができる。
【０１０４】
制御は次にブロック１２９９へと続き、図１２の論理が戻る。
【０１０５】
ブロック１２３０における判定が偽である場合には、パケット／オブジェクトを受信した受信コンピュータ・ノードの受信コンピュータ・ノード識別子は、パケット／オブジェクト内のデバッグ・コマンドの処理ノード識別子と合致していないので、制御はブロック１２４０へと続き、デバッグ・エージェント１５６は、パケット／オブジェクト１５２を、そのデバッグ・エージェント１５６の受信コンピュータ・システム・ノードにおけるローカル・プログラムに、除去されたデバッグ・コマンド、除去された処理ノード識別子、及び除去されたクライアント・エージェント識別子なしで送信し、デバッグ・エージェント１５６は除去されたデバッグ・コマンドを実行又は実施しない。ローカル・プログラムは同じコンピュータ・ノードで実行され、パケット１５２又はオブジェクトを、例えばデータの読み出し若しくは書き込みを行うことによって、又はパケット／オブジェクト１５２によって指示される要求若しくはコマンドを実施することによって、受信及び処理する。プログラムの処理は、上記で図１１を参照して説明されたように、パケット／オブジェクト１５２を別のコンピュータ・システム・ノードに送信するよう要求することを含むことができる。制御は次にブロック１２９９へと続き、図１２の論理が戻る。
【０１０６】
ブロック１２１０における判定が偽である場合には、受信したパケット／オブジェクト１５２はデバッグ・コマンド、処理ノード識別子、及びクライアント・デバッグ・エージェント１５６の識別子を含んでいないので、制御はブロック１２４５へと続き、ネットワーク・リソース１５４又はオブジェクト要求ブローカは、パケット／オブジェクト１５２をデバッグ・エージェント１５６に送信することなく、同じコンピュータ・ノード（受信コンピュータ・ノード）にあるローカル・プログラムに送信する。ローカル・プログラムは同じ受信コンピュータ・ノードで実行され、パケット１５２又はオブジェクトを、例えばデータの読み出し若しくは書き込みを行うことによって、又はパケット／オブジェクト１５２によって指示される要求若しくはコマンドを実施することによって、受信及び処理する。プログラムの処理は、上記で図１１を参照して説明されたように、パケット／オブジェクト１５２を別のコンピュータ・システム・ノードに送信するよう要求することを含むことができる。
【０１０７】
制御は次にブロック１２９９へと続き、図１２の論理が戻る。
【０１０８】
図１３は、本発明の一実施形態による、ブレークポイント又はアドレス・ウォッチの割り込みを処理するための例示的な処理のフローチャートを示す。制御はブロック１３００において開始する。
【０１０９】
制御は次にブロック１３０５へと続き、いずれかのコンピュータ・システム・ノードにおけるデバッグ・エージェント１５６が割り込み又はシステム例外を受信し、そのコンピュータ・システム・ノードにおけるプログラム又はプログラムの１つの特定のスレッドの実行が、ある命令のところで停止される。割り込み又はシステム例外は、プログラム又はプログラムのスレッド内の命令の実行が、ブレークポイントがセットされた命令に遭遇したか、若しくはその命令の実行を試みたこと、又はアドレス・ウォッチ機能によって監視されているアドレスのメモリ内容が、実行中のプログラム又はスレッドの命令によって変更されたことを示す。
【０１１０】
一実施形態において、プログラムは、ブレークポイント又はアドレス・ウォッチ機能をセット又は始動させたデバッグ・コマンドが付加されたパケット又はオブジェクトを処理し、実行し、実施し、取り扱い、又は応答している間に、そのブレークポイントに遭遇したか、又はそのアドレス・ウォッチによって監視されているアドレスの内容を変更した。別の実施形態において、プログラム内の命令は、デバッグ・コマンドが付加されていないパケット又はオブジェクトを処理し、実行し、実施し、取り扱い、若しくは応答している間に、又はプログラムによって受信されたどのパケットとも無関係な処理を実施している間に、そのブレークポイントに遭遇したか、又はそのアドレス・ウォッチ処理によって監視されているアドレスの内容を変更した。別の実施形態において、プログラム内の命令は、割り込みを生じさせた遭遇したブレークポイント又は監視されたアドレスとは無関係な、異なるデバッグ・コマンドが付加されたパケット又はオブジェクトを処理し、実行し、実施し、取り扱い、又は応答している間に、そのブレークポイントに遭遇したか、又はそのアドレス・ウォッチ処理によって監視されているアドレスの内容を変更した。
【０１１１】
制御は次にブロック１３１０へと続き、デバッグ・エージェント１５６は、保存デバッグ・データ１５８の中から、割り込み又はシステム例外を生じさせたブレークポイント又はアドレス・ウォッチを要求したクライアント・デバッグ・エージェント１５６の保存された識別子７１２を見つけ出す。制御は次にブロック１３１５へと続き、デバッグ・エージェント１５６は、停止されたプログラムの状態及び停止されたプログラムの識別子及び／又は停止されたプログラムのスレッドの識別子を、保存されたクライアント・デバッグ・エージェント識別子７１２によって識別されるクライアント・デバッグ・エージェント１５６に送信する。制御は次にブロック１３９９へと続き、図１３の論理が戻る。
【０１１２】
図１４は、本発明の一実施形態による、ネットワークから状態を受信するための例示的な処理のフローチャートを示す。制御はブロック１４００において開始する。
【０１１３】
制御は次にブロック１４０５へと続き、クライアント・デバッグ・エージェント１５６は、ネットワーク１３０を介して、そのクライアント・デバッグ・エージェント１５６が実行されるコンピュータ・システム・ノードとは異なる別のコンピュータ・システム・ノード上でブレークポイントに遭遇すること又はアドレス・ウォッチによって監視されていたメモリ位置の内容を変更することによって実行を停止された、プログラム／スレッドの状態及びそのプログラム／スレッドの識別子を受信する。
【０１１４】
制御は次にブロック１４１０へと続き、クライアント・デバッグ・エージェント１５６は、そのクライアント・デバッグ・エージェント１５６が実行されるローカル・コンピュータにおいて、停止されたプログラムの受信した識別子と合致する識別子を有する停止されたプログラムのコピー（これは、一実施形態において、クライアント・デバッグ・エージェントのローカル・コンピュータにおいて実行されない）を見つけ出し、受信したプログラムの状態及びプログラム・リストのコピーを、ユーザＩ／Ｏデバイス１２１を介して提示（表示デバイスを介して表示、プリンタを介して印刷、又はスピーカ・デバイスを介して再生）する。制御は次にブロック１４９９へと続き、図１４の論理が戻る。
【０１１５】
本明細書において用いられる用語は、特定の実施形態を説明する目的のみで用いられており、本発明を限定することを意図するものではない。本明細書において用いられる単数形の「１つの（ａ）」、「１つの（ａｎ）」、及び「その（ｔｈｅ）」は、文脈が明らかにそうでないことを示していない限り、複数形を含むことが意図されている。「含む（ｃｏｍｐｒｉｓｅｓ）」及び／又は「含む（ｃｏｍｐｒｉｓｉｎｇ）」という用語は、本明細書において用いられる場合、述べられた特徴、整数、ステップ、操作、要素、及び／又は構成要素が存在することを特定しているが、１つ又は複数の他の特徴、整数、ステップ、操作、要素、構成要素、及び／又はその群の存在又は付加を除外するものではないことがさらに理解されよう。
【０１１６】
前述の本発明の例示的な実施形態の詳細な説明において、添付の図面（ここで同様の符号は同様の要素を表す）が参照されており、これらの図面は、本明細書の一部を成しており、かつ本発明を実施することができる具体的な例示的な実施形態が例証として示されている。これらの実施形態は、当業者が本発明を実施することができるように十分詳細に説明したが、他の実施形態を用いることもでき、また、本発明の範囲から逸脱することなく、論理的、機械的、電子的、及びその他の変更を行うことができる。前述の説明において、本発明の実施形態を完全に理解してもらうために多数の具体的な詳細を記述した。しかし、本発明の実施形態は、これらの具体的な詳細なしで実施することができる。他の例において、本発明の実施形態を不明瞭にしないために、周知の回路、構造、及び技術は詳細に示さなかった。
【０１１７】
本明細書内で用いられる「実施形態」という語の異なる事例は、必ずしも同じ実施形態を指すとは限らないが、同じ実施形態を指すこともある。本明細書において図示又は説明されたどのデータ及びデータ構造体も単なる例であり、他の実施形態において、異なるデータ量、データ・タイプ、フィールド、フィールドの数及びタイプ、フィールド名、行、レコード、エントリの数及びタイプ、又はデータの編成を用いることができる。加えて、どのデータも論理と組み合わせることができるので、独立したデータ構造体は必須ではない。従って、前述の詳細な説明は限定的な意味で解釈されるべきではなく、本発明の範囲は添付の特許請求の範囲のみによって定められる。
【符号の説明】
【０１１８】
１２１：ユーザ入力／出力デバイス
５０５：指標
５４５：セット・ブレークポイント・コマンド
５５０：セット分散アドレス・ウォッチ・コマンド
６０５：ディスプレイ状態コマンド
６１０：状態
【図１】
2011258185.tif 000003
【図２】
2011258185.tif 000004
【図３】
2011258185.tif 000005
【図４】
2011258185.tif 000006
【図５】
2011258185.tif 000007
【図６】
2011258185.tif 000008
【図７】
2011258185.tif 000009
【図８】
2011258185.tif 000010
【図９】
2011258185.tif 000011
【図１０】
2011258185.tif 000012
【図１１】
2011258185.tif 000013
【図１２】
2011258185.tif 000014
【図１３】
2011258185.tif 000015
【図１４】
2011258185.tif 000016