"クラスタコンピューティングシステムを含むコンピューティング環境において、デバッギングプロセスを起動する方法であって、クラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを、パブリックネットワーク上のクライアントから、ヘッドノードのスケジューラを介して受信するステップであって、前記ヘッドノードは、前記クラスタプライベートネットワークおよび前記パブリックネットワークの両方に接続され、前記パブリックネットワークは、前記クラスタプライベートネットワークの外部に存在する、ステップと、前記デバッグジョブを処理することに着手し、結果として、前記コンピュートノードにおいて1つまたは複数のデバッガリモートエージェントを始動させることによって、デバッギングを開始するステップと、前記コンピュートノードにおいて、前記始動させたデバッガリモートエージェントの存在下で、ユーザジョブを処理することに着手するステップと、前記ユーザジョブをデバッグする準備が前記1つまたは複数のデバッガリモートエージェントにおいて整ったことを前記クライアントに通知するステップと、結果として、前記クライアントにおけるデバッガクライアントを前記1つまたは複数のデバッガリモートエージェントに接続するステップとを含むことを特徴とする方法。前記クライアントは、リスナを備え、1つまたは複数の仲介手段を介する前記クライアントから前記コンピュートノードへの通信は、前記リスナからのものであることを特徴とする請求項1に記載の方法。通信は、前記クライアントからプルされることを特徴とする請求項2に記載の方法。通信は、前記クライアントからプッシュされることを特徴とする請求項2に記載の方法。前記クライアントと前記コンピュートノードの間の通信は、前記パブリックネットワークと前記クラスタプライベートネットワークの両方に結合されたシステム上のプロキシを介するものであることを特徴とする請求項1に記載の方法。前記クライアントと前記コンピュートノードの間の通信は、前記パブリックネットワークと前記クラスタプライベートネットワークの両方に結合されたシステム上のNATサービスを介するものであることを特徴とする請求項1に記載の方法。前記ユーザジョブを前記パブリックネットワーク上の前記クライアントから前記ヘッドノードの前記スケジューラを介して受信するステップをさらに含むことを特徴とする請求項1に記載の方法。前記クライアントと前記コンピュートノードの間の通信を円滑化するために、1つまたは複数のプロキシポートをオープンするステップをさらに含み、前記1つまたは複数のプロキシポートは、13225から13719までの範囲から選択されることを特徴とする請求項1に記載の方法。前記クライアントは、クラスタコンピューティング用のアプリケーションを開発するために開発者によって使用される開発者アプリケーションを含み、前記クライアントからのメッセージは、前記開発者アプリケーションから受信されることを特徴とする請求項1に記載の方法。クラスタコンピューティングシステムを含むコンピューティング環境において、デバッギングプロセスをアタッチする方法であって、ユーザジョブを実行しているクラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを始動させるためのメッセージを、パブリックネットワーク上のクライアントから、前記クラスタプライベートネットワークと前記パブリックネットワークの両方に接続されたシステムを介して受信するステップであって、前記パブリックネットワークは、前記クラスタプライベートネットワークの外部に存在する、ステップと、前記デバッグジョブを処理することに着手し、結果として、前記コンピュートノードにおいて1つまたは複数のデバッガリモートエージェントを始動させることによって、前記ユーザジョブのデバッギングを開始するステップと、前記ユーザジョブをデバッグする準備が前記1つまたは複数のデバッガリモートエージェントにおいて整ったことを前記クライアントに通知するステップと、結果として、前記クライアントにおけるデバッガクライアントを前記1つまたは複数のデバッガリモートエージェントに接続するステップとを含むことを特徴とする方法。前記クライアントは、リスナを備え、1つまたは複数の仲介手段を介する前記クライアントから前記コンピュートノードへの通信は、前記リスナからのものであることを特徴とする請求項10に記載の方法。通信は、前記クライアントからプルされることを特徴とする請求項11に記載の方法。通信は、前記クライアントからプッシュされることを特徴とする請求項11に記載の方法。前記クライアントと前記コンピュートノードの間の通信は、前記パブリックネットワークと前記クラスタプライベートネットワークの両方に結合されたシステム上のプロキシを介するものであることを特徴とする請求項10に記載の方法。前記クライアントと前記コンピュートノードの間の通信は、前記パブリックネットワークと前記クラスタプライベートネットワークの両方に結合されたシステム上のNATサービスを介するものであることを特徴とする請求項10に記載の方法。コンピューティングシステムでは、システムがクラッシュすること、または予期せぬ結果を返すことに関して生じる問題がしばしば起こる。システムクラッシュまたは予期せぬ結果の原因を決定するために、様々なデバッギング技法が使用される。いくつかの技法は、デバッガの使用を必要とする。デバッガは、実行中コードと一緒に、またはその下で動作するソフトウェアアプリケーションとすることができる。デバッガは、コードをステップ実行するすなわち、一まとまりの多くの命令を実行し、その後、ユーザ入力を待ってから、次の一まとまりの多くの命令を実行するためや、実行中コード内のあるポイントで実行を停止させるためにコード内にブレイクポイントを設定するためなどに使用することができる。しかし、クラスタシステムでは、開発者がデバッグしたいシステムは、開発者によって直接的にアクセス可能なシステムの外部のネットワーク上にあることがあるという事実に鑑みて、デバッガを始動させることがより難しくなり得る。すなわち、開発者は、パブリックネットワーク上のクライアント上で開発者アプリケーションdeveloperapplicationを使用していることがあり、一方、デバッグされるアプリケーションは、パブリックネットワーク上のクライアントコンピュータによって直接的にアクセス可能ではないプライベートネットワーク上にあるクラスタ上のジョブとして動作していることがある。したがって、デバッグしたいシステムが、デバッガを直接的に提供できないことがある。それどころか、デバッガをコンピュートクラスタ上で実行しているジョブに接続するには、クラスタのノードがクライアントと同じネットワーク上にあること、および/またはユーザがコンピュートクラスタに管理的アクセスを行えることが必要なことがある。本出願において特許請求される本発明は、何らかの不都合を解決する実施形態、または上で説明したような環境においてのみ動作する実施形態に限定されない。むしろ、この背景技術は、本明細書で説明するいくつかの実施形態を実施できる1つの例示的な技術領域を説明するためにもっぱら提供されている。本明細書で説明する一実施形態は、クラスタコンピューティングシステムを含むコンピューティング環境において実施することができる。実施形態は、デバッギングプロセスを起動するためのステップを有する方法を含む。方法は、クラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを、パブリックネットワーク上のクライアントから、ヘッドノードのスケジューラを介して受信するステップを含む。ヘッドノードは、クラスタプライベートネットワークおよびパブリックネットワークの両方に接続される。パブリックネットワークは、クラスタプライベートネットワークの外部に存在する。方法は、デバッグジョブを処理することに着手し、結果として、コンピュートノードにおいて1つまたは複数のデバッガリモートエージェントdebuggerremoteagentを始動させることによって、デバッギングを開始するステップをさらに含む。方法は、コンピュートノードにおいて、始動させたデバッガリモートエージェントの存在下で、ユーザジョブを処理することに着手するステップをさらに含む。クライアントは、ユーザジョブをデバッグする準備が1つまたは複数のデバッガリモートエージェントにおいて整った旨の通知を受ける。クライアントにおけるデバッガクライアントは、1つまたは複数のデバッガリモートエージェントに接続される。別の実施形態は、クラスタコンピューティングシステムを含むコンピューティング環境において実施される。この実施形態は、デバッギングプロセスをアタッチするためのステップを有する方法を含む。方法は、ユーザジョブを実行しているクラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを始動させるためのメッセージを、パブリックネットワーク上のクライアントから、クラスタプライベートネットワークとパブリックネットワークの両方に接続されたシステムを介して受信するステップを含む。パブリックネットワークは、クラスタプライベートネットワークの外部に存在する。方法は、デバッグジョブを処理することに着手し、結果として、コンピュートノードにおいて1つまたは複数のデバッガリモートエージェントを始動させることによって、ユーザジョブのデバッギングを開始するステップをさらに含む。クライアントは、ユーザジョブをデバッグする準備が1つまたは複数のデバッガリモートエージェントにおいて整った旨の通知を受ける。クライアントにおけるデバッガクライアントは、1つまたは複数のデバッガリモートエージェントに接続される。この課題を解決するための手段は、以下の発明を実施するための形態においてさらに説明する概念からの抜粋を簡略な形で紹介するために提供される。この課題を解決するための手段は、特許請求される本発明の主要な特徴または必須の特徴を識別することは意図しておらず、特許請求される本発明の範囲を決定する際の助けとして使用することも意図していない。さらなる特徴および利点は、以下の説明において説明され、部分的には説明から明らかであり、または本明細書の教示を実施することによって知ることができる。本発明の特徴および利点は、特に添付の特許請求の範囲において指摘される機器および組み合わせを用いて実現および獲得することができる。本発明の特徴は、以下の説明および添付の特許請求の範囲からより十分に明らかになり、以下で説明するように本発明を実施することによって知ることができる。上述および他の利点および特徴を獲得できる方法を説明するため、上で簡潔に説明した本発明のより詳細な説明が、添付の図面に示される特定の実施形態を参照して行われる。これらの図面は典型的な実施形態を示すにすぎず、したがって、範囲について限定的であると見なされるべきではないことを理解したうえで、添付の図面を使用して、さらに特定的かつ詳細に実施形態を記述および説明する。本明細書では、クラスタのためのデバッギング機能を含む様々な実施形態が開示される。実施形態は、デバッガ制御の下でジョブを起動するための機能を含むことができる。あるいは、実施形態は、既存のジョブにデバッガをアタッチするための機能を含むことができる。説明するように、これらの実施形態のいくつかは、コンピュートノードに直接的なクライアントアクセスを行わずに、またはクラスタ上で管理特権を有することなく、上記の機能を実施することができる。図1は、説明的なものである。図1は、パブリックネットワーク104上にクライアント102を示している。クライアントは、クラスタにジョブを提供することを望むことができる。クラスタは、ジョブに関連する作業を実行する、コンピュートノード106などの、コンピュートノードを有することができる。図1は、一般に、実施形態が、ヘッドノード110によってジョブを割り当てることができる複数のコンピュートノード106を含むことを示している。コンピュートノードは、パブリックネットワーク104から分離されているプライベートネットワーク108上に存在することができる。特に、プライベートネットワーク108は、パブリックネットワーク104上のシステムがプライベートネットワーク108上のシステムと直接的に通信できないように、パブリックネットワーク104から隔離される。例えば、これらのネットワークは、異なるドメインを有することができる。代わりに、クライアント102は、ヘッドノード110および/またはルーティングノードroutingnode112などの1つまたは複数のシステムを使用して実施できる仲介手段intermediaryを介して、ジョブおよび他の通信を提供する。クライアント102は、ジョブを仲介手段に提出することができ、その後、仲介手段が、ジョブを1つまたは複数のコンピュートノード106に転送する。クライアント102によって提出されたジョブは、コンピュートノード106によって実行されている間に、エラーを生じることがある。本明細書で説明する実施形態は、エラーをデバッグするために、クラスタ上でクライアント102によってデバッギングを開始するための機能を含むことができる。一例では、これは、リモートエージェントデバッガを起動した後で、コードをデバッガリモートエージェント上で実行することによって行うことができる。説明的な一例では、デバッギングプロセスの起動は、クラスタプライベートネットワーク106の外部のパブリックネットワーク104上のクライアント102が、ユーザジョブをデバッガタスクとともにヘッドノード110などの仲介手段に送信することによって実行することができる。ヘッドノード110は、1つまたは複数のコンピュートノード106がデバッガタスクを実行するためのジョブを生成することができる。コンピュートノード106におけるデバッガタスクの実行は、クラスタプライベートネットワーク108上の1つまたは複数のコンピュートノード106において1つまたは複数のデバッガリモートエージェント114を始動させることによって、クライアント102または他の何らかのシステムから先に送信されたユーザジョブのリモートデバッギングを開始する。その後、クライアント102は、デバッギングを行う準備がリモートエージェント114において整った旨の通知を受けることができる。いくつかの実施形態では、これは、パブリックネットワークシステム104がプライベートネットワーク108システムに呼び掛けることを可能にするプロキシを含むルーティングノード112を使用することによって達成することができる。さらに、クライアント102は、デバッガクライアントを有することができる。クライアント102のデバッガクライアントは、例えばルーティングノード112などを介して、デバッガリモートエージェントに接続することができる。以下では、一例についてのさらなる詳細が説明される。特に、引き続き図1を参照する以下の例では、開発者アプリケーション116を含む統合開発環境integrateddevelopmentenvironmentを使用できる一実施形態が説明される。開発者アプリケーションは、アプリケーション、特にクラスタコンピューティング向けのアプリケーションを開発する開発者によって使用することができる。説明される特定の例では、開発者アプリケーション116は、ワシントン州レドモンドに本社を置くMicrosoftCorporationが販売するVisualStudio登録商標を使用して実施することができる。1に示されるように、開発者アプリケーション116は、リスナlistener118を生成する。リスナ118は、通信を円滑化するために、ポートD1をオープンする。いくつかの実施形態では、割り当てられるポートは本明細書で説明する他のポートと同様に、13225から13719の範囲内のポートとすることができるが、それは、これらのポートが一般には割り当てられることがないからである。リスナ118は、ローカルアドミニストレータとして動作するルーティングノード112上のよく知られたプロキシサービス120へのリンクPをオープンする。いくつかの実施形態では、構成データまたはプロジェクト設定に基づいて、プロキシを選択することができる。リスナ118は、本明細書ではInitProxyD1,Uとして示されるメッセージである初期化メッセージを、Pを介して、プロキシサービス120に送信し、ここで、Uは、ユーザのクラスタ資格証明書clustercredentialである。プロキシサービス120は、ユーザ資格証明書Uを用いてプロキシのインスタンスをフォークforkし、それとInitProxyメッセージに対する応答テキストとをD1に渡す。いくつかの実施形態では、本明細書で説明する送信および受信メッセージには暗号化を施すことができることに留意されたい。2に示されるように、プロキシ122は、D1のためのプロキシ112へのD1pをオープンし、新しいプロキシ要求のためのポートP1をオープンし、応答InitProxyReplyP1,D1pをリスナ118に返送する。3に示されるように、リスナ118は、ヘッドノード110のスケジューラ124に新しいジョブメッセージ:NewJobDebugStart,P1,D1pを送信する。このメッセージは、新しいデバッガジョブを指定する。いくつかの実施形態では、リスナが回送を行うためのヘッドノード110およびスケジューラ124の情報は、構成データおよび/または開発プロジェクト設定内に含めることができる。4に示されるように、スケジューラ124は、各コンピュートノード106において、DebugStartP1,D1pを実行するジョブを生成する。5に示されるように、デバッグスタート126は、アドレスD2を選択し、この例ではmsvsmonD2,Eを呼び出すことによって、適切なリモートエージェント114を始動させ、イベントEを待つ。リモートエージェント114が始動し、接続のためにD2をオープンする。リモートエージェント114は、D2上での受信の準備が整ったとき、イベントEを設定する。6に示されるように、デバッグスタート126は、ルーティングメッセージRouteToD2をプロキシ122P1に送信する。プロキシ122は、プロキシポートproxiedportD2pを生成する。7に示されるように、プロキシは、ルーティング応答メッセージRouteToReplyD2pを用いてデバッグスタート126に応答する。8に示されるように、デバッグスタート126は、デバッグエージェントが始動されたことを示すメッセージDebugAgentStartedD2pをD1pを介してプロキシ122に送信する。9において、プロキシ122は、DebugAgentStartedメッセージをD1を介してリスナ118に転送する。リスナ118は、開発者アプリケーション116のデバッガを呼び出し、D2pを介してリモートエージェントに接続するようにデバッガに命令する。10に示されるように、開発者アプリケーションのデバッガは、D2pを介してプロキシ122とのリモートデバッギングセッションをオープンする。11に示されるように、プロキシ122は、D2を介してリモートエージェント114とのセッションをオープンする。プロキシ122は、両方向にデバッギングメッセージを回送する。開発者アプリケーションのデバッガは、プロキシ122を通して、リモートエージェント114にユーザプロセス128を起動するように命令する。ユーザプロセス128は、デバッグされるプロセスとすることができる。リモートエージェント114は、ユーザプロセス128を起動して、ユーザプロセス128を識別するプロセス識別子を返す。開発者アプリケーションのデバッガは、起動が完了したことをリスナ118に通知し、リスナ118にプロセス識別子pidを与える。12に示されるように、リスナ118は、DebugAgentStartedReplypidメッセージをD2pを介してプロキシ122に送信する13に示されるように、プロキシ122は、応答をデバッグスタート126に転送する。デバッグスタート126は、ユーザプロセス128へのハンドルをオープンし、その終了を待つ。上で説明した例には、様々な構成要素が示されている。以下の説明では、これらの構成要素のいくつかについてさらに詳細に説明する。説明した例におけるリスナ118は、デバッギング開始時に生成され、デバッギングセッションが終了するまで存続し続ける、開発者アプリケーション116の構成要素である。リスナ118の目的は、デバッギングセッションに加わることを望むリモートプロセスのために、開発者アプリケーション116のデバッギングを開始することである。リスナ118は、リモートデバッギングセッションを開始するよう求める要求に応答するサービス一例では、ワシントン州レドモンドに本社を置くMicrosoft登録商標Corporationが販売する、Windows登録商標CommunicationFoundation登録商標である。以下では、リモートデバッギングセッションを開始するよう求める要求の一例について説明する。PIDInitiateRemoteDebugSessionEndpointRemoteAgentAddress,EndpointProxyAddressこのメッセージに応答して、リスナ118は、開発者アプリケーション116のデバッガリモート起動/アタッチコードを呼び出し、それに、RemoteAgentAddressと、任意選択的にProxyAddressと、ユーザ資格証明書を提供する。開発者アプリケーション116の起動コードは、プロキシ122を介するRemoteAgentAddressへの接続をオープンし、起動または以下で説明するようにアタッチを行うように要求する。正常終了すると、プロセス識別子pidがリスナ118に返される。リスナ118は、pidを用いてメッセージに応答する。複数のメッセージを予期することができる。いくつかの実施形態では、リスナ118は、受信したすべてのメッセージに応答する。プロキシサービス120は、ルーティングノード112上で、ローカルシステム資格証明書localsystemcredentialの下で動作するサービスである。いくつかの実施形態では、プロキシサービス102は、WindowsCommunicationFoundation登録商標サービスとすることができる。プロキシサービス120は、デバッギングセッションのためにプロキシ122を始動させる。プロキシサービス120は、よく知られたアドレスを発行し、そのアドレスにおいてプロキシ要求をリスンlistenする。以下では、例示的な発行メッセージについて説明する。EndpointNewProxySessionCredentialsuserCredentials要求が到着すると、プロキシサービス120は、ユーザ資格証明書を確認し、エンドポイントポートを割り当て、ユーザの資格証明書の下でプロキシ122のプロセスを始動させる。プロキシサービス120は、プロキシ122がエンドポイントをオープンするのを待ち、その後、プロキシ122のエンドポイントデスクリプションendpointdescriptionを用いてNewProxySession要求に応答する。プロキシ122は、ユーザ資格証明書の下で動作する、いくつかの実施形態ではWindowsCommunicationFoundation登録商標サービスとすることができる、サービスである。プロキシ122は、パブリックネットワーク104上の例えば開発者アプリケーション116のデバッガとプライベートネットワーク108上のリモートエージェント114の間でメッセージを回送することを担当する。始動時に、プロキシ122は、要求を回送するためのエンドポイントをオープンする。以下では、要求を回送するためのエンドポイントをオープンするためのメッセージの一例について説明する。EndpointRouteToEndpointendpoint要求がネットワークAB上のプロセスから到着すると、その後、ルータは、BA上に新しいエンドポイントproxyEndpointをオープンし、応答に収めてデスクリプションを返す。デバッグスタート126は、ユーザ資格証明書の下で動作し、デバッグされるプロセス例えばユーザプロセス128とともに、マシン上でリモートエージェント114のデバッガプロセスを始動させることを担当する。デバッグスタート126は、クラスタマネージャによって直接的に、または動的コンピューテーションdynamiccomputationのためにタスクをスケジュールしているクラスタサブスケジューラによって呼び出すことができる。デバッグスタート126は、リスナ118との通信を開始し、自らが生成したリモートエージェント114の動的アドレスをリスナに通知する。図1に示された先の例では、デバッギング機能を始動させ、その後、ユーザプロセス128を始動させることによって、ユーザプロセス128をデバッグする一例について説明したが、他の実施形態では、すでに実行中のプロセスにデバッギング機能をアタッチすることができる。以下の説明および図2では、デバッガアタッチの一例について説明する。201に示されるように、開発者アプリケーション116は、リスナ118を生成する。リスナ118は、D1をオープンする。リスナ118は、ローカルアドミニストレータとして動作するルーティングノード上のよく知られたプロキシサービス120へのリンクPをオープンする例えば、構成データおよび/または開発者プロジェクト設定を形成する。リスナ118は、プロキシ初期化メッセージInitProxyD1,UをPに送信し、ここで、Uは、ユーザのクラスタ資格証明書である。プロキシサービス120は、ユーザ資格証明書Uを用いてプロキシ122のインスタンスをフォークし、それとInitProxyメッセージに対する応答テキストとをD1に渡す。202に示されるように、プロキシ122は、D1のためのプロキシ122へのD1pをオープンし、プライベートおよびパブリックネットワーク104および106それぞれからの新しいプロキシ要求のためのP1およびP2をオープンし、プロキシ初期化応答メッセージInitProxyReplyP1,P2,D1pをリスナ118に返送する。203に示されるように、リスナ118は、スケジューラ124にジョブ詳細を要求する。204に示されるように、リスナ118は、コンピュートノード106とプロセスidとのリストを返信として受信する。205に示されるように、リスト内の各コンピュートノード106に対して、リスナ118は、ForwardMessageNodeName,A,DebugStartP1,D1p,UをP2に送信する。206に示されるように、プロキシ122は、DebugStartメッセージをノードNodeName上のよく知られたアドレスAを介してアタッチサービス130に転送する。207に示されるように、アタッチサービス130は、アドレスD2を選択し、ユーザ資格証明書Uの下でmsvsmonD2,Eを呼び出すことなどによって、ユーザエージェント114を始動させ、イベントEを待つ。リモートエージェント114が始動し、接続のためにD2をオープンする。リモートエージェント114は、D2上での受信の準備が整ったとき、イベントEを設定する。208に示されるように、アタッチサービス130は、RouteToD2メッセージをプロキシ122P1に送信する。プロキシ122は、プロキシポートD2pを生成する。209に示されるように、プロキシ122は、RouteToReplyD2pを用いてアタッチサービス130に応答する。210に示されるように、アタッチサービス130は、DebugAgentStartedD2pメッセージをD1pを介してプロキシに送信する。211に示されるように、プロキシ122は、DebugAgentStartedメッセージをD1を介してリスナ118に転送する。リスナ118は、開発者アプリケーション116のデバッガを呼び出し、D2pを介してリモートエージェントに接続するようにデバッガに命令する。212に示されるように、開発者アプリケーション116のデバッガは、D2pを介してプロキシ122とのリモートデバッギングセッションをオープンする。213に示されるように、プロキシ122は、D2を介してリモートエージェント114とのセッションをオープンする。プロキシ122は、両方向にデバッギングメッセージを回送する。デバッガは、リモートエージェント114にプロセス識別子pidによって識別されるユーザプロセス128にアタッチするように命令する。リモートエージェント114は、プロセスにアタッチする。開発者アプリケーション116のデバッガは、アタッチが完了したことをリスナ118に通知する。以下では、いくつかの実施形態において、アタッチサービス130について詳細に説明する。アタッチサービス130は、ローカルシステム資格証明書の下で動作し、デバッグされるプロセス例えばユーザプロセス128とともに、マシン上でリモートデバッガプロセスリモートエージェント114を始動させることを担当する。アタッチサービス130は、リモートクラスタアタッチをサポートする任意のノード上で動作するシステムサービスである。アタッチサービス130は、リスナ118からのDebugStartメッセージをリスンし、その後、メッセージ内に含まれるユーザ資格証明書の下でリモートエージェント114のプロセスを生成する。アタッチサービス130は、自らが生成したリモートエージェント114の動的アドレスをリスナ118に通知する。上で説明した実施形態では、パブリックネットワークとプライベートネットワークの間で通信するためにプロキシを使用しているが、他の実施形態では、ディレクトリサービスおよびNATポート転送NATportforwardingを使用することができる。例えば、図3および図4は、ディレクトリサービスおよびNATポート転送を使用した起動およびアタッチの例を示す相互作用図を示している。具体的には、図3は、起動シナリオを示している。図4は、アタッチシナリオを示している。先に説明した例と同様に、クラスタは、ヘッドノード110と1組のコンピュートノード106の2種類のノードを含む。ヘッドノード110は、パブリックネットワークとプライベートネットワークの2つのネットワークに接続される。コンピュートノード106は各々が、プライベートネットワークだけに接続される。ホストマシン102などのクライアントマシンは、パブリックネットワーク上に存在する。この特定の例では、ヘッドノード110における明示的なNATポートマッピングNATportmappingを介さない限り、パブリックネットワークとプライベートネットワークの間での回送は可能ではない。クラスタアタッチおよび起動の実施には、多くのアクタactorが関与する。そのようなアクタの1つは、デバッガユーザインタフェースホストを含むことができる、開発者アプリケーション116である。別のアクタは、ディレクトリサービス132であり、これは、転送ポートのディレクトリをクラスタジョブに提供するサービス例えばWindows登録商標サービスなどとして動作するアプリケーションとすることができる。ディレクトリサービスは、クラスタのヘッドノード110上で動作することができる。NATポート転送134は、クラスタのヘッドノード110上で動作するネットワークアドレス変換networkaddresstranslationサービスとすることができる。ヘッドノード110上で動作するサーバスケジューラ124は、クラスタのコンピュートノード106上で実行するユーザジョブをスケジュールする。診断サービス136は、各コンピュートノード106上でサービスWindows登録商標サービスなどとして実行するアプリケーションとすることができる。診断サービス136は、図4のアタッチ例に示されるように、プロセスにアタッチするように求めるデバッガ要求を処理する。診断サービス136は、ブート時に自動的に開始され、よく知られたポートDS上でデバッガ要求をリスンする。診断サービス136は、要求を満たすために、リモートエージェント114のインスタンスを生成する。デバッグスタート126は、デバッガによってユーザジョブに注入されるタスクである。デバッグスタート126は、デバッガ制御下でユーザプロセス128を起動するために、リモートエージェント114のインスタンスを生成する。リモートエージェント114は、開発者アプリケーション116のデバッガのリモートヘルパプロセスremotehelperprocessである。リモートエージェント114は、アタッチ要求に応答して、診断サービス136によってコンピュートノード106上で始動される。ユーザプロセス128は、デバッグされるプロセスである。ここで図3を参照すると、クラスタ上でデバッギングを起動し、ユーザプロセスをデバッグする一例が示されている。301では、開発者アプリケーション116のユーザは、自分のジョブをクラスタ上での実行のための待ち行列に入れることを、スケジューラ124を介して要求する。302では、スケジューラ124は、ジョブに1組のコンピュートノード106を割り当て、各ノード106上で動作するジョブの実行を開始する。303では、ジョブ内の第1のタスクは、デバッグスタートタスク126である。デバッグスタートタスク126は、1組のコンピュートノードのうちの各コンピュートノード106上でリモートエージェント114のプロセスを生成し、各コンピュートノード106は、ポートDrをオープンし、デバッガ接続をリスンする。304では、リモートエージェント114が開始された後、デバッグスタート126は、コンピュートノード106の各々についてのDrポートをディレクトリサービス132に登録する。305では、開発者アプリケーション116は、リモートエージェント114ごとに1つのマップポートmappedportDrpを受け取るまで、ユーザのジョブのために登録されたすべてのポートについてディレクトリサービス132にポーリングを行う。ディレクトリサービス132は、要求を満たすのに必要とされるポートマッピングをNATを介して生成する。306では、ジョブのためにポートが生成されると、ディレクトリサービス132は、ジョブが終了していないことを検証するために、定期的にスケジューラ124にポーリングを行う。307では、登録されたポートごとに、開発者アプリケーション116は、Drpを介してコンピュートノード106上のリモートエージェント114に接続し、ユーザプロセス128の生成およびデバッグを行う。デバッギングセッションが完了するまで、メッセージが、開発者アプリケーション116とリモートエージェント114の間で継続的にやり取りされる。デバッギングセッションの完了後すぐに、またはしばらく経ってから、ユーザプロセス128が終了し、ジョブが終了する。308では、ディレクトリサービス132は、スケジューラ124を介してジョブ完了を発見し、すべてのDrp転送ポートを削除する。以下では、クラスタアタッチシナリオについて説明する。401では、ユーザは、ジョブをスケジューラ124の待ち行列に入れる。スケジューラ124は、ジョブにJobIdを与える。スケジューラ124は、しばらく後で、1組Sのコンピュートノード106上で動作するユーザプロセス128から成るユーザジョブを開始する。402では、ユーザは、自分の実行ジョブをデバッグすることに決める。ユーザは、開発者アプリケーション116を始動させ、クラスタアタッチプロセスを開始する。ユーザは、自分のクラスタのヘッドノード110およびJobIdを識別する。開発者アプリケーション116は、ジョブのユーザプロセス128のためのコンピュートノード名とプロセスidとのリストについて、スケジューラ124に問い合わせを行う。403では、スケジューラ124によって返されたリスト内のコンピュートノード106ごとに、開発者アプリケーション116は、診断サービス136のポートDSをディレクトリサービス132に登録する。今度は、ディレクトリサービス132が、DSについてのNATポートマッピングを要求する。ディレクトリサービス132は、マップポートDSpを返す。このプロセスは、コンピュートノード106ごとに1つのDSpが生成されるという結果をもたらす。DSpに送信されるメッセージは、ヘッドノード110を介して対応するDSに回送される。404では、コンピュートノード106ごとに、開発者アプリケーション116は、アタッチ要求をDSpに送信する。メッセージは、ポートDS上でコンピュートノード106の診断サービス136に転送される。診断サービス136は、コンピュートノード106上でリモートエージェント114のインスタンスを生成する。リモートエージェント114は、ポートDrをオープンし、開発者アプリケーション116に関連するクライアント102のデバッガからのデバッガ接続要求をリスンする。リモートエージェント114が開始された後、診断サービス136は、Drをディレクトリサービス132に登録する。その後、アタッチ要求が完了する。405では、開発者アプリケーション116は、コンピュートノード106ごとに1つのマップポートDrpを受け取るまで、ユーザのジョブのために登録されたすべてのポートについてディレクトリサービス132にポーリングを行う。ディレクトリサービス132は、要求を満たすのに必要とされるポートマッピングをNATを介して生成する。406では、ジョブのためにポートが生成されると、ディレクトリサービス132は、ジョブが終了していないことを検証するために、定期的にスケジューラ124にポーリングを行う。407では、各コンピュートノード106上のユーザプロセス128ごとに、開発者アプリケーション116は、Drpを介してコンピュートノード106上のリモートエージェント114に接続し、ユーザプロセス128のためのデバッギングセッションを開始する。デバッギングセッションが完了するまで、メッセージが、開発者アプリケーション116具体的には開発者アプリケーションのデバッガモジュールとリモートエージェント114の間で継続的にやり取りされる。デバッギングセッションの完了後すぐに、またはしばらく経ってから、ユーザプロセス128が終了し、ジョブが終了する。408では、ディレクトリサービス132は、スケジューラ124を介してジョブ完了を発見し、すべてのDrp転送ポートを削除する。409では、ディレクトリサービス132は、ジョブに関連するすべてのDSpポートも削除する。以下の説明では、今度は、実行できる多くの方法および方法ステップについて言及する。方法ステップは、ある順序で説明され、またはフローチャートでは特定の順序で生じるように示されるが、特定の順序は、特別に述べられていない限り必要ではなく、またはあるステップはそのステップが実行される前に完了している別のステップに従属するので必要ではない。ここで図5を参照すると、方法500が示されている。方法500は、クラスタコンピューティングシステムを含むコンピューティング環境において実施することができる。方法500は、デバッギングプロセスを起動するためのステップを含む。方法500は、クラスタプライベートネットワーク上のコンピュートノードにおいて、パブリックネットワーク上のクライアントからヘッドノードのスケジューラを介してデバッグジョブを受信するステップステップ502を含む。ヘッドノードは、プライベートネットワークとパブリックネットワークの両方に接続される。パブリックネットワークは、クラスタプライベートネットワークの外部に存在する。例えば、図1に示されるように、コンピュートノード106は、クライアント102から、ヘッドノード110を介して、特にヘッドノード110のスケジューラ124を介して回送されるデバッグジョブを受信することができる。方法500は、デバッグジョブの処理に着手し、結果として、コンピュートノードにおいて1つまたは複数のデバッガリモートエージェントを始動させることによって、デバッギングを開始するステップステップ504をさらに含む。例えば、図1を参照すると、リモートエージェント114を開始することができる。方法500は、コンピュートノードにおいて、始動させたデバッガリモートエージェントの存在下で、ユーザジョブを処理することに着手するステップステップ506をさらに含む。例えば、コンピュートノード106は、動作中のリモートエージェント114の存在下で、ユーザプロセス128の処理に着手することができる。方法500は、ユーザジョブをデバッグする準備が1つまたは複数のデバッガリモートエージェントにおいて整ったことをクライアントに通知するステップをさらに含む。例えば、図1は、メッセージをプロキシ122に送信することができ、次に、そのメッセージが開発者アプリケーション116のリスナ118に転送されることを示している。方法500は、クライアントにおけるデバッガクライアントを1つまたは複数のデバッガリモートエージェントに接続するステップをさらに含む。例えば、開発者アプリケーション116に含まれるデバッガは、上で説明したように、1つまたは複数のリモートエージェント114に接続することができる。ここで図6を参照すると、別の方法600が示されている。方法600は、クラスタコンピューティングシステムを含むコンピューティング環境で実施することができる。方法600は、デバッギングプロセスをアタッチするためのステップを含む。方法600は、ユーザジョブを実行しているクラスタプライベートネットワーク上のコンピュートノードにおいて、デバッグジョブを、パブリックネットワーク上のクライアントから、クラスタプライベートネットワークとパブリックネットワークの両方に接続されたシステムを介して受信するステップステップ602を含む。パブリックネットワークは、クラスタプライベートネットワークの外部に存在する。例えば、図2に示されるように、パブリックネットワーク104およびクラスタプライベートネットワーク108が示されている。クライアント102は、パブリックネットワーク104上に存在し、コンピュートノード106は、クラスタプライベートネットワーク108上に存在する。コンピュートノードは、デバッグジョブを開始するために、ルーティングノード112からメッセージを受信することができる。方法600は、デバッグジョブを処理することに着手し、結果として、コンピュートノードにおいて1つまたは複数のデバッガリモートエージェントを始動させることによって、ユーザジョブのデバッギングを開始するステップステップ604をさらに含む。具体的には、アタッチサービス130が、ユーザエージェント114を開始することができる。方法600は、ユーザジョブをデバッグする準備が1つまたは複数のデバッガリモートエージェントにおいて整ったことをクライアントに通知するステップステップ606をさらに含む。方法600は、結果として、クライアントのデバッガクライアントを1つまたは複数のデバッガリモートエージェントに接続するステップステップ608をさらに含む。さらに、方法は、1つまたは複数のプロセッサと、コンピュータメモリなどのコンピュータ可読媒体とを含む、コンピュータシステムによって実施することができる。実際には、コンピュータメモリは、1つまたは複数のプロセッサによって実行されたときに、実施形態において列挙されたステップなど、様々な機能の実行を引き起こすコンピュータ実行可能命令を記憶することができる。本発明の実施形態は、以下でより詳細に説明するように、コンピュータハードウェアを含む専用または汎用コンピュータを含むことができ、または利用することができる。本発明の範囲内の実施形態は、コンピュータ実行可能命令および/またはデータ構造を搬送または記憶するための物理的および他のコンピュータ可読媒体も含む。そのようなコンピュータ可読媒体は、汎用または専用コンピュータシステムによってアクセスできる任意の利用可能な媒体とすることができる。コンピュータ実行可能命令を記憶するコンピュータ可読媒体は、物理的記憶媒体である。コンピュータ実行可能命令を搬送するコンピュータ可読媒体は、伝送媒体である。したがって、限定することなく、例を挙げると、本発明の実施形態は、物理的コンピュータ可読記憶媒体と伝送コンピュータ可読媒体という、少なくとも2つの明確に異なる種類のコンピュータ可読媒体を含むことができる。物理的コンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROM、もしくはCD、DVDなどの他の光ディスク記憶、磁気ディスク記憶もしくは他の磁気記憶デバイス、または所望のプログラムコード手段をコンピュータ実行可能命令もしくはデータ構造の形態で記憶するために使用でき、汎用もしくは専用コンピュータによってアクセスできる他の任意の媒体を含む。ネットワークは、コンピュータシステムおよび/もしくはモジュールならびに/または他の電子デバイスの間での電子データの輸送を可能にする、1つまたは複数のデータリンクとして定義される。情報が、有線、無線、または有線もしくは無線の組み合わせのネットワークまたは別の通信接続を介して、コンピュータに移送または提供される場合、コンピュータは、その接続を伝送媒体であると適切に見なす。伝送媒体は、所望のプログラムコード手段をコンピュータ実行可能命令またはデータ構造の形態で搬送するために使用でき、汎用または専用コンピュータによってアクセスできる、ネットワークおよび/またはデータリンクを含むことができる。上記の組み合わせもコンピュータ可読媒体の範囲内に含まれる。さらに、様々なコンピュータシステムコンポーネントに送り届けられるとき、コンピュータ実行可能命令またはデータ構造の形態をとるプログラムコード手段は、伝送コンピュータ可読媒体から物理的コンピュータ可読記憶媒体にまたはそれとは反対方向に自動的に移送することができる。例えば、ネットワークまたはデータリンクを介して受信されたコンピュータ実行可能命令またはデータ構造は、ネットワークインタフェースモジュール例えばNIC内のRAMにバッファリングすることができ、その後、最終的には、コンピュータシステムRAMに、および/またはコンピュータシステムの低揮発性のコンピュータ可読物理記憶媒体に移送することができる。したがって、コンピュータ可読物理記憶媒体は、伝送媒体を同様にまたはむしろ主として利用するコンピュータシステムコンポーネント内に含むことができる。コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理デバイスに、何らかの機能または機能のグループを実行させる命令およびデータを含む。コンピュータ実行可能命令は、例えば、2進数、もしくはアセンブリ言語などの中間フォーマット命令とすることができ、またはソースコードとすることさえできる。本発明は、構造的特徴および/または方法論的ステップに特有の言葉で説明されたが、添付の特許請求の範囲において確定される本発明は、上で説明された特徴またはステップに必ずしも限定されるものではないことを理解されたい。むしろ、説明された特徴およびステップは、特許請求の範囲を実施する例示的な形態として開示されている。本発明は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な家庭用電化製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、モバイル電話、PDA、ページャ、ルータ、およびスイッチなどを含む、多くのタイプのコンピュータシステム構成を有する、ネットワークコンピューティング環境において実施できることが当業者には理解されよう。本発明は、ネットワークを介して有線データリンク、無線データリンク、または有線および無線データリンクの組み合わせによって結合された、ローカルコンピュータシステムおよびリモートコンピュータシステムが、ともにタスクを実行する、分散システム環境において実施することもできる。分散システム環境では、プログラムモジュールは、ローカルおよびリモートメモリ記憶デバイスの両方において見出すことができる。本発明は、本発明の主旨または特徴から逸脱することなく、他の特定の形態で具現することができる。説明された実施形態は、すべての点において、説明的なものにすぎず、限定的なものではないと見なすべきである。したがって、本発明の範囲は、上述の説明によってではなく、添付の特許請求の範囲によって示される。特許請求の範囲の均等物の意味および範囲内に含まれるすべての変更は、特許請求の範囲内に含まれるべきである。"