JP5415557B2 - デバッギングのためのユーザ・スクリプト・コードの変換 - Google Patents

デバッギングのためのユーザ・スクリプト・コードの変換 Download PDF

Info

Publication number
JP5415557B2
JP5415557B2 JP2011542189A JP2011542189A JP5415557B2 JP 5415557 B2 JP5415557 B2 JP 5415557B2 JP 2011542189 A JP2011542189 A JP 2011542189A JP 2011542189 A JP2011542189 A JP 2011542189A JP 5415557 B2 JP5415557 B2 JP 5415557B2
Authority
JP
Japan
Prior art keywords
script code
debugging
function
user script
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.)
Expired - Fee Related
Application number
JP2011542189A
Other languages
English (en)
Other versions
JP2012512489A5 (ja
JP2012512489A (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 JP2012512489A publication Critical patent/JP2012512489A/ja
Publication of JP2012512489A5 publication Critical patent/JP2012512489A5/ja
Application granted granted Critical
Publication of JP5415557B2 publication Critical patent/JP5415557B2/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/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • 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/3624Software debugging by performing operations on the source code, e.g. via a compiler

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)
  • Stored Programmes (AREA)

Description

本発明は、デバッギングのためのユーザ・スクリプト・コードの変換に関する。
コンピュータ・プログラム・アプリケーションのユーザは、時として何度も何度もアプリケーション内の特定のタスクを実行する必要があることにしばしば気づく。たとえば、自社の財務問題を管理している会社は、アプリケーション内のスプレッドシートに読み込むデータに、ある種の計算を実行しようとすることがある。これらタスクの実行は、ホスト・アプリケーションによってサポートすることができるが、アプリケーションにより、所望のタスクを自動化するためのカスタム・ソリューションを開発者/ユーザが作成できるようにもなる。
アプリケーションのユーザまたは開発者は、そのアプリケーション内のサポートされた機能を実行するマクロを作成し、それにより所望のタスクを自動化することができる。マクロは、アプリケーションにおいてユーザが実行する一連の動作を記録することによって作成することができ、またはホスト・アプリケーションがサポートするソース・コードで開発することができる。開発者/ユーザは、使用する前に、またはホスト・アプリケーション内のマクロの望ましくない動作を検出した後に、マクロをデバッグしようとすることがある。ホスト・アプリケーションは、統合開発環境(integrated development environment:IDE)でのプログラミング言語の枠組みの一実装形態を含むプラットフォーム上で実行してもよく、この環境により、ユーザ/開発者は、ソース・コードを書き、そのコードをコンパイルし、ホスト・アプリケーション内で実行されるコードをデバッグすることができるようになる。
この発明の概要は、発明を実施するための形態において以下でさらに説明する簡略化された形態での選ばれた概念を紹介するために提供される。この発明の概要は、特許請求される主題の主要因または本質的な特徴を特定するものではなく、特許請求される主題の範囲を限定するために使用されるものでもない。
自身のユーザ・スクリプト・コードをデバッギングしている間、開発者は、テスト環境を検査して、それが予想通り機能しているかどうか判定することのできるブレークポイントをしばしば挿入する。さらに、ブレークポイントにおいて、開発者は、とりわけ、変数を検査し、間のコードを実行することなく異なるファンクション(function)に入り、コードを編集して、それを実行継続し、例外処理を見直そうとすることがある。現在、ほとんどの新規のデバッギング操作(たとえば、C#および.NETスクリプトを使用して)を実行している間、デバッガは、アプリケーション(デバッグ対象)内のブレークポイントにヒットするとき、デバッガが再始動されるまで(たとえば、再始動がユーザによって選択されるとき)デバッグ対象がフリーズするようにする。ホスト・アプリケーション用の比較的古いIDEにより、ホスト・アプリケーションには、ブレークポイントがヒットするときに、応答を継続することができるようになるものがあり、このことが望ましいこともある。しかし、ホスト・アプリケーションが、比較的古いスクリプティング・プラットフォームから新規のスクリプティング・プラットフォームに移された場合、ユーザは、デバッギング・ブレークポイントでそのホスト・アプリケーションに応答を継続させることができないことがある。
本明細書において説明するように、ユーザ・スクリプト・コードをデバッグ可能なコードに変換することにより、ホスト・アプリケーション内で実行するように開発されたユーザ・スクリプト・コードのデバッグ可能性を実現するための技法およびシステムが提供される。たとえば、ユーザ・スクリプト・コードには、ユーザ・スクリプト・コードをデバッグ可能なものにすることのできるスクリプト・コードを備えることができ、デバッガが、ホスト・アプリケーションに影響を及ぼす可能性があるデバッギングAPIからの代わりにユーザ・コードからデバッギング情報を得ることができるようになる。
一実施形態では、ホスト・アプリケーションにコールバックするトレースバック・メソッド(traceback method)を作り出すことができ、この方法により、ホスト・アプリケーションは、協働して動作し、そのユーザ・インターフェースを更新することができるようになり、また、デバッギング停止動作(たとえば、ブレークポイント)においてさえも、機能を継続するように見えることになる。さらに、デバッギングのために停止動作を挿入し得るユーザ・スクリプト・コード内の1つまたは複数の位置において、トレースバック・メソッドにコールバックを挿入することにより、ユーザ・スクリプト・コードを変換することができる。さらに、たとえば、ユーザが望む各デバッグ可能性機能(たとえば、スタック・フレーム管理、変数検査、set−next命令など)に対してコードを変換する代わりに、共通ヘルパ・ファンクション(たとえば、イテレータ・タイプのファンクション)を用いてユーザ・スクリプト・コードを変換することにより、デバッグ可能性機能をユーザ・スクリプト・コード内に組み合わせてもよい。
前述の目的および関連した目的を達成するために、以下の説明および添付図面により、ある種の例示的な態様および実装形態を説明する。これらは、1つまたは複数の態様を利用してもよい、ほんのいくつかの互いに異なる方式を示す。本開示の他の態様、利点、および新規の特徴は、添付図面とともに考察すると、以下の詳細な説明から明らかとなろう。
デバッグ可能性のために、ホスト・アプリケーション内で実行するために開発されたユーザ・スクリプト・コードを実行可能にすることができる、例示的な方法の流れ図である。 本明細書に記載の技法を利用する、例示的なスクリプト・コードの変換を示す図である。 本明細書に記載の技法を利用する、例示的なスクリプト・コードの変換を示す図である。 本明細書に記載の技法を利用する、例示的なスクリプト・コードの変換を示す図である。 本明細書に記載の技法を利用する、例示的なスクリプト・コードの変換を示す図である。 本明細書に記載の技法を利用する、例示的なスクリプト・コードの変換を示す図である。 本明細書に記載の技法を利用する、例示的なスクリプト・コードの変換を示す図である。 本明細書に記載の技法を利用する、例示的なスクリプト・コードの変換を示す図である。 本明細書に記載の技法を利用する、例示的なスクリプト・コードの変換を示す図である。 ホスト・アプリケーション内で実行するように開発されたユーザ・スクリプト・コードを、デバッグ可能なコードに変換するための例示的なシステムのブロック図である。 本明細書に記載の例示的なシステムの実装例の一実施形態を示す図である。 本明細書に記載の条項のうちの1つまたは複数を実施するように構成されたプロセッサ実行可能な命令を含む、例示的なコンピュータ可読媒体を示す図である。 本明細書に記載の条項のうちの1つまたは複数を実施してもよい、例示的なコンピューティング環境を示す図である。
ここで、各図面を参照して、特許請求される主題を説明する。同じ参照番号は、全体を通して同じ要素を指すために使用する。以下の記述において説明するために、特許請求される主題を完全に理解するために、数多くの具体的な詳細を説明する。しかし、場合によっては、特許請求される主題は、これらの具体的な詳細がなくても実施できることが明らかになる可能性がある。他の例では、特許請求される主題の説明を容易にするために、各構造体および各装置がブロック図の形で示してある。
図1は、デバッグ可能性のために、ホスト・アプリケーション内で実行するために開発されたユーザ・スクリプト・コードを実行可能にすることができる、例示的な方法100の流れ図である。たとえば、カスタム・アドオンの開発をサポートするアプリケーションのユーザは、このアプリケーション用のカスタム・マクロのためのユーザ・スクリプト・コードを書いてもよく、このカスタム・マクロをデバッグしようとしてもよい。この例では、例示的な方法100を使用して、ユーザ・スクリプト・コードをデバッグ可能なスクリプト・コードに変換することができる。
例示的な方法100は、102で開始し、104でホスト・アプリケーションにコールバックして、ホスト・アプリケーションが協働して動作し、そのユーザ・インターフェース(user interface:UI)を更新することを可能とする、トレースバック・メソッドを作成するステップを含む。一実施形態では、トレースバック・メソッドは、アプリケーション実行および開発枠組み(たとえば、「.NET」、Java)のライブラリにおいて作成することができ、次いで、その枠組み内で実行されるスクリプト・コードによってコールすることができる。この実施形態では、トレースバック・メソッドは、コールされると、ホスト・アプリケーションにそのUIを動作させるようにすることにより、デバッギング停止動作においてホスト・アプリケーションが機能を継続するように見えるようにできる。
現在のところ、一例として、デバッガがデバッグ対象(たとえば、ユーザ・スクリプト・コードを実行しているホスト・アプリケーション)においてブレークポイントにヒットするとき、このデバッグ対象は、ユーザによって検査され、デバッガが再始動されるまで、フリーズすることができる。この例では、デバッグ対象は、デバッガによって制御されているので、通常はフリーズするが、このデバッガは、ホスト・アプリケーションをブレークポイントにおいて停止させ、データを検査し、ユーザがデバッガに継続するよう命令すると単にデバッグ対象を再始動する。従来、デバッギング・ブレークポイントは、アプリケーション内のスレッドを停止する。たとえば、メッセージ・ポンプ(たとえば、メッセージ・ポンプが、制御コマンドを取得し、コマンドに関連するイベントを実行する)がUI内のコマンドに応答することをブロックする。
一方、トレースバック・メソッドを使用して、たとえばブレークポイントで、ホスト・アプリケーションに制御を戻すことができる。ホスト・アプリケーションは、デバッガにオペレーティング・システムをコールさせて、従来のデバッギング・ブレークポイントと同様に、スレッドをブレークポイントのための演算コードに置く代わりに、UIからのメッセージ(たとえば、またはコンソール・ホスト用のコンソール入力)の取出しを継続してもよい。この例では、スレッドをトレースバック・メソッドに置くことができ、この方法が、ホスト・アプリケーションに制御を戻す。
106において、例示的な方法100では、ホスト・アプリケーションで使用するためにユーザによって作成されたスクリプト・コードは、コールバックを挿入することによって変換することができ、このコールバックは、デバッギングするために停止動作をインストールし得る、ユーザ・スクリプト・コード内での1つまたは複数の位置で、トレースバック・メソッドにコールする。トレースバック・メソッドへのコールバックは、デバッギングにおいて潜在的なブレークポイントを使用し得る、それぞれの位置で挿入することができる。このようにして、たとえば、ユーザ・スクリプト・コードのデバッギング中にブレークポイントが生じるときはいつでも、トレースバック・メソッドをコールすることができ、このことにより、ブレークポイント中に、ホスト・アプリケーションが機能を継続することが可能になる。
108において、ユーザ・スクリプト・コードは、トレースバック・メソッドへのコールバックを含む、所望のスクリプト・コード・デバッギング機能を備える。たとえば、ホスト・アプリケーションにおいてマクロとして実行されるスクリプト・コードを開発するユーザは、ユーザ・スクリプト・コード用の所望のデバッギング機能を可能にしようとする。この例では、(たとえば、枠組みの高水準言語コンパイラ、またはこの枠組みの動的実行時環境により)ユーザ・スクリプト・コードをコンパイルしている間、ユーザの所望のデバッギング機能をユーザ・スクリプト・コード内に備えることができ、ユーザ・スクリプト・コードを、所望の機能向けのデバッグ可能なコードに変換することができる。
一実施形態では、ホスト・アプリケーションのマクロ開発プラットフォームは、ユーザ・コード内に備えることのできる機能のメニューをユーザに提供してもよい。このようにして、たとえば、ユーザは、単にそうした所望のデバッギング機能を選択することができ、ユーザ・スクリプト・コードは、そうした選択されたデバッギング機能をユーザ・スクリプト・コードに備えることによって変換することができる。
110において、例示的な方法100では、共通ヘルパ・ファンクション変換を使用することにより、ユーザ・スクリプト・コード内で、2つ以上の別々のスクリプト・コード・デバッギング機能を組み合わせることができる。たとえば、ユーザがそのユーザ・スクリプト・コード内に含めたいと考えるデバッギング機能は、コードの共通ヘルパ変換の中に一体化してもよく、これが、それぞれのデバッギング機能をサポートすることができる。一実施形態では、たとえば、2つ以上のデバッギング機能を、同じ位置でユーザ・スクリプト・コード内に備えてもよい場合には、それらデバッギング機能は、それぞれの機能をサポートするコードの共通ヘルパ・ファンクション変換の中で組み合わせることができる。
各デバッギング機能を組み合わせると、例示的な方法100は、112で終了する。
一態様では、ユーザ・スクリプト・コードを変換することは、高水準言語には限定しないものとすることもできる。一実施形態では、ユーザ・スクリプト・コードは、アプリケーション実行および開発の枠組みの一部分である言語コンパイラによって変換することができ、このコンパイラは、高水準言語を、この枠組みで利用される中間言語(intermediate language:IL)にコンパイルする。他の実施形態では、スクリプト・コード変換は、枠組みの動的実行時環境(たとえば、共通言語実行時での.NETジャストインタイム・コンパイル・サービス)で実行してもよく、これが、枠組みのILを、実行すべき機械語にコンパイルする。これらの実施形態では、各変換は、枠組みのコンパイル・サービスを使用してコンパイルしている間に実行されるので、言語には限定されなくてもよい。
他の態様では、トレースバック・メソッドへのコールは、停止動作(たとえば、ブレークポイント、ステッピング動作、非同期ブレイクなど)をデバッガが使用し得る位置で、ユーザ・スクリプト・コードに挿入される。一実施形態では、この態様において、ユーザ・スクリプト・コード変換は、トレースバック・メソッドに対する引き数が停止動作のコンテキストを含むことのできる、それぞれの潜在的な停止ポイントで、トレースバック・メソッドにコールを挿入することができる。
図2は、コード内の潜在的な停止ポイントでトレースバック・メソッドへのコールが挿入される、例示的なスクリプト・コード200の図である。ユーザによって書かれたスクリプト・コード202(たとえば、ホスト・アプリケーション内のマクロとして使用するための)は、コード206の3つのライン、ラインA、B、およびCから構成される。デバッグ中、デバッガは、コード206のラインのそれぞれの前でブレークポイントを利用してもよい。この例では、ユーザ・スクリプト・コード202は、コード206のそれぞれのラインの前で、トレースバック・メソッド208にコールバックを挿入することにより、(たとえば、コンパイラによって)204に変換することができる。ここで、トレースバック1、2、および3(208)へのコールが挿入されており、潜在的なブレークポイントの位置を識別することができる。
一実施形態では、たとえば、デバッガがブレークポイントにおいてデバッグ対象を停止させているように見えるとき、ハードモードのブレークポイントにおいて、実際にスレッドは停止されない。代わりに、この例では、スレッドを、ホストが機能を継続できるようにする協働制御デリゲータ(たとえば、メッセージ・ポンプ)において、ホスト・アプリケーションによって実装される、コールされたトレースバック・メソッドの内部に置くことができる。さらに、この例では、スレッドは、デバッガがブレークポイントから継続する後まで、トレースバック・メソッドから再開しなくてもよい。
さらに、この実施形態では、トレースバックは、ノー・オペレーション(nop)とすることができ、その結果、実行コードにはほとんど影響を及ぼさない。たとえば、デバッガが停止動作(たとえば、ブレークポイント)を要求するとき、トレースバック・メソッドは、要求された停止を適切に検出することができる。しかし、デバッガから停止動作の要求がない場合、トレースバック・メソッドは、いかなる動作も実行しない。
他の態様では、様々なユーザ・スクリプト・コード変換を実行して、デバッギング機能を可能にしてもよい。以下の実施形態および例は、スクリプト・コード用のいくつかの共通のデバッギング機能を特定するが、本明細書において説明する各技法およびシステムは、特定のいかなるデバッギング機能にも限定されないことが理解されよう。ユーザ・スクリプト・コードをデバッグ可能なコードに変換することにより、ホスト・アプリケーション内で実行するために開発された、ユーザ・スクリプト・コード内に備えることのできる代替デバッギング機能を、当業者であれば考案することができる。
図3は、ユーザ・スクリプト・コードを変換して、スクリプト・コードのデバッギング中にステッピングを実行することのできる、例示的なスクリプト・コード300の図である。ユーザ・スクリプト・コードのラインの一例302は、1ステップずつ実行することのできる、またはデバッギング中にブレークポイントをセットし得る位置を含むことができる。すなわち、ソース・レベルのブレークポイントのためにユーザ・スクリプト・コード302の開始304において、Alphaのステップ・アウト後に、Betaのステップ・イン前に(306)、Betaのステップ・アウト後に、またFoo()のステップ・アウト後に、停止することができる。
ユーザ・スクリプト・コードのラインの一例302は、ユーザ・スクリプト・コード内のそれぞれのステップ実行ポイントまたは停止ポイントにおける、トレースバック・メソッドへのコールを含むデバッグ可能なコード312に変換することができる。したがって、トレースバック1へのコール314は、ラインの始め304に挿入することができ、トレースバック2へのコール316は、Alphaの後およびBetaの前306に挿入することができ、トレースバック3へのコールは、Betaの後308に挿入することができ、トレースバック4へのコールは、Foo()の後310に挿入することができる。
従来、デバッギング中のスクリプト・コードを通してのステップ実行は、フラグを使用し、単一命令を実行するCPUによってサポートされる。この実施形態では、実行されるステップ実行のタイプ(たとえば、ステップ・イン、ステップ・アウト、ステップ・オーバ)に応じて、それぞれのトレースバックのスタック・ステップが知られており、その指示に基づいて次のトレースバックが知られる。たとえば、ステップ・インは、次のトレースバック(たとえば、トレースバック2から3)で単に停止することができ、このトレースバックを含む関数(function)には関係ない。さらに、この例では、ステップ・オーバは、次のトレースバックおよび現在の(またはそれ以前の)スタック・レベルを停止してもよい。さらに、この例では、ステップ・アウトは、次のトレースバックにおいて、より浅いスタック・レベルで停止してもよい。
図4は、ある関数がそれ自体のコールスタックを維持することを可能にし得る、変換された例示的なスクリプト・コード400の図であり、このスクリプト・コードは、ユーザ・コードからのスクリプト・フレームをデバッガ用に含む。この例では、ファンクションFoo()402についてのスクリプト・コードが変換され、それにより、スレッドのデバッガ・スタック$thread406は、ファンクションFoo()によって維持することができ、デバッガ・フレーム404をプッシュまたはポップすることができるようにする。変換は、トレースバック・メソッド408へのコールを利用して、デバッガがフレームをプッシュまたはポップしている間、ホスト・アプリケーションの継続機能を可能にする。
一実施形態では、スレッドのデバッガ・スタック$thread406は、スレッド・ローカル記憶装置に記憶することができる。他の実施形態では、スレッドのデバッガ・スタック$thread406は、隠されたパラメータとしてそれぞれのユーザ・コード・ファンクションに渡すことができる。このようにして、たとえば、デバッガのコールスタック窓は、スレッドのデバッガ・スタック$thread406内のユーザ・データ上の検査動作でもよい。
図5は、ユーザ・スクリプト・コードを変換して、単一ファンクションが分離して別々のヘッダと本体になるようにすることができる、例示的なスクリプト・コード500の図である。この例では、ファンクションfoo()についてのユーザ・スクリプト・コード502は、ファンクションのヘッダ506およびその本体508を含む。ユーザ・スクリプト・コード502は、デバッグ可能なスクリプト・コード504に変換することができ、これは、たとえばコンパイル中に、ファンクションを分割して、そのヘッダ506と本体508にする。
デバッグ可能なスクリプト・コード504では、ファンクション・ヘッダ506が、参照「foo」512によってヘッダを特定するファンクションに変換され、ファンクション本体508が、ファンクションfooの本体514に変換されている。ヘッダ・ファンクション512を本体ファンクション514とリンクするグローバル・テーブル510について、参照が作成されている。これにより、ファンクション本体514は、たとえば、グローバル・テーブル内に記憶され、更新されることが可能になってもよい。さらに、この例では、ヘッダ・ファンクション512を使用して、グローバル・テーブルから、対応する本体の最新バージョンを取り出すことができる。
一実施形態では、ファンクション本体に様々な変換を適用してもよい。ファンクション本体は、たとえば、「エディットコンティニュー」デバッギング機能での編集目的でスワップアウトしてもよい。この例では、第1のファンクション本体をスワップアウトすることができ、set−next命令を使用して、第1のファンクション本体から第2のファンクション本体にマッピングすることができる。他の例では、デオプティマイゼーション目的でファンクション本体をスワップアウトしてもよいが、他のファンクションは、ファンクション・ヘッダに対して安定した参照をもち続けることができる。
他の実施形態では、本体から分割されたファンクション・ヘッダ内で、共通のデバッギング・インフラストラクチャを記憶し共用することができる。たとえば、ファンクション・ヘッダ内に記憶されたインフラストラクチャ・コードは、デバッガが使用するノーティフィケーション・フックを含むこともできる。他の例では、ファンクション・ヘッダ内に記憶されるインフラストラクチャ・コードは、デバッギングでのset−next命令のために使用してもよいスイッチ・テーブル用のドライバを含むこともできる。
図6は、ユーザ・スクリプト・コードを変換して、デバッギング中の値の検査を可能にすることのできる、例示的なスクリプト・コード600の図である。たとえば、ファンクションは、その局所変数をフレーム・オブジェクトに公開してもよく、これは様々な方式で実行することができる。この例では、ファンクションfoo()602は、文字列変数「x」、および局所変数を読み書きするための命令を含む。
一実施形態604では、localsは、閉止オブジェクトまたは辞書オブジェクト608に上げることができる。一例では、この実施形態において、localsを辞書オブジェクトにまで上げることにより、localsの記憶領域を調整してもよく、またlocalsをヒープに移してもよい。604では、命令は、局所変数を読み(612)書き(610)するための、トレースバック・メソッドへのコールを含む。
他の実施形態606では、localsのアドレスは、カスタマイズされた表示フレーム614を介して記述してもよい。一例では、この実施形態において、localsは、カスタマイズされたフレーム614を含むスタック上に存在できるようにすることもでき、localsの記憶領域にほとんど影響を及ぼさなくてもよい。ファンクションfoo()については、検証不能なポインタ・コードを含む新規フレームを作成することができる(616)。局所変数を読み(620)書き(618)するための命令は、それぞれコール・トレースバック・メソッドを含み、たとえば、デバッギング中に、ホスト・アプリケーションが、そのUIを動作させることを継続できるようにする。
両方の実施形態において、変数homesが表示オブジェクト610、612、618、620に記述されており、デバッガ用のトレースバックにおいて利用可能にすることができる。一例として、localsは、ファンクションがトレースバックに達するまで、表示オブジェクトに「流出」させる必要がなくてもよく、デバッギング中に、ホスト・アプリケーションが、そのUIを動作させることを継続できるようにする。604において、localsは、たとえば、トレースバック・ファンクション・コールにわたって保存するために、スタックに「流出」させることができる。
図7は、ユーザ・スクリプト・コードを変換して、デバッギング中の「set−next」命令の使用を可能にすることのできる、例示的なスクリプト・コード700の図である。一実施形態では、set−next命令を使用して、デバッガは、中間でのユーザ・コードを実行することなく、現在のフレームにおいて次のアクティブな命令をセットすることができる。この実施形態では、ソース命令およびターゲット命令が、同じファンクション内にあり、いずれも、もう一方の前または後に位置することができる。たとえば、スレッドがラインB710におけるトレースバックに位置している場合、デバッガのユーザは、中間でのユーザ・コードを実行することなく、このスレッドをラインA708におけるトレースバックに移動することができる。
このタイプのset−next命令は、例示的なスクリプト・コード700で示すように、スイッチ・テーブル714をファンクションに挿入することによって実施することができる。この例では、デバッグのユーザが、トレースバック708、710、712にある間にset−next命令を実行する場合、デバッガは、疑似local「$nextLine」714をターゲット・ラインにセットすることでき、適切なトレースバックが「true」に戻ることができる。この例では、これにより、ポインタ用の制御が次のスイッチ・テーブル(スイッチ・ラベルにおいて)714にジャンプし、次いで、適切なライン702、704、706にジャンプする。
上記実施形態は、スイッチ・テーブルを実装してデバッギングのためのset−next命令を利用することの、単なる一例に過ぎないことが理解されよう。本明細書で述べる各技法およびシステムは、上記実施形態に限定されるものではない。たとえば、PythonにおけるC#「イテレータ」または「ジェネレータ」も、スイッチ・テーブルで実施してよい。この例では、ユーザ・コード変換は、スイッチ・テーブルを得る手段として、ユーザ・コード・ファンクションをイテレータに変換することを利用できることがある。デバッギングにおけるset−nextファンクション用のスイッチ・テーブルを利用するための代替手段を、当業者であれば考案できるであろう。
図8は、ユーザ・スクリプト・コードを変換して、デバッギング中の例外処理を可能にすることのできる、例示的なスクリプト・コード800の図である。一実施形態では、802での例示的なコードと同様に、同期した例外向けに明示的な「throw」キーワードを使用することができる。この実施形態では、同期した例外のためにトレースバック・メソッドへのコールを挿入することができ、その結果、「throw」の例外の例が変換されて808になり、ここで、明示的な例外$tのためにトレースバックがコールされる。
他の実施形態では、明示的なチェックを使用して、非同期の例外を同期にすることができ、0による除算またはヌル・レファレンスなどが非同期の例外の原因になる。この例では、例示的なユーザ・コード804は、ファンクションによる除算をコールする。このコードは810に変換することでき、その結果、ある値による除算が0である場合に、この例外についてのトレースバック・ファンクションがコールされる。そうでない場合には、この値を分割して、元のファンクション値にすることができる。
他の実施形態では、スクリプト・コードは、ノン・スクリプト・コード806にコール・アウトしてもよい。この実施形態では、たとえば、ノン・スクリプト・コードでの例外は、それらがスクリプト・コードに入るまで、スクリプト・デバッガには見えないことがある。この実施形態では、スクリプト・コードは、812に変換することができ、その結果、送出コールがtry−catchブロック812でラップされる。さらに、前述のように、変換されたコードは、例外処理のためのトレースバック・メソッドへのコールを含む。
共通のデバッギング機能を含むスクリプト・コードへのユーザ・スクリプトの変換のいくつかの実施形態を上述してきたが、本明細書に記載の各技法およびシステムは、これらのデバッギング機能に限定されるものではないことが理解されよう。デバッギング機能は数多く、また変化に富んでおり、前述のようにユーザ・スクリプト変換を実行することにより、スクリプト・コードに持ち込むことのできる代替のデバッギング機能を、当業者であれば考案できるであろう。
他の態様では、変換は、ファンクション・ヘッダ/本体分割、例外処理ガード、スイッチ・テーブル、明示的なスタック・フレーム作成、ローカル変数のホイスティング、トレースバック、他など、1つまたは複数のデバッギング機能を組み合わせて、共通ヘルパ・ファンクションなどイテレータのパターンに基づいて、ユーザ・スクリプト・コードの単一変換にしてもよい。図9は、ユーザ・スクリプト・コードを変換して、イテレータ・パターンを使用し、2つ以上のデバッギング機能を組み合わせることを可能にすることのできる、例示的なスクリプト・コード900の図である。
この機能組合せ変換の例は、ファンクション本体902のグローバル・テーブルにファンクションの本体をマッピングするスクリプト・コードを挿入することを含む。この例では、グローバル・テーブル「g_functs」は、ファンクション・ヘッダ「foo」を、その対応する本体「foo_body.」でマッピングする。共通ヘルパ・ファンクション904は、様々な実装にわたって共有することのできる変換内に挿入することができる。たとえばファンクション本体がすでに編集されていた可能性がある場合、ヘルパ・ファンクション904は、ファンクション・ヘッダについてファンクション本体の最新版を求めて、グローバル・テーブル906にコールすることができる。さらに、ヘルパ・ファンクション904は、トレースバック、set−next命令、例外処理など、ユーザ・スクリプト・コードについて2つ以上のデバッギング機能変換908を含むことができる。
この例では、ファンクション「foo」が、ストリング「foo」910で、共通ヘルパ・ファンクション904にコールする。「foo body」912は、初期の本体に似ているが、デバッギング機能のためにブレークポイントが開始されるyieldを含む。本体912はイテレータに変換され、ここで、ヘッダ910がイテレータを駆動し、ファンクションの命令ラインの前に、それぞれのyieldsが、トレースバック・メソッドへのコールになることができる。このようにして、この例では、イテレータ・パターンを使用して、2つ以上のデバッギング機能をユーザ・スクリプト・コード変換に組み合わせることができる。
ホスト・アプリケーションでの使用向けに開発されたユーザ・スクリプト・コードが、たとえば、ホスト・アプリケーションにそのユーザ・インターフェース(UI)を動作させながら、デバッグできるようにすることのできるシステムを考案してもよい。図10は、ホスト・アプリケーション内で実行するように開発されたユーザ・スクリプト・コードを、デバッグ可能なコードに変換するための例示的なシステム1000のブロック図である。たとえば、ユーザ/開発者は、ホスト・アプリケーション内のマクロとして実行するように自分が開発したユーザ・スクリプト・コードをデバッグしようと考えることがある場合、この例示的なシステム1000は、ユーザ・スクリプト・コードをデバッグ可能なコードに変換し、その結果、ホスト・アプリケーションは、デバッギング時の停止動作中にUIイベントに応答し続けることができる。
例示的なシステム1000は、ホスト・アプリケーションにコールバックして、このホスト・アプリケーションが協働して動作し、そのUIを更新して、たとえば、デバッギング停止動作において機能を継続するように見えるよう構成することができるトレースバック・メソッド1008を含む。一実施形態では、トレースバック・メソッドは、ホスト・アプリケーションに制御を戻し、このホスト・アプリケーションが、UIイベントを実行するためにメッセージ・ポンプの動作を継続することができる。
例示的なシステム1000はさらに、ユーザ・スクリプト・コード変換構成要素1002を含み、この構成要素は、ホスト・アプリケーション内で実行するために開発されたユーザ・スクリプト・コード1050を変換するように構成することができる。ユーザ・スクリプト・コード変換構成要素1002は、トレースバック・メソッド・コールバック実装構成要素1004を含む。この要素は、コールバックを挿入するように構成され、このコールバックは、デバッギングのために停止動作をインストールし得る、ユーザ・スクリプト・コード1050内の1つまたは複数の位置でトレースバック・メソッド1008にコールする。たとえば、トレースバック・メソッド・コールバック実装構成要素1004は、それぞれのファンクション、および/またはユーザ・スクリプト・コード1050のファンクション内の命令の前で、トレースバックにコールを挿入することにより、ユーザ・スクリプト・コード1050を変換してもよい。
ユーザ・スクリプト・コード変換構成要素1002はさらに、イテレータ・パターン変換を使用することにより、ユーザ・スクリプト・コード1050内の2つ以上のスクリプト・コード・デバッギング機能を結合するように構成することのできる、ユーザ・スクリプト・コード・デバッギング機能コンバイナ1006を含む。たとえば、スクリプト・コード1050のユーザ/開発者が、トレースバック、set−next命令、変数検査など、コードのデバッギング中にいくつかのデバッギング機能を利用し、他で、編集、継続しようと考える場合、イテレータ・パターンを使用して、これらの変換を組み合わせて1つの変換にすることができる。この例では、イテレータ・パターンを使用して2つ以上のデバッギング機能の組合せを可能にするコードに、共通ヘルパ・ファンクションを挿入することができる。このようにして、たとえば、ユーザ・スクリプト・コード変換構成要素1002は、ユーザ・スクリプト・コード1050を、デバッグ可能な変換されたユーザ・スクリプト・コード1052に変換することができるが、ホスト・アプリケーションは、オペレーティング・システムの仮想マシンからの協働を利用することなく、機能を継続することができる。
一実施形態では、ユーザ・スクリプト・コード・デバッギング機能コンバイナは、ファンクション本体のグローバル・テーブルに、ファンクション・ヘッダをマッピングするスクリプト・コードを挿入するように構成することができる。さらに、ユーザ・スクリプト・コード・デバッギング機能コンバイナは、それぞれのファンクション・ヘッダを有し、組み合わせるデバッギング機能を有し、イテレータ・パターン・ファンクションをコールする、スクリプト・コードを挿入するように構成することができる。さらに、ユーザ・スクリプト・コード・デバッギング機能コンバイナは、イテレータ・パターン・ファンクションを使用してデバッギング機能を可能にするコードを含むように変換された、対応する更新されたファンクション本体を取り出すように構成することができる。このようにして、たとえば、2つ以上のデバッギング機能を含んでもよいファンクションは、それぞれのデバッギング機能を組み合わせる単一変換を有することができる。
他の実施形態では、ユーザ・スクリプト・コード変換構成要素1002はさらに、ファンクション分離構成要素を含むことができ、この構成要素は、ファンクションを別々のヘッダと本体にコンパイルし、ファンクション本体を、対応するファンクション・ヘッダにマッピングされたファンクション本体を含むグローバル・テーブルに記憶するように構成することができる。このようにして、たとえば、ファンクション本体はデバッギング中に編集してもよく、本体はやはり、グローバル・テーブルを使用して、その対応するヘッダにマッピングすることができる。
図11は、前述の例示的なシステムの実装例1100の一実施形態の図である。例示的な実装形態1100では、ホスト・アプリケーション1102(たとえば、スプレッドシート・アプリケーション)は、アプリケーション実行および開発枠組み1114内で実行される。実行および開発の枠組み1114は、通常、この枠組み1114内で書かれ、実行されるコードがコールすることのできるファンクションを含んでもよい開発ライブラリ1112を有する。
この例では、ユーザは、ホスト・アプリケーション1102で実行することのできる、マクロなどのスクリプト・コード1106を書くことができる。ユーザ・スクリプト・コード1106は、高水準言語(たとえば、C#)で書くことができ、枠組み1114によってサポートされているコンパイラ1108は、ユーザ・スクリプト・コード1106を、枠組み1114内の実行時環境に送ってもよい中間言語にコンパイルすることができる。
この例1100では、ユーザ・スクリプト・コード変換器1110は、コンパイラ1108に含まれてもよく、デバッグ可能な機能をコード内に挿入することにより、ユーザ・スクリプト・コード1106を、変換されたデバッグ可能なユーザ・スクリプト・コード1104に変換してもよい。たとえば、ライブラリ1112内のトレースバック・ファンクションへのコールをユーザ・スクリプト・コードに挿入して、ホスト・アプリケーションが、デバッギング中に機能を継続できるようにしてもよい。さらに、ホスト・アプリケーション1102は、ユーザが、そのコードをデバッグできるようにするデバッガを含んでもよく、変換されたデバッグ可能なユーザ・スクリプト・コード1104は、ホスト・アプリケーションのUIが、デバッギング・プロセス中に動作を継続できるようにすることが可能である。
他の実施形態では、ユーザ・スクリプト・コード変換構成要素は、ホスト・アプリケーション用の動的言語実行時構成要素に動作可能なように結合されてもよく、これは、ユーザ・スクリプト・コードのジャスト・イン・タイム・コンパイルおよびその実行中に、ユーザ・スクリプト・コードを変換するように構成することができる。たとえば、ユーザ・スクリプト・コードは、コンパイルして、アプリケーション開発および実行枠組みのための中間コードにしてもよく、次いで、枠組み内の実行時環境に送ってもよい。ジャスト・イン・タイム・コンパイル・サービスは、通常、コードの実行中に、中間言語をコンパイルして機械語にする。この実施形態では、ジャスト・イン・タイム・コンパイラは、実行中に、ユーザ・スクリプト・コードを、変換されたデバッグ可能なコードに変換するためのユーザ・スクリプト・コード変換構成要素を含むことができる。
さらに他の実施形態では、本明細書において提示した各技法のうちの1つまたは複数を実施するように構成されたプロセッサ実行可能な命令を含む、コンピュータ可読媒体を含む。このようにして考案することのできる例示的なコンピュータ可読媒体が図12に示してあるが、実装形態1200は、コンピュータ可読媒体1208(たとえば、CD−R、DVD−R、またはハード・ディスク・ドライブのプラッタ)を含み、これらの媒体上に、コンピュータ可読データ1206が符号化される。次に、コンピュータ可読データ1206は、本明細書において説明する原理のうちの1つまたは複数に従って動作するように構成された、1組のコンピュータ命令1204を含む。こうした一実施形態1202では、プロセッサ実行可能な命令1204は、たとえば、図1の例示的な方法100などの方法を実行するように構成してもよい。こうした他の一実施形態では、プロセッサ実行可能な命令1204は、たとえば、図10の例示的なシステム1000などのシステムを実装するように構成してもよい。本明細書に提示した各技法に従って動作するように構成された、こうした多くのコンピュータ可読媒体が、当業者によって考案することができる。
構造上の特徴および/または方法論的な作用に特有の用語で、主題について述べてきたが、添付の特許請求の範囲で定義される主題は、必ずしも前述の具体的な特徴または作用を限定するものではないことを理解されたい。むしろ、前述の具体的な特徴および作用は、特許請求の範囲を実施する例示的な形態として開示されている。
本出願で使用されているように、用語「構成要素」、「モジュール」、「システム」、「インターフェース」などは、全体として、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行時のソフトウェアのいずれかのコンピュータ関連の構成要素を指すものである。たとえば、構成要素は、それだけには限定されないが、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、実行可能なもの、実行のスレッド、プログラム、および/またはコンピュータである。例として、制御装置上で実行されているアプリケーションおよび制御装置ともに、構成要素である。1つまたは複数の構成要素は、プロセスおよび/または実行のスレッド内に存在してもよく、また構成要素は、1つのコンピュータ上に配置してもよく、かつ/または2つ以上のコンピュータの間に分散してもよい。
さらに、特許請求される主題は、方法、装置、または、ソフトウェア、ファームウェア、もしくはそれらの任意の組合せを生成して、開示された主題をコンピュータが実施するように制御するための標準のプログラミングおよび/またはエンジニアリング技法を使用する製品として実施してもよい。本明細書で使用の用語「製品」は、任意のコンピュータ可読装置、キャリア、または媒体からアクセス可能なコンピュータ・プログラムを包含するものである。もちろん、特許請求される主題の精神または範囲から逸脱することなく、この構成に対して多くの修正形態を実施してもよいことが、当業者なら理解されよう。
図10および以下の議論により、本明細書に記載の規定のうちの1つまたは複数での実施形態を実施するための、適切なコンピューティング環境の簡潔で全般的な説明が示される。図10の動作環境は、適切な動作環境の一例に過ぎす、この動作環境の使用または機能の範囲に関して、いかなる限定をも示唆するものではない。コンピュータ装置の例には、それだけには限らないが、パーソナル・コンピュータ、サーバ・コンピュータ、ハンドヘルドまたはラップトップ装置、移動装置(移動電話、携帯型情報端末(Personal Digital Assistant:PDA)、メディア・プレーヤなど)、マルチプロセッサ・システム、家庭用電化製品、ミニ・コンピュータ、メインフレーム・コンピュータ、上記のシステムまたは装置などのうち任意のものを含む分散コンピューティング環境などが含まれる。
必要とされてはいないが、各実施形態は、1つまたは複数のコンピュータ装置によって実行される「コンピュータ可読命令」との一般的な関連で説明してある。コンピュータ可読命令は、(以下で議論される)コンピュータ可読媒体を介して分散してもよい。コンピュータ可読命令は、特定のタスクを実行し、または特定の抽象データ型を実装する、ファンクション、オブジェクト、アプリケーション・プログラム・インターフェース(Application Programming Interface:API)、データ構造などのプログラム・モジュールとして実施してもよい。通常、コンピュータ可読命令の機能は、様々な環境において要望される通り、組み合わせても、または分散してもよい。
図13には、本明細書において提供された1つまたは複数の実施形態を実施するように構成されたコンピュータ装置1312を備える、システム1310の一例が示してある。一実施形態において、コンピュータ装置1312は、少なくとも1つの処理ユニット1316およびメモリ1318を備える。コンピュータ装置の正確な構成およびタイプに応じて、メモリ1318は、揮発性(たとえば、RAM(Random Access Memory)など)、不揮発性(たとえば、ROM(Read Only Memory)、フラッシュ・メモリなど)またはこれら2つの何らかの組合せでもよい。この構成が、図13に破線1314で示してある。
他の実施形態では、装置1312は、追加の特徴および/または機能を含んでもよい。たとえば、装置1312はまた、磁気記憶装置、光記憶装置などを含むが、ただしそれだけに限定されない、(たとえば、取外し可能および/または取外し不可能な)追加の記憶装置を備えてもよい。こうした追加の記憶装置が、図13に記憶装置1320で示してある。一実施形態では、本明細書において提供される1つまたは複数の実施形態を実施するためのコンピュータ可読命令は、記憶装置1320内に存在してもよい。記憶装置1320はまた、他のコンピュータ可読命令を記憶して、オペレーティング・システム、アプリケーション・プログラムなどを実施してもよい。コンピュータ可読命令は、たとえば、処理ユニット1316が実行するように、メモリ1318内にロードしてもよい。
本明細書では、用語「コンピュータ可読媒体」は、コンピュータ記憶媒体を含む。コンピュータ記憶媒体には、コンピュータ可読命令、または他のデータなど、情報を記憶するための任意の方法または技術で実装された、揮発性および不揮発性、取外し可能および取外し不可能な媒体が含まれる。メモリ1318および記憶装置1320は、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、それだけには限定されないが、RAM、ROM、電気的に消去可能な読取り専用メモリ(Electrically Erasable and Programmable Read Only Memory:EEPROM)、フラッシュ・メモリ、もしくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(Digital Versatile Disc:DVD)もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶装置、または、所望の情報を記憶するのに使用することができ、装置1312からアクセスすることのできる任意の他の媒体が含まれる。任意のこうしたコンピュータ記憶媒体は、装置1312の一部分でもよい。
装置1312はまた、装置1312が他の装置と通信できるようにする、通信接続1326(複数可)を含んでもよい。通信接続1326(複数可)には、それだけには限定されないが、モデム、ネットワーク・インターフェース・カード(Network Interface Card:NIC)、集積化されたネットワーク・インターフェース、無線周波数の送信機/受信機、赤外線ポート、USB(Universal Serial Bus)接続、またはコンピュータ装置1312を他のコンピュータ装置に接続するための他のインターフェースが含まれ得る。通信接続1326(複数可)には、有線接続または無線接続が含まれ得る。通信接続1326(複数可)は、通信媒体を送信および/または受信してもよい。
用語「コンピュータ可読媒体」には、通信媒体が含まれ得る。通信媒体は通常、搬送波もしくは他の搬送機構など、「変調されたデータ信号」内の、コンピュータ可読命令または他のデータを取り入れ、任意の情報送達媒体を含む。用語「変調データ信号」は、信号内の情報を符号化するように設定された、または変更された、その特性のうちの1つまたは複数を有する信号を含んでもよい。
装置1312には、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、赤外線カメラ、ビデオ入力装置、および/または他の任意の入力装置など、入力装置1324(複数可)が含まれ得る。表示装置(複数可)、スピーカ、プリンタ、および/または他の任意の出力装置など、出力装置1322(複数可)はまた、装置1312内に含まれてもよい。入力装置1324(複数可)、および、出力装置1322(複数可)は、有線接続、無線接続、またはその任意の組合せを介して、装置1312に接続してもよい。一実施形態では、他のコンピュータ装置からの入力装置または出力装置は、コンピュータ装置1312用の入力装置1324(複数可)または出力装置1322(複数可)として使用してもよい。
コンピュータ装置1312の構成要素は、バスなどの様々な相互接続部によって接続されてもよい。こうした相互接続部には、PCI Expressなどの周辺装置相互接続(Peripheral Component Interconnect:PCI)、ユニバーサル・シリアル・バス(USB)、ファイアワイヤ(IEEE 1394)、光バス構造などが含まれ得る。他の実施形態では、コンピュータ装置1312の構成要素は、ネットワークによって相互接続されてもよい。たとえば、メモリ1318は、ネットワークによって相互接続された様々な物理的な位置に配置された、複数の物理メモリ・ユニットから構成されてもよい。
コンピュータ可読命令を記憶するのに利用される記憶装置は、ネットワークを介して分散してもよいことが、当業者には理解されよう。たとえば、ネットワーク1328を介してアクセス可能なコンピュータ装置1330は、コンピュータ可読命令を記憶して、本明細書において提供される1つまたは複数の実施形態を実施してもよい。コンピュータ装置1312は、コンピュータ装置1330をアクセスし、実行のためのコンピュータ可読命令の一部分またはそのすべてをダウンロードしてもよい。あるいは、コンピュータ装置1312は、必要に応じて、コンピュータ可読命令の各部分をダウンロードしてもよく、または、命令によってはコンピュータ装置1312で実行してもよく、命令によってはコンピュータ装置1330で実行してもよい。
実施形態の様々な動作が、本明細書で提供される。一実施形態では、記述された動作のうちの1つまたは複数が、1つまたは複数のコンピュータ可読媒体上に記憶されたコンピュータ可読命令を構成し、この命令は、コンピュータ装置によって実行される場合、コンピュータ装置が、記述された動作を実行するようにする。各動作のいくつかまたはそのすべてが記述される順序は、これらの動作が必然的に順序に依存することを意味するものと解釈すべきではない。代替の順序付けが、この記述の恩恵を受ける当業者には理解されよう。さらに、本明細書で提供される各実施形態においては、必ずしもすべての動作が存在しなくてもよいことが理解されよう。
さらに、用語「例示的」は、本明細書では、代表例、具体例、または例証として働くことを意味するために使用される。本明細書で「例示的」と記述されたいかなる態様または設計も、必ずしも、他の態様または設計に勝って有利であると解釈されるものではない。むしろ、例示的という用語を使用することは、具体的に概念を提供するものである。本出願で使用されているように、用語「または」は、排他的な「または」ではなく、包含的な「または」を意味するものである。すなわち、別段の指定がない限り、または文脈から明らかでない限り、「XはAまたはBを利用する」は、自然な包含的順列のいずれをも意味するものである。すなわち、XがAを利用する、XがBを利用する、またはXがAとBの両方を利用する場合、「XがAまたはBを利用する」は、前述の場合のいずれにおいても満たされる。さらに、本出願および添付の請求の範囲で使用する冠詞「a」および「an」は、一般に、別段の指定がない限り、または単数形を指すと文脈から明らかでない限り、「1つまたは複数」を意味するものと解釈してもよい。
また、本開示は、1つまたは複数の実装形態に関して図示し、説明してきたが、この明細書および添付図面を読み、理解することに基づいて、同等な変更形態および修正形態が、当業者には思いつくことになる。本開示は、こうしたすべての修正形態および変更形態を含み、以下の特許請求の範囲に記載の範囲によってのみ限定される。特に、上記構成要素(たとえば、要素、リソースなど)によって実行される様々な機能に関しては、本明細書で示した本開示の例示的な実装形態において機能を実行する、開示された構造とは構造的に同等ではないが、こうした構成要素を記述するのに使用される用語は、別段の定めがない限り、記述された構成要素(たとえば、すなわち機能的に同等の)の指定された機能を実行する任意の構成要素に対応するものである。さらに、本開示の特定の特徴が、いくつかの実装形態のうちのほんの1つに関して開示されてきたが、こうした特徴は、必要に応じて、また任意の所与のまたは特定の用途にとって有利になるよう、その他の実装形態の1つまたは複数の他の特徴と組み合わせてもよい。さらに、用語「includes」、「having」、「has」、「with」、またはそれらの変化形が、詳細な説明または特許請求の範囲のいずれかにおいて使用される限りにおいて、こうした用語は、用語「comprising」と同様にして包含的であることを意図している。

Claims (19)

  1. ホスト・アプリケーション内で実行するために開発されたユーザ・スクリプト・コードのデバッグ可能性を実行可能にするための方法であって、
    前記ユーザ・スクリプト・コード内の1つまたは複数の位置において、コールバックを挿入するステップであって、前記コールバックは、前記ホスト・アプリケーションが協働して動作し、前記ホスト・アプリケーションのユーザ・インターフェースを更新しながら、前記ユーザ・スクリプト・コードをデバッッグすることを可能とするよう構成されたトレースバック・メソッドを呼び出すよう構成される、ステップと
    を含むことを特徴とする方法。
  2. 前記トレースバック・メソッドを作成するステップを含むことを特徴とする請求項1に記載の方法。
  3. 前記挿入するステップは、デバッギングのために停止動作をインストールし得る、前記ユーザ・スクリプト・コード内の位置において、前記コールバックを挿入するステップを含むことを特徴とする請求項1に記載の方法。
  4. 第2のトレースバック・メソッドへの第2のコールバックを含む、デバッギング機能を有する前記ユーザ・スクリプト・コードを備えるステップを含むことを特徴とする請求項1に記載の方法。
  5. イテレータ・パターンを使用することにより、前記ユーザ・スクリプト・コード内の前記デバッギング機能と1または複数の他のデバッギング機能を組み合わせるステップを含むことを特徴とする請求項4に記載の方法。
  6. 前記挿入を実行することにより、前記ユーザ・スクリプト・コードを変換するステップを含むことを特徴とする請求項1に記載の方法。
  7. 前記変換するステップは、1または複数の言語レベル・コンストラクタを実行するステップを含むことを特徴とする請求項6に記載の方法。
  8. 前記1または複数の言語レベル・コンストラクタは、仮想マシンからの協働を利用しないよう構成されることを特徴とする請求項7に記載の方法。
  9. 前記デバッギング機能は、スクリプト・コードを含むことを特徴とする請求項4に記載の方法。
  10. 前記第2のトレースバック・メソッドが、
    停止動作を求めるデバッガ要求を検出するステップ、および
    停止動作を求めるデバッガ要求を検出しないステップ
    のうちの1つを実行するよう構成されることを特徴とする請求項4に記載の方法。
  11. ホスト・アプリケーション内で実行するために開発された、ユーザ・スクリプト・コードのデバッグ可能性を実行可能にするためのシステムであって、
    処理ユニットと、
    前記処理ユニットに、
    第1のトレースバック・メソッドへの第1のコールバックを含む、第1のデバッギング機能を有する前記ユーザ・スクリプト・コードを備えるステップと、
    イテレータ・パターンを使用することにより、前記ユーザ・スクリプト・コード内の前記第1のデバッギング機能と第2のデバッギング機能を組み合わせるステップであって、前記第2のデバッギング機能は、第2のトレースバック・メソッドへの第2のコールバックを含み、前記第1のトレースバック・メソッドおよび前記第2のトレースバック・メソッドの少なくとも1つが、前記ホスト・アプリケーションが動作しながら、前記ユーザ・スクリプト・コードをデバッッグすることを可能とするよう構成る、ステップと
    を実行させるためのプログラムを記録したメモリと
    を備えたことを特徴とするシステム。
  12. 前記第1のデバッギング機能および前記第2のデバッギング機能の少なくとも1つが、割り当てられたデバッガ・スタック・フレームの作成を可能にする、変換されたユーザ・スクリプト・コードを含むことを特徴とする請求項11に記載のシステム。
  13. 前記割り当てられたデバッガ・スタック・フレームは、1または複数の局所変数の辞書に関連することを特徴とする請求項12に記載のシステム。
  14. 前記備えるステップは、ファンクションをコンパイルして、ヘッダおよび本体にするステップを含むことを特徴とする請求項11に記載のシステム。
  15. コンピュータに、ホスト・アプリケーション内で実行するために開発されたユーザ・スクリプト・コードのデバッグ可能性を実行可能にするための方法を実行させるためのプログラムを記録したコンピュータ可読記録媒体であって、前記方法は、
    前記ユーザ・スクリプト・コード内の1つまたは複数の位置において、コールバックを挿入するステップであって、前記コールバックは、前記ホスト・アプリケーションが協働して動作し、前記ホスト・アプリケーションのユーザ・インターフェースを更新しながら、前記ユーザ・スクリプト・コードをデバッッグすることを可能とするよう構成されたトレースバック・メソッドを呼び出すよう構成される、ステップ
    を含むことを特徴とするコンピュータ可読記録媒体。
  16. 前記方法は、ファンクションをコンパイルするとき、当該ファンクションにスクリプト・コード変換を適用するステップを含むことを特徴とする請求項15に記載のコンピュータ可読記録媒体。
  17. 前記方法は、前記前記挿入を実行することにより、前記ユーザ・スクリプト・コードを変換するステップを含むことを特徴とする請求項15に記載のコンピュータ可読記録媒体。
  18. 前記変換するステップは、1または複数の言語レベル・コンストラクタを実行するステップを含むことを特徴とする請求項17に記載のコンピュータ可読記録媒体。
  19. 前記1または複数の言語レベル・コンストラクタは、仮想マシンからの協働を利用しないよう構成されることを特徴とする請求項18に記載のコンピュータ可読記録媒体。
JP2011542189A 2008-12-16 2009-11-20 デバッギングのためのユーザ・スクリプト・コードの変換 Expired - Fee Related JP5415557B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/335,739 2008-12-16
US12/335,739 US9632909B2 (en) 2008-12-16 2008-12-16 Transforming user script code for debugging
PCT/US2009/065324 WO2010074860A2 (en) 2008-12-16 2009-11-20 Transforming user script code for debugging

Publications (3)

Publication Number Publication Date
JP2012512489A JP2012512489A (ja) 2012-05-31
JP2012512489A5 JP2012512489A5 (ja) 2012-12-06
JP5415557B2 true JP5415557B2 (ja) 2014-02-12

Family

ID=42242122

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011542189A Expired - Fee Related JP5415557B2 (ja) 2008-12-16 2009-11-20 デバッギングのためのユーザ・スクリプト・コードの変換

Country Status (6)

Country Link
US (1) US9632909B2 (ja)
EP (1) EP2359247B1 (ja)
JP (1) JP5415557B2 (ja)
CN (1) CN102246150B (ja)
CA (1) CA2743568A1 (ja)
WO (1) WO2010074860A2 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110191752A1 (en) * 2010-01-29 2011-08-04 Christophe Cleraux Method and System for Debugging of Software on Target Devices
US8756572B2 (en) * 2011-03-22 2014-06-17 Microsoft Corporation Debugger-set identifying breakpoints after coroutine yield points
US8893090B2 (en) 2011-04-15 2014-11-18 Microsoft Corporation Stepping out of an asynchronous method into its continuation in a debugger
US8918767B2 (en) 2011-06-16 2014-12-23 Microsoft Corporation Pattern-based compilation of asynchronous consumption
US9229770B2 (en) * 2011-09-16 2016-01-05 Skype Invoking timed iterator for executing tasks within timeout constraint without spawning new thread
US9069897B2 (en) * 2011-11-23 2015-06-30 Microsoft Technology Licensing, Llc Capturing telemetry data by dynamic language engine
US8914776B2 (en) 2012-05-17 2014-12-16 Microsoft Corporation Assisting development tools through inserted code statements
US9135034B2 (en) 2012-08-16 2015-09-15 Microsoft Technology Licensing, Llc Imperative attribution for elements in managed runtimes
US9104781B2 (en) 2012-08-28 2015-08-11 Microsoft Technology Licensing, Llc Obtaining metadata set by imperative statement
US10078575B2 (en) * 2013-03-13 2018-09-18 Microsoft Technology Licensing, Llc Diagnostics of state transitions
US9213622B1 (en) * 2013-03-14 2015-12-15 Square, Inc. System for exception notification and analysis
US10664384B2 (en) 2013-03-15 2020-05-26 Microsoft Technology Licensing, Llc Javascript debugging using just my code
US9015679B2 (en) 2013-07-16 2015-04-21 Sap Se System and method for translating business application functions into DBMS internal programming language procedures
US9239774B2 (en) 2014-01-15 2016-01-19 Microsoft Technology Licensing, Llc Classification of JavaScript code for debugging using just my code
CN105630679B (zh) * 2015-12-23 2019-04-23 北京奇虎科技有限公司 代码测试的方法及装置
CN105739983B (zh) * 2016-01-29 2019-03-15 腾讯科技(深圳)有限公司 脚本程序编辑装置及其实现方法
WO2018045545A1 (en) * 2016-09-09 2018-03-15 Microsoft Technology Licensing, Llc Automated performance debugging of production applications
US10958743B2 (en) 2017-07-31 2021-03-23 Fanplayr Inc. Method and system for segmentation as a service
US11487643B1 (en) * 2018-11-12 2022-11-01 Xilinx, Inc. Debugging for integrated scripting applications
US11036365B2 (en) * 2019-06-07 2021-06-15 Microsoft Technology Licensing, Llc Hang condition mitigation for browser applications
CN110489128B (zh) * 2019-08-23 2023-08-29 第四范式(北京)技术有限公司 将特征计算脚本转换成底层程序代码的方法和设备
CN113076247B (zh) * 2021-04-06 2023-07-04 成都安恒信息技术有限公司 一个管理与运行测试脚本的方法及***
US11586527B2 (en) * 2021-05-01 2023-02-21 Dell Products, L.P. Automated algorithmic verification in an embedded complex distributed storage environment

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4802165A (en) * 1986-10-08 1989-01-31 Enteleki, Inc. Method and apparatus of debugging computer programs
JPH04256035A (ja) 1991-02-08 1992-09-10 Nec Eng Ltd プログラムデバッグ方式
US5450586A (en) * 1991-08-14 1995-09-12 Hewlett-Packard Company System for analyzing and debugging embedded software through dynamic and interactive use of code markers
US5751942A (en) * 1993-06-30 1998-05-12 Intel Corporation Trace event detection during trace enable transitions
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
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
US5978917A (en) * 1997-08-14 1999-11-02 Symantec Corporation Detection and elimination of macro viruses
US6249907B1 (en) * 1998-03-24 2001-06-19 International Business Machines Corporation Method system and article of manufacture for debugging a computer program by encoding user specified breakpoint types at multiple locations in the computer program
US6263489B1 (en) 1998-04-30 2001-07-17 Hewlett-Packard Company Method and apparatus for debugging of optimized code
US6779180B1 (en) * 1998-09-16 2004-08-17 International Business Machines Corporation Apparatus and method for preventing stack overflow from synchronous completion of asynchronous functions
US6480818B1 (en) * 1998-11-13 2002-11-12 Cray Inc. Debugging techniques in a multithreaded environment
US6593940B1 (en) * 1998-12-23 2003-07-15 Intel Corporation Method for finding errors in multithreaded applications
US6701515B1 (en) 1999-05-27 2004-03-02 Tensilica, Inc. System and method for dynamically designing and evaluating configurable processor instructions
US6353924B1 (en) * 1999-02-08 2002-03-05 Incert Software Corporation Method for back tracing program execution
US6553565B2 (en) 1999-04-23 2003-04-22 Sun Microsystems, Inc Method and apparatus for debugging optimized code
US7007275B1 (en) * 1999-10-21 2006-02-28 Unisys Corporation Method and apparatus for automatic execution of concatenated methods across multiple heterogeneous data sources
US6804814B1 (en) * 1999-12-29 2004-10-12 Veritas Operating Corporation Method for simulating back program execution from a traceback sequence
US6871221B1 (en) 2000-01-21 2005-03-22 Scriptlogic Corporation Method and apparatus to manage network client logon scripts using a graphical management and administration tool
US20040205720A1 (en) 2001-04-30 2004-10-14 Robert Hundt Augmenting debuggers
CA2347647A1 (en) * 2001-05-15 2002-11-15 Ibm Canada Limited-Ibm Canada Limitee Storing and restoring snapshots of a computer process
US6836884B1 (en) * 2001-06-04 2004-12-28 Microsoft Corporation Method and system for editing software programs
EP1280056B1 (en) * 2001-07-26 2011-10-05 STMicroelectronics Limited Generation of debugging information
JP3992136B2 (ja) 2001-12-17 2007-10-17 学校法人金沢工業大学 ウイルス検出方法および装置
US7299454B2 (en) 2003-02-26 2007-11-20 Bea Systems, Inc. Method for multi-language debugging
US7401323B2 (en) * 2003-04-21 2008-07-15 Microsoft Corporation Just-My-Code debugging
US7510478B2 (en) * 2003-09-11 2009-03-31 Igt Gaming apparatus software employing a script file
WO2005029241A2 (en) * 2003-09-15 2005-03-31 Plum Thomas S Automated safe secure techniques for eliminating
US7383540B2 (en) 2003-12-12 2008-06-03 International Business Machines Corporation Altering execution flow of a computer program
US20050246692A1 (en) * 2004-04-28 2005-11-03 Convey Development, Inc. Asynchronous compilation
US7954088B2 (en) 2005-03-23 2011-05-31 Microsoft Corporation Method and apparatus for executing unit tests in application host environment
US7934202B2 (en) * 2005-04-28 2011-04-26 Microsoft Corporation Active execution tracing
US20070168992A1 (en) * 2005-11-17 2007-07-19 International Business Machines Corporation Method of tracing back the execution path in a debugger
US20070150866A1 (en) * 2005-12-22 2007-06-28 International Business Machines Corporation Displaying parameters associated with call statements
US8516444B2 (en) 2006-02-23 2013-08-20 International Business Machines Corporation Debugging a high performance computing program
JP4961781B2 (ja) * 2006-03-14 2012-06-27 ソニー株式会社 情報処理装置、その起動方法およびプログラム
US8225286B2 (en) * 2006-05-23 2012-07-17 Microsoft Corporation Debugging interpreted input
US7836430B2 (en) * 2006-07-21 2010-11-16 Apple Inc. Reversing execution of instructions in a debugger
US8561176B1 (en) * 2007-01-24 2013-10-15 Mcafee, Inc. System, method and computer program product for monitoring and/or analyzing at least one aspect of an invocation of an interface
US8239832B2 (en) * 2007-05-25 2012-08-07 Microsoft Corporation In-process debugging using external debugging infrastructure
US8533683B2 (en) * 2007-10-15 2013-09-10 Wind River Systems, Inc. Stack walking enhancements using sensorpoints
US8201151B2 (en) * 2007-12-20 2012-06-12 International Business Machines Corporation Method and system for providing post-mortem service level debugging
GB2459741B (en) * 2008-05-08 2012-05-02 Icera Inc Debugging system and method
US8271958B2 (en) * 2008-12-12 2012-09-18 Microsoft Corporation Remapping debuggable code
US8479160B2 (en) * 2009-10-21 2013-07-02 International Business Machines Corporation Debugging client-side code
CN102096629B (zh) * 2009-12-14 2013-09-25 华为技术有限公司 经过性断点设置、调试方法和装置
US8434057B2 (en) * 2010-08-17 2013-04-30 Oracle International Corporation Optimized implementation of breakpoint in java debugger agent
US8495590B2 (en) * 2011-06-10 2013-07-23 International Business Machines Corporation User-specific software debugging

Also Published As

Publication number Publication date
EP2359247A2 (en) 2011-08-24
EP2359247B1 (en) 2019-07-10
EP2359247A4 (en) 2016-05-11
WO2010074860A2 (en) 2010-07-01
CN102246150B (zh) 2013-10-30
CA2743568A1 (en) 2010-07-01
JP2012512489A (ja) 2012-05-31
WO2010074860A3 (en) 2010-08-19
US9632909B2 (en) 2017-04-25
CN102246150A (zh) 2011-11-16
US20100153927A1 (en) 2010-06-17

Similar Documents

Publication Publication Date Title
JP5415557B2 (ja) デバッギングのためのユーザ・スクリプト・コードの変換
US10540262B2 (en) Using edit and continue to dynamically set and unset optimizations in source code while debugging
RU2668973C2 (ru) Отладка машинного кода путем перехода от исполнения в собственном режиме к исполнению в интерпретируемом режиме
US10331425B2 (en) Automated source code adaption to inject features between platform versions
US9645912B2 (en) In-place function modification
US8407667B2 (en) Inferring missing type information for reflection
US8239823B2 (en) Generating libraries for reflection without project compilation
US8997049B1 (en) Method and system for debugging of compiled code using an interpreter
US20150113512A1 (en) Speculative object representation
JP2012506094A (ja) ランタイムにおいて生成したコードのキャッシュへの格納
JP2012513648A (ja) デバッグパイプライン
US8893100B2 (en) Return address optimisation for a dynamic code translator
US20090320007A1 (en) Local metadata for external components
CN113196243A (zh) 使用编译器生成的仿真优化元数据改进仿真和跟踪性能
US8930923B2 (en) Generating debugging extension source code utilizing debugging information
US9141356B2 (en) Process for generating dynamic type
Bouraqadi et al. Test-driven development for generated portable Javascript apps
CN111258802A (zh) 捕获应用程序崩溃信息的方法及相关设备
US8365154B2 (en) Multi-language software development
CN104915199B (zh) 一种将Flash项目转换为Html5项目的方法与装置
US10521206B2 (en) Supporting compiler variable instrumentation for uninitialized memory references
US11847433B2 (en) Source code editing combining edit and continue with hot reload
US8387007B2 (en) Scripting bridge
CN110673834A (zh) 一种源码调用方法、装置、计算机设备及存储介质
CN114253615B (zh) 一种引导程序设置方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121022

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121022

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130701

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130718

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131002

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131015

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131113

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

LAPS Cancellation because of no payment of annual fees