JP5307802B2 - 外部デバッグのインフラストラクチャを使用するインプロセスのデバッグ - Google Patents

外部デバッグのインフラストラクチャを使用するインプロセスのデバッグ Download PDF

Info

Publication number
JP5307802B2
JP5307802B2 JP2010510411A JP2010510411A JP5307802B2 JP 5307802 B2 JP5307802 B2 JP 5307802B2 JP 2010510411 A JP2010510411 A JP 2010510411A JP 2010510411 A JP2010510411 A JP 2010510411A JP 5307802 B2 JP5307802 B2 JP 5307802B2
Authority
JP
Japan
Prior art keywords
program
loop
debug
instance
user
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.)
Active
Application number
JP2010510411A
Other languages
English (en)
Other versions
JP2010528395A (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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2010528395A publication Critical patent/JP2010528395A/ja
Application granted granted Critical
Publication of JP5307802B2 publication Critical patent/JP5307802B2/ja
Active 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

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

本発明は、インプロセスのデバッグに関し、より詳細には、外部デバッグのインフラストラクチャを使用するインプロセスのデバッグに関する。
ソフトウェアを開発していると、ソフトウェアは、プログラマが期待するように動作しないことがある。デバッガーを使用して、プログラムの動作を解析すること及び/又は実行シナリオを変更するのを試みることができて、予期しない動作のソースに関しての手がかりを与えることができる。
デバッガーは、「アウトオブプロセス」又は「インプロセス」であるとすることができる。アウトオブプロセスのデバッガーは、デバッグされているプログラム(デバッグ対象)上において、デバッグ対象が実行されるプロセスの外部から動作するアプリケーションである。デバッグ対象は、アウトオブプロセスのデバッガーに検査モデル及び制御モデルを与え、デバッグ対象のプロセスを検査し及びデバッグ対象の実行を操作することができることによってリッチインターフェースを提供する。通常、最新の実行環境は、アウトオブプロセスのデバッガーの実装を容易にするインフラストラクチャを提供する。インプロセスのデバッガーは、コードが開発されている開発ソフトウェアに組み込まれる。例えば、コマンドライン言語のインタープリターは、インタープリターの中にハードコードされたデバッグコマンドを有することができたので、デバッグコマンドを、インタープリターのコマンドラインインターフェースからアクセスすることができる。
インプロセスのデバッガーは、ユーザーが1つのプロセスにおいて1つのユーザーインターフェースを介してコードを書いて且つデバッグすることができるので、簡単なユーザー体験を提供し、及びデバッグサポートを、実行環境と統合する。一方、アウトオブプロセスのデバッガーは、いくつかの実行環境がアウトオブプロセスのモデルをサポートすることを提供するデバッグインフラストラクチャを使用する。インプロセスのユーザー体験を提供するデバッガーは、上記のインフラストラクチャの使用を行っていない。
インプロセスのデバッグのユーザー体験を、アウトオブプロセスのデバッグをサポートするデバッグインフラストラクチャを使用して実装することができる。デバッグモジュールは、種々のデバッグタスク(例えば、シンボル検査、ブレークポイント設定等)用のコマンドを提供して、例えば言語用のコマンドラインインタープリター等の開発プログラムにロードすることができる。
デバッグモジュールは、開発プログラムから分離されたプロセスにおいて実行させるヘルパープログラムを使用する。ヘルパープログラムは、アウトオブプロセスのデバッガーとして、開発プログラムが実行しているプロセスに添付される。開発プログラムが実行中のプロセスの分析観点から、ヘルパープログラムは、アウトオブプロセスのデバッガーに類似しており、従って、ヘルパープログラムは、アウトオブプロセスのデバッガーがデバッグ対象を検査且つ操作するために使用されるデバッグインフラストラクチャの使用を行うことができる。ユーザーがデバッグモジュールによって提供される関数の1つを介してデバッグコマンドを発行すると、デバッグモジュールのコードは、ヘルパープロセスに呼び出しをして、要求されたコマンドを実行するのを支援する。例えば、ユーザーがブレークポイントを設定するコマンドを発行したならば、デバッグモジュールは、ヘルパープロセスに呼び出しをして、ブレークポイントを設定するデバッグインフラストラクチャからのプリミティブを使用する。
開発プログラムは、ユーザー入力を受信且つ処理するREPLループ(read-eval-printループ)を提供することができる。入力することができるユーザー入力の例は、デバッグされるプログラムを起動するコマンドである。デバッグイベントがプログラムに発生すると、ヘルパープログラムは、通知され及び開発プログラム中のREPLループの第2のインスタンスを起動する。ループを、デバッグ対象プログラムのフレーム先頭の実行スタックにプッシュして、検査及び操作のためにデバッグ状態の状態を保持する。加えて、REPLループの第2のインスタンスは、ユーザーが入力データを入力し及び開発プログラムと対話操作することを継続することができる間じゅうの機構を提供する。REPLループの第2のインスタンスを、例えば、func-evalのプリミティブ又はデバッガーがデバッグ対象の関数を起動ことができる間じゅうの他の機構等のデバッグインフラストラクチャのプリミティブを介して起動することができる。
上記の概要を提供して、発明を実施するための形態において、以下に更に説明される簡略化された形式において概念の選択を導入する。上記の概要は、クレームされた主題の重要な特徴又は基本的な特徴を識別することを意図しておらず、又クレームされた主題の範囲を限定するのに使用されることを意図しない。
本発明の一実施例に係るソフトウェア開発を行うことができる実行環境のブロック図である。 本発明の一実施例に係る影のようについてまわる外部のヘルパープロセスを有するインプロセスのデバッガーを使用する処理のフローチャートである。 本発明の一実施例に係るデバッガーによって実行される種々のアクションのフローチャートである。 本発明の一実施例に係るプログラムのブロック図である。 本発明の一実施例に係るデバッガーからプログラムの実行を継続する処理のフローチャートである。 本発明の一実施例に係るシンボル名を解決するプロセスのフローチャートである。 本発明の一実施例に係る本明細書において説明される主題を実装するのに使用することができるコンポーネントのブロック図である。
(概説)
通常、インプロセスのデバッグは、簡単なユーザー体験を、提供する。すなわち、ユーザーは、デバッグコマンドを、コードを入力且つ実行するために使用されている同一のコマンドラインインターフェースから入力することができる。普通、インプロセスのデバッグを、ハードコーディングのデバッグコマンド又はデバッグ関数が使用するフックによって、コマンドラインプロセッサを実装するソフトウェアに実装する。多くの場合、最新の実行環境は、アウトオブプロセスのデバッガーを実装するために使用することができるデバッグインフラストラクチャを提供し、及び普通、インプロセスのデバッグの実装は(インプロセスのデバッグを提供するシステムがシステム自体のデバッグインフラストラクチャを有することができるが)、上記の既存のインフラストラクチャの使用を行わない。しかしながら、にアウトオブプロセスのデバッグをサポートするインフラストラクチャを使用して、インプロセスのデバッグ体験を実装することができる。
アウトオブプロセスのデバッグにおいて、デバッガーは、デバッグされているプログラム(デバッグ対象)から分離されたプロセスに存在するアプリケーションであるとすることができる。従って、アウトオブプロセスのデバッグアプリケーションは、デバッグ対象を外部の分析観点から考察し、及びデバッグ対象をデバッグ対象のプロセスの外側から検査且つ操作することができる。多数の実行環境によって提供されるデバッグインフラストラクチャを、デバッガーアプリケーションが上記の外部の分析観点を有するという仮定のもとに設計することができて、インプロセスのデバッグを実装するようなインフラストラクチャの使用を複雑にすることがある。
デバッグインフラストラクチャを使用してインプロセスのデバッグ体験を実装するために、ヘルパープログラムを、作成して、デバッグ対象から分離されたプロセスにおいて実行する。ヘルパープログラムは、アウトオブプロセスのデバッガーであるかのようにデバッグ対象の処理に添付され、及びデバッグ対象を検査且つ操作するのに適切な環境のデバッグインフラストラクチャを使用する。デバッグ対象が実行する処理にロードされるデバッグモジュールは、ユーザーが呼び出しをすることができるデバッグコマンドを提供する。上記のデバッグコマンドは、ヘルパープロセスを使用して、アクションのいくつかを実行する。例えば、ユーザーがシンボルを検査すること、ブレークポイントを設定すること等を命令するならば、デバッグモジュールは、ヘルパープロセスの呼び出しをして、シンボルを検査し、ブレークポイントを設定する等のためのデバッグインフラストラクチャのプリミティブを使用することができる。
コマンドラインプロセッサは、REPLループを介して、ユーザー入力を受信且つ処理する。コマンドラインプロセッサが開始されると、REPLループを実行する関数を起動して、REPLループのインスタンスを作成する。デバッグされるプログラムが(例えば、REPLループへの入力として名前を入力することによって)開始されると、デバッグされるプログラムを、スタックにプッシュすることによって、REPLループをカレントフレームとして入れ替える。デバッグされているプログラムに例外が発生するならば、ユーザーは、デバッグコマンドを、コマンドラインインターフェースに、例えば、REPLループの入力フェーズに、入力したいことがある。REPLループの既存のインスタンスに戻ることは、デバッグされているプログラムをスタックからポップすることによって、デバッグされているプログラムの状態を失う。既に述べたように、例外が通知されていると、ヘルパープロセスは、例えばfunc-eval等のデバッグのプリミティブを使用して、REPLループの第2のインスタンスを開始する。さらにまた、ユーザーは、REPLループの第2のインスタンスにデバッグコマンドを入力することができる一方、デバッグされているプログラムの状態を、検査及び操作のためにスタックに保持することができる。
(ソフトウェア開発を行うことができる実行環境の実施例)
図1は、ソフトウェア開発を行うことができる実行環境の一実施例のブロック図である。環境100は、ソフトウェアを開発且つ実行するのに使用することができるインフラストラクチャを提供する。上記のインフラストラクチャは、例えばオブジェクト指向のプログラミングモデル、仮想マシン及び関連する仮想マシン言語、動的リンク、ガベージコレクション等の種々の機能を提供する。環境100のような実行環境を提供するシステムの実施例は、本願発明の特許出願人の製品、Java(登録商標)、種々のオペレーティングシステム等である。
実行環境は、デバッグインフラストラクチャ102を提供することができる。通常、デバッグインフラストラクチャ102を、アウトオブプロセスのモデルを使用してデバッグを容易にするよう仕組む。すなわち、デバッグされるプログラム(デバッグ対象)を、あるデバッグシンボル及び他の情報によってインストルメント化することができる。デバッグインフラストラクチャ102は、先に述べたインストルメンテーションを介してデバッガーと対話操作することができる。従って、デバッガープリケーションは、デバッグインフラストラクチャ102を使用して、デバッグ対象のプログラムを検査且つ制御することができる。デバッガープリケーション及びデバッグ対象のプログラムは、別個のプロセスにおいて実行する。デバッグインフラストラクチャ102は、デバッガープリケーションにデバッグ対象を検査且つ制御することができるようにするたくさんの検査モデル及びフロー制御モデルを提供する。例えば、デバッグインフラストラクチャ102は、デバッグ対象のシンボルを検査し、ブレークポイントを設定し、デバッグ対象を開始及び/又は終了し、デバッグ対象の中の任意に選択された関数を実行し、スタックを検査し、デバッグ対象の中に発生するあるイベント及び/又は例外をデバッガーに通知する等の機能を含むことができる。デバッグアクションを、情報(例えば、シンボルの検査、スタックの検査等)を提供するデバッグアクション、及びプログラムフロー(例えば、実行を継続する、次のステートメントを設定する等)を制御するデバッグアクションとして漠然と特徴づけることができることを補足すべきである。デバッグインフラストラクチャ102は、(複数の)メソッド104を提供することができ、及び(複数の)データ構造106と(複数の)デバッグイベント108とを定義することができて、デバッグ対象を検査且つ制御するデバッガープリケーションによって使用することができる。上記のアイテムを、デバッグのプリミティブと呼ぶことができる。(異なるデバッグのプリミティブを、実行されているデバッグ関数に依存して使用することができ、例えば、1つのプリミティブを、任意の関数を実行するのに使用することができ、一方、別のプリミティブを、ブレークポイントを設定するのに使用することができる。)デバッガープリケーションの典型的な一実施例は、デバッグインフラストラクチャ102のような機能の使用を行う。
開発プログラム110は、実行環境100のプロセス112内において実行することができるプログラムである。プロセス112は、オペレーティングシステム又は他のコンポーネントによって提供することができるコンストラクタであり、及び通常、プロセス自体のスタック、仮想アドレス空間等を有する。開発ソフトウェア110は、プログラマに、コードを開発且つ実行することを可能にする。開発ソフトウェア110は、例えば、Iron Python等のコマンドラインのインタープリターの形になる及び/又はコマンドラインのインタープリターを含むことができる。開発プログラム112の他の実施例は、Javaインタープリター、Perlインタープリター、種々のUnix(登録商標)/Linuxシェル(例えば、Bourneシェル、Cシェル、Zシェル等)を含む。しかしながら、本明細書において説明される主題は、コマンドラインのような言語のインタープリター又は解釈された言語に限定されないことが理解されるべきである。
通常、開発プログラム110は、read-eval-printループを実装する関数を含み、多くの場合、REPLループと呼ぶ。read-eval-printループは、名前が連想させるように、ユーザー入力を読取り、入力を評価し、及び入力に基づいて結果を印刷(又は表示)する。開発プログラム110が開始されると、通常、開発プログラム110は、入力116をユーザー120から受信し及び出力118をユーザー120に提供するために、REPLループのインスタンス114を起動する。例えば、入力116は、例えば関数定義、関数呼び出し、モジュールをロードする命令等のコード行を含むことができる。出力118は、関数、エラーメッセージ等を実行することから結果として生じる出力を含むことができる。
プログラム122は、開発ソフトウェア110内において実行することができ、及びデバッグを受けることができるプログラムコードを含む。プログラム122は、プログラム全体、又は例えば関数定義、モジュール定義等のプログラムの一部の形になることができる。プログラム122を、入力116として、REPLループのインスタンス114に提供することができる。例えば、開発ソフトウェア110がIron Pythonのインタープリターであるならば、ユーザー120は、次のコードを、入力116として、REPLループのインスタンス114に入力することができる。
*> def divBySequence(N, x):
... if x<0 : return N
... result = N/x
... return divBySequence(result, x-1)
...
*>
以下に説明するように、関数divBySequenceの上記の定義は、上記の定義が零によって除算する場合により例外を生成するにもかかわらず、上記の定義は、プログラム122の一実施例である。プログラム122がREPLループのインスタンス114にタイプして入力される上記の一実施例に加えて、プログラム122を、開発ソフトウェア110に、例えば、記憶されたファイルからモジュールをロードする、ネットワークからプログラム122をダウンロードする等の他の方法によって提供する。
開発ソフトウェア110内のデバッグを、開発ソフトウェア110において互いに対話操作して、デバッグ体験を作成することができる2つのソフトウェア、デバッグモジュール124及びヘルパープログラム126、によって容易にすることができる。(ライン136は、デバッグモジュール124とヘルパープログラム126との間の対話操作を表し、及び上記の対話操作は、以下に説明するように、種々の形になることができる。)
デバッグモジュール124は、開発ソフトウェア110にロードすることができるデバッグ機能を提供する。例えば、開発ソフトウェア110がIron Pythonのインタープリターである場合の例において、ユーザーは、例えば「import debugger」等のコマンドを(例えば、上記のようなコマンドを、REPLループのインスタンス114によって提供されるプロンプトにタイプして入力することにより)発行することができて、デバッグモジュール124を、開発ソフトウェア110が実行中のプロセス112にロードさせる。デバッグモジュール124は、ユーザーが起動して種々のデバッグアクション(例えば、シンボルの検査、スタックの検査、プログラム実行の継続等)を実行することができる関数を公開することができる。デバッグモジュール124をプロセス112にロードすることによって、開発ソフトウェア110のユーザーは、上記の関数の呼び出しをすることができる。例えば、スタックを検査するために、ユーザーは、「debugger.where()」のようなコマンドにより関数又はメソッドの呼び出しをしたかもしれない。例えば、「debugger.CatchExceptions()」(例外が発生するとデバッガーに停止を命令する)、「debugger.show()」(現在の関数を一覧にする)、「debugger.continue()」(プログラムの停止後にプログラムの実行を継続する)等の他のコマンドを、デバッグモジュール124によって提供することができる。
ヘルパープログラム126は、プロセス128において実行される。ヘルパープログラム126は、デバッグモジュール124が使用することができるバックエンド機能のような機能を提供する。デバッグインフラストラクチャ102は、デバッグアプリケーションがデバッグ対象プログラムから分離されたプロセスに位置されるモデルに従うのだから、ヘルパープログラム126は、上記のアウトオブプロセスの分析観点を提供する。従って、ヘルパープログラムは、典型的なアウトオブプロセスのデバッガーが行うであろうように、プロセス112の状況(例えば、スタック、シンボル等)を検査することができ、及びプロセス112のフローを(例えば、ブレークポイントの設定、任意のステートメントへのジャンプ、任意の関数の実行等によって)制御することができる。典型的なアウトオブプロセスのデバッガーが、ユーザーと直に対話操作するコンソールアプリケーションであるとすることができるのに対し、ヘルパープログラム126は、デバッグモジュール124と対話操作することができ、さらにユーザーと対話操作する。上記の配置は、ユーザーに、別個のデバッガープリケーションからよりも、むしろ開発ソフトウェア110が提供するユーザーインターフェースから、デバッグすることを可能にする。(しかしながら、本明細書において説明される主題は、ヘルパープログラム126がユーザーとの対話操作を回避する場合に限定されない。ヘルパープログラム126は、ユーザーとの対話操作に関与することができる。)
ヘルパープログラム126、デバッグモジュール124、及びプロセス112、128は、互いに対話操作をすることができる。例えば、デバッグインフラストラクチャ102は、上記に補足したように、デバッガーが添付されるプロセスについてデバッガーに伝達することができるあるデバッグイベント108(例えば、スタックオペレーション、関数の開始又は終了、例外等)を定義する。ヘルパープログラム126がプロセス112に添付されると、ヘルパープログラム126は、上記のデバッグイベント108の通知を受信する。加えて、デバッグモジュール124は、種々の伝達130を、ヘルパープログラム126に送信することができ、及びヘルパープログラム126は、情報及び/又は(複数の)命令132を、デバッグモジュール124に及び/又はプロセス112に提供することができる。(アイテム108、130、132によって表された伝達は、ライン136によって表され、デバッグモジュール124とヘルパープログラム126との間の対話操作の例である。上記の対話操作を、例えばデバッグインフラストラクチャ102を介する等の種々の機構によって行うことができる。)例えば、ユーザー120が、デバッグモジュール124を介して、検査されるシンボル名「x」の要求をするならば、デバッグモジュール124は、伝達130を、ヘルパープログラム126に送信して、ヘルパープログラム126がプロセス112のスタック上のシンボル名「x」を検査することを要求する。ヘルパープログラム126は、デバッグインフラストラクチャ102によって提供されるメソッド104を使用して、プロセス112のスタック上の「x」の値を検査することができる。そして、ヘルパープログラム126は、シンボルxの値を、デバッグモジュール124がxの値を取得し及びxの値をユーザーに提供することができるプロセス112内のデータ位置に書込む。別の例として、ユーザー120は、デバッグモジュール124の関数を使用して、設定されるブレークポイントの要求をすることができ、デバッグモジュール124が要求されたブレークポイントをヘルパープログラム126に伝達することができる。そして、ヘルパープログラム126は、メソッド104を使用して、ブレークポイントを設定することができる。デバッグモジュール124、ヘルパープログラム126、及びプロセス128、112の間の対話操作についての種々の種類を、以下に詳細に説明する。
ヘルパープログラム126が実行することができる1つのアクションは、プロセス112におけるREPLループの第2のインスタンス134を開始させることである。例えば、プログラムが実行しているならば、実行しているプログラムは、プログラムを停止させる例外を発生させることができる。例えば、上述のdivBySequence関数は、divBySequence関数の呼び出しが零による除算に終わる場合に例外を発生させることができる。例外は、例えば、ヘルパープログラム126等の添付されたデバッガーが通知することができるデバッグイベントの一例である。ヘルパープログラム126に例外が通知されると、ヘルパープログラム126は、モジュール104の1つ(例えば、本願発明の特許出願人の製品環境の「func-eval」のプリミティブ)を使用して、プロセス112におけるREPLループの第2のインスタンス134を起動することができる。以下に、より詳細に説明するように、REPLループの第1のインスタンス114は、スタック上、比較的上部にあり、スタックの更に下部は、(例えばdivBySequence関数等の)プログラム122があって、ユーザー例外によって停止されている。(上述の例におけるスタックに関して、語句「上部」及び「更に下部」は、スタックが下向きに増加する例を引用するが、本明細書において説明される主題は、如何なる個別のスタックの成長方向に限定されない。)従って、REPLループの第1のインスタンス114は、ユーザー入力に使用可能であるとすることはできない(例えば、ユーザーがデバッグモジュール124によって提供されるデバッグコマンドを入力するのに使用可能であるとすることはできない)。REPLループの第2のインスタンス134を開始させることによって、ユーザーは、デバッグコマンドを入力する、プログラムコードを編集する等のために、開発ソフトウェア110と対話操作することができる。加えて、REPLループの第2のインスタンス134が作成されると、デバッグされているプログラム122の状態が保持されることによって、プログラム122の状態は、ヘルパープログラム126によって検査且つ操作することができる。デバッグが進行するに従って、ユーザーは、REPLループのインスタンス134からプログラムの実行を継続することができて、更に例外を発生させることができる。上記の例外が発生すると、ヘルパープログラム126は、REPLループの追加のインスタンスを作成して、ユーザーに、開発ソフトウェア110との対話操作を継続することを可能にする。従って、デバッグセッションがしばらくの間進むと、プロセス112のスタック上にREPLループのいくつかのインスタンスが存在することがある。
従って、デバッグモジュール124は、開発ソフトウェア110のユーザーインターフェースの内部からユーザーのデバッグ体験を提供し、及びヘルパープログラム126は、デバッグインフラストラクチャ102の検査機能と制御機能との使用をするアウトオブプロセスの分析観点を提供する。デバッグモジュール124とヘルパープログラム126との間の伝達は、デバッグモジュール124に、アウトオブプロセスのデバッガープログラムを扱うデバッグインフラストラクチャの機能を活用することを可能にし、及びヘルパープログラム126に、開発ソフトウェア110のユーザーインターフェースの内部からユーザーと対話操作するデバッグモジュール124の能力を活用することを可能にする。
(第2のREPLループを介したデバッグモジュールの使用)
図2は、デバッグプロセスの一例を示し、及びREPLループの第2のインスタンスをデバッグにおいてどのように使用することができるかを示す。図2のプロセス、及び本明細書において示される他のプロセスの例を、図1に示されたコンポーネントに関して説明するが、他のシステムにおいても使用することができる。更に、図2、及び本明細書における他のフローチャートは、矢印を使用して、1つのブロックから別のブロックへ通じるフローを示すが、表されたフローは、単なる例でありながら、示されるアクションを、あらゆる順序において、及びあらゆるコンビネーション又はサブコンビネーションにおいて実行することができる。加えて、あるアクションを、(プロセス112、128を表すボックス内に上記のアクションを含むことによって示すように)個別のプロセスによって実行されているとして示すが、本明細書における主題は、アクションがあらゆる個別のプロセスによって実行される場合に限定されない。
スタック202は、プロセス112のスタックであり、及び例として、下方に成長するスタックとして表される。(矢印201は、上記の例においてスタックの成長方向を示す。)REPLループのインスタンス114は、(図1に示された)開発ソフトウェア110が開始された後のあるときにインスタンス化される。加えて、(図1に示された)デバッグモジュール124を、プロセス112にロードすることができ、デバッグ機能をユーザーに使用可能にする。いくつかのポイントにおいて合わせて、REPLループのインスタンス114は、ユーザー入力を受信する(ブロック206)。上記のユーザー入力を、プログラムを識別して、起動することができて(例えば、実行される関数名をタイプして入力することによって)、この場合、ユーザーの入力において識別されるプログラムを、起動する(ブロック208)。プログラムフレーム204は、スタック上に作成される。プログラムが起動された後、プログラムは、例外を発生することがある(ブロック210)。例えば、上記のdivBySequence関数は、プログラムの一例であり、零による除算に終わることがあって、例外が発生する。
(図1に示された)ヘルパープログラム126を、プロセス128において実行する。ヘルパープログラム126がデバッガーとしてプロセス112に添付される場合、ヘルパープログラム126は、プロセス112において発生した例外の通知212を受信する(ブロック214)。ヘルパープログラム126は、デバッグメソッドを使用して、REPLループの新しいインスタンス134を起動する(ブロック216)。デバッグメソッドは、(図1に示された)(複数の)メソッド104の1つであるとすることができる。使用することができるメソッドの一実施例は、本願発明の特許出願人の製品環境において提供される「func-eval」のデバッグのプリミティブであって、デバッガーに、デバッグ対象における任意の関数を起動することを可能にする。本願発明の特許出願人の製品以外のシステムが、デバッガーから任意の関数を起動する機能を提供することができることは、理解されるべきであり、及びfunc-evalへの言及は、本願発明の特許出願人の製品環境のfunc-evalのプリミティブに又は上記の名称を有するメソッドに限定されるとして理解されるべきではないが、デバッグ対象プロセスにおいて、デバッガーに関数を起動することを可能にさせる他のシステムのメソッドも包含する。REPLループの新しいインスタンス134が起動されると、起動された新しいインスタンス用のフレーム134がスタック上に配置される。
REPLループの新しいインスタンス134が開始されると、ユーザーからの入力又は他の(複数の)命令を、例えば、コマンドラインインターフェースを介して、受信することができる(ブロック218)。受信することができる命令の1つの種類は、デバッグモジュール124によって提供されるデバッグコマンドである。例えば、ユーザーは、スタックを検査する、シンボルの値を検査する等のために、デバッグモジュール124によって提供される関数の呼び出しをすることができる。上記の命令を与えると、命令に基づいた情報220を、プロセス128に伝達して、ヘルパープログラム126に、ユーザーが実行したいデバッグアクションがどんな種類かを通知する。ヘルパープログラム126は、命令において指定されるアクションを、例えば、シンボルを検査する、スタックを検査する、ブレークポイントを設定する等の(図1に示された)デバッグインフラストラクチャ102を使用することによって実行する(ブロック222)。図3に関連して、上記のアクションのいくつかの例を、以下に説明する。
ブロック222において実行されるアクションは、プロセス128からプロセス112に与えられている(複数の)命令224及び/又は情報226のどちらかに終わることがある。例えば、ブロック222において実行されるアクションがシンボル値の検査であるならば、ヘルパープログラム126は、シンボル値を含む情報224を提供することができる。例えば、ヘルパープログラム126は、デバッグインフラストラクチャ102を使用して、情報224をプロセス112のアドレス空間の位置に書込んで、情報224を、デバッグモジュール124が取得することができる。別の例として、ブロック222において実行されるアクションがデバッグ対象プログラム(例えば、図1に示されたプログラム122)の再開であるならば、ヘルパープログラム126は、デバッグインフラストラクチャ102を使用して、(複数の)命令226をプロセス112に発行してプログラムフレーム204にスタックをアンワインドし、保留中の例外をクリアして、例外が発生したポイントにおいてプログラムの実行を継続することができる。情報224及び/又は(複数の)命令226を、プロセス112がプロセス128から受信する(ブロック228)。次に、プロセス112は、命令の通りに動作する(ブロック230)及び/又は受信した情報を表示することができる(ブロック232)。例えば、情報の表示232を、ユーザーがシンボルを検査することを要求していた場合に、現在のシンボル値を表示することができる場合に、実行することができる。別の例として、プロセス112が、(例えば、ブロック230において)例えば、プログラム122のフローを制御する方法等のある方法において動作するように命令されていたならば、プログラム122の実行結果を、上記のフロー制御が使われた後に表示することができる。次に、フローは、REPLループのインスタンス134の入力フェーズにサイクルして、更にユーザーからの入力を受信する。
図3は、デバッガーによって実行することができる種々のアクションを示す。図3は、指定されたアクションが実行される(図2からの)ブロック222を示す。図3は、ブロック222において実行することができるアクションの種々の例を示す。例えば、図3に示されたアクションは、(図1に示された)ヘルパープログラム126によって実行することができ、及び(図1に示された両方の)デバッグ対象プロセス112及び/又はデバッグモジュール124からの協同を伴うことができる。
図4の一実施例のプログラム400に関して、図3のアクションを、以下に説明する。プログラム400は、後述の機構の一部としての戻り値として使用することができる1つ又は複数の(複数の)ローカル変数404と同様に、(複数の)ローカル変数402の宣言を含む。加えて、プログラム400は、ステートメント406、408、410、412、414、及びreturnステートメント416を含む。プログラム400は、プログラムのほんの一実施例にすぎず、他のプログラムは、異なる数のステートメント、より多くの(又はより少ない)変数宣言、分岐、条件、追加のreturnステートメント等を含むことができるであろう。
図3に戻ると、実行することができるアクションの一実施例は、ブレークポイントを設定することである(ブロック302)。例えば、ユーザーは(図1に示された)デバッグモジュール124の関数を介してブレークポイントを指定することができ、及び上記の指定を、(図1に示された)ヘルパープログラム126に伝達することができる。(図1に示された)デバッグインフラストラクチャ102は、デバッグ対象にブレークポイントを設定するプリミティブを含むことができる。ブレークポイントがプログラム400のステートメント410に設定されるならば、プログラム400は、ステートメント410に到達する場合に、実行を停止し、及びデバッグイベントを生成する。
別の一実施例のアクションは、ユーザー指定の戻り値を有する関数から戻ることである(ブロック304)。例えば、関数が例外を発生させるならば、ユーザーは、関数に実行することを継続させないように選択することができるが、むしろ関数用の戻り値を指定するように選択することができ、及び関数が実行を完了して指定された値を戻すように、残りのプログラムを継続させることができる。上記のアクションは、指定された値を戻り値が(例えば、スタック上の指定された位置に、指定されたレジスタに等の)普通に検出される場所に書込むこと、及び関数が存在するポイントからプログラムの続行を命令することによって、実行することができる。戻り値を設定することができることを実装する1つの方法は、デバッグ対象プログラムをインストルメント化して、(デバッガーが使用可能とすることができるが、デバッグ対象プログラム自体から隠すことができる)1つ又は複数の(複数の)ローカル変数404を含むことである。ユーザーが設定する戻り値を、(複数の)ローカル変数404に書込むことができ、及び命令ポインターを更新して、プログラムが実行を再開する場合に関数が(複数の)ローカル変数404の値を戻すようにリターン命令416を示すことができる。
別の一実施例のアクションは、次のステートメントを実行するように設定することである(ブロック306)。例えば、プログラム400は、プログラム400がデバッグイベントのために停止する場合にステートメント408を実行しているとすることができる。順番通りに実行される次のステートメントは、ステートメント410であるが、ユーザーは、実行されるべき次のステートメントがステートメント414であることを指定することができる。(図1に示された)デバッグインフラストラクチャ102により提供されるプリミティブを使用して、プログラムカウンターを、ステートメント414の冒頭に一致する命令を示すように設定することができる。
別の一実施例のアクションは、次のn個のステートメントをステップスルーすること、すなわち、n個のステートメントを実行して次に停止させることである(ブロック308)。本明細書において説明される全般的な技法は、アウトオブプロセスのデバッグの上にインプロセスのデバッグをビルドし、及びアウトオブプロセスの技法を直に活用することができる。従って、n個のステートメントをステップスルーするようにユーザーから受信された命令を、(図1に示された)ヘルパープログラム126がステップのプリミティブを使用してn個のステートメントをステップスルーして、アウトオブプロセスのデバッガーであるかのように、開発ソフトウェア要求によって(例えば、図1に示されたデバッグモジュール124を介して)実装することができる。
別の一実施例のアクションは、デバッグを中止すること、例えば、例外がデバッガーを起動して最上位のREPLループに戻し及び停止することである(ブロック310)。デバッグの進行中に、REPLループのいくつかのインスタンスを、作成することができて、各々を例外によって作成することができる。対応するデバッグモジュールのコマンドは、例外を起動することができて、自然にスタックをアンワインドさせるだろう。従って、スタックをアンワインドして種々の入れ子にされたREPLループのインスタンスを削除するので、添付されたデバッガー(例えば、図1に示されたヘルパープログラム126)を、アンワインドのプロセスの間、例えば、REPLループの第1のインスタンス(図1に示された符号114)に対応するスタック上のフレームに到達するまで、ユーザーに例外を通知しないように命令することができる(ブロック312)。
(プログラム実行の継続)
プログラム実行の継続は、デバッグアクションの一実施例であり、及び図5は、実行を継続する一実施例のプロセスを示す。上記の一実施例において、スタック202を、種々のアクションの傍らに示し、及びスタック202は、どのフレームが種々のアクションの各々に対してカレントであるかを示す。(矢印501は、スタックが成長する方向を表す。)
REPLループのインスタンス134は、ユーザーに命令又は他の入力を入力するプロンプトを生じる。次に、REPLループのインスタンス134は、ユーザーから、デバッグ対象プログラム(例えば、図1に示されたプログラム122)の実行を継続する要求を受信する(ブロック502)。例えば、ユーザーは、(図1に示された)デバッグモジュール124によって表示された関数、例えば「debugger.continue()」等の関数を、発行することができる。上記の要求に基づいて、デバッグモジュール124は、(図1に示された)プログラム122の再開を、ヘルパープログラム126に要求する(ブロック504)。ヘルパープログラム126に要求することの一部として、デバッグモジュール124は、ヘルパープログラム126に、保留中の例外を無視することを通知する。例えば、ヘルパープログラム126にREPLループのインスタンス134を作成させる例外を、ユーザーが継続を要求するときに保留中のままにすることができ、及びヘルパープログラム126に、上記の例外をクリアすることができることを通知して、上記の例外が(図1に示された)プログラム122の実行フローに更に影響を与えることができないようにすることができる。ブロック506において、REPLループのインスタンス134を終了させ、及びヘルパープログラム126が実行中のプロセス128に、上記の終了を通知する。
ブロック508において、ヘルパープログラム126は、プログラム(例えば、プログラム122)に実行を再開することを許可する。ブロック510において、プログラム122の保留中の例外を、無視する。次に、プログラム122は、プロセス112において実行することを継続する(ブロック512)。REPLループのインスタンス134が終了しているので、REPLループのインスタンス134のフレームがスタック202から削除されて、カレントフレームは、プログラム122が実行を再開する場合、プログラム122用のフレーム204である。(参考までに、REPLループのインスタンス114の位置を、前の図に関連して説明されるが、スタック202上に示す。)
(シンボル解決)
図6は、シンボル名を解決するプロセスの一実施例を示す。例えば、ユーザーは、(図1に示された)デバッグモジュール124の関数を使用して、個別の名前を有するシンボルの値を要求することができる。別の例として、デバッグモジュール124の明示的な関数を使用する代わりに、REPLループの通常のシンボル解決の構文を介してアクセスされるロジック(例えば、シンボル名をREPLループのプロンプトにタイプして入力する場合にシンボルの値を表示するロジック)を、フックによって拡大又は変更して、図6に示されたロジックによるシンボルの解決をすることを可能にすることができる。(図1に示された)デバッグモジュール124及び/又はREPLループのインスタンス134、並びにヘルパープログラム126は、図6に示されたプロセスを使用して、シンボル名を解決することができる。図6の一実施例において、スタック202を、どのフレームが種々のアクションの各々についてカレントであるかを示す種々のアクションの傍らに示す。図2及び図5からのフレーム、REPLループのインスタンス114、134及びプログラムフレーム204、の位置を、スタック202上に示す。(矢印601は、スタックが成長する方向を表す。)
ブロック602において、ユーザーは、シンボルについての情報を要求する。例えば、上記の要求を、REPLループのインスタンス134を使用して行い、デバッグモジュール124によって提供される関数を起動することができる。(例えば、シンボル名‘x’の検査を、例えばdebugger.examine(‘x’)等の関数呼び出しによって要求することができるだろう。)別の例として、ユーザーは、シンボルの値に要求をして、そうするためのREPLループの通常の構文を、例えば、REPLループのプロンプトに「x」をタイプして入力することによって、使用することができるだろう。以下に説明されるように、図6のプロセスの側面を、デバッグモジュール124によって又はREPLループのインスタンス134のシンボル解決の機構を拡大することによって提供される関数として実装して、上記の関数を実行させることを可能にすることができる。要求が、デバッグモジュール124の明示的な関数によって行われるか、REPLループ自体のシンボル解決の構文を介して行われるかどうかに関係なく、次にプロセスは、ブロック604に進む。ブロック604において、要求されたシンボル名がグローバルシンボル名であるかどうかを検査することによって、要求されたシンボル名を解決する試行を行う。(グローバルシンボルは、REPLループのインスタンス134の範囲内からアクセス可能である。)シンボルが、(ブロック606において決定されたとして)グローバルシンボルとして解決可能であるならば、シンボルの値を、表示し(ブロック612)、及びフローは、REPLループのインスタンス134の入力フェーズに循環して、更にユーザー入力を待つ。シンボル名が、(ブロック606において決定されたとして)解決可能でないならば、プロセス128のヘルパープログラム126がシンボルを検索する要求を行う。ヘルパープログラム126は、添付付されたデバッガーであり、及び(図1に示された)デバッグインフラストラクチャ102を使用して、例えば(デバッグ対象プログラム用のフレームである)フレーム204等のスタック202の種々の部分に達することができる。従って、ヘルパープログラム126は、指定された名前を有するローカルシンボルについてスタックに問合せ(ブロック608)、及びシンボルの値をプロセス112に戻す(ブロック610)。次に、値を表示する(ブロック612)
上記したように、シンボルを検査する要求を、デバッグモジュール124において提供された関数(例えば、「debugger.examine(‘x’)」)を介して、又はシンボル値を要求する普通のの構文を介して(例えば、REPLループによって提供されるプロンプトに「x」をタイプして入力することによって)明示的に行うことができる。前者の場合に、関数debugger.examineは、関連ロジック、例えば、関数が図6のブロック604〜606を実行すること、を実装する。別の例において、上記のロジックを、REPLループのシンボル解決の機構を拡大することによって実装して、REPLループのインスタンス134の可変の解決機構にデバッグモジュール124のフックを有することによって完成して図6のプロセスの要素を起動することができて、上記のフックは、REPLループが一部である言語インタープリターにおいて使用可能である。シンボル解決を可能にする別の方法は、入れ子にされたREPLループが作成される場合に値をREPLループのインスタンス134に(又は他の入れ子にされたREPLループの範囲に)積極的に挿入することである。従って、例えばシンボル「x」の値等の値を(図1に示された)ヘルパープログラム126によってREPLループのインスタンス134の範囲内に置くことができたので、上記の値を、REPLループの普通のシンボルの解決機構によって検索することができる。
(例示的実装例)
図7は、本明細書において説明された主題の側面の一実施例の環境を示す。
コンピューター700は、1つ又は複数のプロセッサ704及び1つ又は複数のデータ記憶装置706を含む。通常、(複数の)プロセッサ704は、例えば、パーソナルデスクトップ若しくはラップトップコンピューター、サーバー、又はハンドヘルドコンピューターにおいて提供されるマイクロプロセッサ等のマイクロプロセッサである。(複数の)データ記憶装置706は、ショートタームかロングタームかのデータを格納する性能がある装置である。(複数の)データ記憶装置706の例は、ハードディスク、(光ディスク及び磁気ディスクを含む)取外し可能ディスク、揮発性及び不揮発性RAM(random-access memory)、全ての種類のROM(read-only memory)、フラッシュメモリ、磁気テープ等を含む。(複数の)データ記憶装置は、コンピューター読取り可能記録媒体の例である。コンピューター読取り可能記録媒体は、両方の、例えば(複数の)データ記憶装置706等も、短期間のデータ、例えば、電子、磁気、又は光学的信号等を保持する媒体も同様に含む。
(例えばソフトウェアコンポーネント702等の)ソフトウェアを、データ記憶装置706に格納することができ、及び1つ又は複数の(複数の)プロセッサ704において実行することができる。プログラムをハードディスクに格納し、RAMにロードし、(複数の)コンピューターのプロセッサにおいて実行するパーソナルコンピューターは、図7に示されたシナリオの典型となるが、本明細書において説明された主題は、上記の例に限定されない。
本明細書において説明された主題は、1つ又は複数の(複数の)データ記憶装置706に格納し及び1つ又は複数の(複数の)プロセッサ704において実行するソフトウェアとして実装することができる。別の例として、主題は、1つ又は複数のアクションを実行する命令を有するソフトウェアとして実装することができて、命令を、1つ又は複数のコンピューター読取り可能記録媒体に格納又保持する。
主題は、構造的機能及び/又は方法論的動作に特有の言語において説明されているが、添付のクレームに定義された主題が上記の特有の機能にも動作にも必ずしも限定されないことは、理解されることである。むしろ、上記の特有の機能及び動作は、クレームを実装する一実施例の形態として開示される。

Claims (22)

  1. コンピュータにより実行される法であって、
    デバッグ対象プログラムが実行される環境の第1のプロセスにおいて、ループの第1のインスタンスにて起動された前記デバッグ対象プログラムにデバッグイベントが生じたことを、当該環境の第2のプロセスに通知するステップと、
    ここで、前記ループは、ユーザからの入力を読取り、前記入力を評価することを含み、
    前記第2のプロセスにおいて、前記デバッグイベントの通知に応答して、第1のデバッグのプリミティブを使用して前記ループの第2のインスタンスを起動するステップと、
    前記第2のプロセスから、
    (a)前記第2のプロセスにおいて定義されたシンボルについての情報を伝達するアクションと、
    (b)前記デバッグ対象プログラムにおける少なくとも1つのフロー制御アクションを実行するアクションと
    のうちの少なくとも1つのアクションを実行する要求を前記第1のプロセスにおいて受信するステップと、
    前記第2のプロセスにおいて、前記第1のデバッグプリミティブと第2のデバッグプリミティブとのうちの少なくとも1つを使用して、前記要求において指定されたアクションを実行するステップと、
    前記第1のプロセスにおいて、前記シンボルに関連付けられた値と前記少なくとも1つのフロー制御アクションに起因する前記デバッグ対象プログラムの結果とのうちの少なくとも1つを表示するステップと
    を具えたことを特徴とする方法。
  2. 前記要求は、前記デバッグ対象プログラムにおける関数の戻り値をユーザによって指定された値に設定することであり、
    前記第2のデバッグのプリミティブを使用して前記ユーザによって指定された値を前記関数の戻り値用に保持されるメモリの位置に設定するステップを実行させるためのプログラムを更に記録したことを特徴とする請求項1記載の方法。
  3. 前記要求は、前記デバッグ対象プログラムにおける複数のステートメントを実行することであり、
    前記第2のデバッグのプリミティブを使用して前記デバッグ対象プログラムに前記複数のステートメントを実行するよう命令するステップを実行させるためのプログラムを更に記録したことを特徴とする請求項1記載の方法。
  4. 前記要求は、デバッグを中止することであり、
    前記第2のプロセスの実行スタックをアンワインドするときに前記ループの第1のインスタンスが前記実行スタックに達するまで、前記第2のプロセスによって生成された例外をユーザに通知することを避けるステップを実行させるためのプログラムを更に記録したことを特徴とする請求項1記載の方法。
  5. 前記要求は、前記デバッグ対象プログラムの実行を継続することであり、
    前記ループの第2のインスタンスが終了したことの第2の通知を受信するステップと、
    前記第2のプロセスに、前記デバッグイベントが生じたときに前記プログラムが実行されていたポイントから前記デバッグ対象プログラムの実行を再開させることを許可するステップと
    を実行させるためのプログラムを更に記録したことを特徴とする請求項1記載の方法。
  6. 前記要求は、前記デバッグ対象プログラムの実行を継続することであり、
    前記第2のプロセスから、保留中の例外をクリアする命令を受信するステップと、
    前記デバッグイベントが生じたときに起動された例外をクリアするステップと、
    前記第2のプロセスに、前記デバッグイベントが生じたときに前記プログラムが実行されていたポイントから前記デバッグ対象プログラムの実行を再開させることを許可するステップと
    を実行させるためのプログラムを更に記録したことを特徴とする請求項1記載の方法。
  7. デバッグを容易にするコンピュータ装置であって、
    プロセッサと、
    1つまたは複数のデータ記憶装置と、
    前記1つまたは複数のデータ記憶装置の少なくとも1つに格納され、前記デバッグが実行される環境の第1のプロセスにて起動するプログラムにロード可能な第1のソフトウェアと、
    ここで、前記プログラムは、ユーザからの入力を読取り、前記入力を評価するループを有し、
    前記1つまたは複数のデータ記憶装置の少なくとも1つに格納され、前記環境の第2のプロセスにて起動する第2のソフトウェアと
    を具え、
    前記プロセッサは、前記ループおよび前記第1のソフトウェアを実行することによって、
    前記第1のプロセスにおいて実行している前記ループの第1のインスタンスを介して、前記ユーザによって前記ループに入力可能な1つまたは複数のコマンドを公開し、
    ここで、前記1つまたは複数のコマンドは、前記プログラムにおいて定義されたシンボルと関連付けられた情報を表示することを要求する第1のコマンドを含み、前記第1のコマンドは、前記ユーザから前記ループの第2のインスタンスに受信可能であり、
    前記1つまたは複数のコマンドの少なくとも1つに応答して前記第2のプロセスにおいて実行する前記第2のソフトウェアを起動するように構成され、
    前記プロセッサは、前記第2のソフトウェアを実行することによって、
    前記第1のプロセスにおいて生じるイベントの通知の受信に応答して、前記環境のデバッグインフラストラクチャによって提供される第1のメソッドを使用して前記第1のプロセスにおけるループの第2のインスタンスを起動するように構成されたことを特徴とするコンピュータ装置
  8. 前記プロセッサは、前記第1のソフトウェアを実行することによって、第1のコマンドに応答して、前記シンボルが前記プログラムにおいて定義されたグローバルシンボルであるかどうかを決定し、前記シンボルがグローバルシンボルでない場合に前記第2のソフトウェアに前記シンボルの解決を要求するように構成され、
    前記プロセッサは、前記第2のソフトウェアを実行することによって、前記プログラムにおいて実行する関数の中のローカルシンボルとして前記シンボルを解決するように構成されたことを特徴とする請求項7記載のコンピュータ装置
  9. 前記第1のコマンドは、
    前記シンボルに関連付けられた値を取得するメソッドを起動する関数呼び出しと、
    前記シンボルの名前と
    のうちの少なくとも1つの形においてであり、前記ループは、前記シンボルが入力されるときに前記値を取得かつ表示するプログラミングを提供することを特徴とする請求項8記載のコンピュータ装置
  10. 前記第2のソフトウェアは、前記ループの第2のインスタンスに関連付けられた範囲にローカル変数とローカル変数の値とを設定することを特徴とする請求項7に記載のコンピュータ装置
  11. 関数が前記プログラムのもとに実行し、前記1つまたは複数の第2のコマンドは、前記関数の戻り値を、前記ユーザーによって指定される値に設定するコマンドを含み、前記第2のソフトウェアは、前記デバッグインフラストラクチャによって提供される第2のメソッドを使用して前記関数の戻り値用に保持されるメモリの位置に前記ユーザによって指定される値を設定することを特徴とする請求項7記載のコンピュータ装置
  12. 前記第1のソフトウェアは、前記関数のローカル変数に前記関数が戻す値を維持するよう保持させ、
    前記第2のソフトウェアは、前記ユーザによって指定される値を前記ローカル変数に設定することを特徴とする請求項11記載のコンピュータ装置
  13. 前記イベントは、前記プログラムのもとに実行している関数の停止を含み、前記第2のソフトウェアは、前記ループの第2のインスタンスが終了したことの通知を受信し、前記第1のプロセスに命令して前記関数が停止されたポイントから前記関数の実行を再開させることを特徴とする請求項7記載のコンピュータ装置
  14. 前記イベントは、前記プログラムのもとに実行している関数の停止を含み、前記停止は、例外の起動に関連付けられており、前記第1のソフトウェアは、第2のソフトウェアに保留中の例外をクリアすることを通知し、前記第2のソフトウェアは、前記例外をクリアし、前記第1のプロセスに前記関数が停止されたポイントから前記関数の実行を再開させることを許可することを特徴とする請求項7記載のコンピュータ装置
  15. コンピュータにより実行される方法であって、
    環境の第1のプロセスにおいて実行しているループの第1のインスタンスを介して、ユーザから第1の命令を受信してプログラムを開始させるステップと、
    前記環境の第2のプロセスにおいて、イベントが前記第1のプロセスに生じたことの第1の通知を受信するステップと、
    前記環境のデバッグインフラストラクチャによって提供される前記第2のプロセスの第1のメソッドを使用して前記第1のプロセスのループの第2のインスタンスを起動するステップと、
    前記ループの第2のインスタンスにおいて、前記ユーザからの第2の命令を受信するステップと、
    前記第2のプロセスに、前記第2の命令による第1の情報を提供するステップと、
    前記第2のプロセスにおいて、第2のメソッドを使用して
    (a)前記第1のプロセスに命令して前記第1の情報による少なくとも1つのアクションを実行することをすることと、
    (b)前記第1のプロセスから、前記第1の情報において指定され、前記ループの第2のインスタンスによって表示されるシンボル情報を検索することと
    のうちの少なくとも1つを行うステップと
    を具えたことを特徴とする方法。
  16. 前記第2の命令は、ブレークポイントを前記プログラムに設定することを示し、前記第1の情報は、前記ブレークポイントのプログラムの位置を示すことを含み、前記第2のメソッドを使用することは、前記第2のメソッドを使用して前記位置に前記ブレークポイントを設定することを含むことを特徴とする請求項15記載の方法。
  17. 前記第2の命令は、シンボルの名前を示し、
    前記ループの第2のインスタンスによって、前記名前が前記第1のプロセスにおけるグローバルシンボルに関連付けられないことを決定するステップと、
    前記第1のプロセスにおいて、要求を前記第1のプロセスに出して前記名前を解決するステップと、
    前記第2のメソッドを使用して前記名前に関連付けられた値を検索するステップと
    さらに具えたことを特徴とする請求項15記載の方法。
  18. 前記第2の命令は、前記プログラムの実行を継続することを示し、
    前記第2のプロセスにおいて、前記ループの第2のインスタンスが終了したことの第2の通知を受信するステップと、
    前記第1のプロセスに、前記イベントが生じたときに前記プログラムが実行していたポイントから実行を再開させることを許可するステップと
    さらに具えたことを特徴とする請求項15記載の方法。
  19. 前記第2の命令は、前記プログラムの実行を継続することを示し、前記第1の情報は、保留中の例外をクリアすることの命令を含み、
    前記第2のプロセスが、前記イベントが生じたときに発生した例外をクリアするステップと、
    前記第1のプロセスに、前記イベントが生じたときに前記プログラムが実行していたポイントから実行を再開させることを許可するステップと
    さらに具えたことを特徴とする請求項15記載の方法。
  20. 前記ループは、言語インタープリターの一部であるソフトウェアコンポーネントによって実装され、前記ループは、前記ユーザからの入力を読取り、前記入力を評価し、前記入力を評価した結果を表示し、前記第1の命令は、前記入力のインスタンスであることを特徴とする請求項15記載の方法。
  21. コンピュータにより、請求項1ないし6、および、請求項15ないし20のいずれかに記載の方法を実行することが可能な命令を有するコンピュータプログラム。
  22. 請求項21記載のコンピュータプログラムを有するコンピュータ読取り可能な記録媒体。
JP2010510411A 2007-05-25 2008-05-16 外部デバッグのインフラストラクチャを使用するインプロセスのデバッグ Active JP5307802B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/807,246 2007-05-25
US11/807,246 US8239832B2 (en) 2007-05-25 2007-05-25 In-process debugging using external debugging infrastructure
PCT/US2008/064005 WO2008147741A2 (en) 2007-05-25 2008-05-16 In-process debugging using external debugging infrastructure

Publications (2)

Publication Number Publication Date
JP2010528395A JP2010528395A (ja) 2010-08-19
JP5307802B2 true JP5307802B2 (ja) 2013-10-02

Family

ID=40073594

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010510411A Active JP5307802B2 (ja) 2007-05-25 2008-05-16 外部デバッグのインフラストラクチャを使用するインプロセスのデバッグ

Country Status (5)

Country Link
US (1) US8239832B2 (ja)
EP (1) EP2165261B1 (ja)
JP (1) JP5307802B2 (ja)
CN (1) CN101681280B (ja)
WO (1) WO2008147741A2 (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8307358B1 (en) * 2007-07-10 2012-11-06 Parallels IP Holdings GmbH Method and system for unattended installation of guest operating system
US20090319662A1 (en) * 2008-06-24 2009-12-24 Barsness Eric L Process Migration Based on Exception Handling in a Multi-Node Environment
US9632909B2 (en) * 2008-12-16 2017-04-25 Microsoft Technology Licensing, Llc Transforming user script code for debugging
US9111036B2 (en) * 2010-04-30 2015-08-18 Red Hat, Inc. Preloading unwind data for non-intrusive backtracing
US8732667B2 (en) * 2009-11-13 2014-05-20 Microsoft Corporation Debugging services for domain specific languages
KR101104165B1 (ko) * 2009-11-26 2012-01-13 애니포인트 미디어 그룹 사용자 애플리케이션의 테스트가 가능한 미디어 재생 장치 및 이를 이용한 사용자 애플리케이션의 테스트 방법
US8607199B2 (en) * 2009-12-16 2013-12-10 International Business Machines Corporation Techniques for debugging code during runtime
US8429200B2 (en) * 2010-02-02 2013-04-23 Red Hat, Inc. Using a separate process in an interactive computer programming environment as a database
CN102207856B (zh) * 2010-03-29 2014-08-27 日电(中国)有限公司 进程内组件对象的创建方法和系统
US8572578B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Script debugging
CN102004692B (zh) * 2010-11-25 2015-08-12 中兴通讯股份有限公司 进程调试方法及装置
US9116759B2 (en) * 2011-02-18 2015-08-25 Ab Initio Technology Llc Restarting data processing systems
US9606844B2 (en) * 2011-09-28 2017-03-28 Microsoft Technology Licensing, Llc Remotely-hosted interactive client-server session
US9600248B2 (en) * 2012-04-06 2017-03-21 Sony Corporation Information processing device, information processing method, and computer program
US9710357B2 (en) * 2012-08-04 2017-07-18 Microsoft Technology Licensing, Llc Function evaluation using lightweight process snapshots
US9110803B2 (en) * 2012-10-19 2015-08-18 Verizon Patent And Licensing Inc. Solvable exceptions
CN103516561B (zh) * 2013-09-13 2017-11-28 汉柏科技有限公司 一种网络系统的调试方法
US9811433B2 (en) * 2013-09-20 2017-11-07 Oracle International Corporation User-directed diagnostics and auto-correction
RU2580016C1 (ru) * 2014-10-17 2016-04-10 Закрытое акционерное общество "Лаборатория Касперского" Способ передачи управления между областями памяти
US9703673B1 (en) * 2016-01-08 2017-07-11 International Business Machines Corporation Stack pattern breakpoint in COBOL
RU2634172C1 (ru) 2016-06-02 2017-10-24 Акционерное общество "Лаборатория Касперского" Способ передачи управления между адресными пространствами
CN109783342B (zh) * 2017-11-10 2022-03-29 华为技术有限公司 脚本调试方法、设备及计算机存储介质
CN107911264A (zh) * 2017-12-07 2018-04-13 清华大学 可编程路由交换设备在线调试装置及方法
CN108536431A (zh) * 2018-04-04 2018-09-14 浙江小泰科技有限公司 一种全局命令行创建前端项目方法及系统
US11836613B2 (en) * 2019-07-17 2023-12-05 International Business Machines Corporation Neural programmer interpreters with modeled primitives

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03214319A (ja) * 1990-01-19 1991-09-19 Fuji Xerox Co Ltd 情報処理装置
US5446900A (en) * 1992-07-24 1995-08-29 Microtec Research, Inc. Method and apparatus for statement level debugging of a computer program
US5675803A (en) * 1994-01-28 1997-10-07 Sun Microsystems, Inc. Method and apparatus for a fast debugger fix and continue operation
US5611043A (en) * 1994-03-18 1997-03-11 Borland International, Inc. Debugger system and method for controlling child processes
AUPM519694A0 (en) * 1994-04-19 1994-05-12 Griffith University Method for testing and debugging computer programs
JPH08272648A (ja) * 1994-12-29 1996-10-18 Hitachi Ltd デバッグコマンドファイルを自動的に生成する方法、およびデバッグコマンドファイルにおいてブレークポイントを自動的に再生成する装置
US5819093A (en) * 1995-03-03 1998-10-06 Sun Microsystems, Inc. System and method for a distributed debugger for debugging distributed application programs
US5881288A (en) * 1995-09-29 1999-03-09 Matsushita Electric Industrial Co., Ltd. Debugging information generation system
JPH1021086A (ja) 1996-06-28 1998-01-23 Matsushita Electric Ind Co Ltd プログラム変換装置とデバッグ装置
US5778230A (en) * 1995-11-13 1998-07-07 Object Technology Licensing Corp. Goal directed object-oriented debugging system
US5907709A (en) * 1996-02-08 1999-05-25 Inprise Corporation Development system with methods for detecting invalid use and management of resources and memory at runtime
US6058393A (en) * 1996-02-23 2000-05-02 International Business Machines Corporation Dynamic connection to a remote tool in a distributed processing system environment used for debugging
US5933639A (en) * 1996-05-17 1999-08-03 International Business Machines Corporation System and method for debugging distributed programs
US6275868B1 (en) * 1997-03-12 2001-08-14 Microsoft Corporation Script Engine interface for multiple languages
US6353923B1 (en) * 1997-03-12 2002-03-05 Microsoft Corporation Active debugging environment for debugging mixed-language scripting code
US6185732B1 (en) * 1997-04-08 2001-02-06 Advanced Micro Devices, Inc. Software debug port for a microprocessor
US6202199B1 (en) * 1997-07-31 2001-03-13 Mutek Solutions, Ltd. System and method for remotely analyzing the execution of computer programs
US6282701B1 (en) * 1997-07-31 2001-08-28 Mutek Solutions, Ltd. System and method for monitoring and analyzing the execution of computer programs
US6938245B1 (en) * 1997-10-29 2005-08-30 Veritas Operating Corporation Interactive debugging system with debug data base system
US6530079B1 (en) * 1999-06-02 2003-03-04 International Business Machines Corporation Method for optimizing locks in computer programs
US6412106B1 (en) * 1999-06-16 2002-06-25 Intervoice Limited Partnership Graphical system and method for debugging computer programs
US7010781B1 (en) * 2000-02-15 2006-03-07 Sun Microsystems, Inc. Methods and apparatus for managing debugging I/O
US6915509B1 (en) * 2000-06-28 2005-07-05 Microsoft Corporation Method and system for debugging a program
US6826746B2 (en) * 2001-03-08 2004-11-30 International Business Machines Corporation Debugger probe for object oriented programming
JP2002366378A (ja) 2001-06-05 2002-12-20 Sony Corp プログラムのデバッグ装置及びデバッグ方法、並びに記憶媒体
JP2003050716A (ja) * 2001-08-06 2003-02-21 Matsushita Electric Ind Co Ltd ソフトウエアデバッガとソフトウエア開発支援システム
JP3612294B2 (ja) * 2001-08-06 2005-01-19 松下電器産業株式会社 デバッグ方法およびデバッグ装置
US7644394B2 (en) * 2001-11-30 2010-01-05 International Business Machines Corporation Object-oriented creation breakpoints
US6988264B2 (en) * 2002-03-18 2006-01-17 International Business Machines Corporation Debugging multiple threads or processes
US7089534B2 (en) * 2002-05-01 2006-08-08 International Business Machines Corporation Model based test generation for validation of parallel and concurrent software
CN1280726C (zh) * 2002-10-18 2006-10-18 上海贝尔有限公司 一种用于嵌入式系统软件开发的虚拟机装置
US7299454B2 (en) * 2003-02-26 2007-11-20 Bea Systems, Inc. Method for multi-language debugging
US7197745B2 (en) * 2003-05-02 2007-03-27 Microsoft Corporation User debugger for use on processes running in a high assurance kernel in an operating system
US7418697B2 (en) * 2003-07-25 2008-08-26 Microsoft Corporation Method and system for fast application debugging
US7150006B2 (en) * 2003-11-03 2006-12-12 Microsoft Corporation Techniques for managed code debugging
EP1711897A4 (en) 2004-02-05 2007-03-21 Research In Motion Ltd DEBUGGING PORT SECURITY INTERFACE
GB0418306D0 (en) * 2004-08-17 2004-09-15 Ibm Debugging an application process at runtime
US7478366B2 (en) * 2004-09-22 2009-01-13 Mainsoft R&D Ltd. Debugger and method for debugging computer programs across multiple programming languages
US7596780B2 (en) * 2004-10-22 2009-09-29 Microsoft Corporation System and method for virtual catching of an exception
US20060129991A1 (en) 2004-12-13 2006-06-15 Frank Kilian Method and system for on-the-fly debugging
CN100365590C (zh) * 2005-01-31 2008-01-30 浙江大学 在嵌入式系统模拟器上调试应用程序的方法
US20060288332A1 (en) * 2005-06-21 2006-12-21 Microsoft Corporation Workflow debugger
JP4787551B2 (ja) * 2005-06-22 2011-10-05 日本電気株式会社 デバッグシステム、デバッグ方法およびプログラム
US7840849B2 (en) * 2006-12-21 2010-11-23 Novell, Inc. Methods and apparatus for debugging software including divisions of an execution history of a debuggee program
US8156476B2 (en) * 2008-06-10 2012-04-10 Microsoft Corporation Debugging support for tasks in multithreaded environments

Also Published As

Publication number Publication date
EP2165261B1 (en) 2018-08-15
WO2008147741A2 (en) 2008-12-04
US8239832B2 (en) 2012-08-07
EP2165261A4 (en) 2013-04-17
EP2165261A2 (en) 2010-03-24
CN101681280A (zh) 2010-03-24
CN101681280B (zh) 2012-12-19
WO2008147741A3 (en) 2009-02-19
JP2010528395A (ja) 2010-08-19
US20080295078A1 (en) 2008-11-27

Similar Documents

Publication Publication Date Title
JP5307802B2 (ja) 外部デバッグのインフラストラクチャを使用するインプロセスのデバッグ
US10621068B2 (en) Software code debugger for quick detection of error root causes
JP4901075B2 (ja) コンピュータ読取可能な媒体、方法及びコンピューティングデバイス
US8087002B2 (en) Method and system for providing a visual debugger for an interpreted statistical language
US6249907B1 (en) Method system and article of manufacture for debugging a computer program by encoding user specified breakpoint types at multiple locations in the computer program
US7926042B2 (en) System and method for dynamic instrumentation
EP2359247B1 (en) Transforming user script code for debugging
US7761855B2 (en) Computer program product and system for altering execution flow of a computer program
US8423969B2 (en) Inheritance breakpoints for use in debugging object-oriented computer programs
US8561033B2 (en) Selective branch-triggered trace generation apparatus and method
JP6280126B2 (ja) ドメイン固有言語をデバッグするためのシステムおよび方法
US20090199163A1 (en) Debugger assistance for locating values at runtime
JP2000181725A (ja) 実行可能なコ―ドを改変し、追加機能を付与するための方法およびシステム
JP2004164554A (ja) プログラム実行監視装置および方法
US6131109A (en) Multitask processor, a multitask processing method, a multitask processing display method and a storage medium for processing by correlating task and object
JP2004287869A (ja) プログラム実行監視装置および方法
Kotrč Run-time performance testing in Java
Reiss et al. The FIELD Debugger
JPH0997182A (ja) プログラム変換装置およびデバッグ装置
Ciabrini Debugging with Bugloo
JPH09297695A (ja) シンボリッククロスデバッガおよび作成システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110330

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121114

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121207

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20121219

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121219

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130307

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: 20130528

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130627

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5307802

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250