JP5737783B2 - デバッグ・プログラム、デバッグ・システム、および方法 - Google Patents

デバッグ・プログラム、デバッグ・システム、および方法 Download PDF

Info

Publication number
JP5737783B2
JP5737783B2 JP2011096402A JP2011096402A JP5737783B2 JP 5737783 B2 JP5737783 B2 JP 5737783B2 JP 2011096402 A JP2011096402 A JP 2011096402A JP 2011096402 A JP2011096402 A JP 2011096402A JP 5737783 B2 JP5737783 B2 JP 5737783B2
Authority
JP
Japan
Prior art keywords
debug
program
computer
agent
packet
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2011096402A
Other languages
English (en)
Other versions
JP2011258185A (ja
Inventor
スティーブン・ジョセフ・ブランダ
ロバート・ウィスニエフスキー
ジョン・ジョセフ・ステッチャー
ウィリアム・ティー・ニューポート
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2011258185A publication Critical patent/JP2011258185A/ja
Application granted granted Critical
Publication of JP5737783B2 publication Critical patent/JP5737783B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明の一実施形態は、一般に、コンピュータ・システムに関し、より具体的には、分散型コンピュータ・システム上でコンピュータ・プログラムをデバッグすることに関する。
コンピュータ・システムは、典型的には、コンピュータ・プログラムと、半導体、トランジスタ、チップ、及び回路基板といったハードウェアとの組み合わせを含む。コンピュータ・プログラムはストレージ・デバイス内に格納され、プロセッサによって実行される。コンピュータ・プログラムがますます高度化され、複雑になるに従って、プログラムをデバッグすることが困難になってきている。バグとは、コンピュータ・プログラム内の問題、障害、又はエラーである。コンピュータ・プログラム内の疑わしい障害を突き止め、解析し、訂正することが、「デバッグ」として知られるプロセスである。典型的には、プログラマは、開発中のプログラムのデバッグを行うために「デバッガ」として一般に知られる別のコンピュータ・プログラムを用いる。
従来のデバッガは、典型的には、コンピュータ・プログラマがユーザ・インターフェースを介して要求することができる3つの主要なタイプの操作をサポートする。第1のタイプはブレークポイント又はアドレス・ウォッチ操作であり、プログラマは、ブレークポイントによって、プロセッサによるプログラムの実行を停止させる正確な命令を特定することができ、又はアドレス・ウォッチを介して、プロセッサが内容の変更について監視し、その時点でプログラムの実行が停止されるメモリ位置を特定することができる。その結果、プログラムがデバッガによって実行されると、プログラムは、ブレークポイントに到達するまで、又は監視されているメモリ位置の内容が書き込まれるまでプロセッサ上で通常の仕方で実行され、その時点でデバッガがプログラムの実行を停止させる。第2のタイプはステップ操作であり、これによりコンピュータ・プログラマはプロセッサにプログラム内の命令を1つずつ又はグループ毎に実行させることができる。各命令又は命令のグループが実行された後、デバッガはプログラムの実行を停止させる。ステップ操作又はブレークポイント操作のどちらかによってプログラムの実行が停止されると、従来のデバッガは、プログラマの要求に応答して、種々のストレージ位置に格納された内容を表示する第3のタイプの操作を提供する。種々の命令のところでプログラムを停止させ、種々のストレージ位置の内容を検査するこのデバッグ・プロセスによって、プログラマは最終的に、命令又はデータなどの格納内容が正しくない又は予期せぬ内容であるストレージ位置を見つけ出すことができる。
本発明の課題は、分散型コンピュータ・システム上でコンピュータ・プログラムをデバッグすることにある。
方法、デバッグ・プログラム、及びデバッグ・システムが提供される。一実施形態において、第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つ又は複数の汎用プログラム可能中央演算装置(CPU)101A、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つ又は複数の直接アクセス・ストレージ・デバイス(DASD)125及び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はFRS(Family Radio Service)ネットワークとすることができる。別の実施形態において、ネットワーク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と、プログラム・リスト(program listing)コマンド580、582、及び584と、セット・ブレークポイント(set breakpoint)コマンド545と、セット分散アドレス・ウォッチ(setdistributed address watch)コマンド550と、ラン・コマンド555と、イネーブル・デバッグ(enable debug)コマンド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と、ディスプレイ状態(display state)コマンド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つ又は複数の他の特徴、整数、ステップ、操作、要素、構成要素、及び/又はその群の存在又は付加を除外するものではないことがさらに理解されよう。
前述の本発明の例示的な実施形態の詳細な説明において、添付の図面(ここで同様の符号は同様の要素を表す)が参照されており、これらの図面は、本明細書の一部を成しており、かつ本発明を実施することができる具体的な例示的な実施形態が例証として示されている。これらの実施形態は、当業者が本発明を実施することができるように十分詳細に説明したが、他の実施形態を用いることもでき、また、本発明の範囲から逸脱することなく、論理的、機械的、電子的、及びその他の変更を行うことができる。前述の説明において、本発明の実施形態を完全に理解してもらうために多数の具体的な詳細を記述した。しかし、本発明の実施形態は、これらの具体的な詳細なしで実施することができる。他の例において、本発明の実施形態を不明瞭にしないために、周知の回路、構造、及び技術は詳細に示さなかった。
本明細書内で用いられる「実施形態」という語の異なる事例は、必ずしも同じ実施形態を指すとは限らないが、同じ実施形態を指すこともある。本明細書において図示又は説明されたどのデータ及びデータ構造体も単なる例であり、他の実施形態において、異なるデータ量、データ・タイプ、フィールド、フィールドの数及びタイプ、フィールド名、行、レコード、エントリの数及びタイプ、又はデータの編成を用いることができる。加えて、どのデータも論理と組み合わせることができるので、独立したデータ構造体は必須ではない。従って、前述の詳細な説明は限定的な意味で解釈されるべきではなく、本発明の範囲は添付の特許請求の範囲のみによって定められる。
121:ユーザ入力/出力デバイス
505:指標
545:セット・ブレークポイント・コマンド
550:セット分散アドレス・ウォッチ・コマンド
605:ディスプレイ状態コマンド
610:状態

Claims (13)

  1. 第1のデバッグ・エージェントにおいて、第1のコンピュータにおける第1のプログラムからパケットを受信するステップと、
    前記パケットに、デバッグ・コマンドと、前記第1のデバッグ・エージェントの識別子とを付加するステップと、
    前記デバッグ・コマンドと前記第1のデバッグ・エージェントの前記識別子とを含む前記パケットを受信コンピュータに送信するステップと、
    前記受信コンピュータにおいて、第2のデバッグ・エージェントが、受信した前記パケットから前記デバッグ・コマンドと前記第1のデバッグ・エージェントの前記識別子とを除去し前記受信コンピュータのメモリに保存するステップと、
    前記第2のデバッグ・エージェントが保存した前記デバッグ・コマンドを実行するステップであって、前記デバッグ・コマンドが、前記受信コンピュータ上で実行される第2のプログラムの実行を停止させる、ステップと、
    第2のデバッグ・エージェントが、前記デバッ グ・コマンドと前記第1のデバッグ・エージェントの前記識別子とが除去された前記パケットを前記第2のプログラムに送信するステップと、を含む、方法。
  2. 前記デバッグ・コマンドを実行するステップは、前記第2のデバッグ・エージェントが、前記第2のプログラム内にブレークポイントをセットし、前記第2のプログラムが、前記ブレークポイントにおいて実行を停止することを含む、請求項1に記載の方法。
  3. 前記デバッグ・コマンドを実行するステップは、前記第2のデバッグ・エージェントが、前記メモリ内の位置に対するアドレス・ウォッチを開始し、前記第2のプログラムが、前記メモリ内の前記位置における内容が変更されたことに応答して実行を停止することを含む、請求項1に記載の方 法。
  4. 前記受信コンピュータを識別する処理ノード識別子を前記パケットに付加するステップをさらに含む、請求項1に記載の方法。
  5. 前記デバッグ・コマンドと前記第1のデバッグ・エージェントの前記識別子とを含む前記パケットを受信コンピュータに送信するステップが、
    前記デバッグ・コマンドと、前記第1のデバッグ・エージェントの前記識別子と、前記受信コンピュータを識別する前記処理ノード識別子とを含む前記パケットを宛先コンピュータに送信するステップをさらに含み、前記宛先コンピュータが前記パケットを前記受信コンピュータに送信する、請求項4に記載の方法。
  6. 前記受信コンピュータにおいて、前記第2のプログラムが受信した前記パケットによって指示される命令を実行するステップをさらに含む、請求項1に記載の方法。
  7. 請求項1乃至のいずれか1つに記載のすべてのステップをコンピュータに実行させる、デバッグ・プログラム。
  8. 請求項1乃至のいずれか1つに記載のすべてのステップをそれぞれ実行する各手段を備える、デバッグ・システム。
  9. 第1のデバッグ・エージェントにおいて、第1のコンピュータにおける第1のプログラムから、パケットを受信するステップと、
    前記パケットに、デバッグ・コマンドと、処理ノード識別子と、前記第1のデバッグ・エージェントの識別子とを付加するステップと、
    前記デバッグ・コマンドと、前記処理ノード識別子と、前記第1のデバッグ・エージェントの前記識別子とを含む前記パケットを宛先コンピュータに送信するステップと、
    前記宛先コンピュータにおける第2のデバッグ・エージェントが、前記パケットを受信コンピュータに送信するステップと、
    前記受信コンピュータにおける第3のデバッグ・エージェントが、受信した前記パケットから、前記デバッグ・コマンドと、前記第1のデバッグ・エージェントの前記識別子と、前記処理ノード識別子とを除去しメモリに保存するステップと、
    前記第3のデバッグ・エージェントが、前記除去後の前記パケットを前記受信コンピュータにおいて実行される第3のプログラムに送信するステップと、
    前記第3のデバッグ・エージェントが、前記受信コンピュータを識別する受信ノード識別子が前記メモリに保存した前記処理ノード識別子と合致した場合に、前記デバッグ・コマンドを実行し、合致しない場合には前記デバッグ・コマンドを実行しないステップであって、前記デバッグ・コマンドの実行が前記第3のプログラムの実行を停止させるステップと、
    前記第1のコンピュータにおける前記第1のデバッグ・エージェントにおいて、前記第3のプログラムの状態及び停止された前記第3のプログラムの識別子を受信するステップと、
    前記第1のコンピュータにおいて、前記第3のプログラムの前記状態及び前記第3のプログラムのプログラム・リストを提示するステップと、
    をコンピュータに実行させる、デバッグ・プログラム。
  10. 第1のデバッグ・エージェントを含む第1のコンピュータであって、前記第1のデバッグ・エージェントが、パケットを受信し、デバッグ・コマンドと、処理ノード識別子と、前記第1のデバッグ・エージェントの識別子とを前記パケットに付加する、第1のコンピュータと、
    前記第1のコンピュータに通信可能に接続された受信コンピュータであって、第3のデバッグ・エージェントが、
    (i)前記パケットを受信し、受信した前記パケットから、前記デバッグ・コマンドと、前記第1のデバッグ・エージェントの前記識別子と、前記処理ノード識別子とを除去し前記受信コンピュータのメモリに保存し、
    (ii)前記除去後の前記パケットを前記受信コンピュータにおいて実行される第3のプログラムに送信し、
    (iii)前記受信コンピュータを識別する受信ノード識別子が、前記メモリに保存した前記処理ノード識別子と合致した場合に前記デバッグ・コマンドを実行し、前記デバッグ・コマンドの実行が前記受信コンピュータ上で実行される前記第3のプログラムの実行を停止させ、前記受信コンピュータを識別する前記受信ノード識別子が前記パケット内の前記処理ノード識別子と合致しない場合には前記デバッグ・コマンドを実行せず、さらに、
    (iv)前記第3のプログラムの状態及び停止された前記第3のプログラムの識別子を前記第1のデバッグ・エージェントに送信し、前記第1のデバッグ・エージェントは、前記第3のプログラムの状態及び前記第3のプログラムのリストを提示し、前記第3のプログラムは前記第1のコンピュータにおいて実行されない、受信コンピュータと、を備える、デバッグ・システム。
  11. 前記デバッグ・コマンドを実行することに応答して、前記第3のデバッグ・エージェントが前記第3のプログラム内にブレークポイントをセットし、前記第3のプログラムは前記ブレークポイントにおいて実行を停止する、請求項10に記載のデバッグ・システム。
  12. 前記デバッグ・コマンドを実行することに応答して、前記第3のデバッグ・エージェントが前記メモリ内の位置に対するアドレス・ウォッチを開始し、 前記第3のプログラムは、前記メモリ内の前記位置における内容が変更されたことに応答して実行を停止する、請求項10に記載のデバッグ・システム。
  13. 前記第3のプログラムが停止されたことを示す割り込みに応答して、前記第3のデバッグ・エージェントが、前記割り込みを生じさせた前記デバッグ・コマンドを要求した前記第1のデバッグ・エージェントの前記識別子を見つけ出し、前記第3のプログラムの前記状態と、前記第3のプログラムの前記識別子と、停止された前記第3のプログラムのスレッドの識別子とを前記第1のデバッグ・エージェントに送信する、請求項10に記載のデバッグ・システム。
JP2011096402A 2010-06-11 2011-04-22 デバッグ・プログラム、デバッグ・システム、および方法 Expired - Fee Related JP5737783B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/813,788 US8856742B2 (en) 2010-06-11 2010-06-11 Distributed debugging
US12/813788 2010-06-11

Publications (2)

Publication Number Publication Date
JP2011258185A JP2011258185A (ja) 2011-12-22
JP5737783B2 true JP5737783B2 (ja) 2015-06-17

Family

ID=45097320

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011096402A Expired - Fee Related JP5737783B2 (ja) 2010-06-11 2011-04-22 デバッグ・プログラム、デバッグ・システム、および方法

Country Status (3)

Country Link
US (1) US8856742B2 (ja)
JP (1) JP5737783B2 (ja)
CN (1) CN102279790B (ja)

Families Citing this family (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101104166B1 (ko) * 2009-11-26 2012-01-12 애니포인트 미디어 그룹 컴퓨팅 장치 및 미디어 재생 장치를 이용한 사용자 애플리케이션 테스트 시스템 및 테스트 방법
US8972953B2 (en) 2010-04-16 2015-03-03 Salesforce.Com, Inc. Methods and systems for internally debugging code in an on-demand service environment
US8589885B2 (en) * 2010-09-30 2013-11-19 Microsoft Corporation Debugger launch and attach on compute clusters
US8904356B2 (en) 2010-10-20 2014-12-02 International Business Machines Corporation Collaborative software debugging in a distributed system with multi-member variable expansion
US8972945B2 (en) 2010-10-21 2015-03-03 International Business Machines Corporation Collaborative software debugging in a distributed system with client-specific access control
US8671393B2 (en) * 2010-10-21 2014-03-11 International Business Machines Corporation Collaborative software debugging in a distributed system with client-specific dynamic breakpoints
US9009673B2 (en) 2010-10-21 2015-04-14 International Business Machines Corporation Collaborative software debugging in a distributed system with collaborative step over operation
US8990775B2 (en) 2010-11-10 2015-03-24 International Business Machines Corporation Collaborative software debugging in a distributed system with dynamically displayed chat sessions
US8850397B2 (en) 2010-11-10 2014-09-30 International Business Machines Corporation Collaborative software debugging in a distributed system with client-specific display of local variables
US9411709B2 (en) 2010-11-10 2016-08-09 International Business Machines Corporation Collaborative software debugging in a distributed system with client-specific event alerts
US8730826B2 (en) * 2010-11-17 2014-05-20 Ixia Testing fragment reassembly
US8656360B2 (en) * 2011-04-20 2014-02-18 International Business Machines Corporation Collaborative software debugging in a distributed system with execution resumption on consensus
US8806438B2 (en) 2011-04-20 2014-08-12 International Business Machines Corporation Collaborative software debugging in a distributed system with variable-specific messages
US8739127B2 (en) 2011-04-20 2014-05-27 International Business Machines Corporation Collaborative software debugging in a distributed system with symbol locking
US8756577B2 (en) 2011-06-28 2014-06-17 International Business Machines Corporation Collaborative software debugging in a distributed system with private debug sessions
US8819489B2 (en) * 2011-12-14 2014-08-26 Ati Technologies Ulc Accelerated processing unit debugging using a graphics processing unit centric debug core
US8909990B2 (en) 2012-08-04 2014-12-09 Microsoft Corporation Historical software diagnostics using lightweight process snapshots
CN103856361B (zh) 2012-11-29 2017-10-10 腾讯科技(深圳)有限公司 实现远程调试的方法及系统
CN103019935A (zh) * 2012-12-05 2013-04-03 中国电子科技集团公司第四十五研究所 基于Windows消息机制的软件调试方法
US9069895B2 (en) 2013-01-15 2015-06-30 International Business Machines Corporation Analyzing concurrent debugging sessions
US8954546B2 (en) * 2013-01-25 2015-02-10 Concurix Corporation Tracing with a workload distributor
CN104298591B (zh) * 2013-07-18 2017-07-07 阿里巴巴集团控股有限公司 一种WebApp远程调试方法及系统
US20150082286A1 (en) * 2013-09-18 2015-03-19 Microsoft Corporation Real-time code instrumentation
CN103577326B (zh) * 2013-11-05 2016-06-29 北京奇虎科技有限公司 Debug调试方法和装置
US10289411B2 (en) * 2013-11-18 2019-05-14 Microsoft Technology Licensing, Llc Diagnosing production applications
CN103699481A (zh) * 2013-12-03 2014-04-02 华为技术有限公司 一种代码调试方法及调试系统
US9170922B1 (en) * 2014-01-27 2015-10-27 Google Inc. Remote application debugging
CN103823731B (zh) * 2014-03-18 2017-03-15 福州瑞芯微电子股份有限公司 一种基于安卓系统的sd协议栈调试方法
GB2530050B (en) * 2014-09-10 2021-07-21 Advanced Risc Mach Ltd Debugging in a data processing apparatus
CN105630661B (zh) 2014-10-29 2018-09-25 国际商业机器公司 用于自动化跨系统程序调试的方法和装置
US9612939B2 (en) 2014-10-29 2017-04-04 Microsoft Technology Licensing, Llc. Diagnostic workflow for production debugging
US9632915B2 (en) 2014-10-29 2017-04-25 Microsoft Technology Licensing, Llc. Historical control flow visualization in production diagnostics
US9940220B2 (en) * 2015-05-01 2018-04-10 Teledyne Lecroy, Inc. Integrating a protocol analysis device with features of a software development program
US9898384B2 (en) * 2016-03-18 2018-02-20 International Business Machines Corporation Automated problem determination for cooperating web services using debugging technology
US10152404B2 (en) * 2016-11-07 2018-12-11 Vmware, Inc. Collaborative debugging
US10102115B2 (en) * 2016-11-15 2018-10-16 Ca, Inc. Incremental program construction from embedded program code for external testing
US10162731B2 (en) * 2017-01-23 2018-12-25 International Business Machines Corporation Conditional breakpoint on call stack during debugging at runtime
US10169197B2 (en) * 2017-01-24 2019-01-01 International Business Machines Corporation Temporary breakpoints during debug process
US10235272B2 (en) * 2017-03-06 2019-03-19 Xilinx, Inc. Debugging system and method
US10169196B2 (en) * 2017-03-20 2019-01-01 Microsoft Technology Licensing, Llc Enabling breakpoints on entire data structures
CN108959058B (zh) * 2017-05-18 2020-07-28 南京南瑞继保电气有限公司 一种虚拟控制器的组态调试器实现方法
US10467039B2 (en) * 2017-08-07 2019-11-05 Open Data Group Inc. Deployment and management platform for model execution engine containers
US10606656B2 (en) * 2017-09-07 2020-03-31 Microsoft Technology Licensing, Llc Dynamic command generation for automated control of computing machines
CN109783342B (zh) * 2017-11-10 2022-03-29 华为技术有限公司 脚本调试方法、设备及计算机存储介质
CN107948317B (zh) * 2017-12-26 2021-01-22 金蝶软件(中国)有限公司 分布式服务的调试方法、装置、存储介质和计算机设备
CN108228459A (zh) * 2018-01-03 2018-06-29 北京奇艺世纪科技有限公司 基于Spark平台的分布式调试方法、装置及电子设备
CN110389827B (zh) * 2018-04-20 2023-05-12 伊姆西Ip控股有限责任公司 在分布式系统中进行优化的方法、设备和计算机程序产品
CN108900482B (zh) * 2018-06-13 2021-04-16 平安科技(深圳)有限公司 脚本的执行方法、服务器管理系统及存储介质
US11108675B2 (en) 2018-10-31 2021-08-31 Keysight Technologies, Inc. Methods, systems, and computer readable media for testing effects of simulated frame preemption and deterministic fragmentation of preemptable frames in a frame-preemption-capable network
US11694090B2 (en) * 2019-04-10 2023-07-04 International Business Machines Corporation Debugging deep neural networks
US10691581B1 (en) 2019-08-16 2020-06-23 Sas Institute Inc. Distributed software debugging system
CN110674368B (zh) * 2019-09-11 2023-10-10 深圳创维-Rgb电子有限公司 一种系统调试结果信息的处理方法及装置
CN112540907B (zh) * 2019-09-20 2022-11-25 无锡江南计算技术研究所 面向异构众核上并行程序的可视化调试方法
US11280829B1 (en) * 2019-12-19 2022-03-22 Xlnx, Inc. System-on-chip having secure debug mode
US11762747B2 (en) 2020-08-26 2023-09-19 Mellanox Technologies, Ltd. Network based debug
US11968278B2 (en) * 2021-01-26 2024-04-23 Salesforce, Inc. Method and system for decentralized message handling for distributed computing environments

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05282173A (ja) 1992-02-06 1993-10-29 Toshiba Corp プログラムデバッグ支援方法
US5630049A (en) * 1994-11-30 1997-05-13 Digital Equipment Corporation Method and apparatus for testing software on a computer network
JPH08272644A (ja) 1995-04-03 1996-10-18 Toshiba Corp 分散処理装置で実行されるプログラムのデバッグ方法
US6324683B1 (en) * 1996-02-23 2001-11-27 International Business Machines Corporation System, method and program for debugging external programs in client/server-based relational database management systems
US5933639A (en) * 1996-05-17 1999-08-03 International Business Machines Corporation System and method for debugging distributed programs
JPH09319614A (ja) 1996-05-31 1997-12-12 Nec Corp リモート型デバッグ方式
US6986124B1 (en) * 1999-07-21 2006-01-10 Sun Microsystems, Inc. Debugger protocol generator
WO2001044942A1 (en) * 1999-12-15 2001-06-21 Sun Microsystems, Inc. Open debugging environment
US6637024B1 (en) * 2000-05-03 2003-10-21 International Business Machines Corporation Method and product for debugging a target java virtual machine having no debug information therein
US6941492B1 (en) * 2002-02-05 2005-09-06 Emc Corporation Debugging tool for efficient switching between targets in a multi-processor environment
US7185319B2 (en) * 2002-07-09 2007-02-27 Microsoft Corporation Debugging distributed applications
US7441036B2 (en) 2003-04-01 2008-10-21 International Business Machines Corporation Method and system for a debugging utility based on a TCP tunnel
US20050060690A1 (en) * 2003-09-15 2005-03-17 Kuo-Jung Tung Microprocessor system with software emulation processed by auxiliary hardware
US7634759B2 (en) * 2004-12-01 2009-12-15 Microsoft Corporation Distributed debugger environment
US7634760B1 (en) * 2005-05-23 2009-12-15 Netapp, Inc. System and method for remote execution of a debugging utility using a remote management module
US7917894B2 (en) * 2005-06-03 2011-03-29 International Business Machines Corporation Constraining source code and objects for analysis tools
US7765526B2 (en) * 2005-09-30 2010-07-27 Intel Corporation Management of watchpoints in debuggers
US20070168994A1 (en) 2005-11-03 2007-07-19 International Business Machines Corporation Debugging a computer program in a distributed debugger
US7669186B2 (en) * 2005-11-16 2010-02-23 Sun Microsystems, Inc. Debugging applications at resource constrained virtual machines using dynamically installable lightweight agents
US20070168997A1 (en) * 2005-12-20 2007-07-19 Duong-Han Tran Debugging of remote application software on a local computer
KR20070109432A (ko) * 2006-05-11 2007-11-15 삼성전자주식회사 커널 인지 디버깅 장치 및 방법
US8336029B1 (en) * 2007-11-08 2012-12-18 Google Inc. Debugger connection
US8769502B2 (en) * 2007-12-21 2014-07-01 Sap Ag Template based asynchrony debugging configuration
CN101286883A (zh) 2008-05-04 2008-10-15 杭州华三通信技术有限公司 分布式设备中设备板卡的集中调试系统及集中调试方法
US9098635B2 (en) * 2008-06-20 2015-08-04 Cadence Design Systems, Inc. Method and system for testing and analyzing user interfaces
US8312434B2 (en) * 2008-07-02 2012-11-13 International Business Machines Corporation Finding the source statement of the definition of a storage location
CN101727316B (zh) 2008-10-22 2013-01-02 上海超级计算中心 适于集群系统的并行程序集成开发系统及其应用实现方法
US20110191752A1 (en) * 2010-01-29 2011-08-04 Christophe Cleraux Method and System for Debugging of Software on Target Devices
US8171346B2 (en) * 2010-03-10 2012-05-01 Microsoft Corporation Client session based debugging
US8453120B2 (en) * 2010-05-11 2013-05-28 F5 Networks, Inc. Enhanced reliability using deterministic multiprocessing-based synchronized replication
CN102063368B (zh) 2010-12-16 2013-03-27 国网电力科学研究院 基于命名变量的全景数据在线实时调试方法

Also Published As

Publication number Publication date
CN102279790A (zh) 2011-12-14
CN102279790B (zh) 2016-03-02
US8856742B2 (en) 2014-10-07
JP2011258185A (ja) 2011-12-22
US20110307871A1 (en) 2011-12-15

Similar Documents

Publication Publication Date Title
JP5737783B2 (ja) デバッグ・プログラム、デバッグ・システム、および方法
CN111090536B (zh) 一种获取内存泄露信息的方法、装置、介质和电子设备
US8990780B2 (en) Setting breakpoints in optimized instructions
US9262300B1 (en) Debugging computer programming code in a cloud debugger environment
CA2990405A1 (en) Monitoring of applications isolated in containers
US8677321B2 (en) User-space probe based debugging
US20120079459A1 (en) Tracing multiple threads via breakpoints
CN1573713A (zh) 可插元件上的断点调试
US8364691B2 (en) Dynamic query-based debug point mapper
US20140033180A1 (en) Establishing cloud debug breakpoints assigned to users
WO2022105563A1 (zh) 索引文件生成方法、终端设备、电子设备及介质
US8943480B2 (en) Setting breakpoints in optimized instructions
US20060161896A1 (en) Performing debug requests that are within the debug domain of a class loader
US20070150866A1 (en) Displaying parameters associated with call statements
US8365154B2 (en) Multi-language software development
US20120159451A1 (en) Identifying threads that encounter an instruction at which another thread is halted
US20080115109A1 (en) Enhanced Hover Help For Software Debuggers
US9164813B2 (en) Using a debug engine to identify threads that wait for a mutex
US11263115B2 (en) Problem diagnosis technique of memory corruption based on regular expression generated during application compiling
US8819494B2 (en) Automatically changing parts in response to tests
US10768913B2 (en) Method for performing deep static analysis with or without source code
CN114047923A (zh) 错误代码定位方法、装置、存储介质以及电子设备
KR20050076762A (ko) 코드로의 객체의 결정적 규칙 기반 디스패치
US20120159117A1 (en) Displaying values of variables in a first thread modified by another thread
US20240126541A1 (en) Inversion process for rules framework

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140110

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140624

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140729

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20140922

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141007

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20140922

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150203

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150210

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150324

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20150325

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150417

R150 Certificate of patent or registration of utility model

Ref document number: 5737783

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees