第1のデバッグエージェントにおいて、第1のコンピュータにおける第1のプログラムからパケットを受信するステップと、前記パケットに、デバッグコマンドと、前記第1のデバッグエージェントの識別子とを付加するステップと、前記デバッグコマンドと前記第1のデバッグエージェントの前記識別子とを含む前記パケットを受信コンピュータに送信するステップであって、前記デバッグコマンドが、前記受信コンピュータ上で実行される第2のプログラムの実行を停止させる、ステップと、前記第1のコンピュータにおいて、停止された前記第2のプログラムの状態を受信するステップと、前記第1のコンピュータにおいて、前記第2のプログラムの前記状態を提示するステップと、を含む、方法。前記パケットを受信することに応答して、前記受信コンピュータにおける第2のデバッグエージェントが、前記第2のプログラム内にブレークポイントをセットし、前記第2のプログラムが、前記ブレークポイントにおいて実行を停止する、請求項1に記載の方法。前記パケットを受信することに応答して、前記受信コンピュータにおける第2のデバッグエージェントが、前記受信コンピュータのメモリ内の位置に対するアドレスウォッチを開始し、前記第2のプログラムが、前記メモリ内の前記位置における内容が変更されたことに応答して実行を停止する、請求項1に記載の方法。前記第2のデバッグエージェントが、前記パケットから前記デバッグコマンドと前記第1のデバッグエージェントの前記識別子とを除去し、前記デバッグコマンドと前記第1のデバッグエージェントの前記識別子とをもたない前記パケットを前記第2のプログラムに送信する、請求項1に記載の方法。前記受信コンピュータを識別する処理ノード識別子を前記パケットに付加するステップをさらに含む、請求項1に記載の方法。前記デバッグコマンドと前記第1のデバッグエージェントの前記識別子とを含む前記パケットを受信コンピュータに送信するステップが、前記デバッグコマンドと、前記第1のデバッグエージェントの前記識別子と、前記受信コンピュータを識別する前記処理ノード識別子とを含む前記パケットを宛先コンピュータに送信するステップをさらに含み、前記宛先コンピュータが前記パケットを前記受信コンピュータに送信する、請求項5に記載の方法。前記提示するステップが、前記第2のプログラムのプログラムリストを提示するステップをさらに含む、請求項1に記載の方法。第1のデバッグエージェントにおいて第1のコンピュータにおける第1のプログラムからパケットを受信されたパケットにデバッグコマンドと、前記第1のデバッグエージェントの識別子とを付加したパケットを、受信コンピュータにおいて受信するステップと、前記受信コンピュータにおいて、前記デバッグコマンドが、前記受信コンピュータ上で実行される第2のプログラムの実行を停止させるステップと、前記第1のコンピュータにおいて提示するために、前記受信コンピュータが、停止された前記第2のプログラムの状態を送信するステップと、を含む、方法。請求項1乃至8のいずれかの請求項に記載のすべてのステップをコンピュータに実行させる、デバッグプログラム。請求項1乃至8のいずれかの請求項に記載のすべてのステップをそれぞれ実行する各手段を備える、デバッグシステム第1のデバッグエージェントにおいて、第1のコンピュータにおける第1のプログラムから、パケットを受信するステップと、前記パケットに、デバッグコマンドと、処理ノード識別子と、前記第1のデバッグエージェントの識別子とを付加するステップと、前記デバッグコマンドと、前記処理ノード識別子と、前記第1のデバッグエージェントの前記識別子とを含む前記パケットを宛先コンピュータに送信するステップであって、前記宛先コンピュータにおける第2のデバッグエージェントが、前記パケットを受信コンピュータに送信し、前記受信コンピュータにおける第3のデバッグエージェントが、前記パケットを前記受信コンピュータにおいて実行される第3のプログラムに送信し、前記第3のデバッグエージェントは、前記受信コンピュータを識別する受信ノード識別子が前記パケット内の前記処理ノード識別子と合致した場合に前記デバッグコマンドを実行し、前記デバッグコマンドの実行が前記第3のプログラムの実行を停止させ、前記第3のデバッグエージェントは、前記受信コンピュータを識別する前記受信ノード識別子が前記パケット内の前記処理ノード識別子と合致しない場合には前記デバッグコマンドを実行しない、ステップと、前記第1のコンピュータにおける前記第1のデバッグエージェントにおいて、前記第3のプログラムの状態及び停止された前記第3のプログラムの識別子を受信するステップと、前記第1のコンピュータにおいて、前記第3のプログラムの前記状態及び前記第3のプログラムのプログラムリストを提示するステップと、をコンピュータに実行させる、デバッグプログラム。第1のデバッグエージェントを含む第1のコンピュータであって、前記第1のデバッグエージェントが、パケットを受信し、デバッグコマンドと、処理ノード識別子と、前記第1のデバッグエージェントの識別子とを前記パケットに付加する、第1のコンピュータと、前記第1のコンピュータに通信可能に接続された受信コンピュータであって、第3のデバッグエージェントが、前記パケットを受信し、前記パケットを前記宛先コンピュータにおいて実行される第3のプログラムに送信し、前記第3のデバッグエージェントは、前記受信コンピュータを識別する受信ノード識別子が前記パケット内の前記処理ノード識別子と合致した場合に前記デバッグコマンドを実行し、前記デバッグコマンドの実行が前記受信コンピュータ上で実行される前記第3のプログラムの実行を停止させ、前記第3のデバッグエージェントは、前記受信コンピュータを識別する前記受信ノード識別子が前記パケット内の前記処理ノード識別子と合致しない場合には前記デバッグコマンドを実行せず、前記第3のデバッグエージェントは、前記第3のプログラムの状態及び停止された前記第3のプログラムの識別子を前記第1のデバッグエージェントに送信し、前記第1のデバッグエージェントは、前記第3のプログラムの状態及び前記第3のプログラムのリストを提示し、前記第3のプログラムは前記第1のコンピュータにおいて実行されない、受信コンピュータとを備える、デバッグシステム。前記コマンドを実行することに応答して、前記第3のデバッグエージェントが前記第3のプログラム内にブレークポイントをセットし、前記第3のプログラムは前記ブレークポイントにおいて実行を停止する、請求項12に記載のデバッグシステム。前記コマンドを実行することに応答して、前記第3のデバッグエージェントが前記受信コンピュータのメモリ内の位置に対するアドレスウォッチを開始し、前記第3のプログラムは、前記メモリ内の前記位置における内容が変更されたことに応答して実行を停止する、請求項12に記載のデバッグシステム。前記パケットを前記第3のプログラムに送信するのに先立ち、前記第3のデバッグエージェントが、前記パケットから、前記デバッグコマンドと、前記第1のデバッグエージェントの前記識別子と、前記処理ノード識別子とを除去する、請求項12に記載のデバッグシステム。前記第3のプログラムが停止されたことを示す割り込みに応答して、前記第3のデバッグエージェントが、前記割り込みを生じさせた前記デバッグコマンドを要求した前記第1のデバッグエージェントの前記識別子を見つけ出し、前記第3のプログラムの前記状態と、前記第3のプログラムの前記識別子と、停止された前記第3のプログラムのスレッドの識別子とを前記第1のデバッグエージェントに送信する、請求項12に記載のデバッグシステム。本発明の課題は、分散型コンピュータシステム上でコンピュータプログラムをデバッグすることにある。方法、デバッグプログラム、及びデバッグシステムが提供される。一実施形態において、第1のコンピュータにおける第1のデバッグエージェントが、第1のプログラムからパケットを受信する。第1のデバッグエージェントは、デバッグコマンドと第1のデバッグエージェントの識別子とをパケットに付加し、そのパケットを受信コンピュータに送信する。受信コンピュータにおける第2のデバッグエージェントが、デバッグコマンドと第1のデバッグエージェントの識別子とをパケットから除去し、そのパケットを受信コンピュータにおいて実行される第2のプログラムに送信する。第2のデバッグエージェントはさらに、デバッグコマンドを実行し、これが、受信コンピュータ上で実行される第2のプログラムに、ブレークポイントにおいて実行を停止させるか、又はアドレスウォッチのメモリ位置が更新されたときに停止させる。第2のデバッグエージェントは、第2のプログラムの状態を第1のデバッグエージェントに送信し、第1のデバッグエージェントは、第1のコンピュータにおいて、第2のプログラムの状態及びリストを提示する。しかしながら、添付の図面は、本発明の例示的な実施形態のみを示すものであり、従って、本発明は他の均等に有効な実施形態を許容することができるので本発明の範囲を限定するものと見なされるものではないことに留意されたい。図面を参照すると、いくつかの図にわたって同様の符号が同様の部分を表しており、図1は、本発明の一実施形態による、ネットワーク130に接続されたコンピュータシステム100の高レベルのブロック図表現を示す。コンピュータシステム100の主要な構成要素は、1つ又は複数のプロセッサ101、メインメモリ102、端末インターフェース111、ストレージインターフェース112、I/O入力/出力デバイスインターフェース113、及びネットワークアダプタ114を含み、その全てが、構成要素間通信のために、メモリバス103、I/Oバス104、及びI/Oバスインターフェースユニット105を介して直接又は間接に通信可能に結合される。コンピュータシステム100は、ここでは総称的にプロセッサ101と呼ばれる1つ又は複数の汎用プログラム可能中央演算装置CPU101A、101B、101C、及び101Dを含む。一実施形態において、コンピュータシステム100は、比較的大規模なシステムにおいて典型的であるマルチプロセッサを含むが、別の実施形態においては、コンピュータシステム100は代替的に単一CPUシステムとすることができる。各々のプロセッサ101は、メインメモリ102内に格納された命令を実行し、1つ又は複数のレベルのオンボードキャッシュを含んでいてもよい。メインメモリ102は、データ及びプログラムを格納又はエンコードするための、ランダムアクセス半導体メモリ、ストレージデバイス、又はストレージ媒体である。別の実施形態において、メインメモリ102はコンピュータシステム100の仮想メモリ全体を表し、コンピュータシステム100と結合しているか又はネットワーク130を介して接続された、他のコンピュータシステムの仮想メモリも含むことができる。メインメモリ102は概念的には単一のモノリシックな実体であるが、他の実施形態において、メインメモリ102は、キャッシュと他のメモリデバイスとの階層構造のようなより複雑な構成である。例えば、メモリは多重レベルのキャッシュに存在していてもよく、これらのキャッシュは、1つのキャッシュが命令を保持する一方で別のキャッシュが1つ又は複数のプロセッサによって用いられる非命令的データを保持するように、機能によってさらに分けることができる。種々のいわゆる不均等メモリアクセスNUMA型コンピュータアーキテクチャのいずれにおいても公知であるように、メモリをさらに分散させて異なるCPU又はCPUの組と関連付けることができる。メインメモリ102は、プログラム150、パケット152、ネットワークリソース154、デバッグエージェント156、及び保存デバッグデータ158を格納又はエンコードする。プログラム150、パケット152、ネットワークリソース154、デバッグエージェント156、及び保存デバッグデータ158は、コンピュータシステム100の中のメモリ102内に格納されるものとして図示されているが、他の実施形態において、これらのうちの幾つか又は全ては、異なるコンピュータシステム上に存在していてもよく、例えばネットワーク130を介して、遠隔的にアクセスすることができる。コンピュータシステム100は、コンピュータシステム100のプログラムが、多数の小型のストレージ実体へのアクセスではなく、あたかも大規模な単一のストレージエンティティへのアクセスのみを有するかのように振る舞うことを可能にする、仮想アドレス機構を用いることができる。よって、プログラム150、パケット152、ネットワークリソース154、デバッグエージェント156、及び保存デバッグデータ158はメインメモリ102内に格納されているものとして図示されているが、これらの要素は必ずしも同時に全て完全に同じストレージデバイスに含まれている必要はない。さらに、プログラム150、パケット152、ネットワークリソース154、デバッグエージェント156、及び保存デバッグデータ158は独立した実体として図示されているが、他の実施形態において、これらのうちの幾つか、これらのうちの幾つかの一部、又はこれらの全てが一体にパッケージ化されていてもよい。プログラム150は、コンピュータシステム100のプロセッサ101上で実行されるコードと、コンピュータシステム100とネットワーク130を介して接続されている他のコンピュータシステム上で実行されるプログラムのコピーとを含む。プログラム150は、デバッグエージェント156によってデバッグされるプログラムである。プログラム150は、ソース形式であろうと又はオブジェクト形式であろうと、任意のタイプの実行可能又は解釈可能なコード又はステートメントとすることができる。種々の実施形態において、プログラム150は、アプリケーションプログラム、オペレーティングシステムプログラム、ネットワークアプリケーション、アプリケーションサーバ、サーバプログラム、グリッドプログラム、科学計算マネージャ、クエリオプティマイザ、又はいずれかの他のタイプのプログラムとすることができる。パケット152は、プログラム150が読み取り/書き込みし、ネットワーク130を介して他のコンピュータシステムと送/受信するデータを含む。種々の実施形態において、パケット152は、データ、データベース、オブジェクト、クラス、コード、ファイル、ディレクトリとサブディレクトリとファイルとの階層構造、データ構造体、又は任意の他のタイプのデータ若しくは情報リポジトリを含むことができる。ネットワークリソース154は、ネットワーク130を介したパケット152の送信及び受信を管理する。種々の実施形態において、ネットワークリソース154は、ソケット、APIアプリケーションプログラミングインターフェース、オブジェクト要求ブローカ、又は設定ファイルを含む。別の実施形態において、ネットワークリソース154は、コンピュータシステム100上で実行される命令又はステートメントのユニットを含む、プログラム、モジュール、メソッド、クラス、又はオブジェクトを含む。デバッグエージェント156は、プログラム150内のブレークポイント及びアドレスウォッチをデバッグコマンドの受信に応答して管理し、このデバッグコマンドは、コマンドライン上で発行され、グラフィカルユーザインターフェースを通じて入力され、又はアプリケーションを介して発行することができる。ブレークポイントとは、ユーザがそこでプログラム150の実行が停止されることを望む、プログラム150内のステートメント又は命令である。アドレスウォッチは、メモリ位置例えばアドレス、フィールド、オブジェクト、レコード、又はファイルを監視し、プログラム150がそのメモリ位置の内容に対して変更、更新、又は書き込みを行うことに応答して、プログラム150の実行を停止させる。その結果、プログラム150がデバッグエージェント156によって実行されるとき、プログラム150は、ブレークポイントに到達するまで、又は監視されているメモリ位置が変更されるまで、プロセッサ101上で通常の仕方で実行される。次いでデバッグエージェント156は、ブレークポイント命令のところ又はメモリ位置を変更した命令のところで、プログラム150の実行を止め、結果及び/又はプログラム150の状態及び/又はコンピュータシステム100の状態を、ユーザ入力/出力デバイス121を介してデバッガユーザインターフェース上で解析のためにユーザに対して表示する。デバッグエージェント156は、例えばプログラム150内のブレークポイント位置における有効なステートメント又は命令を無効な命令に置き換えること、及びそのブレークポイントについてのレコードをブレークポイントテーブルに作成することによって、プログラム150内にブレークポイントをセットする。デバッグエージェント156はプロセッサ101の機能を介してアドレスウォッチを始動し、これが、デバッグエージェント156によって指定されたメモリ位置を監視する。ブレークポイント及び/又はアドレスウォッチがセットされた後、ユーザは、プログラム150の実行を再開させる入力をデバッグユーザインターフェースに与える。プログラム150の実行が無効なステートメント又は命令に最終的に遭遇したこと、又は監視されているメモリ位置の内容が最終的に変更されたことに応答して、システム例外又は割り込みが発生し、これがプログラム150の実行を停止させ、プロセッサ101の制御をデバッグエージェント156に渡す。デバッグエージェント156は次にデバッグユーザインターフェースを介してユーザに制御を渡し、次いでユーザはユーザインターフェースを介してデバッグエージェント156に対してコマンドを発行することができ、デバッグエージェント156はこのコマンドを解釈して、入力ストレージ位置の内容を定めるステートメント又は命令を見つけ出して表示し、ストレージ位置の内容を表示し、ブレークポイント又はアドレスウォッチ機能をセット又は除去し、プログラム150の実行を再開し、又はいずれかの他の適切な操作を行う。保存デバッグデータ158は、デバッグエージェント156が保存したデータを含む。保存デバッグデータ158は図7を参照して以下でさらに説明される。デバッグエージェント156は、図8、図9、図10、図11、図12、図13、及び図14を参照して以下でさらに説明されるように、保存デバッグデータ158を用いて分散デバッグを実施する。一実施形態において、プログラム150、ネットワークリソース154、及びデバッグエージェント156のうちの1つ、幾つか、又は全ては、図8、図9、図10、図11、図12、図13、及び図14を参照して以下で説明される機能を実行するための、プロセッサ101上で実行される命令若しくはステートメント、又はプロセッサ101上で実行される命令若しくはステートメントによって解釈される命令若しくはステートメントを含む。一実施形態において、プログラム150、ネットワークリソース154、及びデバッグエージェント156のうちの1つ、幾つか、又は全ては、プロセッサベースのシステムの代わりに、又はこれに加えて、半導体デバイス、チップ、論理ゲート、回路、回路基板、及び/又は他の物理ハードウェアデバイスによって、ハードウェアに実装される。メモリバス103は、プロセッサ101、メインメモリ102、及びI/Oバスインターフェースユニット105の間でデータを転送するための、データ通信経路を提供する。I/Oバスインターフェースユニット105はさらに、種々のI/Oユニットとの間でデータを転送するためにシステムI/Oバス104に結合される。I/Oバスインターフェースユニット105は、I/OプロセッサIOP又はI/OアダプタIOAとしても知られる多数のI/Oインターフェースユニット111、112、113、及び114と、システムI/Oバス104を通じて通信する。I/Oインターフェースユニットは、様々なストレージ及びI/Oデバイスとの通信をサポートする。例えば、端末インターフェースユニット111は、ユーザ出力デバイス例えば映像表示デバイス、スピーカ、プリンタ、及び/又はテレビジョンセット及びユーザ入力デバイス例えばキーボード、マウス、キーパッド、タッチパッド、トラックボール、ボタン、ライトペン又は他のポインティングデバイスを含むことができる1つ又は複数のユーザ入力/出力デバイス121の取り付けをサポートする。ユーザは、ユーザ入力/出力デバイス121及びコンピュータシステム100にユーザインターフェースを介して入力を与えるためにユーザ入力デバイスを操作することができ、かつ、ユーザ出力デバイスを介して出力を受け取ることができる。例えば、ユーザインターフェースは、表示デバイス上に表示され、スピーカを介して再生され、又はプリンタを介して印刷されるといったように、ユーザ入力/出力デバイス121を介して提示されることができる。ストレージインターフェースユニット112は、1つ又は複数の直接アクセスストレージデバイスDASD125及び126これらは典型的には回転磁気ディスクドライブストレージデバイスであるが、代替的に、ホストに対しては単一の大規模ストレージデバイスに見えるように構成されたディスクドライブのアレイを含む他のデバイスとすることができるの取り付けをサポートする。別の実施形態において、デバイス125及び/又は126は、任意のタイプの二次ストレージデバイスを通じて実装することができる。メインメモリ102の内容又はその任意の部分を、必要に応じて、直接アクセス記憶装置125及び126に格納することができ、そこから取り出すことができる。I/Oデバイスインターフェース113は、プリンタ若しくはファックス機のような、種々の他の入力/出力デバイス又は他のタイプのデバイスのいずれかへのインターフェースを提供する。ネットワークアダプタ114は、コンピュータシステム100から他のデジタルデバイス及びコンピュータシステムへの、1つ又は複数の通信経路を提供する。そのような経路は、例えば1つ又は複数のネットワーク130を含むことができる。メモリバス103は、図1においては、プロセッサ101とメインメモリ102とI/Oバスインターフェース105との間に直接通信経路を提供する比較的単純な単一バス構造として示されているが、実際には、メモリバス103は多数の異なるバス又は通信経路を含むことができ、それらは、階層状、星状、又はウェブ状構成におけるポイントツーポイントリンク、多重階層構造バス、平行及び冗長経路、又は任意の他の適切なタイプの構成のような種々の形態のうちのいずれかの形で配置することができる。さらにまた、I/Oバスインターフェース105及びI/Oバス104は単一の個々のユニットとして示されているが、コンピュータシステム100は、実際には、多数のI/Oバスインターフェースユニット105及び/又は多数のI/Oバス104を含むことができる。システムI/Oバス104を種々のI/Oデバイスに延びる種々の通信経路から隔てる多数のI/Oインターフェースユニットが示されているが、他の実施形態において、I/Oデバイスのうちの幾つか又は全てが直接、1つ又は複数のシステムI/Oバスに接続される。種々の実施形態において、コンピュータシステム100は、マルチユーザメインフレーム型コンピュータシステム、シングルユーザシステム、又はユーザインターフェースを殆ど又は全くもたずに他のコンピュータシステムクライアントからの要求を受信するサーバ若しくは同様のデバイスとすることができる。他の実施形態において、コンピュータシステム100は、デスクトップコンピュータ、ポータブルコンピュータ、ラップトップ又はノートブックコンピュータ、タブレットコンピュータ、ポケットコンピュータ、電話、ポケットベル、自動車、テレビ会議システム、電化製品、又は任意の他の適切なタイプの電子装置として実装することができる。ネットワーク130は、いずれかの適切なネットワーク又はネットワークの組み合わせとすることができ、コンピュータシステム100への/からのデータ及び/又はコードの通信に適した任意の適切なプロトコルをサポートすることができる。種々の実施形態において、ネットワーク130は、コンピュータシステム100に直接又は間接に接続されたストレージデバイス又はストレージデバイスの組み合わせを表すことができる。別の実施形態において、ネットワーク130は無線通信をサポートすることができる。別の実施形態において、ネットワーク130は、電話線又はケーブルのような有線通信をサポートすることができる。別の実施形態において、ネットワーク130はインターネットとすることができ、IPインターネットプロトコルをサポートすることができる。別の実施形態において、ネットワーク130はローカルエリアネットワークLAN又は広域ネットワークWANとすることができる。別の実施形態において、ネットワーク130はホットスポットサービスプロバイダネットワークとすることができる。別の実施形態において、ネットワーク130はイントラネットとすることができる。別の実施形態において、ネットワーク130はGPRS汎用パケット無線サービスネットワークとすることができる。別の実施形態において、ネットワーク130はFRSFamilyRadioServiceネットワークとすることができる。別の実施形態において、ネットワーク130はいずれかの適切なセルラーデータネットワーク、セルベースの無線ネットワークとすることができる。さらに別の実施形態において、ネットワーク130はいずれかの適切なネットワーク又はネットワークの組み合わせとすることができる。1つのネットワーク130が示されているが、他の実施形態において、任意の数の同じタイプ又は異なるタイプのネットワークが存在することができる。図1は、コンピュータシステム100の代表的な主要な構成要素及びネットワーク130を高次のレベルで示すことを意図するものであること、個々の構成要素は図1で表されているものよりも複雑であり得ること、図1に示されるもの以外の構成要素又はこれらに付加される構成要素が存在し得ること、及びこのような構成要素の数、タイプ、及び構成は多様であり得ることを理解すべきである。そのような付加的な複雑性又は付加的な変形の幾つかの具体的な例は本明細書において開示されるが、これらは単なる例示であり、必ずしもこうした変形のうちの唯一のものであるとは限らないことが理解される。図1に示される種々のプログラム構成要素及び本発明の種々の実施形態の実装は、種々のコンピュータアプリケーション、ルーチン、構成要素、プログラム、オブジェクト、モジュール、データ構造などを用いることを含む多数の手法で実装することができ、これ以降はコンピュータプログラム又は単にプログラムと呼ばれる。コンピュータプログラムは、種々の時点においてコンピュータシステム100の中の種々のメモリ及びストレージデバイス内に存在する1つ又は複数の命令又はステートメントを含み、この1つ又は複数の命令又はステートメントは、コンピュータシステム100の中の1つ又は複数のプロセッサによって読み出されて実行されたとき、又は1つ若しくは複数のプロセッサによって実行される命令によって解釈されたときに、コンピュータシステム100に、本発明の実施形態の種々の態様を構成するステップ又は要素を実行するのに必要なアクションを行わせる。当業者であれば認識するように、本発明の実施形態の態様は、システム、方法、又はコンピュータプログラムとして具体化することができる。従って、本発明の実施形態の態様は、全体がハードウェアの実施形態、全体がプログラムの実施形態ストレージデバイスに格納されたファームウェア、常駐プログラム、マイクロコードなどを含む、又はプログラムの態様とハードウェアの態様との組み合わせの実施形態の形を取ることができ、本明細書においてはその全てを全体的に回路、モジュール、又はシステムと呼ぶことができる。さらにまた、本発明の実施形態は、媒体上に具体化されたコンピュータ可読プログラムコードを有する1つ又は複数のコンピュータ可読媒体に具体化されたコンピュータプログラムの形を取ることができる。1つ又は複数のコンピュータ可読媒体の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光学、電磁気、赤外線、若しくは半導体システム、装置、若しくはデバイス、又は上記のものの任意の適切な組み合わせとすることができるが、これらに限定されるものではない。コンピュータ可読ストレージ媒体のより具体的な例非網羅的なリストは、1つ又は複数の配線を有する電気接続、携帯型コンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM、読み取り専用メモリROM、消去可能プログラマブル読み取り専用メモリEPROM又はフラッシュメモリ、光ファイバ、携帯型コンパクトディスク読み取り専用メモリCD-ROM、光ストレージデバイス、磁気ストレージデバイス、又は上記のものの任意の適切な組み合わせを含むことができる。本文書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置、若しくはデバイスによって用いるため又はこれらと共に用いるためのプログラムを収容又は格納することができる任意の有形の媒体とすることができる。コンピュータ可読信号媒体は、例えばベースバンド内に又は搬送波の一部としてコンピュータ可読プログラムコードを具体化した、伝搬データ信号を含むことができる。このような伝搬信号は、電磁気、光、又はその任意の適切な組み合わせを含むがこれらに限定されない種々の形態をとることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置、若しくはデバイスによって用いるため又はこれらと共に用いるためのプログラムを通信、伝搬、又は伝送する、任意のコンピュータ可読媒体であり得る。コンピュータ可読媒体上に具体化されたプログラムコードは、無線、有線、光ファイバケーブル、無線周波数RF、又は上記のものの任意の適切な組み合わせを含むがこれらに限定されないいずれかの適切な媒体を用いて、伝送することができる。本発明の実施形態の態様のための操作を実行するためのコンピュータプログラムコードは、オブジェクト指向型プログラミング言語及び従来の手続き型プログラミング言語を含む1つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。プログラムコードは、全体をユーザのコンピュータ上で実行するか、一部をリモートコンピュータ上で実行するか、又は全体をリモートコンピュータ若しくはサーバ上で実行することができる。一番最後のシナリオでは、リモートコンピュータは、ローカルエリアネットワークLAN又は広域ネットワークWANを含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続することができ、又は外部コンピュータとの接続を例えば、インターネットサービスプロバイダを用いてインターネットを通じて確立することもできる。本発明の実施形態の態様は、方法、装置システム及びコンピュータプログラムのフローチャート図及び/又はブロック図を参照して、以下で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ可読媒体に具体化されたコンピュータプログラム命令によって実施することができる。これらのコンピュータプログラム命令を、汎用コンピュータ、専用コンピュータ、又はマシンを生成する他のプログラム可能データ処理装置のプロセッサに与え、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックによって指定された機能/動作を実施するための手段を生成するようにしてもよい。また、これらのコンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスに特定の方法で機能するように指示することができるコンピュータ可読媒体に格納し、それにより、そのコンピュータ可読媒体に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施する命令を含む製品を作るようにしてもよい。本発明の種々の実施形態を定めるコンピュータプログラムは、1つ又は複数のプロセッサに動作可能又は通信可能に直接又は間接に接続することができる種々の有形のコンピュータ可読ストレージ媒体を介してコンピュータシステムに配信することができる。また、コンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスにロードして、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で一連の操作ステップを行わせてコンピュータで実施されるプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実施するためのプロセスを提供するようにしてもよい。図面のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法、及びコンピュータプログラムの可能な実装のアーキテクチャ、機能、及び操作を示す。この点に関して、フローチャート又はブロック図の中の各ブロックは、指定された論理機能を実施するための1つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装においては、ブロックに記載された機能が図面に記載された順序通りに行われない場合があることにも留意すべきである。例えば、連続して示される2つのブロックは、関与する機能に応じて、実際には、実質的に同時に実行されることがあり、ブロックが逆順に実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、及び、ブロック図及び/又はフローチャート図におけるブロックの組み合わせは、指定の機能又は動作を行う専用ハードウェアベースのシステムによって、専用ハードウェアとコンピュータ命令との組み合わせによって、実装できることにも留意されたい。また、本発明の実施形態は、クライアント企業、非営利団体、行政主体、又は内部組織構造とのサービス契約の一部として配信することができる。これらの実施形態の態様は、コンピュータシステムが機能するように環境設定すること、及び本明細書に記載の方法の幾つか又は全てを実施するコンピュータサービス例えばコンピュータ可読コード、ハードウェア、及びウェブサービスを配置することを含むものとすることができる。これらの実施形態の態様はまた、クライアント企業を分析すること、分析に応じたレコメンデーションを作成すること、レコメンデーションの一部を実施するためのコンピュータ可読コードを生成すること、コンピュータ可読コードを既存のプロセス、コンピュータシステム、及びコンピュータインフラストラクチャに組み込むこと、本明細書に記載の方法及びシステムの使用を計量すること、ユーザに費用を割り当てること、及びユーザにこれらの方法及びシステムの使用について課金することを含むことができる。加えて、以下説明される種々のプログラムは、本発明の特定の実施形態においてそのプログラムが実装されるアプリケーションに基づいて識別することができる。しかし、下記のどの具体的なプログラム名称も単に便宜上用いられているに過ぎず、従って、本発明の実施形態は、そのような名称によって識別される及び/又は意味されるいずれかの特定のアプリケーションにおける使用のみに限定されるべきではない。図1に示される例示的な環境は、本発明を限定することを意図するものではない。実際には、本発明の実施形態の範囲から逸脱することなく、他の代替的なハードウェア及び/又はプログラム環境を用いることができる。図2は、本発明の一実施形態による分散デバッグシステムの選択された構成要素を図示するブロック図を示す。分散デバッグシステムは、ネットワーク130を介して接続された、サーバコンピュータシステムノード100-1、100-2、及び100-3と、負荷バランサコンピュータシステムサーバノード100-4と、クライアントコンピュータシステムノード100-5とを含む。コンピュータシステムノード100-1、100-2、100-3、100-4、及び100-5はコンピュータシステム100図1の例であり、総称的にコンピュータシステム100で表される。クライアントコンピュータシステムノード100-5は、ネットワーク130を介してサーバコンピュータシステムノード100-1、100-2、及び100-3と接続されるものとして図示されているが、別の実施形態において、クライアントコンピュータシステムノード100-5は、ネットワーク130を介して負荷バランササーバノード100-4に接続され、サーバコンピュータシステムノード100-1、100-2、及び100-3とは負荷バランササーバノード100-4を介して通信可能に接続される。サーバコンピュータシステムノード100-1は、サーバプログラム150-1と、ネットワークリソース154-1と、デバッグエージェント156-1と、保存デバッグデータ158-1とを含む。サーバコンピュータシステムノード100-2は、サーバプログラム150-2と、ネットワークリソース154-2と、デバッグエージェント156-2と、保存デバッグデータ158-2とを含む。サーバコンピュータシステムノード100-3は、サーバプログラム150-3と、ネットワークリソース154-3と、デバッグエージェント156-3と、保存デバッグデータ158-3とを含む。負荷バランサコンピュータシステムサーバノード100-4は、サーバプログラム150-4と、ネットワークリソース154-4と、デバッグエージェント156-4と、保存デバッグデータ158-4とを含む。クライアントコンピュータシステムノード100-5は、プログラム150-5と、サーバプログラム150-1、150-2、150-3、及び150-4と、ネットワークリソース154-5と、デバッグエージェント156-5と、保存デバッグデータ158-5とを含む。プログラム150-1、150-2、150-3、150-4、及び150-5はプログラム150図1の例であり、総称的にプログラム150で表される。ネットワークリソース154-1、154-2、154-3、154-4、及び154-5はネットワークリソース154図1の例であり、総称的にネットワークリソース154で表される。デバッグエージェント156-1、156-2、156-3、156-4、及び156-5はデバッグエージェント156図1の例であり、総称的にデバッグエージェント156で表される。保存デバッグデータ158-1、158-2、158-3、158-4、及び158-5は保存デバッグデータ158図1の例であり、総称的に保存デバッグデータ158で表される。プログラム150-1、150-2、150-3、150-4、及び150-5は、デバッグエージェント156-1、156-2、156-3、156-4、及び156-5がデバッグする命令を含む。一実施形態において、プログラム150-1、150-2、150-3、150-4、及び150-5は全て同じものである。別の実施形態において、プログラム150-1、150-2、150-3、150-4、及び150-5のうちの幾つか又は全ては互いに異なる。クライアントコンピュータシステムノード100-5におけるプログラム150-5は、クライアントコンピュータシステムノード100-5におけるプロセッサ上で実行されるコードを含む。クライアントコンピュータシステムノード100-5の中のサーバプログラム150-1、150-2、150-3、及び150-4はそれぞれ、サーバコンピュータシステムノード100-1、100-2、及び100-3、並びに負荷バランサコンピュータシステムノード100-4におけるサーバプログラム150-1、150-2、150-3、及びサーバプログラム150-4のコピーである。サーバプログラム150-1、150-2、150-3、及び150-4は、クライアントコンピュータシステムノード100-5においては実行されない。その代わりに、クライアントコンピュータシステムノード100-5は、プログラム150-5のプログラムリスト及びその状態情報を表示することに加えて、図6を参照して以下でさらに説明されるように、デバッグを支援するために、サーバプログラム150-1、150-2、150-3、及び150-4のうちの1つ又は複数のプログラムリスト及びその状態情報を表示することができる。プログラムリストは、プログラムに含まれるソースコード及び/又はコンパイルされたオブジェクトコード命令若しくはステートメントを含む。プログラムリストは、命令又はステートメントを識別する命令又はステートメントの番号、並びにリスト内の命令又はステートメントの順序を含むこともできる。負荷バランサコンピュータシステムノード100-4は、データの要求又はパケット152をクライアントコンピュータシステムノード100-5から受信し、それを処理のためにサーバコンピュータシステムノード100-1、100-2、及び100-3に分散させる。クライアント及びサーバという用語の使用は便宜上のものであり、あるシナリオではクライアントとして動作するコンピュータシステムノードが別のシナリオではサーバとして動作することができ、その逆もまた真である。一実施形態において、ユーザは、プログラム150-1、150-2、150-3、150-4、及び/又は150-5をデバックするために、ユーザ入力/出力デバイス121図1を介してデバッグエージェント156-5と対話する。プログラム150-5が停止している間に、ユーザは、入力/出力デバイス121を介して入力されるデバッグコマンドを介して、デバッグエージェント156-5が、サーバノード100-1、100-2、100-3、及び/又は100-4上で実行されるサーバプログラム150-1、150-2、150-3、及び/又は150-4のうちの1つ又は複数の中の命令にブレークポイントをセットすることを要求するか、又はサーバノード100-1、100-2、100-3、及び/又は100-4のメモリ内のアドレスの内容に対してアドレスウォッチを確立することを要求する。デバッグエージェント156-5は、デバッグコマンドを保存デバッグデータ158-5内に保存する。次いでユーザは、入力/出力デバイス121図1を介して、デバッグエージェント156がクライアント100-5上で実行されるプログラム150-5を開始することを要求する。プログラム150-5が実行され、負荷バランサ100-4に送信するためのデータ及び/又はコマンドのパケット152を作成する。デバッグエージェント156-5は、パケット152をインターセプトし、保存されたデバッグコマンドとデバッグエージェント156-5の識別子とをパケット152に付加して、パケット152を負荷バランサ100-4に送信し、負荷バランサ100-4はパケット152をサーバ100-1、100-2、又は100-3のうちの1つ又は複数に送信し、パケットはそこで処理され、取り扱われ、又は実行される。それぞれのサーバ100-1、サーバ100-2、サーバ100-3、又はサーバ100-4におけるデバッグエージェント156-1、デバッグエージェント156-2、デバッグエージェント156-3、又はデバッグエージェント156-4は、それぞれのネットワークリソース154-1、154-2、154-3、又は154-4からパケット152をインターセプト又は受信し、デバッグコマンド及びデバッグエージェント156-5の識別子をパケット152から除去又は削除し、デバッグコマンド及びデバッグエージェント156-5の識別子をそれぞれの保存デバッグデータ158-1、158-2、158-3、又は158-4内に保存し、要求されたブレークポイント又はアドレスウォッチをそれぞれのコンピュータノード100-1、100-2、100-3、又は100-4において実行されるそれぞれのサーバプログラム150-1、150-2、150-3、又は150-4内にセットし、次いで、パケットをそれぞれのサーバプログラム150-1、150-2、150-3、又は150-4に転送する。サーバプログラム150-1、150-2、150-3、又は150-4の実行が、ブレークポイントがセットされた命令、又はアドレスウォッチによって監視されているメモリ位置の内容を変更する命令に遭遇したことに応答して、デバッグエージェント156-1、156-2、156-3、又は156-4は、サーバプログラム150-1、150-2、150-3、又は150-4の実行を停止させ、保存デバッグデータ158-1、158-2、158-3、又は158-4の中からデバッグエージェント156-5の識別子を見つけ出し、停止されたサーバプログラム150-1、150-2、150-3、又は150-4の状態をデバッグエージェント156-5に送信する。デバッグエージェント156-5は、クライアントコンピュータシステムノード100-5において、コンピュータシステムノード100-1、100-2、100-3、又は100-4において実行中にブレークポイントに遭遇したサーバプログラム150-1、150-2、150-3、又は150-4のコピーを見つけ出し、クライアントコンピュータシステムノード100-5において、サーバプログラム150-1、150-2、150-3、又は150-4のコピーを状態情報と共に提示又は表示する。図3は、本発明の一実施形態による分散デバッグシステムの選択された構成要素を図示するブロック図を示す。図3の例示的な分散デバッグシステムは、ネットワーク130を介して接続されたグリッドコンピュータシステムノード100-6、100-7、100-8、100-9、及び100-10を含む。グリッドコンピュータシステムノード100-6、100-7、100-8、100-9、及び100-10はコンピュータシステム100図1の例であり、総称的にコンピュータシステム100で表される。グリッドコンピュータシステムノード100-6は、グリッドプログラム150-6と、オブジェクト152-6と、オブジェクト要求ブローカ154-6と、デバッグエージェント156-6と、保存デバッグデータ158-6とを含む。グリッドコンピュータシステムノード100-7は、グリッドプログラム150-7と、オブジェクト152-7と、オブジェクト要求ブローカ154-7と、デバッグエージェント156-7と、保存デバッグデータ158-7とを含む。グリッドコンピュータシステムノード100-8は、グリッドプログラム150-8と、オブジェクト152-8と、オブジェクト要求ブローカ154-8と、デバッグエージェント156-8と、保存デバッグデータ158-8とを含む。グリッドコンピュータシステムノード100-9は、グリッドプログラム150-9と、オブジェクト152-9と、オブジェクト要求ブローカ154-9と、デバッグエージェント156-9と、保存デバッグデータ158-9とを含む。クライアントコンピュータシステムノード100-10は、グリッドプログラム150-6、150-7、150-8、150-9、及び150-10と、オブジェクト152-10と、オブジェクト要求ブローカ154-10と、デバッグエージェント156-10と、保存デバッグデータ158-10とを含む。グリッドプログラム150-6、150-7、150-8、150-9、及び150-10はグリッドプログラム150図1の例であり、総称的にグリッドプログラム150で表される。オブジェクト152-6、152-7、152-8、152-9、及び152-10はパケット152図1の例であり、総称的にパケット152で表される。オブジェクト要求ブローカ154-6、154-7、154-8、154-9、及び154-10はネットワークリソース154図1の例であり、総称的にネットワークリソース154で表される。デバッグエージェント156-6、156-7、156-8、156-9、及び156-10はデバッグエージェント156図1の例であり、総称的にデバッグエージェント156で表される。保存デバッグデータ158-6、158-7、158-8、158-9、及び158-10は保存デバッグデータ158図1の例であり、総称的に保存デバッグデータ158で表される。グリッドプログラム150-6、150-7、150-8、150-9、及び150-10は、デバッグエージェント156-6、156-7、156-8、156-9、及び156-10がデバッグする命令を含む。一実施形態において、グリッドプログラム150-6、150-7、150-8、150-9、及び150-10は全て同じものである。別の実施形態において、グリッドプログラム150-6、150-7、150-8、150-9、及び150-10のうちの幾つか又は全ては互いに異なる。クライアントコンピュータシステムノード100-10におけるグリッドプログラム150-10は、クライアントコンピュータシステムノード100-10におけるプロセッサ上で実行されるコードを含む。クライアントコンピュータシステムノード100-10の中のグリッドプログラム150-6、150-7、150-8、及び150-9はそれぞれ、グリッドコンピュータシステムノード100-6、100-7、及び100-8、並びにグリッドコンピュータシステムノード100-9におけるグリッドプログラム150-6、150-7、150-8、及び150-9のコピーである。グリッドプログラム150-6、150-7、150-8、及び150-9は、クライアントコンピュータシステムノード100-10においては実行されない。その代わりに、クライアントコンピュータシステムノード100-10は、グリッドプログラム150-10のプログラムリスト及びその状態情報を表示することに加えて、図6を参照して以下でさらに説明されるように、デバッグを支援するために、グリッドプログラム150-6、150-7、150-8、及び150-9のうちの1つ又は複数のプログラムリスト及びその状態情報を表示することができる。クライアントという用語は便宜上で用いられているだけであり、1つのシナリオでクライアントとして動作するグリッドコンピュータシステムノードが別のシナリオではサーバとして動作することができ、その逆もまた真である。オブジェクト要求ブローカ154-6、154-7、154-8、154-9、及び/又は154-10は、オブジェクト152を、種々のグリッドプログラム150-6、150-7、150-8、150-9、及び/又は150-10によって処理させるために、グリッドコンピュータシステムノード100-6、100-7、100-8、100-9、及び/又は100-10のうちの種々のものに送信することができる。オブジェクトは、グリッドコンピュータシステムノードの間を何回でも移動することができる。一実施形態において、ユーザは、グリッドプログラム150-6、150-7、150-8、150-9、及び/又は150-10をデバックするために、ユーザ入力/出力デバイス121図1を介してデバッグエージェント156-10と対話する。グリッドプログラム150-10の実行が停止している間に、ユーザは、入力/出力デバイス121図1を介して入力されるデバッグコマンドを介して、デバッグエージェント156-10が、オブジェクト152-10又はオブジェクト152-10内のいずれかの1つ又は複数のフィールド上に分散アドレスウォッチをセットすることを要求する。デバッグエージェント156-10は、デバッグコマンドを保存デバッグデータ158-10内に保存する。次いでユーザは、ユーザ入力/出力デバイス121図1を介して、デバッグエージェント156-10がクライアント100-10上で実行されるグリッドプログラム150-10を開始することを要求する。グリッドプログラム150-10が実行され、オブジェクト要求ブローカ154-10を介してグリッドコンピュータシステムノード100-6、100-7、100-8、及び/又は100-9に送信するためのオブジェクト152-10を作成する。デバッグエージェント156-10は、オブジェクト152-10をインターセプトし、保存されたデバッグコマンドとデバッグエージェント156-10の識別子とをオブジェクト152-10に付加して、オブジェクト152-10をグリッドコンピュータシステムノード100-6、100-7、100-8、及び/又は100-9に送信する。グリッドコンピュータシステムノード100-6、100-7、100-8、又は100-9におけるデバッグエージェント156-6、156-7、156-8、又は156-9は、オブジェクト要求ブローカ154-6、154-7、154-8、又は154-9を介してオブジェクト152-10をインターセプトし、デバッグコマンド及びデバッグエージェント156-10の識別子をオブジェクト152-10から除去し、デバッグコマンド及びデバッグエージェント156-10の識別子を保存デバッグデータ158-6、158-7、158-8、又は158-9内に保存し、分散アドレスウォッチをオブジェクト152-10上にセットし、次いで、オブジェクト152-10を処理のためにグリッドプログラム150-6、150-7、150-8、又は150-9に転送する。グリッドプログラム150-6、150-7、150-8、又は150-9の実行がオブジェクト152-10又はオブジェクト152-10内の1つ又は複数のフィールドを変更したことに応答して、デバッグエージェント156-6、156-7、156-8、又は156-9は、グリッドプログラム150-6、150-7、150-8、又は150-9の実行を停止し、保存デバッグデータ158-6、158-7、158-8、又は158-9の中からデバッグエージェント156-10の識別子を見つけ出し、停止されたグリッドプログラム150-6、150-7、150-8、又は150-9の状態をデバッグエージェント156-10に送信する。デバッグエージェント156-10は、コンピュータシステムノード100-6、100-7、100-8、又は100-9において実行中にオブジェクト152-10を変更したグリッドプログラム150-6、150-7、150-8、又は150-9のコピーを見つけ出し、グリッドプログラム150-6、150-7、150-8、又は150-9のコピーを状態情報と共に表示する。図4は、本発明の一実施形態の選択された構成要素の対話を図示するブロック図を示す。デバッグエージェント156は、デバッグユーザインターフェース454と、パーサ458と、インタープリタ460と、ブレークポイントトラップハンドラ464と、デバッグフック466とを含む。デバッグユーザインターフェース454、パーサ458、インタープリタ460、ブレークポイントトラップハンドラ464、及びデバッグフック466は、プロセッサ101上で実行される命令、又はプロセッサ上で実行される命令によって解釈されるステートメントを含む。別の実施形態において、デバッグユーザインターフェース454、パーサ458、インタープリタ460、ブレークポイントトラップハンドラ464、及びデバッグフック466は、プロセッサベースのシステムの代わりに、又はこれに加えて、電子回路、論理ゲート、及び/又はチップによってハードウェアに実装される。デバッグユーザインターフェース454は、ユーザ入力/出力デバイス121を介してユーザと対話することによって、確立すべきブレークポイント及びアドレスウォッチを提供する。幾つかの実施形態において、ユーザは、物理ストレージアドレスをそこから相互参照することができる、プログラム150図1内の高水準言語HLL参照、例えば行番号若しくはステートメント番号又はプログラム名若しくはモジュール名のようなソフトウェアオブジェクト参照を参照するデバッガコマンドを発行することによって、これらのブレークポイントを定めることができる。種々の実施形態において、デバッガコマンドは、コマンドライン上で、又はグラフィカルユーザインターフェースを通じて、発行することができる。パーサ458は、デバッグユーザインターフェース454からのデバッグコマンドを構文解析してコードを作成し、このコードをインタープリタ460がプロセッサ101上での実行のために解釈する。パーサ458は、プログラム150と共に格納されたコンパイラ又はインタープリタによって生成されたテーブルを用いてデバッグコマンドを構文解析し、デバッグコマンド内のコード行番号、コードステートメント番号、変数名、オブジェクト名、又はフィールド名をメモリ102内の実際の物理ストレージアドレスに対してマッピングする。インタープリタ460は、この物理ストレージアドレスをメモリ内に、例えばブレークポイントテーブル内に格納する。インタープリタ460はさらに、プログラム150内にブレークポイントをセットするため、及びプロセッサ機能を介してアドレスウォッチを確立するためのプログラムを動作させる。一実施形態において、インタープリタ460は、ブレークポイント命令を無効な命令に置き換えることによって、プログラム内のブレークポイント命令のところにブレークポイントをセットし、これがプロセッサ上で実行されたときに、プログラム150の実行を停止させ、プロセッサがシステム例外又は割り込みをブレークポイントトラップハンドラ464へと送信するようにさせる。ユーザがブレークポイント及び/又はアドレスウォッチをセットすることを要求した後、ユーザは、デバッグユーザインターフェース454に、プログラム150の実行を再開させることを要求する入力を与える。プログラム150の実行は、ブレークポイントとの遭遇、又はアドレスウォッチが確立されているストレージ位置における内容の変更を最終的にもたらし、これが、システム例外又は割り込みを発生させる。ブレークポイントトラップハンドラ464は、例外又は割り込みを受信し、例外又は割り込みに関する情報をデバッグフック466に渡す。次いで、デバッグユーザインターフェース454が、デバッガコマンドを取得するためにデバッグフック466を利用する。デバッグフック466は、デバッグユーザインターフェース454とブレークポイントトラップハンドラ464との間にインターフェースが必要な事例について図示されている。一実施形態において、デバッグフック466は、図示していない結果バッファを利用して、デバッグユーザインターフェース454のためのデータをキャッシュすることができる。デバッグユーザインターフェース454を介して入力された、ブレークポイント命令に遭遇したプログラムの実行の後でプログラムの実行の再開を要求するコマンドに応答して、インタープリタ460は、ブレークポイント位置にある無効な命令をプログラム150の元の有効な命令で置き換え、プロセッサ101上で実行されるプログラム150を再び開始する。図5は、本発明の一実施形態による、ユーザI/Oデバイス121上に表示される例示的なデバッグユーザインターフェースのブロック図を示す。例示的なデバッグユーザインターフェースは、クライアント100-5図2又は100-10図3において、ユーザI/Oデバイス121を介して表示される。例示的なデバッグユーザインターフェースは、プログラムリスト500と、プログラムリストprogramlistingコマンド580、582、及び584と、セットブレークポイントsetbreakpointコマンド545と、セット分散アドレスウォッチsetdistributedaddresswatchコマンド550と、ランコマンド555と、イネーブルデバッグenabledebugコマンド560と、ディスエーブルデバッグdisabledebugコマンド565とを含む。種々のコマンド580、582、584、555、560、及び565は、表示デバイス上に表示されたボタンとして図示されており、これらはマウス、タッチパッド、トラックパッド、ポインティングデバイス、又はキーボードのような入力デバイスを介して選択されるが、他の実施形態において、コマンドは、ダイアル、スライダ、ウィジェット、メニューオプション、ラインコマンド、マイクロフォンと音声認識コマンドとを介して入力されるコマンド、又は任意の他の適切なタイプのユーザ入力として実装することができる。コマンド545及び550はラインコマンドとして図示されているが、他の実施形態において、コマンド545及び550は、ボタン、ダイアル、スライダ、ウィジェット、メニューオプション、マイクロフォンと音声認識コマンドとを介して入力されるコマンド、又は任意の他の適切なタイプのユーザ入力として実装することができる。プログラムリスト500は、プログラム150-1、150-2、150-3、150-4、150-5、150-6、150-7、150-8、150-9、又は150-10内のソース及び/又はオブジェクトコードステートメント又は命令のリストを表示する。プログラムの実行が停止された場合には、プログラムリストはさらに、プログラムの実行が停止されたステートメント番号又は命令番号の指標505を含む。プログラムリストコマンド580、582、及び584は、デバッグエージェント156がプログラムリスト500をプログラム150-1、150-2、150-3、150-4、150-5、150-6、150-7、150-8、150-9、又は150-10の間で変更することを要求する。プログラムリストコマンド580、582、及び584に応答して、デバッグエージェント156は選択されたプログラムについてのプログラムリストを表示し、これは、もしあれば、表示されたプログラムが実行されたコンピュータにおいてプログラムの実行が停止したステートメント番号又は命令番号の指標を含む。表示されたプログラムが実行されるコンピュータシステムノードは、プログラムリストが表示されるクライアントと同じでもよく、又は異なっていてもよい。ブレークポイントコマンド545は、デバッグエージェント156がコンピュータシステムノードにおけるプログラム内の位置にブレークポイントをセットすることを要求する。ブレークポイントがセットされることが要求されるコンピュータシステムノードは、ブレークポイントコマンド545が発行されるクライアントと同じでもよく、又は異なっていてもよい。コマンドは、ステートメント番号若しくは命令番号によって、又は機能、モジュール、メソッド若しくはプロシージャによって、位置を指定することができる。セット分散アドレスウォッチコマンド550は、デバッグエージェント156が、オブジェクトが格納されている又は将来格納されることになる1つのコンピュータシステムノード又は全てのコンピュータシステムノードにおいてメモリアドレス上にウォッチを確立することを要求する。アドレスウォッチがセットされることが要求されるコンピュータシステムノードは、アドレスウォッチコマンド550が発行されるクライアントと同じでもよく、又は異なっていてもよい。分散アドレスウォッチコマンドは、オブジェクト名、ポインタ名、変数名、フィールド名、又はファイル名によってアドレスを指定することができる。分散アドレスウォッチコマンド550に応答して、デバッグエージェント156は、指定されたコンピュータシステムノード又は全てのコンピュータシステムノードにおけるプロセッサ内にアドレスウォッチ機能をセットし、これが、デバッグエージェント156が指定したアドレスにおけるメモリの内容をプロセッサが変更したときに、プロセッサに割り込み又はシステム例外を生じさせる。プログラムがアドレスウォッチによって指定されたストレージ位置の内容を変更するのに応答して、デバッグエージェント156は、ストレージを変更している命令のところでプログラムを止める。したがって、アドレスウォッチブレークポイント命令は、アドレスウォッチブレークポイントとして監視されているメモリページ内の位置にアクセスするロード又はストア命令である。ランコマンド555は、どのコンピュータシステムノードにおいてプログラムが実行されているかに関わりなく、プログラムリスト500によって表示されている停止されたプログラムの実行を再開することを要求する。ランコマンドに応答して、デバッグエージェント156は、停止されたプログラムの実行を再び開始する。デバッグユーザインターフェースは、他のデバッグコマンド、例えば、停止されたプログラムを1つの命令又は指定された任意の数の命令にわたって実行することを要求するステップコマンドを含むことができる。イネーブルデバッグコマンド560は、デバッグ処理をイネーブルにすることを要求する。イネーブルデバッグコマンド560に応答して、デバッグエージェント156は、ネットワークリソース154内のインストルメンテーションコードをイネーブルにする。インストルメンテーションコードは、パケット又はオブジェクト152をコンピュータシステムノードに送信する/又はコンピュータシステムノードから受信する要求の実行に応答して、デバッグエージェント156を呼び出す。ディスエーブルデバッグコマンド565は、デバッグ処理をオフにする又は停止することを要求する。ディスエーブルデバッグコマンド565に応答して、デバッグエージェント156は、ネットワークリソース154内のインストルメンテーションコードをディスエーブルにするので、もはやインストルメンテーションコードは、パケット又はオブジェクト152をコンピュータシステムノードに送信する/又はコンピュータシステムノードから受信する要求の実行に応答してデバッグエージェント156を呼び出さないようになる。図6は、本発明の一実施形態による、ユーザI/Oデバイス121上に表示される例示的なデバッグユーザインターフェースのブロック図を示す。図6に図示される例示的なデバッグユーザインターフェースは、クライアント100-5図2又は100-10図3においてユーザI/Oデバイス121を介して表示される。図6の例示的なデバッグユーザインターフェースは、プログラムリスト600と、ディスプレイ状態displaystateコマンド605と、プログラムリスト600によって表されるサーバプログラム150-1図2の状態610の表示とを含む。プログラムリスト600は、プログラムリスト600が表示されるクライアントコンピュータシステムノード100-5とは異なるコンピュータシステムノードであるコンピュータシステムノードA100-1において実行されるサーバプログラム150-1図2内のソース及び/又はオブジェクトコードステートメント又は命令のリストを表示する。クライアントコンピュータシステムノード100-5におけるデバッグエージェント156は、プログラムリストコマンド582に応答して、プログラムリスト600を表示する。図6の例において、状態610は、サーバコンピュータシステムノードA100-1において実行されるプログラム150-1によって読み出される又は書き込まれる、変数Jと名づけられた、サーバコンピュータシステムノードA100-1におけるメモリ位置の内容である。他の実施形態において、状態610は、いずれかのサーバコンピュータシステムノード又はグリッドコンピュータシステムノードにおいて実行されるプログラムによって読み出される又は書き込まれるいずれかの変数、パラメータ、メモリ位置、ポインタ、データ構造体、ファイル、レジスタ、データベースフィールド、又はレコードの内容とすることができる。一実施形態において、状態610は、ブレークポイントに遭遇した又はアドレスウォッチによって監視されているアドレスにおける内容を変更したステートメント又は命令の識別子、及びブレークポイントに遭遇した又はアドレスウォッチによって監視されているアドレスにおける内容を変更したプログラムのスレッドの識別子を含むことができる。プログラムの実行スレッドは、プログラムの2つ又はそれ以上の並列に動作するタスク又はスレッドの分岐の結果生じる。一実施形態において、複数のスレッドはメモリなどのリソースを共用するが、別の実施形態において、スレッドはメモリを共用しない。一実施形態において、複数のスレッドを異なるプロセッサにおいて同時に又は並列に実行することができる。別の実施形態において、複数のスレッドは時分割多重方式又はマルチタスク方式によって単一のプロセッサ上で実行され、この場合、単一のプロセッサは、スレッドが同時に実行されているとユーザが認識するほど十分に頻繁に生じるコンテキストスイッチを通じて異なるスレッド間での切り換えを行う。他の実施形態において、状態610は、プログラムリスト600にリストが表示されているプログラムのコールスタック、実行スタック、ランタイムスタック、関数スタック、又は呼び出しスタックとすることができる。コールスタックは、サブルーチンのリターンアドレスサブルーチンが終了した後で命令が戻る位置、サブルーチンによって読み出し又は書き込みされるローカル変数の値、サブルーチンに渡されるパラメータ、数値演算又は論理演算のオペランドの評価スタック、サブルーチンの現在のインスタンスへのポインタ、エンクローズされたサブルーチンのコンテキスト、及び/又はサブルーチンの特権又は権限レベルのうちの幾つか又は全てを含む、実行中のプログラムのアクティブなメソッド、プロシージャ、又はサブルーチンの情報を格納する。図7は、本発明の一実施形態による例示的な保存デバッグデータ158のブロック図を示す。保存デバッグデータ158は、保存デバッグデータ158-1、158-2、158-3、158-4、158-5、158-6、158-7、158-8、158-9、及び158-10の例であり、これらを総称的に表す。種々の実施形態において、かつ種々の時点において、保存デバッグデータ158-1、158-2、158-3、158-4、158-5、158-6、158-7、158-8、158-9、及び158-10の各々は異なるデータを含んでいてもよく、又はその幾つか若しくは全てが同一又は部分的に同一のデータを含んでいてもよい。例示的な保存デバッグデータ158は、例示的な行702及び704を含み、その各々がデバッグコマンドフィールド710と、クライアントコンピュータシステムデバッグエージェント識別子フィールド712と、処理コンピュータシステムノード識別子フィールド714とを含む。デバッグコマンドフィールド710は、同じ行内のクライアントコンピュータシステムデバッグエージェント識別子フィールド712によって識別されるクライアントデバッグエージェントがユーザインターフェースから受信したデバッグコマンドを格納する。一実施形態において、クライアントコンピュータシステムデバッグエージェント識別子フィールド712は、デバッグエージェント156、並びに、クライアントデバッグエージェントが実行されるクライアントコンピュータシステムノード又はクライアントコンピュータシステムノードのネットワークアドレスの両方を識別する。処理コンピュータシステムノード識別子フィールド714は、同じ行内のデバッグコマンドを処理、実行、又は実施すべきことをユーザがユーザインターフェースを介して要求したコンピュータシステムノードの識別子を格納する。例えば、行702は、クライアントコンピュータシステムノード712ノードEにおけるユーザインターフェースから受信したデバッグコマンド710パケットを受信したときにブレークポイントをセットするが、パケットを受信する処理コンピュータシステムノード714ノードA、ノードB、及びノードC内のステートメントにブレークポイントをセットすることを要求することを示す。別の例として、行704は、クライアントコンピュータシステムノード712ノードEにおけるユーザインターフェースから受信したデバッグコマンド710オブジェクトAの全てのフィールドに対して分散アドレスウォッチをセットするが、全てのコンピュータシステムノードにおいてアドレスウォッチ機能を確立することを要求することを示す。図8は、本発明の一実施形態によるイネーブルデバッグコマンドについての例示的な処理のフローチャートを示す。制御はブロック800において開始する。制御は次にブロック805へと続き、クライアントにおけるデバッグエージェント156がデバッグユーザインターフェースからイネーブルデバッグコマンド560を受信する。イネーブルデバッグコマンド560に応答して、制御は次にブロック810へと続き、クライアントコンピュータシステムノードにおけるデバッグエージェント156が、クライアントコンピュータシステムノード及び全てのサーバコンピュータシステムノード又はグリッドコンピュータシステムノードにおけるネットワークリソース154又はオブジェクト要求ブローカにおいてインストルメンテーションコードをイネーブルにするか、オンにするか、又は付加する。一実施形態において、デバッグエージェント156は、全てのサーバコンピュータシステムノード又はグリッドコンピュータシステムノードに対して、それぞれのネットワークリソース154又はオブジェクト要求ブローカにおいてインストルメンテーションコードを付加するか、オンにするか、又はイネーブルにするように命令する要求を送信する。サーバコンピュータシステムノード又はグリッドコンピュータシステムノードにおけるデバッグエージェント156は、要求を受信し、これに応答して、それぞれのネットワークリソース154又はオブジェクト要求ブローカにおいてインストルメンテーションコードを付加するか、オンにするか、又はイネーブルにする。制御は次にブロック899へと続き、図8の論理が戻る。図9は、本発明の一実施形態によるディスエーブルデバッグコマンドについての例示的な処理のフローチャートを示す。制御はブロック900において開始する。制御は次にブロック905へと続き、クライアントコンピュータシステムノードにおけるデバッグエージェント156が、デバッグユーザインターフェースからディスエーブルデバッグコマンド565を受信する。ディスエーブルデバッグコマンドに応答して、制御は次にブロック910へと続き、クライアントコンピュータシステムノードにおけるデバッグエージェント156が、クライアントコンピュータシステムノード及び全てのサーバコンピュータシステムノード又はグリッドコンピュータシステムノードにおけるネットワークリソース154又はオブジェクト要求ブローカにおいてインストルメンテーションコードをディスエーブルにするか、オフにするか、又は除去する。一実施形態において、デバッグエージェント156は、全てのサーバコンピュータシステムノード又はグリッドコンピュータシステムノードに対して、それぞれのネットワークリソース154又はオブジェクト要求ブローカにおいてインストルメンテーションコードを除去するか、オフにするか、又はディスエーブルにするように命令する要求を送信する。サーバコンピュータシステムノード又はグリッドコンピュータシステムノードにおけるデバッグエージェント156は、要求を受信し、これに応答して、それぞれのネットワークリソース154又はオブジェクト要求ブローカにおいてインストルメンテーションコードを除去するか、オフにするか、又はディスエーブルにする。制御は次にブロック999へと続き、図9の論理が戻る。図10は、本発明の一実施形態によるブレークポイント及び分散アドレスウォッチコマンドについての例示的な処理のフローチャートを示す。制御はブロック1000において開始する。制御は次にブロック1005へと続き、クライアントにおけるデバッグエージェント156が、セットブレークポイントコマンド545、セット分散アドレスウォッチコマンド550、ランコマンド555、又は任意の他の適切なデバッグコマンドといったデバッグコマンドをデバッグユーザインターフェースから受信する。デバッグコマンドの受信に応答して、制御は次にブロック1010へと続き、デバッグコマンドがクライアントにおいて実施されることをデバッグコマンドが指定している場合、又はデバッグコマンドが全てのコンピュータシステムノードにおいて実施されることをデバッグコマンドが指定している場合には、デバッグエージェント156は、そのデバッグコマンドを実施又は実行し、例えば、クライアントコンピュータシステムノードにおいて実行されるプログラム内にブレークポイントをセットし、クライアントコンピュータシステムノードに格納されたオブジェクトに対してアドレスウォッチをセットし、クライアントコンピュータシステムノードにおいて実行されるプログラムを開始し、又はクライアントコンピュータシステムノードにおけるプログラムを1つの命令若しくはステートメント毎に又は指定された数の命令若しくはステートメント毎にステップで実行する。デバッグコマンドがクライアントコンピュータシステムノードとは異なるサーバ/グリッドノードを指定している場合、又はデバッグコマンドが全てのノードを指定している場合には、クライアントコンピュータシステムノードにおけるデバッグエージェント156は、受信したデバッグコマンドセットブレークポイントコマンド、セット分散アドレスウォッチコマンド、ランコマンド、又はステップコマンド、クライアントデバッグエージェント156の識別子、及び処理ノードデバッグコマンドが実施される、1つ又は複数の指定されたサーバ若しくはグリッドコンピュータシステムノード又は全てのノードの識別子を、クライアントコンピュータシステムノードのメモリ内の保存デバッグデータ158に保存する制御は次にブロック1099へと続き、図10の論理が戻る。図11は、本発明の一実施形態による、データパケットを送信するための例示的な処理のフローチャートを示す。制御はブロック1100において開始する。制御は次にブロック1105へと続き、クライアントコンピュータシステムノード又はいずれかのサーバコンピュータシステムノード若しくはグリッドコンピュータシステムノードにおけるプログラムが、データのパケット152を作成するか、オブジェクトを作成するか、又は図12のブロック1240を参照して以下でより詳細に説明されるように以前に別のコンピュータシステムノードから受信した既存のパケット/オブジェクトを見つけ出し、そのパケット152又はオブジェクトをネットワークリソース154又はオブジェクト要求ブローカに送信する。パケットは、そのパケットの宛先コンピュータノードを識別する宛先コンピュータノード識別子を指定する。宛先ノード識別子によって識別される宛先コンピュータは、その宛先コンピュータにおいて実行される、パケットを受信及び処理することが意図されるプログラムを含む。制御は次にブロック1110へと続き、ネットワークリソース154又はオブジェクト要求ブローカが、自身のインストルメンテーションコードがイネーブルにされているか又は存在しているかどうかを判定する。ブロック1110における判定が真である場合には、インストルメンテーションコードはイネーブルにされているか又は存在しているので、制御はブロック1115へと続き、ネットワークリソース154又はオブジェクト要求ブローカ内のインストルメンテーションコードが、パケット152又はオブジェクトをネットワークを介して宛先コンピュータシステムノード宛先コンピュータノード識別子によって識別されるに送信する代わりに、パケット152又はオブジェクトをネットワークリソース154と同じコンピュータノードにあるデバッグエージェント156に送信する。制御は次にブロック1120へと続き、デバッグエージェント156が、パケット152又はオブジェクトを受信し、これに応答して、デバッグエージェント156のコンピュータシステムノードになんらかの保存デバッグデータ158が存在するかどうかを判定する。ブロック1120における判定が真である場合には、保存デバッグデータ158がデバッグエージェント156のコンピュータシステムノードに存在しているので、制御はブロック1125へと続き、デバッグエージェント156は、保存デバッグデータ158から、クライアントデバッグエージェントの保存された識別子712と、そのデバッグコマンドについての1つ若しくは複数の処理ノードの保存された識別子714又は全てのノードの指標と、保存されたデバッグコマンド710とを、保存デバッグデータ158内の全ての行について、パケット152又はオブジェクトに付加する。一実施形態において、処理ノード識別子は、パケットが送信されるコンピュータノードを識別する宛先ノード識別子と同一である。別の実施形態において、処理ノード識別子は、宛先ノード識別子とは異なる。処理ノード識別子と宛先ノード識別子は、パケット又はオブジェクトが複数のノード間で送信される実施形態においては異なることがある。例えば、図2において、クライアントコンピュータシステムノード100-5におけるユーザが、サーバ100-1、100-2、又は100-3のうちの1つ又は複数にブレークポイント又はアドレスウォッチをセットすることを望むが、負荷バランササーバノード100-4にはセットすることを望まない場合であっても、クライアントコンピュータシステムノード100-5からのパケットは最初に負荷バランササーバノード100-4に送信され、そこから他のノードに送信される。したがって、クライアントコンピュータシステムノード100-5がパケットを送信する宛先ノードは負荷バランササーバノード100-4なので、クライアントコンピュータシステムノード100-5におけるプログラム150-5は、パケット内の宛先ノード識別子が負荷バランササーバノード100-4を示すようにセットするが、デバッグエージェント156-5は、処理ノード識別子714を、ユーザがブレークポイント又はアドレスウォッチをセットすることを望むサーバ100-1、100-2、及び/又は100-3を示すようにセットする。別の例として、図3において、クライアントグリッドノード100-10におけるユーザが、グリッドノード100-7にブレークポイント又はアドレスウォッチをセットすることを望むが、グリッドプログラム150-10がオブジェクトをグリッドノード100-9に送信する場合がある。グリッドノード100-9はその後、オブジェクトをグリッドノード100-6に送信し、グリッドノード100-6はオブジェクトをグリッドノード100-8に送信し、グリッドノード100-8は最終的にオブジェクトをグリッドノード100-7に送信する。したがって、クライアントグリッドノード100-10におけるデバッグエージェント156-10は処理ノード識別子714をグリッドノード100-7を示すようにセットするが、グリッドプログラム150-10はオブジェクト内の宛先ノード識別子をグリッドノード100-9を示すようにセットする。クライアントデバッグエージェントの保存された識別子712は、保存されたデバッグコマンド710を最初に要求したクライアントコンピュータシステムノードにおけるクライアントデバッグエージェントを識別し、このクライアントコンピュータシステムノードは、図11の論理を現在実行中のコンピュータシステムノードとは異なっていてもよいが必ずしも異なっているとは限らない。デバッグエージェント156は、保存デバッグデータ158内の全てのレコード全ての保存されたデバッグコマンドにわたってブロック1125の処理を実施する。制御は次にブロック1130に続き、デバッグエージェント156は、パケット152又はオブジェクトを、クライアントデバッグエージェント156の識別子、デバッグコマンド、及びデバッグコマンドのための処理ノード識別子と共に、パケット/オブジェクトの宛先サーバコンピュータシステムノード又は宛先グリッドコンピュータシステムノードに送信する。制御は次にブロック1199へと続き、図11の論理が戻る。ブロック1120における判定が偽である場合には、そのコンピュータシステムノードにおける保存デバッグデータ内に保存されたデバッグコマンドは存在していないので、制御はブロック1130へと続き、デバッグエージェント156は、保存されたデバッグコマンドも、保存された処理ノード識別子も、保存されたクライアントデバッグエージェント識別子もパケット152又はオブジェクトに付加することなく、パケット152又はオブジェクトを宛先コンピュータシステムノードに送信する。制御は次にブロック1199に続き、図11の論理が戻る。ブロック1110における判定が偽である場合には、ネットワークリソース154又はオブジェクト要求ブローカの中にインストルメンテーションコードは存在しないか又はイネーブルにされていないので、制御はブロック1135へと続き、ネットワークリソース154又はオブジェクト要求ブローカは、パケット/オブジェクトをデバッグエージェントに送信することなく、また保存されたデバッグコマンドも、保存された処理ノード識別子も、保存されたクライアントデバッグエージェント識別子もパケット152又はオブジェクトに付加することなく、パケット152又はオブジェクトを宛先コンピュータシステムノードに送信する。制御は次にブロック1199へと続き、図11の論理が戻る。図12は、本発明の一実施形態による、データパケット又はオブジェクトをネットワークから受信するための例示的な処理のフローチャートを示す。制御はブロック1200において開始する。制御は次にブロック1205へと続き、受信コンピュータノードにおけるいずれかのクライアントコンピュータシステムノード又はいずれかのサーバ/グリッドコンピュータシステムノードにおけるネットワークリソース154又はオブジェクト要求ブローカが、起点コンピュータシステムノードからネットワーク130を介してパケット152又はオブジェクトを受信する。制御は次にブロック1210へと続き、ネットワークリソース154又はオブジェクト要求ブローカは、受信したパケット152又はオブジェクトが、デバッグコマンド例えば、セットブレークポイントコマンド、セットアドレスウォッチコマンド、ランコマンド、又はステップコマンド、デバッグコマンドを始動したクライアントデバッグエージェント156の識別子、及びデバッグコマンドが実施される処理ノードの識別子を含むかどうかを判定する。ブロック1210における判定が真である場合には、受信したパケット152又はオブジェクトはデバッグコマンド、クライアントデバッグエージェント156の識別子、及び処理ノード識別子を含んでいるので、制御はブロック1215へと続き、ネットワークリソース154又はオブジェクト要求ブローカ内のインストルメンテーションコードが、受信したパケット152又はオブジェクトを、パケット/オブジェクトをローカルコンピュータシステムノードにおけるグリッド/サーバプログラムに送信する代わりに、インストルメンテーションコード及びデバッグエージェントが実行される、ローカルコンピュータシステムノードにおけるデバッグエージェント156に送信する。制御は次にブロック1220へと続き、デバッグエージェント156が、パケット/オブジェクト152を受信し、デバッグコマンド、クライアントデバッグエージェント156の識別子、及び処理ノード識別子をパケット/オブジェクト152から除去する。制御は次にブロック1225に続き、デバッグエージェント156は、除去されたデバッグコマンド、除去された処理ノード識別子、及び除去されたクライアントデバッグエージェントの識別子を保存デバッグデータ158に保存する。制御は次にブロック1230へと続き、デバッグエージェント156は、受信コンピュータノードネットワークリソース及びデバッグエージェントが実行されるノードの受信コンピュータノード識別子が、パケット152又はオブジェクト内の処理ノード識別子と合致するその処理ノード識別子と同一である、その処理ノード識別子に含まれる若しくは包含される、又はそのうちの1つであるかどうかを判定する。ブロック1230における判定が真である場合には、受信コンピュータノード識別子は処理ノード識別子と合致しているので、制御はブロック1235へと続き、デバッグエージェント156が、除去及び保存されたデバッグコマンドを実行又は実施する。例えば、デバッグエージェント156は、ローカルプログラム内にブレークポイントをセットし、受信コンピュータノード内のメモリ位置にアドレスウォッチを確立し、又は受信コンピュータノードにおけるローカルプログラムの実行を開始させ、又は指定の数の命令若しくはステートメント毎にステップで実行させる。制御は次にブロック1240へと続き、デバッグエージェント156は、パケット152又はオブジェクトを、そのデバッグエージェント156の受信コンピュータシステムノードにおけるローカルプログラムに、除去されたデバッグコマンド、除去された処理ノード識別子、及び除去されたクライアントエージェント識別子なしで送信する。ローカルプログラムは、同じ受信コンピュータノードで実行され、パケット/オブジェクト152を、例えばデータの読み出し若しくは書き込みを行うことによって、又はパケット/オブジェクト152によって指示される要求若しくはコマンドを実施することによって、受信及び処理する。プログラムの処理は、上記で図11を参照して説明されたように、パケット/オブジェクト152を別のコンピュータシステムノードに送信するよう要求することを含むことができる。制御は次にブロック1299へと続き、図12の論理が戻る。ブロック1230における判定が偽である場合には、パケット/オブジェクトを受信した受信コンピュータノードの受信コンピュータノード識別子は、パケット/オブジェクト内のデバッグコマンドの処理ノード識別子と合致していないので、制御はブロック1240へと続き、デバッグエージェント156は、パケット/オブジェクト152を、そのデバッグエージェント156の受信コンピュータシステムノードにおけるローカルプログラムに、除去されたデバッグコマンド、除去された処理ノード識別子、及び除去されたクライアントエージェント識別子なしで送信し、デバッグエージェント156は除去されたデバッグコマンドを実行又は実施しない。ローカルプログラムは同じコンピュータノードで実行され、パケット152又はオブジェクトを、例えばデータの読み出し若しくは書き込みを行うことによって、又はパケット/オブジェクト152によって指示される要求若しくはコマンドを実施することによって、受信及び処理する。プログラムの処理は、上記で図11を参照して説明されたように、パケット/オブジェクト152を別のコンピュータシステムノードに送信するよう要求することを含むことができる。制御は次にブロック1299へと続き、図12の論理が戻る。ブロック1210における判定が偽である場合には、受信したパケット/オブジェクト152はデバッグコマンド、処理ノード識別子、及びクライアントデバッグエージェント156の識別子を含んでいないので、制御はブロック1245へと続き、ネットワークリソース154又はオブジェクト要求ブローカは、パケット/オブジェクト152をデバッグエージェント156に送信することなく、同じコンピュータノード受信コンピュータノードにあるローカルプログラムに送信する。ローカルプログラムは同じ受信コンピュータノードで実行され、パケット152又はオブジェクトを、例えばデータの読み出し若しくは書き込みを行うことによって、又はパケット/オブジェクト152によって指示される要求若しくはコマンドを実施することによって、受信及び処理する。プログラムの処理は、上記で図11を参照して説明されたように、パケット/オブジェクト152を別のコンピュータシステムノードに送信するよう要求することを含むことができる。制御は次にブロック1299へと続き、図12の論理が戻る。図13は、本発明の一実施形態による、ブレークポイント又はアドレスウォッチの割り込みを処理するための例示的な処理のフローチャートを示す。制御はブロック1300において開始する。制御は次にブロック1305へと続き、いずれかのコンピュータシステムノードにおけるデバッグエージェント156が割り込み又はシステム例外を受信し、そのコンピュータシステムノードにおけるプログラム又はプログラムの1つの特定のスレッドの実行が、ある命令のところで停止される。割り込み又はシステム例外は、プログラム又はプログラムのスレッド内の命令の実行が、ブレークポイントがセットされた命令に遭遇したか、若しくはその命令の実行を試みたこと、又はアドレスウォッチ機能によって監視されているアドレスのメモリ内容が、実行中のプログラム又はスレッドの命令によって変更されたことを示す。一実施形態において、プログラムは、ブレークポイント又はアドレスウォッチ機能をセット又は始動させたデバッグコマンドが付加されたパケット又はオブジェクトを処理し、実行し、実施し、取り扱い、又は応答している間に、そのブレークポイントに遭遇したか、又はそのアドレスウォッチによって監視されているアドレスの内容を変更した。別の実施形態において、プログラム内の命令は、デバッグコマンドが付加されていないパケット又はオブジェクトを処理し、実行し、実施し、取り扱い、若しくは応答している間に、又はプログラムによって受信されたどのパケットとも無関係な処理を実施している間に、そのブレークポイントに遭遇したか、又はそのアドレスウォッチ処理によって監視されているアドレスの内容を変更した。別の実施形態において、プログラム内の命令は、割り込みを生じさせた遭遇したブレークポイント又は監視されたアドレスとは無関係な、異なるデバッグコマンドが付加されたパケット又はオブジェクトを処理し、実行し、実施し、取り扱い、又は応答している間に、そのブレークポイントに遭遇したか、又はそのアドレスウォッチ処理によって監視されているアドレスの内容を変更した。制御は次にブロック1310へと続き、デバッグエージェント156は、保存デバッグデータ158の中から、割り込み又はシステム例外を生じさせたブレークポイント又はアドレスウォッチを要求したクライアントデバッグエージェント156の保存された識別子712を見つけ出す。制御は次にブロック1315へと続き、デバッグエージェント156は、停止されたプログラムの状態及び停止されたプログラムの識別子及び/又は停止されたプログラムのスレッドの識別子を、保存されたクライアントデバッグエージェント識別子712によって識別されるクライアントデバッグエージェント156に送信する。制御は次にブロック1399へと続き、図13の論理が戻る。図14は、本発明の一実施形態による、ネットワークから状態を受信するための例示的な処理のフローチャートを示す。制御はブロック1400において開始する。制御は次にブロック1405へと続き、クライアントデバッグエージェント156は、ネットワーク130を介して、そのクライアントデバッグエージェント156が実行されるコンピュータシステムノードとは異なる別のコンピュータシステムノード上でブレークポイントに遭遇すること又はアドレスウォッチによって監視されていたメモリ位置の内容を変更することによって実行を停止された、プログラム/スレッドの状態及びそのプログラム/スレッドの識別子を受信する。制御は次にブロック1410へと続き、クライアントデバッグエージェント156は、そのクライアントデバッグエージェント156が実行されるローカルコンピュータにおいて、停止されたプログラムの受信した識別子と合致する識別子を有する停止されたプログラムのコピーこれは、一実施形態において、クライアントデバッグエージェントのローカルコンピュータにおいて実行されないを見つけ出し、受信したプログラムの状態及びプログラムリストのコピーを、ユーザI/Oデバイス121を介して提示表示デバイスを介して表示、プリンタを介して印刷、又はスピーカデバイスを介して再生する。制御は次にブロック1499へと続き、図14の論理が戻る。本明細書において用いられる用語は、特定の実施形態を説明する目的のみで用いられており、本発明を限定することを意図するものではない。本明細書において用いられる単数形の1つのa、1つのan、及びそのtheは、文脈が明らかにそうでないことを示していない限り、複数形を含むことが意図されている。含むcomprises及び/又は含むcomprisingという用語は、本明細書において用いられる場合、述べられた特徴、整数、ステップ、操作、要素、及び/又は構成要素が存在することを特定しているが、1つ又は複数の他の特徴、整数、ステップ、操作、要素、構成要素、及び/又はその群の存在又は付加を除外するものではないことがさらに理解されよう。前述の本発明の例示的な実施形態の詳細な説明において、添付の図面ここで同様の符号は同様の要素を表すが参照されており、これらの図面は、本明細書の一部を成しており、かつ本発明を実施することができる具体的な例示的な実施形態が例証として示されている。これらの実施形態は、当業者が本発明を実施することができるように十分詳細に説明したが、他の実施形態を用いることもでき、また、本発明の範囲から逸脱することなく、論理的、機械的、電子的、及びその他の変更を行うことができる。前述の説明において、本発明の実施形態を完全に理解してもらうために多数の具体的な詳細を記述した。しかし、本発明の実施形態は、これらの具体的な詳細なしで実施することができる。他の例において、本発明の実施形態を不明瞭にしないために、周知の回路、構造、及び技術は詳細に示さなかった。本明細書内で用いられる実施形態という語の異なる事例は、必ずしも同じ実施形態を指すとは限らないが、同じ実施形態を指すこともある。本明細書において図示又は説明されたどのデータ及びデータ構造体も単なる例であり、他の実施形態において、異なるデータ量、データタイプ、フィールド、フィールドの数及びタイプ、フィールド名、行、レコード、エントリの数及びタイプ、又はデータの編成を用いることができる。加えて、どのデータも論理と組み合わせることができるので、独立したデータ構造体は必須ではない。従って、前述の詳細な説明は限定的な意味で解釈されるべきではなく、本発明の範囲は添付の特許請求の範囲のみによって定められる。