(57)【要約】  インプロセスのデバッグ体験を、アウトオブプロセスのデバッグをサポートするインフラストラクチャを使用して実装することができる。デバッグされるプログラムを、入力ループを介して受信且つ処理するコマンドライン言語に書込むことができる。言語インタープリターを、第１のプロセスにおいて実行する。ヘルパープログラムを、第２のプロセスにおいて開始し、及びヘルパープログラムがアウトオブプロセスのデバッガーであるかのように第１のプロセスに添付する。デバッグモジュールを、言語インタープリターにロードして、ユーザーに、ヘルパープログラムを利用することができるデバッグコマンドを提供する。デバッグされるプログラムがデバッグイベントを発生すると、デバッグイベントを、ヘルパープログラムが受信して、デバッグのプリミティブを使用して第１のプロセスにおける入力ループの新しいインスタンスを開始する。デバッグモジュールによって提供されるデバッグコマンドを、ユーザーが入力ループの新しいインスタンスにタイプして入力することができる。
2010528395.tif 000002
【特許請求の範囲】
【請求項１】
コンピューターに、方法を実行する実行可能な命令を有する１つまたは複数のコンピューター読取り可能記憶媒体であって、
第１のプロセスにおいて、デバッグ対象プログラムがループの第１のインスタンスにて実行している第２のプロセスにデバッグイベントが生じたことの通知を受信するステップと、
前記第２のプロセスにおいて、第１のデバッグのプリミティブを使用して前記ループの第２のインスタンスを起動するステップと、
前記第２のプロセスから、
（ａ）前記第２のプロセスにおいて定義されたシンボルについての情報を伝達するアクションと、
（ｂ）前記デバッグ対象プログラムにおける少なくとも１つのフロー制御アクションを実行するアクションと
のうちの少なくとも１つのアクションを実行する要求を受信するステップと、
（ａ）前記第１のデバッグプリミティブと（ｂ）第２のデバッグプリミティブとのうちの少なくとも１つを使用して、前記要求において指定されたアクションを実行するステップと、
（ａ）前記シンボルに関連付けられた値と（ｂ）前記少なくとも１つのフロー制御アクションに起因する前記デバッグ対象プログラムの結果とのうちの少なくとも１つを表示するステップと
を実行させるためのプログラムを記録したコンピューター読取り可能記憶媒体。
【請求項２】
前記要求は、前記デバッグ対象プログラムにおける関数の戻り値をユーザーによって指定された値に設定することであり、
前記第２のデバッグのプリミティブを使用して前記ユーザーによって指定された値を前記関数の戻り値用に保持されるメモリの位置に設定するステップを実行させるためのプログラムを更に記録したことを特徴とする請求項１に記載のコンピューター読取り可能記憶媒体。
【請求項３】
前記要求は、前記デバッグ対象プログラムにおける複数のステートメントを実行することであり、
前記第２のデバッグのプリミティブを使用して前記デバッグ対象プログラムに前記複数のステートメントを実行するよう命令するステップを実行させるためのプログラムを更に記録したことを特徴とする請求項１に記載のコンピューター読取り可能記憶媒体。
【請求項４】
前記要求は、デバッグを中止することであり、
前記第２のプロセスの実行スタックをアンワインドするときに前記ループの第１のインスタンスが前記実行スタックに達するまで、前記第２のプロセスによって生成された例外をユーザーに通知することを避けるステップを実行させるためのプログラムを更に記録したことを特徴とする請求項１に記載のコンピューター読取り可能記憶媒体。
【請求項５】
前記要求は、前記デバッグ対象プログラムの実行を継続することであり、
前記ループの第２のインスタンスが終了したことの第２の通知を受信するステップと、
前記第２のプロセスに、前記デバッグイベントが生じたときに前記プログラムが実行されていたポイントから前記デバッグ対象プログラムの実行を再開させることを許可するステップと
を実行させるためのプログラムを更に記録したことを特徴とする請求項１に記載のコンピューター読取り可能記憶媒体。
【請求項６】
前記要求は、前記デバッグ対象プログラムの実行を継続することであり、
前記第２のプロセスから、保留中の例外をクリアする命令を受信するステップと、
前記デバッグイベントが生じたときに起動された例外をクリアするステップと、
前記第２のプロセスに、前記デバッグイベントが生じたときに前記プログラムが実行されていたポイントから前記デバッグ対象プログラムの実行を再開させることを許可するステップと
を実行させるためのプログラムを更に記録したことを特徴とする請求項１に記載のコンピューター読取り可能記憶媒体。
【請求項７】
デバッグを容易にするシステムであって、
１つまたは複数のデータ記憶装置と、
前記１つまたは複数のデータ記憶装置の少なくとも１に格納され、プログラムにロード可能な第１のソフトウェアと、
前記１つまたは複数のデータ記憶装置の少なくとも１に格納され、前記第１のプロセスにおいて生じるイベントの通知の受信に応答して、第１のメソッドを使用して前記第１のプロセスのループの第２のインスタンスを起動する第２のソフトウェアと
を備え、
前記プログラムは、環境の第１のプロセスにおいて実行し、前記プログラムは、ユーザーからの入力を読取り前記入力を評価するループを有し、前記プログラムは、前記ループの第１のインスタンスを示し、前記第１のソフトウェアは、前記ユーザーによって前記ループに入力可能な１つまたは複数のコマンドを公開し、前記１つまたは複数のコマンドは、前記プログラムにおいて定義されたシンボルと関連付けられた情報を表示することを要求する第１のコマンドを含み、前記１つまたは複数のコマンドの少なくとも１つは、前記環境の第２のプロセスにおいて実行する第２のソフトウェアを起動し、
前記第１のメソッドは、前記環境のデバッグインフラストラクチャによって提供され、前記第１のコマンドは、前記ユーザーから前記ループの前記第２のインスタンスに受信可能であることを特徴とするシステム。
【請求項８】
前記第１のソフトウェアは、第１のコマンドに応答して、前記シンボルが前記プログラムにおいて定義されたグローバルシンボルであるかどうかを決定し、前記シンボルがグローバルシンボルでない場合に前記第２のソフトウェアに前記シンボルの解決を要求し、
前記第２のソフトウェアは、前記プログラムにおいて実行する関数の中のローカルシンボルとして前記シンボルを解決することを特徴とする請求項７に記載のシステム。
【請求項９】
前記第１のコマンドは、
前記シンボルに関連付けられた値を取得するメソッドを起動する関数呼び出しと、
前記シンボルの名前と
のうちの少なくとも１つの形においてであり、前記ループは、前記シンボルが入力されるときに前記値を取得かつ表示するプログラミングを提供することを特徴とする請求項８に記載のシステム。
【請求項１０】
前記第２のソフトウェアは、前記ループの第２のインスタンスに関連付けられた範囲にローカル変数とローカル変数の値とを設定することを特徴とする請求項７に記載のシステム。
【請求項１１】
関数が前記プログラムのもとに実行し、前記１つまたは複数の第２のコマンドは、前記関数の戻り値を、前記ユーザーによって指定される値に設定するコマンドを含み、前記第２のソフトウェアは、前記デバッグインフラストラクチャによって提供される第２のメソッドを使用して前記関数の戻り値用に保持されるメモリの位置に前記ユーザーによって指定される値を設定することを特徴とする請求項７に記載のシステム。
【請求項１２】
前記第１のソフトウェアは、前記関数のローカル変数に前記関数が戻す値を維持するよう保持させ、
前記第２のソフトウェアは、前記ユーザーによって指定される値を前記ローカル変数に設定することを特徴とする請求項１１に記載のシステム。
【請求項１３】
前記イベントは、前記プログラムのもとに実行している関数の停止を含み、前記第２のソフトウェアは、前記ループの第２のインスタンスが終了したことの通知を受信し、前記第１のプロセスに命令して前記関数が停止されたポイントから前記関数の実行を再開させることを特徴とする請求項７に記載のシステム。
【請求項１４】
前記イベントは、前記プログラムのもとに実行している関数の停止を含み、前記停止は、例外の起動に関連付けられており、前記第１のソフトウェアは、第２のソフトウェアに保留中の例外をクリアすることを通知し、前記第２のソフトウェアは、前記例外をクリアし、前記第１のプロセスに前記関数が停止されたポイントから前記関数の実行を再開させることを許可することを特徴とする請求項７に記載のシステム。
【請求項１５】
コンピューターに、方法を実行する実行可能な命令を有する１つまたは複数のコンピューター読取り可能記憶媒体であって、
環境の第１のプロセスにおいて実行しているループの第１のインスタンスを介して、ユーザーから第１の命令を受信してプログラムを開始させるステップと、
前記環境の第２のプロセスにおいて、イベントが前記第１のプロセスに生じたことの第１の通知を受信するステップと、
前記環境のデバッグインフラストラクチャによって提供される前記第２のプロセスの第１のメソッドを使用して前記第１のプロセスのループの第２のインスタンスを起動するステップと、
前記ループの第２のインスタンスにおいて、前記ユーザーからの第２の命令を受信するステップと、
前記第２のプロセスに、前記第２の命令による第１の情報を提供するステップと、
前記第２のプロセスにおいて、第２のメソッドを使用して
（ａ）前記第１のプロセスに命令して前記第１の情報による少なくとも１つのアクションを実行することをすることと、
（ｂ）前記第１のプロセスから、前記第１の情報において指定され、前記ループの第２のインスタンスによって表示されるシンボル情報を検索することと
のうちの少なくとも１つを行うステップと
を実行させるためのプログラムを記録したコンピューター読取り可能記憶媒体。
【請求項１６】
前記第２の命令は、ブレークポイントを前記プログラムに設定することを示し、前記第１の情報は、前記ブレークポイントのプログラムの位置を示すことを含み、前記第２のメソッドを使用することは、前記第２のメソッドを使用して前記位置に前記ブレークポイントを設定することを含むことを特徴とする請求項１５に記載のコンピューター取り可能記憶媒体。
【請求項１７】
前記第２の命令は、シンボルの名前を示し、
前記ループの第２のインスタンスによって、前記名前が前記第１のプロセスにおけるグローバルシンボルに関連付けられないことを決定するステップと、
前記第１のプロセスにおいて、要求を前記第１のプロセスに出して前記名前を解決するステップと、
前記第２のメソッドを使用して前記名前に関連付けられた値を検索するステップと
を実行させるためのプログラムを更に記録したことを特徴とする請求項１５に記載のコンピューター読取り可能記憶媒体。
【請求項１８】
前記第２の命令は、前記プログラムの実行を継続することを示し、
前記第２のプロセスにおいて、前記ループの第２のインスタンスが終了したことの第２の通知を受信するステップと、
前記第１のプロセスに、前記イベントが生じたときに前記プログラムが実行していたポイントから実行を再開させることを許可するステップと
を実行させるためのプログラムを更に記録したことを特徴とする請求項１５に記載のコンピューター読取り可能記憶媒体。
【請求項１９】
前記第２の命令は、前記プログラムの実行を継続することを示し、前記第１の情報は、保留中の例外をクリアすることの命令を含み、
前記第２のプロセスが、前記イベントが生じたときに発生した例外をクリアするステップと、
前記第１のプロセスに、前記イベントが生じたときに前記プログラムが実行していたポイントから実行を再開させることを許可するステップと
を実行させるためのプログラムを更に記録したことを特徴とする請求項１５に記載のコンピューター読取り可能記憶媒体。
【請求項２０】
前記ループは、言語インタープリターの一部であるソフトウェアコンポーネントによって実装され、前記ループは、前記ユーザーからの入力を読取り、前記入力を評価し、前記入力を評価した結果を表示し、前記第１の命令は、前記入力のインスタンスであることを特徴とする請求項１５記載のコンピューター読取り可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インプロセスのデバッグに関し、より詳細には、外部デバッグのインフラストラクチャを使用するインプロセスのデバッグに関する。
【背景技術】
【０００２】
ソフトウェアを開発していると、ソフトウェアは、プログラマが期待するように動作しないことがある。デバッガーを使用して、プログラムの動作を解析すること及び／又は実行シナリオを変更するのを試みることができて、予期しない動作のソースに関しての手がかりを与えることができる。
【０００３】
デバッガーは、「アウトオブプロセス」又は「インプロセス」であるとすることができる。アウトオブプロセスのデバッガーは、デバッグされているプログラム（デバッグ対象）上において、デバッグ対象が実行されるプロセスの外部から動作するアプリケーションである。デバッグ対象は、アウトオブプロセスのデバッガーに検査モデル及び制御モデルを与え、デバッグ対象のプロセスを検査し及びデバッグ対象の実行を操作することができることによってリッチインターフェースを提供する。通常、最新の実行環境は、アウトオブプロセスのデバッガーの実装を容易にするインフラストラクチャを提供する。インプロセスのデバッガーは、コードが開発されている開発ソフトウェアに組み込まれる。例えば、コマンドライン言語のインタープリターは、インタープリターの中にハードコードされたデバッグコマンドを有することができたので、デバッグコマンドを、インタープリターのコマンドラインインターフェースからアクセスすることができる。
【０００４】
インプロセスのデバッガーは、ユーザーが１つのプロセスにおいて１つのユーザーインターフェースを介してコードを書いて且つデバッグすることができるので、簡単なユーザー体験を提供し、及びデバッグサポートを、実行環境と統合する。一方、アウトオブプロセスのデバッガーは、いくつかの実行環境がアウトオブプロセスのモデルをサポートすることを提供するデバッグインフラストラクチャを使用する。インプロセスのユーザー体験を提供するデバッガーは、上記のインフラストラクチャの使用を行っていない。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
インプロセスのデバッグのユーザー体験を、アウトオブプロセスのデバッグをサポートするデバッグインフラストラクチャを使用して実装することができる。デバッグモジュールは、種々のデバッグタスク（例えば、シンボル検査、ブレークポイント設定等）用のコマンドを提供して、例えば言語用のコマンドラインインタープリター等の開発プログラムにロードすることができる。
【課題を解決するための手段】
【０００６】
デバッグモジュールは、開発プログラムから分離されたプロセスにおいて実行させるヘルパープログラムを使用する。ヘルパープログラムは、アウトオブプロセスのデバッガーとして、開発プログラムが実行しているプロセスに添付される。開発プログラムが実行中のプロセスの分析観点から、ヘルパープログラムは、アウトオブプロセスのデバッガーに類似しており、従って、ヘルパープログラムは、アウトオブプロセスのデバッガーがデバッグ対象を検査且つ操作するために使用されるデバッグインフラストラクチャの使用を行うことができる。ユーザーがデバッグモジュールによって提供される関数の１つを介してデバッグコマンドを発行すると、デバッグモジュールのコードは、ヘルパープロセスに呼び出しをして、要求されたコマンドを実行するのを支援する。例えば、ユーザーがブレークポイントを設定するコマンドを発行したならば、デバッグモジュールは、ヘルパープロセスに呼び出しをして、ブレークポイントを設定するデバッグインフラストラクチャからのプリミティブを使用する。
【０００７】
開発プログラムは、ユーザー入力を受信且つ処理するＲＥＰＬループ（read-eval-printループ）を提供することができる。入力することができるユーザー入力の例は、デバッグされるプログラムを起動するコマンドである。デバッグイベントがプログラムに発生すると、ヘルパープログラムは、通知され及び開発プログラム中のＲＥＰＬループの第２のインスタンスを起動する。ループを、デバッグ対象プログラムのフレーム先頭の実行スタックにプッシュして、検査及び操作のためにデバッグ状態の状態を保持する。加えて、ＲＥＰＬループの第２のインスタンスは、ユーザーが入力データを入力し及び開発プログラムと対話操作することを継続することができる間じゅうの機構を提供する。ＲＥＰＬループの第２のインスタンスを、例えば、func-evalのプリミティブ又はデバッガーがデバッグ対象の関数を起動ことができる間じゅうの他の機構等のデバッグインフラストラクチャのプリミティブを介して起動することができる。
【０００８】
上記の概要を提供して、発明を実施するための形態において、以下に更に説明される簡略化された形式において概念の選択を導入する。上記の概要は、クレームされた主題の重要な特徴又は基本的な特徴を識別することを意図しておらず、又クレームされた主題の範囲を限定するのに使用されることを意図しない。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施例に係るソフトウェア開発を行うことができる実行環境のブロック図である。
【図２】本発明の一実施例に係る影のようについてまわる外部のヘルパープロセスを有するインプロセスのデバッガーを使用する処理のフローチャートである。
【図３】本発明の一実施例に係るデバッガーによって実行される種々のアクションのフローチャートである。
【図４】本発明の一実施例に係るプログラムのブロック図である。
【図５】本発明の一実施例に係るデバッガーからプログラムの実行を継続する処理のフローチャートである。
【図６】本発明の一実施例に係るシンボル名を解決するプロセスのフローチャートである。
【図７】本発明の一実施例に係る本明細書において説明される主題を実装するのに使用することができるコンポーネントのブロック図である。
【発明を実施するための形態】
【００１０】
（概説）
通常、インプロセスのデバッグは、簡単なユーザー体験を、提供する。すなわち、ユーザーは、デバッグコマンドを、コードを入力且つ実行するために使用されている同一のコマンドラインインターフェースから入力することができる。普通、インプロセスのデバッグを、ハードコーディングのデバッグコマンド又はデバッグ関数が使用するフックによって、コマンドラインプロセッサを実装するソフトウェアに実装する。多くの場合、最新の実行環境は、アウトオブプロセスのデバッガーを実装するために使用することができるデバッグインフラストラクチャを提供し、及び普通、インプロセスのデバッグの実装は（インプロセスのデバッグを提供するシステムがシステム自体のデバッグインフラストラクチャを有することができるが）、上記の既存のインフラストラクチャの使用を行わない。しかしながら、にアウトオブプロセスのデバッグをサポートするインフラストラクチャを使用して、インプロセスのデバッグ体験を実装することができる。
【００１１】
アウトオブプロセスのデバッグにおいて、デバッガーは、デバッグされているプログラム（デバッグ対象）から分離されたプロセスに存在するアプリケーションであるとすることができる。従って、アウトオブプロセスのデバッグアプリケーションは、デバッグ対象を外部の分析観点から考察し、及びデバッグ対象をデバッグ対象のプロセスの外側から検査且つ操作することができる。多数の実行環境によって提供されるデバッグインフラストラクチャを、デバッガーアプリケーションが上記の外部の分析観点を有するという仮定のもとに設計することができて、インプロセスのデバッグを実装するようなインフラストラクチャの使用を複雑にすることがある。
【００１２】
デバッグインフラストラクチャを使用してインプロセスのデバッグ体験を実装するために、ヘルパープログラムを、作成して、デバッグ対象から分離されたプロセスにおいて実行する。ヘルパープログラムは、アウトオブプロセスのデバッガーであるかのようにデバッグ対象の処理に添付され、及びデバッグ対象を検査且つ操作するのに適切な環境のデバッグインフラストラクチャを使用する。デバッグ対象が実行する処理にロードされるデバッグモジュールは、ユーザーが呼び出しをすることができるデバッグコマンドを提供する。上記のデバッグコマンドは、ヘルパープロセスを使用して、アクションのいくつかを実行する。例えば、ユーザーがシンボルを検査すること、ブレークポイントを設定すること等を命令するならば、デバッグモジュールは、ヘルパープロセスの呼び出しをして、シンボルを検査し、ブレークポイントを設定する等のためのデバッグインフラストラクチャのプリミティブを使用することができる。
【００１３】
コマンドラインプロセッサは、ＲＥＰＬループを介して、ユーザー入力を受信且つ処理する。コマンドラインプロセッサが開始されると、ＲＥＰＬループを実行する関数を起動して、ＲＥＰＬループのインスタンスを作成する。デバッグされるプログラムが（例えば、ＲＥＰＬループへの入力として名前を入力することによって）開始されると、デバッグされるプログラムを、スタックにプッシュすることによって、ＲＥＰＬループをカレントフレームとして入れ替える。デバッグされているプログラムに例外が発生するならば、ユーザーは、デバッグコマンドを、コマンドラインインターフェースに、例えば、ＲＥＰＬループの入力フェーズに、入力したいことがある。ＲＥＰＬループの既存のインスタンスに戻ることは、デバッグされているプログラムをスタックからポップすることによって、デバッグされているプログラムの状態を失う。既に述べたように、例外が通知されていると、ヘルパープロセスは、例えばfunc-eval等のデバッグのプリミティブを使用して、ＲＥＰＬループの第２のインスタンスを開始する。さらにまた、ユーザーは、ＲＥＰＬループの第２のインスタンスにデバッグコマンドを入力することができる一方、デバッグされているプログラムの状態を、検査及び操作のためにスタックに保持することができる。
【００１４】
（ソフトウェア開発を行うことができる実行環境の実施例）
図１は、ソフトウェア開発を行うことができる実行環境の一実施例のブロック図である。環境１００は、ソフトウェアを開発且つ実行するのに使用することができるインフラストラクチャを提供する。上記のインフラストラクチャは、例えばオブジェクト指向のプログラミングモデル、仮想マシン及び関連する仮想マシン言語、動的リンク、ガベージコレクション等の種々の機能を提供する。環境１００のような実行環境を提供するシステムの実施例は、本願発明の特許出願人の製品、Ｊａｖａ（登録商標）、種々のオペレーティングシステム等である。
【００１５】
実行環境は、デバッグインフラストラクチャ１０２を提供することができる。通常、デバッグインフラストラクチャ１０２を、アウトオブプロセスのモデルを使用してデバッグを容易にするよう仕組む。すなわち、デバッグされるプログラム（デバッグ対象）を、あるデバッグシンボル及び他の情報によってインストルメント化することができる。デバッグインフラストラクチャ１０２は、先に述べたインストルメンテーションを介してデバッガーと対話操作することができる。従って、デバッガープリケーションは、デバッグインフラストラクチャ１０２を使用して、デバッグ対象のプログラムを検査且つ制御することができる。デバッガープリケーション及びデバッグ対象のプログラムは、別個のプロセスにおいて実行する。デバッグインフラストラクチャ１０２は、デバッガープリケーションにデバッグ対象を検査且つ制御することができるようにするたくさんの検査モデル及びフロー制御モデルを提供する。例えば、デバッグインフラストラクチャ１０２は、デバッグ対象のシンボルを検査し、ブレークポイントを設定し、デバッグ対象を開始及び／又は終了し、デバッグ対象の中の任意に選択された関数を実行し、スタックを検査し、デバッグ対象の中に発生するあるイベント及び／又は例外をデバッガーに通知する等の機能を含むことができる。デバッグアクションを、情報（例えば、シンボルの検査、スタックの検査等）を提供するデバッグアクション、及びプログラムフロー（例えば、実行を継続する、次のステートメントを設定する等）を制御するデバッグアクションとして漠然と特徴づけることができることを補足すべきである。デバッグインフラストラクチャ１０２は、（複数の）メソッド１０４を提供することができ、及び（複数の）データ構造１０６と（複数の）デバッグイベント１０８とを定義することができて、デバッグ対象を検査且つ制御するデバッガープリケーションによって使用することができる。上記のアイテムを、デバッグのプリミティブと呼ぶことができる。（異なるデバッグのプリミティブを、実行されているデバッグ関数に依存して使用することができ、例えば、１つのプリミティブを、任意の関数を実行するのに使用することができ、一方、別のプリミティブを、ブレークポイントを設定するのに使用することができる。）デバッガープリケーションの典型的な一実施例は、デバッグインフラストラクチャ１０２のような機能の使用を行う。
【００１６】
開発プログラム１１０は、実行環境１００のプロセス１１２内において実行することができるプログラムである。プロセス１１２は、オペレーティングシステム又は他のコンポーネントによって提供することができるコンストラクタであり、及び通常、プロセス自体のスタック、仮想アドレス空間等を有する。開発ソフトウェア１１０は、プログラマに、コードを開発且つ実行することを可能にする。開発ソフトウェア１１０は、例えば、Ｉｒｏｎ  Ｐｙｔｈｏｎ等のコマンドラインのインタープリターの形になる及び／又はコマンドラインのインタープリターを含むことができる。開発プログラム１１２の他の実施例は、Ｊａｖａインタープリター、Ｐｅｒｌインタープリター、種々のＵｎｉｘ（登録商標）／Ｌｉｎｕｘシェル（例えば、Ｂｏｕｒｎｅシェル、Ｃシェル、Ｚシェル等）を含む。しかしながら、本明細書において説明される主題は、コマンドラインのような言語のインタープリター又は解釈された言語に限定されないことが理解されるべきである。
【００１７】
通常、開発プログラム１１０は、read-eval-printループを実装する関数を含み、多くの場合、ＲＥＰＬループと呼ぶ。read-eval-printループは、名前が連想させるように、ユーザー入力を読取り、入力を評価し、及び入力に基づいて結果を印刷（又は表示）する。開発プログラム１１０が開始されると、通常、開発プログラム１１０は、入力１１６をユーザー１２０から受信し及び出力１１８をユーザー１２０に提供するために、ＲＥＰＬループのインスタンス１１４を起動する。例えば、入力１１６は、例えば関数定義、関数呼び出し、モジュールをロードする命令等のコード行を含むことができる。出力１１８は、関数、エラーメッセージ等を実行することから結果として生じる出力を含むことができる。
【００１８】
プログラム１２２は、開発ソフトウェア１１０内において実行することができ、及びデバッグを受けることができるプログラムコードを含む。プログラム１２２は、プログラム全体、又は例えば関数定義、モジュール定義等のプログラムの一部の形になることができる。プログラム１２２を、入力１１６として、ＲＥＰＬループのインスタンス１１４に提供することができる。例えば、開発ソフトウェア１１０がＩｒｏｎ  Ｐｙｔｈｏｎのインタープリターであるならば、ユーザー１２０は、次のコードを、入力１１６として、ＲＥＰＬループのインスタンス１１４に入力することができる。  
*> def divBySequence(N, x):  
...   if x<0 : return N  
...   result = N/x  
...   return divBySequence(result, x-1)  
...  
*>  
【００１９】
以下に説明するように、関数divBySequenceの上記の定義は、上記の定義が零によって除算する場合により例外を生成するにもかかわらず、上記の定義は、プログラム１２２の一実施例である。プログラム１２２がＲＥＰＬループのインスタンス１１４にタイプして入力される上記の一実施例に加えて、プログラム１２２を、開発ソフトウェア１１０に、例えば、記憶されたファイルからモジュールをロードする、ネットワークからプログラム１２２をダウンロードする等の他の方法によって提供する。
【００２０】
開発ソフトウェア１１０内のデバッグを、開発ソフトウェア１１０において互いに対話操作して、デバッグ体験を作成することができる２つのソフトウェア、デバッグモジュール１２４及びヘルパープログラム１２６、によって容易にすることができる。（ライン１３６は、デバッグモジュール１２４とヘルパープログラム１２６との間の対話操作を表し、及び上記の対話操作は、以下に説明するように、種々の形になることができる。）
【００２１】
デバッグモジュール１２４は、開発ソフトウェア１１０にロードすることができるデバッグ機能を提供する。例えば、開発ソフトウェア１１０がＩｒｏｎ  Ｐｙｔｈｏｎのインタープリターである場合の例において、ユーザーは、例えば「import debugger」等のコマンドを（例えば、上記のようなコマンドを、ＲＥＰＬループのインスタンス１１４によって提供されるプロンプトにタイプして入力することにより）発行することができて、デバッグモジュール１２４を、開発ソフトウェア１１０が実行中のプロセス１１２にロードさせる。デバッグモジュール１２４は、ユーザーが起動して種々のデバッグアクション（例えば、シンボルの検査、スタックの検査、プログラム実行の継続等）を実行することができる関数を公開することができる。デバッグモジュール１２４をプロセス１１２にロードすることによって、開発ソフトウェア１１０のユーザーは、上記の関数の呼び出しをすることができる。例えば、スタックを検査するために、ユーザーは、「debugger.where()」のようなコマンドにより関数又はメソッドの呼び出しをしたかもしれない。例えば、「debugger.CatchExceptions()」（例外が発生するとデバッガーに停止を命令する）、「debugger.show()」（現在の関数を一覧にする）、「debugger.continue()」（プログラムの停止後にプログラムの実行を継続する）等の他のコマンドを、デバッグモジュール１２４によって提供することができる。
【００２２】
ヘルパープログラム１２６は、プロセス１２８において実行される。ヘルパープログラム１２６は、デバッグモジュール１２４が使用することができるバックエンド機能のような機能を提供する。デバッグインフラストラクチャ１０２は、デバッグアプリケーションがデバッグ対象プログラムから分離されたプロセスに位置されるモデルに従うのだから、ヘルパープログラム１２６は、上記のアウトオブプロセスの分析観点を提供する。従って、ヘルパープログラムは、典型的なアウトオブプロセスのデバッガーが行うであろうように、プロセス１１２の状況（例えば、スタック、シンボル等）を検査することができ、及びプロセス１１２のフローを（例えば、ブレークポイントの設定、任意のステートメントへのジャンプ、任意の関数の実行等によって）制御することができる。典型的なアウトオブプロセスのデバッガーが、ユーザーと直に対話操作するコンソールアプリケーションであるとすることができるのに対し、ヘルパープログラム１２６は、デバッグモジュール１２４と対話操作することができ、さらにユーザーと対話操作する。上記の配置は、ユーザーに、別個のデバッガープリケーションからよりも、むしろ開発ソフトウェア１１０が提供するユーザーインターフェースから、デバッグすることを可能にする。（しかしながら、本明細書において説明される主題は、ヘルパープログラム１２６がユーザーとの対話操作を回避する場合に限定されない。ヘルパープログラム１２６は、ユーザーとの対話操作に関与することができる。）
【００２３】
ヘルパープログラム１２６、デバッグモジュール１２４、及びプロセス１１２、１２８は、互いに対話操作をすることができる。例えば、デバッグインフラストラクチャ１０２は、上記に補足したように、デバッガーが添付されるプロセスについてデバッガーに伝達することができるあるデバッグイベント１０８（例えば、スタックオペレーション、関数の開始又は終了、例外等）を定義する。ヘルパープログラム１２６がプロセス１１２に添付されると、ヘルパープログラム１２６は、上記のデバッグイベント１０８の通知を受信する。加えて、デバッグモジュール１２４は、種々の伝達１３０を、ヘルパープログラム１２６に送信することができ、及びヘルパープログラム１２６は、情報及び／又は（複数の）命令１３２を、デバッグモジュール１２４に及び／又はプロセス１１２に提供することができる。（アイテム１０８、１３０、１３２によって表された伝達は、ライン１３６によって表され、デバッグモジュール１２４とヘルパープログラム１２６との間の対話操作の例である。上記の対話操作を、例えばデバッグインフラストラクチャ１０２を介する等の種々の機構によって行うことができる。）例えば、ユーザー１２０が、デバッグモジュール１２４を介して、検査されるシンボル名「ｘ」の要求をするならば、デバッグモジュール１２４は、伝達１３０を、ヘルパープログラム１２６に送信して、ヘルパープログラム１２６がプロセス１１２のスタック上のシンボル名「ｘ」を検査することを要求する。ヘルパープログラム１２６は、デバッグインフラストラクチャ１０２によって提供されるメソッド１０４を使用して、プロセス１１２のスタック上の「ｘ」の値を検査することができる。そして、ヘルパープログラム１２６は、シンボルｘの値を、デバッグモジュール１２４がｘの値を取得し及びｘの値をユーザーに提供することができるプロセス１１２内のデータ位置に書込む。別の例として、ユーザー１２０は、デバッグモジュール１２４の関数を使用して、設定されるブレークポイントの要求をすることができ、デバッグモジュール１２４が要求されたブレークポイントをヘルパープログラム１２６に伝達することができる。そして、ヘルパープログラム１２６は、メソッド１０４を使用して、ブレークポイントを設定することができる。デバッグモジュール１２４、ヘルパープログラム１２６、及びプロセス１２８、１１２の間の対話操作についての種々の種類を、以下に詳細に説明する。
【００２４】
ヘルパープログラム１２６が実行することができる１つのアクションは、プロセス１１２におけるＲＥＰＬループの第２のインスタンス１３４を開始させることである。例えば、プログラムが実行しているならば、実行しているプログラムは、プログラムを停止させる例外を発生させることができる。例えば、上述のdivBySequence関数は、divBySequence関数の呼び出しが零による除算に終わる場合に例外を発生させることができる。例外は、例えば、ヘルパープログラム１２６等の添付されたデバッガーが通知することができるデバッグイベントの一例である。ヘルパープログラム１２６に例外が通知されると、ヘルパープログラム１２６は、モジュール１０４の１つ（例えば、本願発明の特許出願人の製品環境の「func-eval」のプリミティブ）を使用して、プロセス１１２におけるＲＥＰＬループの第２のインスタンス１３４を起動することができる。以下に、より詳細に説明するように、ＲＥＰＬループの第１のインスタンス１１４は、スタック上、比較的上部にあり、スタックの更に下部は、（例えばdivBySequence関数等の）プログラム１２２があって、ユーザー例外によって停止されている。（上述の例におけるスタックに関して、語句「上部」及び「更に下部」は、スタックが下向きに増加する例を引用するが、本明細書において説明される主題は、如何なる個別のスタックの成長方向に限定されない。）従って、ＲＥＰＬループの第１のインスタンス１１４は、ユーザー入力に使用可能であるとすることはできない（例えば、ユーザーがデバッグモジュール１２４によって提供されるデバッグコマンドを入力するのに使用可能であるとすることはできない）。ＲＥＰＬループの第２のインスタンス１３４を開始させることによって、ユーザーは、デバッグコマンドを入力する、プログラムコードを編集する等のために、開発ソフトウェア１１０と対話操作することができる。加えて、ＲＥＰＬループの第２のインスタンス１３４が作成されると、デバッグされているプログラム１２２の状態が保持されることによって、プログラム１２２の状態は、ヘルパープログラム１２６によって検査且つ操作することができる。デバッグが進行するに従って、ユーザーは、ＲＥＰＬループのインスタンス１３４からプログラムの実行を継続することができて、更に例外を発生させることができる。上記の例外が発生すると、ヘルパープログラム１２６は、ＲＥＰＬループの追加のインスタンスを作成して、ユーザーに、開発ソフトウェア１１０との対話操作を継続することを可能にする。従って、デバッグセッションがしばらくの間進むと、プロセス１１２のスタック上にＲＥＰＬループのいくつかのインスタンスが存在することがある。
【００２５】
従って、デバッグモジュール１２４は、開発ソフトウェア１１０のユーザーインターフェースの内部からユーザーのデバッグ体験を提供し、及びヘルパープログラム１２６は、デバッグインフラストラクチャ１０２の検査機能と制御機能との使用をするアウトオブプロセスの分析観点を提供する。デバッグモジュール１２４とヘルパープログラム１２６との間の伝達は、デバッグモジュール１２４に、アウトオブプロセスのデバッガープログラムを扱うデバッグインフラストラクチャの機能を活用することを可能にし、及びヘルパープログラム１２６に、開発ソフトウェア１１０のユーザーインターフェースの内部からユーザーと対話操作するデバッグモジュール１２４の能力を活用することを可能にする。
【００２６】
（第２のＲＥＰＬループを介したデバッグモジュールの使用）
図２は、デバッグプロセスの一例を示し、及びＲＥＰＬループの第２のインスタンスをデバッグにおいてどのように使用することができるかを示す。図２のプロセス、及び本明細書において示される他のプロセスの例を、図１に示されたコンポーネントに関して説明するが、他のシステムにおいても使用することができる。更に、図２、及び本明細書における他のフローチャートは、矢印を使用して、１つのブロックから別のブロックへ通じるフローを示すが、表されたフローは、単なる例でありながら、示されるアクションを、あらゆる順序において、及びあらゆるコンビネーション又はサブコンビネーションにおいて実行することができる。加えて、あるアクションを、（プロセス１１２、１２８を表すボックス内に上記のアクションを含むことによって示すように）個別のプロセスによって実行されているとして示すが、本明細書における主題は、アクションがあらゆる個別のプロセスによって実行される場合に限定されない。
【００２７】
スタック２０２は、プロセス１１２のスタックであり、及び例として、下方に成長するスタックとして表される。（矢印２０１は、上記の例においてスタックの成長方向を示す。）ＲＥＰＬループのインスタンス１１４は、（図１に示された）開発ソフトウェア１１０が開始された後のあるときにインスタンス化される。加えて、（図１に示された）デバッグモジュール１２４を、プロセス１１２にロードすることができ、デバッグ機能をユーザーに使用可能にする。いくつかのポイントにおいて合わせて、ＲＥＰＬループのインスタンス１１４は、ユーザー入力を受信する（ブロック２０６）。上記のユーザー入力を、プログラムを識別して、起動することができて（例えば、実行される関数名をタイプして入力することによって）、この場合、ユーザーの入力において識別されるプログラムを、起動する（ブロック２０８）。プログラムフレーム２０４は、スタック上に作成される。プログラムが起動された後、プログラムは、例外を発生することがある（ブロック２１０）。例えば、上記のdivBySequence関数は、プログラムの一例であり、零による除算に終わることがあって、例外が発生する。
【００２８】
（図１に示された）ヘルパープログラム１２６を、プロセス１２８において実行する。ヘルパープログラム１２６がデバッガーとしてプロセス１１２に添付される場合、ヘルパープログラム１２６は、プロセス１１２において発生した例外の通知２１２を受信する（ブロック２１４）。ヘルパープログラム１２６は、デバッグメソッドを使用して、ＲＥＰＬループの新しいインスタンス１３４を起動する（ブロック２１６）。デバッグメソッドは、（図１に示された）（複数の）メソッド１０４の１つであるとすることができる。使用することができるメソッドの一実施例は、本願発明の特許出願人の製品環境において提供される「func-eval」のデバッグのプリミティブであって、デバッガーに、デバッグ対象における任意の関数を起動することを可能にする。本願発明の特許出願人の製品以外のシステムが、デバッガーから任意の関数を起動する機能を提供することができることは、理解されるべきであり、及びfunc-evalへの言及は、本願発明の特許出願人の製品環境のfunc-evalのプリミティブに又は上記の名称を有するメソッドに限定されるとして理解されるべきではないが、デバッグ対象プロセスにおいて、デバッガーに関数を起動することを可能にさせる他のシステムのメソッドも包含する。ＲＥＰＬループの新しいインスタンス１３４が起動されると、起動された新しいインスタンス用のフレーム１３４がスタック上に配置される。
【００２９】
ＲＥＰＬループの新しいインスタンス１３４が開始されると、ユーザーからの入力又は他の（複数の）命令を、例えば、コマンドラインインターフェースを介して、受信することができる（ブロック２１８）。受信することができる命令の１つの種類は、デバッグモジュール１２４によって提供されるデバッグコマンドである。例えば、ユーザーは、スタックを検査する、シンボルの値を検査する等のために、デバッグモジュール１２４によって提供される関数の呼び出しをすることができる。上記の命令を与えると、命令に基づいた情報２２０を、プロセス１２８に伝達して、ヘルパープログラム１２６に、ユーザーが実行したいデバッグアクションがどんな種類かを通知する。ヘルパープログラム１２６は、命令において指定されるアクションを、例えば、シンボルを検査する、スタックを検査する、ブレークポイントを設定する等の（図１に示された）デバッグインフラストラクチャ１０２を使用することによって実行する（ブロック２２２）。図３に関連して、上記のアクションのいくつかの例を、以下に説明する。
【００３０】
ブロック２２２において実行されるアクションは、プロセス１２８からプロセス１１２に与えられている（複数の）命令２２４及び／又は情報２２６のどちらかに終わることがある。例えば、ブロック２２２において実行されるアクションがシンボル値の検査であるならば、ヘルパープログラム１２６は、シンボル値を含む情報２２４を提供することができる。例えば、ヘルパープログラム１２６は、デバッグインフラストラクチャ１０２を使用して、情報２２４をプロセス１１２のアドレス空間の位置に書込んで、情報２２４を、デバッグモジュール１２４が取得することができる。別の例として、ブロック２２２において実行されるアクションがデバッグ対象プログラム（例えば、図１に示されたプログラム１２２）の再開であるならば、ヘルパープログラム１２６は、デバッグインフラストラクチャ１０２を使用して、（複数の）命令２２６をプロセス１１２に発行してプログラムフレーム２０４にスタックをアンワインドし、保留中の例外をクリアして、例外が発生したポイントにおいてプログラムの実行を継続することができる。情報２２４及び／又は（複数の）命令２２６を、プロセス１１２がプロセス１２８から受信する（ブロック２２８）。次に、プロセス１１２は、命令の通りに動作する（ブロック２３０）及び／又は受信した情報を表示することができる（ブロック２３２）。例えば、情報の表示２３２を、ユーザーがシンボルを検査することを要求していた場合に、現在のシンボル値を表示することができる場合に、実行することができる。別の例として、プロセス１１２が、（例えば、ブロック２３０において）例えば、プログラム１２２のフローを制御する方法等のある方法において動作するように命令されていたならば、プログラム１２２の実行結果を、上記のフロー制御が使われた後に表示することができる。次に、フローは、ＲＥＰＬループのインスタンス１３４の入力フェーズにサイクルして、更にユーザーからの入力を受信する。
【００３１】
図３は、デバッガーによって実行することができる種々のアクションを示す。図３は、指定されたアクションが実行される（図２からの）ブロック２２２を示す。図３は、ブロック２２２において実行することができるアクションの種々の例を示す。例えば、図３に示されたアクションは、（図１に示された）ヘルパープログラム１２６によって実行することができ、及び（図１に示された両方の）デバッグ対象プロセス１１２及び／又はデバッグモジュール１２４からの協同を伴うことができる。
【００３２】
図４の一実施例のプログラム４００に関して、図３のアクションを、以下に説明する。プログラム４００は、後述の機構の一部としての戻り値として使用することができる１つ又は複数の（複数の）ローカル変数４０４と同様に、（複数の）ローカル変数４０２の宣言を含む。加えて、プログラム４００は、ステートメント４０６、４０８、４１０、４１２、４１４、及びreturnステートメント４１６を含む。プログラム４００は、プログラムのほんの一実施例にすぎず、他のプログラムは、異なる数のステートメント、より多くの（又はより少ない）変数宣言、分岐、条件、追加のreturnステートメント等を含むことができるであろう。
【００３３】
図３に戻ると、実行することができるアクションの一実施例は、ブレークポイントを設定することである（ブロック３０２）。例えば、ユーザーは（図１に示された）デバッグモジュール１２４の関数を介してブレークポイントを指定することができ、及び上記の指定を、（図１に示された）ヘルパープログラム１２６に伝達することができる。（図１に示された）デバッグインフラストラクチャ１０２は、デバッグ対象にブレークポイントを設定するプリミティブを含むことができる。ブレークポイントがプログラム４００のステートメント４１０に設定されるならば、プログラム４００は、ステートメント４１０に到達する場合に、実行を停止し、及びデバッグイベントを生成する。
【００３４】
別の一実施例のアクションは、ユーザー指定の戻り値を有する関数から戻ることである（ブロック３０４）。例えば、関数が例外を発生させるならば、ユーザーは、関数に実行することを継続させないように選択することができるが、むしろ関数用の戻り値を指定するように選択することができ、及び関数が実行を完了して指定された値を戻すように、残りのプログラムを継続させることができる。上記のアクションは、指定された値を戻り値が（例えば、スタック上の指定された位置に、指定されたレジスタに等の）普通に検出される場所に書込むこと、及び関数が存在するポイントからプログラムの続行を命令することによって、実行することができる。戻り値を設定することができることを実装する１つの方法は、デバッグ対象プログラムをインストルメント化して、（デバッガーが使用可能とすることができるが、デバッグ対象プログラム自体から隠すことができる）１つ又は複数の（複数の）ローカル変数４０４を含むことである。ユーザーが設定する戻り値を、（複数の）ローカル変数４０４に書込むことができ、及び命令ポインターを更新して、プログラムが実行を再開する場合に関数が（複数の）ローカル変数４０４の値を戻すようにリターン命令４１６を示すことができる。
【００３５】
別の一実施例のアクションは、次のステートメントを実行するように設定することである（ブロック３０６）。例えば、プログラム４００は、プログラム４００がデバッグイベントのために停止する場合にステートメント４０８を実行しているとすることができる。順番通りに実行される次のステートメントは、ステートメント４１０であるが、ユーザーは、実行されるべき次のステートメントがステートメント４１４であることを指定することができる。（図１に示された）デバッグインフラストラクチャ１０２により提供されるプリミティブを使用して、プログラムカウンターを、ステートメント４１４の冒頭に一致する命令を示すように設定することができる。
【００３６】
別の一実施例のアクションは、次のｎ個のステートメントをステップスルーすること、すなわち、ｎ個のステートメントを実行して次に停止させることである（ブロック３０８）。本明細書において説明される全般的な技法は、アウトオブプロセスのデバッグの上にインプロセスのデバッグをビルドし、及びアウトオブプロセスの技法を直に活用することができる。従って、ｎ個のステートメントをステップスルーするようにユーザーから受信された命令を、（図１に示された）ヘルパープログラム１２６がステップのプリミティブを使用してｎ個のステートメントをステップスルーして、アウトオブプロセスのデバッガーであるかのように、開発ソフトウェア要求によって（例えば、図１に示されたデバッグモジュール１２４を介して）実装することができる。
【００３７】
別の一実施例のアクションは、デバッグを中止すること、例えば、例外がデバッガーを起動して最上位のＲＥＰＬループに戻し及び停止することである（ブロック３１０）。デバッグの進行中に、ＲＥＰＬループのいくつかのインスタンスを、作成することができて、各々を例外によって作成することができる。対応するデバッグモジュールのコマンドは、例外を起動することができて、自然にスタックをアンワインドさせるだろう。従って、スタックをアンワインドして種々の入れ子にされたＲＥＰＬループのインスタンスを削除するので、添付されたデバッガー（例えば、図１に示されたヘルパープログラム１２６）を、アンワインドのプロセスの間、例えば、ＲＥＰＬループの第１のインスタンス（図１に示された符号１１４）に対応するスタック上のフレームに到達するまで、ユーザーに例外を通知しないように命令することができる（ブロック３１２）。
【００３８】
（プログラム実行の継続）
プログラム実行の継続は、デバッグアクションの一実施例であり、及び図５は、実行を継続する一実施例のプロセスを示す。上記の一実施例において、スタック２０２を、種々のアクションの傍らに示し、及びスタック２０２は、どのフレームが種々のアクションの各々に対してカレントであるかを示す。（矢印５０１は、スタックが成長する方向を表す。）
【００３９】
ＲＥＰＬループのインスタンス１３４は、ユーザーに命令又は他の入力を入力するプロンプトを生じる。次に、ＲＥＰＬループのインスタンス１３４は、ユーザーから、デバッグ対象プログラム（例えば、図１に示されたプログラム１２２）の実行を継続する要求を受信する（ブロック５０２）。例えば、ユーザーは、（図１に示された）デバッグモジュール１２４によって表示された関数、例えば「debugger.continue()」等の関数を、発行することができる。上記の要求に基づいて、デバッグモジュール１２４は、（図１に示された）プログラム１２２の再開を、ヘルパープログラム１２６に要求する（ブロック５０４）。ヘルパープログラム１２６に要求することの一部として、デバッグモジュール１２４は、ヘルパープログラム１２６に、保留中の例外を無視することを通知する。例えば、ヘルパープログラム１２６にＲＥＰＬループのインスタンス１３４を作成させる例外を、ユーザーが継続を要求するときに保留中のままにすることができ、及びヘルパープログラム１２６に、上記の例外をクリアすることができることを通知して、上記の例外が（図１に示された）プログラム１２２の実行フローに更に影響を与えることができないようにすることができる。ブロック５０６において、ＲＥＰＬループのインスタンス１３４を終了させ、及びヘルパープログラム１２６が実行中のプロセス１２８に、上記の終了を通知する。
【００４０】
ブロック５０８において、ヘルパープログラム１２６は、プログラム（例えば、プログラム１２２）に実行を再開することを許可する。ブロック５１０において、プログラム１２２の保留中の例外を、無視する。次に、プログラム１２２は、プロセス１１２において実行することを継続する（ブロック５１２）。ＲＥＰＬループのインスタンス１３４が終了しているので、ＲＥＰＬループのインスタンス１３４のフレームがスタック２０２から削除されて、カレントフレームは、プログラム１２２が実行を再開する場合、プログラム１２２用のフレーム２０４である。（参考までに、ＲＥＰＬループのインスタンス１１４の位置を、前の図に関連して説明されるが、スタック２０２上に示す。）
【００４１】
（シンボル解決）
図６は、シンボル名を解決するプロセスの一実施例を示す。例えば、ユーザーは、（図１に示された）デバッグモジュール１２４の関数を使用して、個別の名前を有するシンボルの値を要求することができる。別の例として、デバッグモジュール１２４の明示的な関数を使用する代わりに、ＲＥＰＬループの通常のシンボル解決の構文を介してアクセスされるロジック（例えば、シンボル名をＲＥＰＬループのプロンプトにタイプして入力する場合にシンボルの値を表示するロジック）を、フックによって拡大又は変更して、図６に示されたロジックによるシンボルの解決をすることを可能にすることができる。（図１に示された）デバッグモジュール１２４及び／又はＲＥＰＬループのインスタンス１３４、並びにヘルパープログラム１２６は、図６に示されたプロセスを使用して、シンボル名を解決することができる。図６の一実施例において、スタック２０２を、どのフレームが種々のアクションの各々についてカレントであるかを示す種々のアクションの傍らに示す。図２及び図５からのフレーム、ＲＥＰＬループのインスタンス１１４、１３４及びプログラムフレーム２０４、の位置を、スタック２０２上に示す。（矢印６０１は、スタックが成長する方向を表す。）
【００４２】
ブロック６０２において、ユーザーは、シンボルについての情報を要求する。例えば、上記の要求を、ＲＥＰＬループのインスタンス１３４を使用して行い、デバッグモジュール１２４によって提供される関数を起動することができる。（例えば、シンボル名‘x’の検査を、例えばdebugger.examine(‘x’)等の関数呼び出しによって要求することができるだろう。）別の例として、ユーザーは、シンボルの値に要求をして、そうするためのＲＥＰＬループの通常の構文を、例えば、ＲＥＰＬループのプロンプトに「x」をタイプして入力することによって、使用することができるだろう。以下に説明されるように、図６のプロセスの側面を、デバッグモジュール１２４によって又はＲＥＰＬループのインスタンス１３４のシンボル解決の機構を拡大することによって提供される関数として実装して、上記の関数を実行させることを可能にすることができる。要求が、デバッグモジュール１２４の明示的な関数によって行われるか、ＲＥＰＬループ自体のシンボル解決の構文を介して行われるかどうかに関係なく、次にプロセスは、ブロック６０４に進む。ブロック６０４において、要求されたシンボル名がグローバルシンボル名であるかどうかを検査することによって、要求されたシンボル名を解決する試行を行う。（グローバルシンボルは、ＲＥＰＬループのインスタンス１３４の範囲内からアクセス可能である。）シンボルが、（ブロック６０６において決定されたとして）グローバルシンボルとして解決可能であるならば、シンボルの値を、表示し（ブロック６１２）、及びフローは、ＲＥＰＬループのインスタンス１３４の入力フェーズに循環して、更にユーザー入力を待つ。シンボル名が、（ブロック６０６において決定されたとして）解決可能でないならば、プロセス１２８のヘルパープログラム１２６がシンボルを検索する要求を行う。ヘルパープログラム１２６は、添付付されたデバッガーであり、及び（図１に示された）デバッグインフラストラクチャ１０２を使用して、例えば（デバッグ対象プログラム用のフレームである）フレーム２０４等のスタック２０２の種々の部分に達することができる。従って、ヘルパープログラム１２６は、指定された名前を有するローカルシンボルについてスタックに問合せ（ブロック６０８）、及びシンボルの値をプロセス１１２に戻す（ブロック６１０）。次に、値を表示する（ブロック６１２）
【００４３】
上記したように、シンボルを検査する要求を、デバッグモジュール１２４において提供された関数（例えば、「debugger.examine(‘x’)」）を介して、又はシンボル値を要求する普通のの構文を介して（例えば、ＲＥＰＬループによって提供されるプロンプトに「x」をタイプして入力することによって）明示的に行うことができる。前者の場合に、関数debugger.examineは、関連ロジック、例えば、関数が図６のブロック６０４〜６０６を実行すること、を実装する。別の例において、上記のロジックを、ＲＥＰＬループのシンボル解決の機構を拡大することによって実装して、ＲＥＰＬループのインスタンス１３４の可変の解決機構にデバッグモジュール１２４のフックを有することによって完成して図６のプロセスの要素を起動することができて、上記のフックは、ＲＥＰＬループが一部である言語インタープリターにおいて使用可能である。シンボル解決を可能にする別の方法は、入れ子にされたＲＥＰＬループが作成される場合に値をＲＥＰＬループのインスタンス１３４に（又は他の入れ子にされたＲＥＰＬループの範囲に）積極的に挿入することである。従って、例えばシンボル「x」の値等の値を（図１に示された）ヘルパープログラム１２６によってＲＥＰＬループのインスタンス１３４の範囲内に置くことができたので、上記の値を、ＲＥＰＬループの普通のシンボルの解決機構によって検索することができる。
【００４４】
（例示的実装例）
図７は、本明細書において説明された主題の側面の一実施例の環境を示す。
【００４５】
コンピューター７００は、１つ又は複数のプロセッサ７０４及び１つ又は複数のデータ記憶装置７０６を含む。通常、（複数の）プロセッサ７０４は、例えば、パーソナルデスクトップ若しくはラップトップコンピューター、サーバー、又はハンドヘルドコンピューターにおいて提供されるマイクロプロセッサ等のマイクロプロセッサである。（複数の）データ記憶装置７０６は、ショートタームかロングタームかのデータを格納する性能がある装置である。（複数の）データ記憶装置７０６の例は、ハードディスク、（光ディスク及び磁気ディスクを含む）取外し可能ディスク、揮発性及び不揮発性ＲＡＭ（random-access memory）、全ての種類のＲＯＭ（read-only memory）、フラッシュメモリ、磁気テープ等を含む。（複数の）データ記憶装置は、コンピューター読取り可能記録媒体の例である。コンピューター読取り可能記録媒体は、両方の、例えば（複数の）データ記憶装置７０６等も、短期間のデータ、例えば、電子、磁気、又は光学的信号等を保持する媒体も同様に含む。
【００４６】
（例えばソフトウェアコンポーネント７０２等の）ソフトウェアを、データ記憶装置７０６に格納することができ、及び１つ又は複数の（複数の）プロセッサ７０４において実行することができる。プログラムをハードディスクに格納し、ＲＡＭにロードし、（複数の）コンピューターのプロセッサにおいて実行するパーソナルコンピューターは、図７に示されたシナリオの典型となるが、本明細書において説明された主題は、上記の例に限定されない。
【００４７】
本明細書において説明された主題は、１つ又は複数の（複数の）データ記憶装置７０６に格納し及び１つ又は複数の（複数の）プロセッサ７０４において実行するソフトウェアとして実装することができる。別の例として、主題は、１つ又は複数のアクションを実行する命令を有するソフトウェアとして実装することができて、命令を、１つ又は複数のコンピューター読取り可能記録媒体に格納又保持する。
【００４８】
主題は、構造的機能及び／又は方法論的動作に特有の言語において説明されているが、添付のクレームに定義された主題が上記の特有の機能にも動作にも必ずしも限定されないことは、理解されることである。むしろ、上記の特有の機能及び動作は、クレームを実装する一実施例の形態として開示される。
【図１】
2010528395.tif 000003
【図２】
2010528395.tif 000004
【図３】
2010528395.tif 000005
【図４】
2010528395.tif 000006
【図５】
2010528395.tif 000007
【図６】
2010528395.tif 000008
【図７】
2010528395.tif 000009
【国際調査報告】
2010528395.tif 000010
2010528395.tif 000011