(57)【特許請求の範囲】
【請求項１】
実行環境にホストされたコンピュータコードを前記実行環境外にホストされたデバッグツールによってデバッグするための方法であって、
前記コンピュータコードのオブジェクトのインスタンスをＵＲＬによって使用可能にすることによってデバッグパイプラインを発行するステップと、
前記デバッグツールを備えるコンポーネントの少なくとも一部分が前記オブジェクトの前記インスタンスを選択することに応じて、前記デバッグパイプラインを介して前記コンピュータコードの前記オブジェクトを前記デバッグツールにリンクさせるステップと、
前記デバッグパイプラインを第１の状態から第２の状態へ変換するように前記デバッグパイプラインをフィルタ処理するステップであって、前記第１の状態は前記コンピュータコードの一部分に対する読み取り／書き込みアクセスを可能にする状態であり、前記第２の状態は前記コンピュータコードの一部分に対する読み取り専用アクセスを可能にする状態である、ステップと、
前記コンピュータコードの少なくともいくつかをデバッグするのを容易化するように前記フィルタ処理されたデバッグパイプラインにおいて１又は複数のプロトコルを実施するステップと、を含み、
前記発行するステップ、前記リンクさせるステップ、前記フィルタ処理するステップ、又は前記実施するステップのうち少なくともいくつかは、少なくとも部分的に処理ユニットによって実現される、方法。
【請求項２】
前記デバッグを容易化するためのソース位置に依存しないアーキテクチャを実施するステップを含む、請求項１に記載の方法。
【請求項３】
前記デバッグパイプラインのパイプラインインターフェイスオブジェクトをリモートプロキシに公開するステップを含む、請求項１に記載の方法。
【請求項４】
前記デバッグを容易化するための型ユニバースに依存しないアーキテクチャを実施するステップを含む、請求項１に記載の方法。
【請求項５】
前記デバッグパイプラインを第２のデバッグパイプラインと結合することによって親パイプラインを作成するステップを含む、請求項１に記載の方法。
【請求項６】
前記デバッグパイプラインはステートマシンを表す、請求項１に記載の方法。
【請求項７】
前記デバッグパイプラインを前記デバッグツールに公開するステップを含む、請求項１に記載の方法。
【請求項８】
前記デバッグツールはリッチクライアント、ブラウザ、又はコマンドラインシェルのうちの少なくとも１つを含む、請求項１に記載の方法。
【請求項９】
実行環境にホストされたコンピュータコードを前記実行環境外にホストされたデバッグツールによってデバッグするためのシステムであって、
前記コンピュータコードのオブジェクトのインスタンスをＵＲＬによって使用可能にすることによってデバッグパイプラインを発行するように構成された発行コンポーネントと、
前記デバッグツールを備えるコンポーネントの少なくとも一部分が前記オブジェクトの前記インスタンスを選択することに応じて、前記コンピュータコードの前記オブジェクトを前記デバッグツールにリンクさせるように構成された前記デバッグパイプラインと、
前記デバッグパイプラインの周りに１又は複数のフィルタを作成し、前記１又は複数のフィルタのうちの少なくとも１つを使用して、前記デバッグパイプラインを第１の状態から第２の状態へ変換するように前記デバッグパイプラインをフィルタ処理するように構成されたフィルタコンポーネントであって、前記第１の状態は前記コンピュータコードの一部分に対する読み取り／書き込みアクセスを可能にする状態であり、前記第２の状態は前記コンピュータコードの一部分に対する読み取り専用アクセスを可能にする状態である、フィルタコンポーネントと、
前記デバッグツールと動作的に関連付けられ、前記コンピュータコードの少なくともいくつかをデバッグするのを容易化するように前記フィルタ処理されたデバッグパイプラインにおいて１又は複数のプロトコルを実施するように構成されたプロデューサコンポーネントと、を含み、
前記発行コンポーネント、前記デバッグパイプライン、前記フィルタコンポーネント、又は前記プロデューサコンポーネントのうち少なくともいくつかは、少なくとも部分的に処理ユニットによって実現される、システム。
【請求項１０】
前記第２の状態はプロキシサーバへの接続に対応する、請求項９に記載のシステム。
【請求項１１】
前記プロデューサコンポーネントは前記デバッグを容易化するための型ユニバースに依存しないアーキテクチャを実施するように構成されている、請求項９に記載のシステム。
【請求項１２】
コンピュータ実行可能命令を備えたコンピュータ可読メモリであって、前記コンピュータ実行可能命令は、コンピュータ上の処理ユニットによって少なくとも部分的に実行された時に、
コンピュータコードのオブジェクトのインスタンスをＵＲＬによって使用可能にすることによってデバッグパイプラインを発行するステップと、
デバッグツールを備えるコンポーネントの少なくとも一部分が前記オブジェクトの前記インスタンスを選択することに応じて、前記デバッグパイプラインを介して前記コンピュータコードの前記オブジェクトを前記デバッグツールにリンクさせるステップと、
前記デバッグパイプラインを第１の状態から第２の状態へ変換するように前記デバッグパイプラインをフィルタ処理するステップであって、前記第１の状態は前記コンピュータコードの一部分に対する読み取り／書き込みアクセスを可能にする状態であり、前記第２の状態は前記コンピュータコードの一部分に対する読み取り専用アクセスを可能にする状態である、ステップと、
前記コンピュータコードの少なくともいくつかをデバッグするのを容易化するように前記フィルタ処理されたデバッグパイプラインにおいて１又は複数のプロトコルを実施するステップと、
を含む動作を実施する、コンピュータ可読メモリ。
【請求項１３】
前記デバッグパイプラインを前記デバッグツールに公開するステップを含む、請求項１２に記載のコンピュータ可読メモリ。
【請求項１４】
前記デバッグパイプラインのパイプラインインターフェイスオブジェクトをリモートプロキシに公開するステップを含む、請求項１２に記載のコンピュータ可読メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグパイプラインの技術に関する。
【背景技術】
【０００２】
コンピュータコードは、例えばインタープリターによって実行されるスクリプトコード、実行時の環境で実行されるプログラミングコードなど、様々な環境で実行される。さらに、コンピュータコードのデバッグは、様々なプラットフォームおよびプロトコルを使用して、様々な方法で実行される。ユーザーはしばしば、アプリケーション開発および実行フレームワークを使用してコードを開発することができ、これは、コードをデバッグするためのデバッグツールも含む。代替では、デバッグツールは、特定のプログラミングまたは実行環境で特定のコンピュータ言語と連携するように設計されている個別のコンポーネントとすることができる。さらに、デバッグは、実行中に、またはコードの実行から作成されたログファイルを使用して実行することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
コンピュータプログラムアプリケーションのユーザーおよび開発者は、しばしばアプリケーションにおいてコードをデバッグする必要性を見つける。例えば、ホストアプリケーションにおいて稼働するように設計されるマクロの開発者は、リリースまたは使用の前にコードをデバッグすることを望む場合がある。デバッグタスクを実行することは、ホストアプリケーションの実行環境によってサポートすることはできるが、ユーザーは、実行環境外でデバッグツールを使用することを望む場合がある。
【課題を解決するための手段】
【０００４】
この概要は、詳細な説明において下記でさらに説明されるいくつかの概念を簡単な形で紹介するために提供される。この概要は、特許請求された主題の鍵となる要素または重要な特徴を識別するためのものではなく、特許請求された主題の範囲を限定するために使用されるものでもない。
【０００５】
デバッグツールは、（例えばスクリプトコード、プログラミング言語コード、中間言語コード、およびマシン言語コードなど）コンピュータコードのデバッグを提供することはできるが、通常、特定のタイプのコードまたは言語、および／または特定のプラットフォームで動作することに制限される。しばしば、ホストアプリケーションのユーザーは、マクロなど、ホストアプリケーションで稼働するようにコードを開発することができ、開発されたコードをデバッグすることを望む。既存のデバッグアプリケーションプログラミングインターフェイス（ＡＰＩ）は、通常、それぞれのデバッグシナリオのカスタムな解決策を必要とし、このことは、例えば、ビジネスアプリケーションが遭遇する様々なシナリオに対処することを難しくする。現在、プラットフォーム、オペレーティングシステム、および言語にわたってデバッグするための標準化された解決策がない。
【０００６】
本明細書には、ホストアプリケーションの実行環境の外部にあり、ホストアプリケーションのものとは異なるプラットフォームに適用される機能を備えるデバッグツールによってコンピュータコードのデバッグを容易にするための１つまたは複数の技術および／またはシステムが提供される。例えば、コンピュータコードが開発されたコードのホストアプリケーションをコンパイルし、実行するために実行環境内に存在する場合、本明細書に提供される技術およびシステムは、異なる実行環境に独自のデバッグツールを使用してコンピュータコードのデバッグを可能にすることができる。
【０００７】
一実施形態において、システムは、実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコードのデバッグを容易にするためのシステムが考案される。実行環境で、プロデューサ（例えば、スクリプトコードエンジンを稼働させるブラウザなど）は、デバッグパイプラインを発行することができ、これは、実行環境でコンピュータコードのデバッグを提供するための１組のデバッグプロトコルを実装する。例えば、ユーザーは、スクリプトエンジンによってコンパイルされ、実行されるようにスクリプトコードを書くことができ、これは、ユーザーコードについての１組のデバッグプロトコルを実装するためのパイプラインを発行することができる。
【０００８】
さらに、この実施形態において、デバッグパイプラインは、インターフェイスオブジェクトを使用して、実行環境外のコンシューマーにデバッグパイプラインを公開することができる。プロデューサの実行環境外のコンシューマー（例えば、デバッグツール）は、デバッグパイプラインを使用して、実行環境においてコンピュータコードのデバッグを提供することができる。
【０００９】
さらに、この実施形態において、１組のプロトコルによって、コンシューマーは、コンピュータコードのデバッグを提供することができる。プロトコルは、例えば、様々なコンピュータ言語からのデバッグ要求を可能にすることができる、言語ニュートラルなデバッグ（ｌａｎｇｕａｇｅ−ｎｅｕｔｒａｌ  ｄｅｂｕｇｇｉｎｇ）を提供することができる言語に依存しないプロトコル（ｌａｎｇｕａｇｅ  ａｇｎｏｓｔｉｃ  ｐｒｏｔｏｃｏｌ）（例えば、特定のコンピューティング言語に依存しない）を含む。さらに、プロトコルは、オペレーティングシステム固有の構成体を公開することなく、それぞれの署名でコンピュータコードの言語タイプの処理を提供することができるオペレーティングシステムに依存しないプロトコル（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ  ａｇｎｏｓｔｉｃ  ｐｒｏｔｏｃｏｌ）（例えば、特定のオペレーティングシステムに依存しない）を含む。さらに、プロトコルは、互いに分離される複数のデバッグパイプラインを提供することができる分離プロトコル（ｉｓｏｌａｔｉｏｎ  ｐｒｏｔｏｃｏｌ）を含む。
【００１０】
上記および関連の目的を達成するために、以下の説明および添付の図面には、いくつかの例示の態様および実装形態を述べる。これらは、１つまたは複数の態様を使用することができる様々な方法のいくつかを示すにすぎない。開示の他の態様、利点、および新しい特徴は、添付の図面と併せ読めば、以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【００１１】
【図１】実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコードのデバッグを容易にするためのシステム例を示すコンポーネント図である。
【図２】プロデューサコンポーネントをユーザーがデバッグできるようにするためのデバッグインターフェイスを実施するコンシューマーコンポーネントを示す図である。
【図３】リモートのプロデューサとコンシューマーとをリンクするためにフィルタが使用される環境例を示す図である。
【図４】本明細書において説明したシステム例の態様を実施することができる環境例を示す図である。
【図５】実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコードのデバッグを容易にするための方法例を示すフロー図である。
【図６】実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコードのデバッグを容易にするための方法を実施することができる環境例を示す図である。
【図７】本明細書に述べた提供のうちの１つまたは複数を組み込むように構成されたプロセッサ実行可能命令を含むコンピュータ可読媒体例を示す図である。
【図８】本明細書に述べた提供のうちの１つまたは複数を実施することができるコンピューティング環境例を示す図である。
【発明を実施するための形態】
【００１２】
次に、特許請求された主題を、図面を参照して説明する。図中、図面を通じて、同様の参照番号を使用して同様の要素を指す。以下の説明では、説明上、特許請求された主題を完全に理解できるようにするために様々な特定の詳細を述べる。しかし、こうした特定の詳細なしに特許請求された主題を実施できることは明らかである。他の例では、特許請求された主題を説明しやすくするために、構造および装置をブロック図の形で示している。
【００１３】
図１は、実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコード（例えば、ユーザーが開発したスクリプトコード）のデバッグを容易にするためのシステム例１００を含むコンポーネント図である。例えば、ユーザーは、ブラウザ（例えば、インターネットエクスプローラ）において稼働しているスクリプトエンジン（例えば、実行時にスクリプトコードをコンパイルし、実行することができるスクリプトインタープリターなど）によって実行されるようにスクリプトコードを書くことができる。この実施形態において、システム例１００を使用して、（例えば、アプリケーション開発プラットフォームのデバッガーなど、リッチクライアントデバッガーエンジン（ｒｉｃｈ  ｃｌｉｅｎｔ  ｄｅｂｕｇｇｅｒ  ｅｎｇｉｎｅ）など）デバッグツールがスクリプトエンジンによって実行されるユーザースクリプトコードのデバッグを容易に提供できるようにすることができる。
【００１４】
実行環境でホストされるコンピュータコードはユーザーが開発したコードに制限されないことを理解されたい。例えば、一実施形態において、コンピュータコードは、スクリプト書き込みエンジンによって開発することができ、ユーザーまたは別のマシンは、エンジンによって書かれるコードをデバッグすることを望む。別の実施形態において、第１のユーザーは、実行環境で実行されるコードを開発し、第２のユーザーは、ユーザーが開発したコードをデバッグすることを望む。本明細書において説明したシステムを使用する代替の実施形態を当業者であれば考案することができることを理解されたい。システムおよび技術は、上述の実施形態に制限されない。
【００１５】
一実施形態において、コンピュータコードは、デバッグツールと同じプロセスで動作している実行環境にホストされる。例えば、ユーザーは、マクロがホストアプリケーションによって実行されるスクリプトコードを書くことができ、システム例１００は、同じマシン上で稼働している個別の開発プラットフォームから、ユーザースクリプトコードをデバッグするために、デバッガーエンジンの使用を容易にすることができる。別の実施形態において、コンピュータコードをホストしている実行環境は、第１のリモートサーバ上で動作することができ、デバッグツールは、第２のリモートサーバまたはユーザーのマシン上に配置される。この実施形態において、例えば、システム例１００は、デバッグツールを使用してコンピュータコードのリモートのデバッグを容易にすることができる。
【００１６】
図１において、システム例は、実行環境１０２に配置されるプロデューサコンポーネント１０４を含む。プロデューサコンポーネント１０４は、デバッグプロセスの段階をリンクするように構成することができるデバッグパイプライン１０６を発行するように構成することができる。例えば、デバッグパイプライン１０６は、ユーザーが開発したコード１５２のデバッグを容易にするために、プロデューサコンポーネント１０４（例えば、スクリプトコードインタープリター）をコンシューマーコンポーネント１１２（例えば、デバッグツール）とリンク１５４するソフトウェアインフラストラクチャとすることができる。
【００１７】
本明細書において説明した技術およびシステムは、上述の実施形態に制限されないことを理解されたい。ユーザーが開発されたコードをコンパイルし、実行できるようにするコンピュータアプリケーションまたはソフトウェアフレームワークとして機能することができる代替のプロデューサコンポーネントを当業者であれば考案することができること、および本明細書において説明した技術およびシステムがこれらの代替のプロデューサコンポーネントを含むことを理解されたい。例えば、アダプター、スクリプトコードデバッガー、アプリケーションダンプファイルリーダ、および他のコンポーネントは、システム例１００によってプロデューサコンポーネントとして使用することができる。
【００１８】
デバッグパイプライン１０６は、実行環境１０２外のコンシューマーコンポーネント１１２にデバッグパイプライン１０６を公開するように構成することができるデバッグパイプラインインターフェイスオブジェクト１１０を含む。一実施形態において、プロデューサコンポーネント１０４は、パイプラインインターフェイスオブジェクト１１０をコンシューマーが使用できるようにすることによって、デバッグパイプライン１０６を実施することができ、コンシューマーコンポーネント１１２は、デバッグパイプラインインターフェイスオブジェクト１１０を使用して、パイプラインおよびパイクライン内の機能にリンク１５４することによって、デバッグパイプライン１０６を連結することができる。
【００１９】
例えば、この実施形態において、プロデューサコンポーネント１０４は、システムにおいてデバッグパイプラインを発行して、例えば、リッチクライアント開発プラットフォーム（例えばＶｉｓｕａｌ  Ｓｔｕｄｉｏ（登録商標））など、そのシステムにおけるコンシューマーコンポーネント１１２がインターフェイスオブジェクト１１０を使用できるようにすることができる。この例において、リッチクライアント開発プラットフォームのユーザーは、（例えば、システムにおけるリストを調べることによって）どのプロデューサコンポーネント１０４がパイプラインを発行したかを識別することができ、パイプラインインターフェイスオブジェクト１１０を使用することによって、デバッグパイプラインをリッチクライアント開発プラットフォームに連結することができる。このように、この例では、プロデューサを、デバッグパイプライン１０６によってデバッガーにリンク１５４することができ、リッチクライアントデバッガーは、ユーザーが開発したコード１５２のデバッグを提供できるようにパイプラインにおいて機能することができる。
【００２０】
さらに、デバッグパイプラインインターフェイスオブジェクト１１０を、１組のデバッグプロトコル１０８を実施するように構成することができる。デバッグプロトコル１０８は、実行環境外のコンシューマーコンポーネント１１２によって、実行環境１０２においてコンピュータコード１５２のデバッグ体験を定義するように構成される。例えば、デバッグプロトコル１０８は、デバッグパイプライン１０６を定義する構成ファイルとすることができ、パイプラインでリンクされたコンポーネントをユーザーコード１５２の特定の要件で動作するように構成することができる。
【００２１】
１組のデバッグプロトコル１０８は、少なくとも２つのコンピュータスクリプト言語のうちの少なくとも一方でコンピュータコードのデバッグ要求を処理できるように構成される言語に依存しないプロトコル１１４を含む。一実施形態において、（例えば、特定のコンピュータ言語に依存しない）言語に依存しないプロトコル１１４を実装することによって、コンシューマーコンポーネントが言語セマンティックレベルで動作できるようにすることができる。この実施形態において、デバッグパイプラインインターフェイスオブジェクト１１０は、コンピュータ言語より高い抽象レベルで動作するアプリケーションプログラミングインターフェイス（ＡＰＩ）を含む。例えば、特定の言語が、特定のコードを使用して、デバッグ中にスタックフレームを要求することができる場合、この実施形態において、ＡＰＩは、デバッグ要求をそのセマンティック部分（意味）に要約して「スタックを取得」し、その要求について「スタックはここにある」を戻すことができる。
【００２２】
１組のデバッグプロトコル１０８は、オペレーティングシステム固有の構成体を公開することなく、それぞれの署名でコンピュータコードの言語タイプを処理できるようにするように構成されたオペレーティングシステムに依存しないプロトコル１１６（例えば、特定のオペレーティングシステムに依存しない）をさらに含む。一実施形態において、オペレーティングシステムに依存しないプロトコル１１６を実装することによって、デバッグパイプライン１０６を、プロセスおよびスレッドなど、オペレーティングシステムの概念と切り離すことができる。この実施形態において、デバッグパイプライン１０６は、プロセス識別子、オペレーティングシステムハンドルなど、オペレーティングシステム構成体を公開しない。例えば、デバッグパイプラインの第１の実施は、プロセス全体のデバッグを提供することができ、デバッグパイプラインの第２の実施は、単一のスレッド、スレッドのサブセット、または分散型システムなど、複数のプロセスを生成するステートマシンのデバッグを提供することができる。
【００２３】
１組のデバッグプロトコル１０８は、１つまたは複数の第２のデバッグパイプラインから分離される第１のデバッグパイプラインを提供するように構成された分離プロトコル１１８をさらに含む。一実施形態において、単一のデバッグパイプラインは、単一のステートマシンを表すことができ、コンピュータコードの意図されたデバッグの外にあるコードに影響を与えない。このように、例えば、ホストアプリケーションで稼働しているユーザーが開発したコードをデバッグするために使用されているデバッグパイプラインは、ユーザーコードをホストするマシン上で稼働する他のアプリケーションに影響を与えず、ホストプロセスに影響を与えない。
【００２４】
図１において、システム例１００は、プロデューサコンポーネント１０４の実行環境１０２の外にあり、実行環境１０２においてコンピュータコード１５２のデバッグ１５４を提供するように構成することができるコンシューマーコンポーネント１１２をさらに含む。例えば、コンシューマーコンポーネント１１２は、コンピュータコードに何らかの形のデバッグ体験を提供する一種のツールとすることができる。この例において、デバッグツールは、プロデューサコンポーネント１０４によって実施されるデバッグパイプライン１０６にリンクするために、パイプラインインターフェイス１１０を使用し（例えば、ＵＲＬからインターフェイスを手に入れ、それをデバッグツールで制御に配線する）、それによってデバッグプロトコル１０８を使用してコンピュータコード１５２のデバッグ１５４を提供することができる。
【００２５】
一実施形態において、コンシューマーコンポーネント１１２は、リッチクライアントアプリケーション開発プラットフォームの一部であるデバッグツールとすることができる。一例として、開発プラットフォームのユーザーは、リッチクライアントアプリケーション開発プラットフォームのデバッグツールをパイプラインインターフェイスに「配線」し、それによってプロデューサ１０４にデバッグツールを接続することができる。別の実施形態において、コンシューマーコンポーネント１１２は、デバッグツールを含むブラウザとすることができる。一例として、ユーザーは、ブラウザからデバッグツールをプロデューサとリンクして、そのツールを使用してデバッグを提供するために、ブラウザを使用して、パイプラインインターフェイスにリンクすることができる。
【００２６】
本明細書において説明した技術およびシステムは、上述の実施形態に制限されないことを理解されたい。デバッグパイプラインのデバッグツールとして機能することができる代替のコンシューマーコンポーネントを当業者であれば考案することができること、および本明細書において説明した技術およびシステムはこれらの代替のコンシューマーコンポーネントを含むことを理解されたい。例えば、コマンドラインシェル、自動化ツール、処理中制御、および他のコンポーネントを、システム例１００によってコンシューマーコンポーネントとして使用することができる。
【００２７】
一態様において、デバッグパイプラインを使用して、コンピュータコードを実行することができるコンポーネントからデバッグツールにリンクすることによって、様々なプロセスを様々なツールによりデバッグできるようにすることができる。例えば、ユーザーは、ローカルブラウザを使用して、クラウドサーバ上で稼働するアプリケーションにアクセスすることができる。パイプラインインターフェイスへのリンクをＵＲＬにおいて発行し、これを（例えば、ブラウザのユーザーによる）ブラウザプラグインの制御によって手に入れることができれば、クラウドアプリケーションは、プロデューサとなることができる。この例において、パイプラインを使用すると、ブラウザプラグインに関連付けられたデバッグツールは、次に、クラウドアプリケーションで稼働するコンピュータコードのためのデバッグ情報についてクラウドアプリケーションに対してクエリを行うことができる。
【００２８】
図２は、様々なコンシューマーコンポーネント２２２が、様々なプロデューサコンポーネント２１２をユーザーがデバッグできるようにするためのデバッグパイプラインに関連付けられたデバッグインターフェイス２１０をどのように実施することができるかを示す図２００である。現在、それぞれ所有権のある実行プラットフォーム、およびさらにはそれぞれのコンピュータ言語について、それぞれのデバッグシナリオのためのデバッグプロトコルがある。しかし、デバッグインターフェイス２１０を有するデバッグパイクラインを使用すると、デバッグ体験のためのコンポーネントを結合することができる。
【００２９】
例えば、共通のプロデューサコンポーネント２１２は、実行時に、ユーザースクリプトコードをコンパイルし、実行するために、実行環境で実施することができるスクリプトインタープリター２０８を含むことができる。さらに、プロデューサ２１２は、そのコードが実行された後、ユーザーがデバッグのためにアクセスを使用することができるログファイルリーダ２０６を含む。さらに、プロデューサは、既存のデバッグプロトコル上にアダプター２０２を含むことができる。
【００３０】
コンシューマーコンポーネント２２２は、プロデューサ２１２のデバッグツールとして使用することができ、この場合、コンシューマーコンポーネント２２２は、発行されたデバッグパイプライン２１０を使用する場合、互換性のあるデバッグプロトコルを有していないことがある。一実施形態において、コンシューマーコンポーネント２２２のデバッグ機能をプロデューサ２１２に提供する方法（例えば、Ｃ＃では約３０の方法）を有するプロデューサによって、デバッグパイプラインを実施する（例えば発行する）ことができる。
【００３１】
例えば、リッチクライアントデバッグエンジン２１６（例えば、Ｖｉｓｕａｌ  Ｓｔｕｄｉｏ（登録商標）デバッガー）は、デバッグインターフェイスを使用して、デバッグパイプライン２１０にリンクすることができる。パイプライン２１０は、スクリプトインタープリター（例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）インタープリター）で稼働するコンピュータコードについての、リッチクライアントデバッグエンジン２１６のデバッグ体験を可能にする適切な数の方法を含む。さらに、別の例において、ブラウザベースのデバッグプラグイン２１８、またはコマンドラインシェル２２０は、プロデューサによって使用されるコンピュータコードのデバッグを提供するために、デバッグパイプライン２１０にリンクすることができる。
【００３２】
さらに、第１の状態から第２の状態にデバッグパイプラインを変換するために、フィルタコンポーネント２１４が適用される。例えば、フィルタ２１４は、２２６で、プロデューサ２１２によって発行されたデバッグパイプライン２１０を取得し、変換をそれに適用し（例えば、内容を追加または削除し）、新しいパイプラインの実施２２４を戻すことができる。コンシューマーコンポーネントから見れば、フィルタ２１４は単に別のプロデューサとすることができ、プロデューサ２１２からパイプラインを取得するのと、フィルタ２１４からパイプラインを取得するのとの間に差はない可能性がある。例えばプロキシサーバへのパイプラインをリモート処理する、セキュリティ「読み取り専用」フィルタを作成する、またはコンシューマーへのアクセス可能性からアプリケーションのいくつかの部分を削除するなど、フィルタを様々な目的に使用することができる。
【００３３】
一態様において、デバッグパイプラインインターフェイスによって、パイプラインの周りにフィルタを作成することができる。一実施形態において、デバッグオブジェクトは、その親へのバックポインタを必要としない場合がある。これによってフィルタは、例えば、パイプラインインターフェイス面全体を完全に包む必要なく、その元のパイプラインとデバッグオブジェクトを共有することができる。別の実施形態において、フィルタは、それぞれのデータの周りにプロキシを作成し、プロキシに対する要求を基礎を成す実際のオブジェクトに転送することができる。次いでプロキシは、例えば設定値など、ターゲットを変更することができるＡＰＩを不可にすることによって、所望の挙動をオーバーライドすることができる。
【００３４】
この態様において、一実施形態では、パイプラインは、フィルタを使用してリモート処理することができる。図３は、リモートのプロデューサとコンシューマーとをリンクするためにフィルタが使用される環境例３００の図である。この環境例において、リモート処理パイプライン３０２は、パイプライン境界３０８のプロデューサ側においてカスタマイズされたフィルタ３１０を稼働させることができる。フィルタ３１０は、パイプライン境界３０８のコンシューマー側においてデータをリモートプロキシ３１２に送信する前にパイプラインを事前にフィルタ処理することができる。例えば、フィルタ３１０を使用して、望まれていないデバッグイベントを排除し、または条件付きブレークポイントを処理すると共に、データをリモートプロキシ３１２にリモート処理することができる。
【００３５】
環境例３００において、リモートフィルタ３１０は、プロデューサ３０４からパイプラインインターフェイスを消費する。フィルタ３１０は、リモートプロキシ３１２と共にプライベートリモート処理プロトコルを使用して、リモート処理境界３０８を横切ることができる。一実施形態において、プライベートプロトコルは、「ネットワークのチャット」を低減し、リモートプロキシ３１２におけるキャッシュ状態と協調するように設計することができる。例えば、任意のｅａｇｅｒフェッチおよびキャッシュを可能にするプライベートプロトコルを共有する「発行」および「接続」の機能を、リモート処理フィルタにおいて実施することができる。次いでリモートプロキシ３１２は、パイプラインインターフェイスをコンシューマー３０６に公開することができ、これは、リモート処理パイプライン３０２内で動作するデバッグパイプライン内で機能するようにインターフェイスを実施することができる。
【００３６】
別の態様において、図１で上述したように、デバッグパイプラインインターフェイスオブジェクトは、１組のデバッグプロトコルを実施するように構成される。デバッグプロトコルは、実行環境外のコンシューマーコンポーネントによって実行環境においてコンピュータコードのデバッグ体験を定義するように構成される。デバッグプロトコルは、基礎を成すデバッグ対象操作を知ることなく、デバッグ中に参照されるコンピュータコードにおける位置を提供するように構成することができる位置プロトコルをさらに含んでいてもよい。例えば、パイプラインは、ソースファイル抽象レベルで動作し、明示的なシンボル概念を有することなく、ソースファイルコンテンツを提供することができる。
【００３７】
通常、コンパイラは、例えば、ソースファイルがどのようにコンパイルされ、大きいマッピングファイルが生成され、およびＣＰＵがどのようにソースレベル状態にマッピングされて戻ることができるかを知っている。この例において、元のソースファイルを見つけ、マッピングを行うのはデバッガーの責任である。一実施形態において、「ソーススパン」の概念は、アドレス参照に使用される。この実施形態において、「ドキュメント」を使用してソースユニットを参照することができ、「スパン」は、「ドキュメント」における特定の位置を参照する。
【００３８】
この実施形態において、「ドキュメント」は、それら自体のセマンティックフラグを有し、それ自体のコンテンツを提供し、ディスクまたはメモリ内テキストストリームにおける位置を参照することができる。さらに、「スパン」は、ユーザーコードの位置を参照するための、デバッグパイプラインインターフェイスオブジェクト（例えばパイプラインＡＰＩ）と共通の通貨とすることができる。スパンは、それが含まれるファイルへのバックポインタを有することができ、ファイルが与えられると、そのファイル内のスパンを探すことができる。この実施形態において、呼び出しスタックは、スパンを提供することができ、パイプラインは、有効なソースファイルの列挙を可能にすることができる。したがって、例えば、コンシューマーは、例えば中間言語コード、ネイティブコード、インタープリター状態など、基礎を成すデバッグ対象操作が何かを知る必要なく、ソースレベルでコンピュータコードをデバッグすることができる。
【００３９】
図４は、「スパン」４０６を実装することが可能な環境例４００を示す図である。ホストされた制御４０２は、ブレークポイントにいる間にブレークポイントにマッピングするソースラインを強調表示するためになど、ソースファイルを示すことができることを望む場合がある。デバッグパイプラインは、例えば、（例えば、デバッグイベントをもたらしたとき）ブレークポイントに到達したことがわかり、そのため、スレッドがわかり、フレーム４１０を列挙することができる。フレーム４１０から、フレーム４１０が対応するユーザーコードにおける現在の位置を伝えるスパン４０６を取り出す４５２ことができる。
【００４０】
環境例４００において、上述したように、スパン４６０は、それが配置されているドキュメント４０４へのバックポインタ４５６を有し、それを使用してドキュメントにおけるその位置のドキュメントコンテンツ４５４を取り出すことができる。例えば、スパン４０６についてドキュメントにおける現在のラインを強調表示するなど、スパン４０６のその位置におけるドキュメント４０４のコンテンツが制御４０２のために４５８で示される。
【００４１】
さらに、この環境例４００において、スクリプトエンジン４０８は、ユーザーコードにおけるそれぞれのドキュメント４０４へのアクセス４５０の機能を提供することができる。例えば、スパンは、ユーザーコードにおける位置を参照する「通貨」とすることができる。この実施形態において、スパンは、自己記述的とすることができ、この場合、ファイルのコンテンツに触れてソース情報を取り出す必要はない。一例において、この特徴は、コードが「その場で」作成され、そこから取り出すのに使用可能なファイルがない場合、有用である。
【００４２】
この態様において、デバッグプロトコルは、データレイアウトまたはデータ型を公開することなく、データ検査デバッグ要求が要求されたデータを戻すことができるように構成される型ユニバースに依存しないプロトコル（ｔｙｐｅ−ｕｎｉｖｅｒｓｅ  ａｇｎｏｓｔｉｃ  ｐｒｏｔｏｃｏｌ）をさらに含む。現在のデバッグＡＰＩは、データの基礎を成すレイアウト、およびデータを記述するタイプシステムを理解するためのデバッガーが必要である。例えば、通常のデバッガーは、１つのデータが（例えば、基本型または複合型に対して）配列型であることを知っている必要がある。さらに、この例において、デバッガーは、ユーザーコードにおけるデータの型ユニバースを介して具体的に復号するためのリッチＡＰＩを有する必要がある。
【００４３】
しかし、一実施形態において、型ユニバースに依存しないプロトコルを使用することによって、デバッグパイプラインインターフェイスオブジェクト（例えば、インターフェイスＡＰＩ）は、より抽象的となり、型ユニバースの必要なく、自己記述的な方法でデータを提示することができる。例えば、検査されているそれぞれの値は、文字列として提示され、その子の値を列挙することができる。したがって、この例において、データ型は必要ない。というのは、値は単に、データ型無しに検査のために要求される値を含む文字列であるからである。
【００４４】
別の態様において、一実施形態では、デバッグパイプラインインターフェイスオブジェクトは、実行環境でコンピュータコードをデバッグするためのデバッグツールから１つまたは複数のデバッグツール機能を実施するように構成することができるデバッグツール機能インプリメンタを含むことができる。例えば、コンシューマーコンポーネントは、デバッグツールとすることができ、デバッグパイプラインインターフェイスオブジェクトを使用して、コンピュータコードについてのデバッグツールのデバッグ機能を実施することができる。
【００４５】
一実施形態において、デバッグツール機能は、通常、デバッグ中にデバッグ対象を停止し、再開するため、デバッグ中にイベントを非同期停止するため、ステートマシンにおいてスレッドを列挙するため、値を検査する、実行制御操作、スレッドの呼び出しスタックを列挙する、それぞれのスタックフレームにおけるローカルを検査する、ソースファイルのフェッチ、および式評価など、デバッグイベントの同期ストリームを提供するように構成された機能など、デバッグツールのユーザーによって使用される機能を含む。
【００４６】
本明細書において説明した技術およびシステムは、上記に列挙したデバッグ機能に制限されないことを理解されたい。デバッグパイプラインインターフェイスオブジェクトにおける実施のための代替のデバッグ機能を、当業者であれば考案することができることを理解されたい。例えば、ほとんどのデバッグツールは、上記のものよりさらに多くのデバッグ機能を含む。
【００４７】
ユーザーが、実行環境外からデバッグツールを使用して、一実施形態において実行される、コンピュータコードをデバッグすることができる方法が考案される。図５は、実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコードのデバッグを容易にするための方法例５００を示すフロー図である。方法例５００は、５０２で開始し、５０４でユーザーがデバッグ可能であることを望むコンポーネントをデバッグツールとリンクするデバッグパイプラインを実施することを伴う。例えば、ユーザーは、スクリプトインタープリターでユーザーが開発したコードを実行している場合、インタープリターを使用する現在の実行環境で使用できないデバッグツールを使用してコードをデバッグすることを望む。この例において、所望のデバッグツールにインタープリターをリンクするように、デバッグパイプラインを実施することができる。
【００４８】
５０６で、デバッグパイプラインを実施することは、（例えばユーザーが開発したコードのための実行プラットフォームなど）デバッグすることが望まれる第１のコンポーネントからデバッグパイプラインインターフェイスオブジェクトのインスタンスを作成することを含む。例えば、第１のコンポーネントは、ユーザーがデバッグ可能であることを望み、デバッグパイプラインインターフェイスオブジェクトのインスタンスを使用可能にする（例えば、ウェブページ上のＵＲＬを介して使用可能にする）ことによってパイプラインを発行することができる。５０８で、デバッグパイプラインを実施することは、所望のデバッグツールを含む第２のコンポーネントが（例えばインターフェイスを手に入れるなど）デバッグパイプラインインターフェイスオブジェクトを消費することを含む。例えば、デバッグすることが望まれるコンポーネントとデバッグツールとの間のリンクを作成するために、デバッグツールは、デバッグすることが望まれるコンポーネントからデバッグパイプラインインターフェイスオブジェクトを手に入れることができる。
【００４９】
方法例５００において、５１０で、デバッグ体験のためのデバッグパイプラインプロトコルが実施される。例えば、デバッグパイプラインを使用してコンピュータコードのデバッグを提供するために、特定のパイプラインプロトコルが実施される。５１２で、言語に依存しないアーキテクチャが使用されて、少なくとも２つのコンピュータ言語のうちの少なくとも一方でコンピュータコードのデバッグ要求を処理することができる。例えば、このアーキテクチャを使用することによって、パイプラインでリンクされたデバッグツールに関わらず、様々なコンピュータ言語およびスクリプトコードのうちの任意のもので、コンピュータコードのデバッグが可能になる。
【００５０】
５１４で、オペレーティングシステムに依存しないアーキテクチャが使用されて、オペレーティングシステム固有の構成体を公開することなく、それぞれの署名でコンピュータコードの言語タイプを処理できるようにすることができる。例えば、このアーキテクチャを使用することによって、オペレーティングシステム（ＯＳ）固有の構成体のものを超える抽象レベルを作成し、それによって、特定のＯＳのために設計されたデバッグツールが異なるＯＳで実行されるコンピュータコードのデバッグを可能にすることができるＯＳに依存しない手法が可能になる。
【００５１】
５１６で、分離プロトコルを使用して、１つまたは複数の第２のデバッグパイプラインから分離される第１のデバッグパイプラインが提供される。例えば、あるパイプラインを別のパイプラインから分離することは、単一のパイプラインが単一のステートマシンを表すことを含み、個別のパイプラインが分離されたままであることを提供する。このように、この例において、パイプラインは、デバッグ体験外のコードに干渉しない場合がある。
【００５２】
方法例５００において、５１８で、デバッグパイプラインによってリンクされたデバッグツールを使用して実行環境でホストされるコンピュータコードで、デバッグ関数が実行される。例えば、コンピュータコードを実行しているコンポーネントと、実行環境外のデバッグツールとの間にパイプラインがいったんリンクされると、ユーザーは、デバッグツールを使用して、そのコードにおいてデバッグ要求を実行することができ、デバッグパイプラインにおけるデバッグプロトコルを実施する。
【００５３】
一実施形態において、デバッグパイプラインにフィルタ処理が適用される。この実施形態において、フィルタ処理は、フィルタ処理コンポーネントに（例えば、この時点でデバッグツールの代わりに）デバッグパイプラインインターフェイスオブジェクトを消費させることを含む。フィルタは、デバッグパイプラインインターフェイスオブジェクトをいったん消費すると、パイプラインを第１の状態から第２の状態に変更することによって、パイプラインに変換を適用することができる。例えば、あるユーザーは、ユーザーが開発した何らかのコードにおいて第２の人がデバッグを実行できるようにすることを望む。この例において、ユーザーは、第２の人がアプリケーションの特定の要素を表示することを望まない、またはコードに任意の変更を行うことを望まない場合がある。ユーザーは、パイプラインを変換して、システムの単に特定の部分のみへのアクセスを可能にすることができる、または単に「読み取り専用」機能を可能にするフィルタを適用することができる。
【００５４】
この実施形態において、変換を適用した後、フィルタは、変換されたデバッグパイプラインインターフェイスオブジェクトを、デバッグツールなど、コンシューマーコンポーネントに公開することができる。このように、フィルタコンポーネントは、単にパイプラインのコンシューマーに対するデバッグパイプライン生成コンポーネントであるように見える場合がある。一例において、フィルタは、リモート処理プロトコルを適用して、パイプラインインターフェイスオブジェクトをリモートプロキシに公開することができるリモートプロキシとすることができる。このように、この例において、リモートプロキシは、次いでパイプラインインターフェイスオブジェクトを、リモート処理プロキシの反対側において、例えばデバッグツールなどのコンシューマーコンポーネントに公開することができる。
【００５５】
別の態様において、デバッグパイプラインは、デバッグツールのデバッグ機能を実施することができる一連の方法を含む。例えば、デバッグに共通の、デバッグパイプラインによって実施することができるいくつかのデバッグ機能は、デバッグイベントの同期ストリーム、デバッグ中のデバッグ対象の停止および再開、デバッグ中のイベントの非同期停止、値の検査、および制御操作の実行を提供することを含む。多くの代替のデバッグ機能は、例えば、コンピュータコードの所望のデバッグ体験を提供するためのデバッグパイプラインによって実施することができることを理解されたい。
【００５６】
別の態様において、一実施形態では、デバッグパイプラインプロトコルを実施することは、ソース位置に依存しないアーキテクチャを使用して、基礎を成すデバッグ対象操作を知ることなく、デバッグ中に参照されるコンピュータコードにおける位置を提供することをさらに含む。例えば、大きいマッピングファイルおよび基礎を成すソースレベル状態に依存する代わりに、デバッガーは、スパンを使用して、ドキュメントにおけるコードを識別することができる。この例では、より高いレベルの抽象によって、スパンを自己記述的にすることができ、ソースファイルのコンテンツに触れる必要なく、単にフレームからデータを取り出すことができる。
【００５７】
さらに、別の実施形態において、デバッグパイプラインプロトコルを実施することは、型ユニバースに依存しないアーキテクチャを使用して、データレイアウトまたはデータ型を公開することなく、データ検査デバッグ要求が要求されたデータを戻すことができるようにすることをさらに含む。この実施形態において、例えば、デバッグプロトコルによって、データ型を知る必要なく、自己記述的な方法でデータを提示することができる。この例において、ある位置におけるデータの要求は、それが何の型のものであるかを知ることなく、そのデータを文字列として戻すことができる。
【００５８】
別の態様において、２つ以上のデバッグパイプラインを単一のデバッグパイプラインに構成して、それぞれのパイプラインについての統一されたデバッグ体験を提示することができる。２つ以上のパイプラインを構成することは、それぞれの子デバッグパイプラインのそれぞれの特徴を構成する親パイプラインを作成することを含む。例えば、「Ｃｏｍｐｏｓｅ（）」関数は、新しいパイプラインの実装（親）を作成することができ、そのデバッグパイプラインインターフェイスオブジェクトの実装は、インターフェイスによって公開されるそれぞれのデバッグ機能についてそれぞれの「子パイプライン」を構成する。
【００５９】
一実施形態において、親は、デバッグイベントストリームを戻すことができ、この場合、親は、それぞれの子のスレッドをスピンアップすることができ、子にデバッグイベントを待たせ、子がデバッグイベントを取得した場合、親は、非同期中断要求を他方の子に対して実行し、次いでそれぞれの子から集められたデバッグイベントを要求の呼び出し元に戻すことができる。他の実施形態は、ソースファイルまたはスレッドの列挙、スレッドおよび呼び出しスタックの統一などを含むことができる。
【００６０】
別の態様において、デバッグアダプターは、ライトウェイトアプリケーションプログラミングインターフェイス（ＡＰＩ）により既存のインタープリターをインストルメント化することによって作成することができる。一実施形態において、全デバッグパイプラインを生成することができるアダプターを作成するために、２、３のデバッグ関数を含むＡＰＩを既存のインタープリターにインストルメント化することができる。関数は、ステートメント間のステッピング、トレースバック用のコールバックの挿入など、基本的なデバッグ機能を含んでいてもよく、インタープリターを容易にインストルメント化することができ、ＡＰＩを実施するパイプラインコンシューマーを介して全デバッグサポートを得ることができる。
【００６１】
図６は、実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコードのデバッグを容易にするための方法を実施することができる環境例６００の図である。ユーザー６１０は、インターネット６０６を介して、そのローカルマシン６０８を使用して、リモートアプリケーションサーバ６０２上にホストされるアプリケーションにアクセスすることができる。例えば、ユーザー６１０は、リモートサーバ６０２上のホストアプリケーションで稼働するようにマクロを開発することができ、そのローカルマシン６０８に配置されたデバッグツールを使用して、マクロをデバッグすることを望む。
【００６２】
この環境例において、リモートアプリケーションサーバ（例えば、プロデューサ）は、ウェブサイト６０４上のデバッグパイプラインインターフェイスオブジェクトへのリンクを張ることによって、デバッグパイプラインを発行することができる。次いでユーザー６１０は、ウェブサイト６０４にあるインターフェイスオブジェクトに、ローカルマシン６０８上のデバッグツールからの制御を「配線でつなぐ」ことによって、インターネット６０６を介してパイプラインインターフェイスオブジェクトを実施することができる。このように、ローカルマシン６０８上にあるデバッグツールを使用して、リモートサーバ６０２上で稼働するマクロのためのデバッグツールがユーザー６０１に提供される。
【００６３】
さらに別の実施形態は、本明細書に提示した技術のうちの１つまたは複数を実施するように構成されたプロセッサ実行可能命令を含むコンピュータ可読媒体を伴う。図７にこうした方法で考案されるコンピュータ可読媒体例が示されており、実装７００は、コンピュータ可読媒体７０８（例えば、ＣＤ−Ｒ、ＤＶＤ−Ｒ、またはハードディスクドライブのプラッタなど）を含み、そこにおいてコンピュータ可読データ７０６が符号化される。このコンピュータ可読データ７０６は次いで、本明細書に述べた原理のうちの１つまたは複数に従って動作するように構成された１組のコンピュータ命令７０４を含む。こうした一実施形態７０２において、プロセッサ実行可能命令７０４は、例えば図５の方法例５００など、方法を実行するように構成される。こうした別の実施形態において、プロセッサ実行可能命令７０４は、例えば図１のシステム例１００など、システムを実施するように構成される。多くのこうしたコンピュータ可読媒体は、本明細書に提示した技術に従って動作するように構成され、当業者によって考案される。
【００６４】
本主題は、構造的な特徴および／または方法動作に固有の言葉で説明されているが、添付の特許請求の範囲に定義された主題は、上述の固有の特徴または動作に必ずしも限定されるわけではないことを理解されたい。むしろ、上述の固有の特徴および動作は、特許請求の範囲を実施する形の例として開示される。
【００６５】
本出願で使用する場合、「コンポーネント」、「モジュール」、「システム」、「インターフェイス」などの用語は、一般に、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、または実行中のソフトウェアのいずれかのコンピュータ関連のエンティティを指すものとする。例えば、コンポーネントは、それだけには制限されないが、プロセッサ上で動作するプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、プログラム、および／またはコンピュータとすることができる。例として、コントローラ上で稼働するアプリケーションおよびコントローラはいずれもコンポーネントとすることができる。１つまたは複数のコンポーネントがプロセスおよび／または実行スレッド内に存在していてもよく、また１つのコンポーネントを１つのコンピュータ上に配置する、および／または２つ以上のコンピュータの間に分散することができる。
【００６６】
さらに、特許請求された主題を、標準のプログラミングおよび／またはエンジニアリング技術を使用して、ソフトウェア、ファームウェア、ハードウェア、またはその任意の組み合わせを生成して、開示された主題を実施するようコンピュータを制御するための方法、装置、または製品として実装することができる。「製品」という用語は、本明細書で使用される場合、任意のコンピュータ可読装置、キャリア、または媒体からアクセス可能なコンピュータプログラムを含むものとする。特許請求された主題の範囲または意図から逸脱することなく、この構成に多くの変更を加えることができることを当業者であれば当然理解されよう。
【００６７】
図８および以下の説明は、本明細書に述べた提供のうちの１つまたは複数の実施形態を実施するのに適したコンピューティング環境の簡単な概要を提供する。図８の動作環境は、適した動作環境の一例にすぎず、動作環境の使用または機能の範囲に関する任意の制限を示唆するものではない。コンピューティング装置の例には、それだけには制限されないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、モバイル装置（例えば携帯電話、ＰＤＡ（個人用デジタル補助装置）、メディアプレーヤなど）、マルチプロセッサシステム、消費者向け電気機器、ミニコンピュータ、メインフレームコンピュータ、上記の任意のシステムまたは装置を含む分散コンピューティング環境などがある。
【００６８】
必須ではないが、実施形態は、１つまたは複数のコンピューティング装置によって実行される「コンピュータ可読命令」の一般的な文脈で説明される。コンピュータ可読命令は、コンピュータ可読媒体（後述）を介して分散される。コンピュータ可読命令は、特定のタスクを実行し、または特定の抽象データ型を実施する関数、オブジェクト、アプリケーションプログラミングインターフェイス（ＡＰＩ）データ構造など、プログラムモジュールとして実装することができる。通常、コンピュータ可読命令の機能は、必要に応じて様々な環境で結合され、または分散させることができる。
【００６９】
図８は、本明細書に提供した１つまたは複数の実施形態を実施するように構成されたコンピューティング装置８１２を含むシステム８１０の一例を示す。一構成において、コンピューティング装置８１２は、少なくとも１つの処理ユニット８１６およびメモリ８１８を含む。コンピューティング装置の正確な構成およびタイプに応じて、メモリ８１８は、揮発性（例えばＲＡＭなど）、不揮発性（例えばＲＯＭ、フラッシュメモリなど）、またはこれら２つの何らかの組み合わせとすることができる。この構成は、図８に点線８１４で示されている。
【００７０】
他の実施形態において、装置８１２は、追加の特徴および／または機能を含む。例えば、装置８１２は、それだけには制限されないが、磁気ストレージ、光ストレージなどを含む追加のストレージ（例えば、取外し式および／または固定式）も含む。こうした追加のストレージは、図８にストレージ８２０によって示されている。一実施形態において、本明細書に提供した１つまたは複数の実施形態を実施するためのコンピュータ可読命令がストレージ８２０に存在する。ストレージ８２０は、オペレーティングシステム、アプリケーションプログラムなどを実施するための他のコンピュータ可読命令を格納することもできる。コンピュータ可読命令は、例えば、処理ユニット８１６によって実行するように、メモリ８１８にロードされる。
【００７１】
「コンピュータ可読媒体」という用語は、本明細書で使用される場合、コンピュータ記憶媒体を含む。コンピュータ記憶媒体には、コンピュータ可読命令、または他のデータなど、情報を記憶するための任意の方法または技術で実施される揮発性および不揮発性の取外し式および固定式の媒体がある。メモリ８１８およびストレージ８２０は、コンピュータ記憶媒体の例である。コンピュータ可読媒体には、それだけには制限されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（デジタル多用途ディスク）または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、または所望の情報の格納に使用でき、装置８１２からアクセスできる他の任意の媒体などがある。こうした任意のコンピュータ記憶媒体は、装置８１２の一部とすることができる。
【００７２】
装置８１２は、装置８１２が他の装置と通信できるようにする通信接続８２６も含む。通信接続８２６は、それだけには制限されないが、モデム、ＮＩＣ（ネットワークインターフェイスカード）、統合ネットワークインターフェイス、無線周波数送受信機、赤外線ポート、ＵＳＢ接続、またはコンピューティング装置８１２を他のコンピューティング装置に接続するための他のインターフェイスを含む。通信接続８２６は、有線接続または無線接続を含む。通信接続８２６は、通信媒体を送信および／または受信することができる。
【００７３】
「コンピュータ可読媒体」という用語は、通信媒体を含みむ。通信媒体は通常、コンピュータ可読命令、または他のデータを搬送波または他の移送機構などの「変調されたデータ信号」に組み込む。これには任意の情報配送媒体がある。「変調されたデータ信号」という用語は、信号に情報を符号化するように１つまたは複数のその特性が設定または変更された信号を含む。
【００７４】
装置８１２は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、赤外線カメラ、映像入力装置、および／または任意の他の入力装置などの入力装置８２４を含む。１つまたは複数のディスプレイ、スピーカ、プリンタ、および／または任意の他の出力装置などの出力装置８２２は、装置８１２に含まれる。入力装置８２４および出力装置８２２は、有線接続、無線接続、またはその任意の組み合わせを介して装置８１２に接続される。一実施形態において、別のコンピューティング装置からの入力装置または出力装置は、コンピューティング装置８１２の入力装置８２４または出力装置８２２として使用することができる。
【００７５】
コンピューティング装置８１２のコンポーネントは、バスなどの様々な相互接続によって接続される。こうした相互接続は、ＰＣＩ  ＥｘｐｒｅｓｓなどのＰＣＩ（周辺部品相互接続）、ＵＳＢ（ユニバーサルシリアルバス）、ｆｉｒｅｗｉｒｅ（ＩＥＥＥ１３９４）、光バス構造などがある。別の実施形態において、コンピューティング装置８１２のコンポーネントは、ネットワークによって相互接続される。例えば、メモリ８１８は、ネットワークによって相互接続される異なる物理位置に配置される複数の物理メモリユニットから成る。
【００７６】
コンピュータ可読命令を格納するために使用される記憶装置は、ネットワークを介して分散されてもよいことを当業者であれば理解されたい。例えば、ネットワーク８２８を介してアクセス可能なコンピューティング装置８３０は、本明細書に提供した１つまたは複数の実施形態を実施するためのコンピュータ可読命令を格納する。コンピューティング装置８１２は、コンピューティング装置８３０にアクセスし、実行のためのコンピュータ可読命令の一部分またはすべてをダウンロードすることができる。あるいは、コンピューティング装置８１２は、必要に応じて、コンピュータ可読命令のいくつかをダウンロードすることができ、または命令の一部は、コンピューティング装置８１２で実行され、別の一部はコンピューティング装置８３０で実行されるようにしてもよい。
【００７７】
実施形態の様々な操作が本明細書に提供される。一実施形態において、説明した操作のうちの１つまたは複数は、１つまたは複数のコンピュータ可読媒体に格納されるコンピュータ可読命令を構成することができ、これは、コンピューティング装置によって実行される場合、コンピューティング装置に、説明した操作を実行させる。操作の一部またはすべてを説明した順序は、これらの操作が必ずしも順序に依存することを含意するものと解釈されないものとする。代替の順序は、この説明の恩恵を受ける当業者によって理解されよう。さらに、本明細書に提供された各実施形態に必ずしもすべての操作が存在するわけではないことを理解されたい。
【００７８】
さらに、「例」という単語は、本明細書では、例、例示、例証として働くことを意味するために使用される。「例」として本明細書において説明した任意の態様または設計は、必ずしも他の態様または設計より有利と解釈されない。むしろ、例という単語の使用は、具体的なやり方で概念を提示するものとする。本出願で使用される場合、「または」という用語は、排他的な「または」ではなく包括的な「または」を意味するものとする。すなわち、特に明記しない限り、または文脈から明らかである場合を除いて、「ＸはＡまたはＢを使用する」は、自然な包括的置き換えのうちの任意のものを意味するものとする。すなわち、ＸがＡを使用する、ＸがＢを使用する、またはＸがＡおよびＢを使用する場合、「ＸはＡまたはＢを使用する」は、上記の例のうちのいずれかで満たされる。さらに、本出願および添付の特許請求の範囲で使用する場合、冠詞「ａ」および「ａｎ」は、特に明記しない限り、または文脈から明らかである場合を除いて、通常、「１つまたは複数」は単一の形を対象とすることを意味するものと解釈することができる。
【００７９】
また、本開示は、１つまたは複数の実装形態に関して示され、説明されているが、当業者であれば、本明細書および添付の図面を読み、理解することに基づいて、同等の変形および修正を思いつく。本開示は、こうしたすべての変更および変形を含み、以下の特許請求の範囲によってのみ限定される。特に、上述のコンポーネント（例えば要素、リソースなど）によって実行される様々な機能に関して、こうしたコンポーネントを説明するために使用される用語は、特に明記しない限り、たとえ本開示の本明細書に示した実装形態例における機能を実行する開示された構造に構造的に同等ではない場合でも、（例えば、機能的に同等な）説明したコンポーネントの指定された機能を実行する任意のコンポーネントに対応するものとする。さらに、本開示の特定の特徴は、いくつかの実装形態のうちの１つのみに関して開示されているが、こうした特徴は、任意の所与のまたは特定のアプリケーションに望ましいまたは有利であるかにより、他の実装形態の１つまたは複数の他の特徴に結合することができる。さらに、用語「含む（ｉｎｃｌｕｄｅｓ）」、「有する（ｈａｖｉｎｇ）」、「有する（ｈａｓ）」、「備える（ｗｉｔｈ）」またはその変形が詳細な説明または特許請求の範囲で使用されている限り、こうした用語は、「含む（ｃｏｍｐｒｉｓｉｎｇ）」と同じような方法で包含されるものとする。
【図１】
0005679989.tif 000002
【図２】
0005679989.tif 000003
【図３】
0005679989.tif 000004
【図４】
0005679989.tif 000005
【図５】
0005679989.tif 000006
【図６】
0005679989.tif 000007
【図７】
0005679989.tif 000008
【図８】
0005679989.tif 000009