(58)【調査した分野】(Int.Cl.,DB名)
コンピュータ実行可能命令を備えたコンピュータ可読メモリであって、前記コンピュータ実行可能命令は、コンピュータ上の処理ユニットによって少なくとも部分的に実行された時に、
コンピュータコードのオブジェクトのインスタンスをURLによって使用可能にすることによってデバッグパイプラインを発行するステップと、
デバッグツールを備えるコンポーネントの少なくとも一部分が前記オブジェクトの前記インスタンスを選択することに応じて、前記デバッグパイプラインを介して前記コンピュータコードの前記オブジェクトを前記デバッグツールにリンクさせるステップと、
前記デバッグパイプラインを第1の状態から第2の状態へ変換するように前記デバッグパイプラインをフィルタ処理するステップであって、前記第1の状態は前記コンピュータコードの一部分に対する読み取り/書き込みアクセスを可能にする状態であり、前記第2の状態は前記コンピュータコードの一部分に対する読み取り専用アクセスを可能にする状態である、ステップと、
前記コンピュータコードの少なくともいくつかをデバッグするのを容易化するように前記フィルタ処理されたデバッグパイプラインにおいて1又は複数のプロトコルを実施するステップと、
を含む動作を実施する、コンピュータ可読メモリ。
【発明を実施するための形態】
【0012】
次に、特許請求された主題を、図面を参照して説明する。図中、図面を通じて、同様の参照番号を使用して同様の要素を指す。以下の説明では、説明上、特許請求された主題を完全に理解できるようにするために様々な特定の詳細を述べる。しかし、こうした特定の詳細なしに特許請求された主題を実施できることは明らかである。他の例では、特許請求された主題を説明しやすくするために、構造および装置をブロック図の形で示している。
【0013】
図1は、実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコード(例えば、ユーザーが開発したスクリプトコード)のデバッグを容易にするためのシステム例100を含むコンポーネント図である。例えば、ユーザーは、ブラウザ(例えば、インターネットエクスプローラ)において稼働しているスクリプトエンジン(例えば、実行時にスクリプトコードをコンパイルし、実行することができるスクリプトインタープリターなど)によって実行されるようにスクリプトコードを書くことができる。この実施形態において、システム例100を使用して、(例えば、アプリケーション開発プラットフォームのデバッガーなど、リッチクライアントデバッガーエンジン(rich client debugger engine)など)デバッグツールがスクリプトエンジンによって実行されるユーザースクリプトコードのデバッグを容易に提供できるようにすることができる。
【0014】
実行環境でホストされるコンピュータコードはユーザーが開発したコードに制限されないことを理解されたい。例えば、一実施形態において、コンピュータコードは、スクリプト書き込みエンジンによって開発することができ、ユーザーまたは別のマシンは、エンジンによって書かれるコードをデバッグすることを望む。別の実施形態において、第1のユーザーは、実行環境で実行されるコードを開発し、第2のユーザーは、ユーザーが開発したコードをデバッグすることを望む。本明細書において説明したシステムを使用する代替の実施形態を当業者であれば考案することができることを理解されたい。システムおよび技術は、上述の実施形態に制限されない。
【0015】
一実施形態において、コンピュータコードは、デバッグツールと同じプロセスで動作している実行環境にホストされる。例えば、ユーザーは、マクロがホストアプリケーションによって実行されるスクリプトコードを書くことができ、システム例100は、同じマシン上で稼働している個別の開発プラットフォームから、ユーザースクリプトコードをデバッグするために、デバッガーエンジンの使用を容易にすることができる。別の実施形態において、コンピュータコードをホストしている実行環境は、第1のリモートサーバ上で動作することができ、デバッグツールは、第2のリモートサーバまたはユーザーのマシン上に配置される。この実施形態において、例えば、システム例100は、デバッグツールを使用してコンピュータコードのリモートのデバッグを容易にすることができる。
【0016】
図1において、システム例は、実行環境102に配置されるプロデューサコンポーネント104を含む。プロデューサコンポーネント104は、デバッグプロセスの段階をリンクするように構成することができるデバッグパイプライン106を発行するように構成することができる。例えば、デバッグパイプライン106は、ユーザーが開発したコード152のデバッグを容易にするために、プロデューサコンポーネント104(例えば、スクリプトコードインタープリター)をコンシューマーコンポーネント112(例えば、デバッグツール)とリンク154するソフトウェアインフラストラクチャとすることができる。
【0017】
本明細書において説明した技術およびシステムは、上述の実施形態に制限されないことを理解されたい。ユーザーが開発されたコードをコンパイルし、実行できるようにするコンピュータアプリケーションまたはソフトウェアフレームワークとして機能することができる代替のプロデューサコンポーネントを当業者であれば考案することができること、および本明細書において説明した技術およびシステムがこれらの代替のプロデューサコンポーネントを含むことを理解されたい。例えば、アダプター、スクリプトコードデバッガー、アプリケーションダンプファイルリーダ、および他のコンポーネントは、システム例100によってプロデューサコンポーネントとして使用することができる。
【0018】
デバッグパイプライン106は、実行環境102外のコンシューマーコンポーネント112にデバッグパイプライン106を公開するように構成することができるデバッグパイプラインインターフェイスオブジェクト110を含む。一実施形態において、プロデューサコンポーネント104は、パイプラインインターフェイスオブジェクト110をコンシューマーが使用できるようにすることによって、デバッグパイプライン106を実施することができ、コンシューマーコンポーネント112は、デバッグパイプラインインターフェイスオブジェクト110を使用して、パイプラインおよびパイクライン内の機能にリンク154することによって、デバッグパイプライン106を連結することができる。
【0019】
例えば、この実施形態において、プロデューサコンポーネント104は、システムにおいてデバッグパイプラインを発行して、例えば、リッチクライアント開発プラットフォーム(例えばVisual Studio(登録商標))など、そのシステムにおけるコンシューマーコンポーネント112がインターフェイスオブジェクト110を使用できるようにすることができる。この例において、リッチクライアント開発プラットフォームのユーザーは、(例えば、システムにおけるリストを調べることによって)どのプロデューサコンポーネント104がパイプラインを発行したかを識別することができ、パイプラインインターフェイスオブジェクト110を使用することによって、デバッグパイプラインをリッチクライアント開発プラットフォームに連結することができる。このように、この例では、プロデューサを、デバッグパイプライン106によってデバッガーにリンク154することができ、リッチクライアントデバッガーは、ユーザーが開発したコード152のデバッグを提供できるようにパイプラインにおいて機能することができる。
【0020】
さらに、デバッグパイプラインインターフェイスオブジェクト110を、1組のデバッグプロトコル108を実施するように構成することができる。デバッグプロトコル108は、実行環境外のコンシューマーコンポーネント112によって、実行環境102においてコンピュータコード152のデバッグ体験を定義するように構成される。例えば、デバッグプロトコル108は、デバッグパイプライン106を定義する構成ファイルとすることができ、パイプラインでリンクされたコンポーネントをユーザーコード152の特定の要件で動作するように構成することができる。
【0021】
1組のデバッグプロトコル108は、少なくとも2つのコンピュータスクリプト言語のうちの少なくとも一方でコンピュータコードのデバッグ要求を処理できるように構成される言語に依存しないプロトコル114を含む。一実施形態において、(例えば、特定のコンピュータ言語に依存しない)言語に依存しないプロトコル114を実装することによって、コンシューマーコンポーネントが言語セマンティックレベルで動作できるようにすることができる。この実施形態において、デバッグパイプラインインターフェイスオブジェクト110は、コンピュータ言語より高い抽象レベルで動作するアプリケーションプログラミングインターフェイス(API)を含む。例えば、特定の言語が、特定のコードを使用して、デバッグ中にスタックフレームを要求することができる場合、この実施形態において、APIは、デバッグ要求をそのセマンティック部分(意味)に要約して「スタックを取得」し、その要求について「スタックはここにある」を戻すことができる。
【0022】
1組のデバッグプロトコル108は、オペレーティングシステム固有の構成体を公開することなく、それぞれの署名でコンピュータコードの言語タイプを処理できるようにするように構成されたオペレーティングシステムに依存しないプロトコル116(例えば、特定のオペレーティングシステムに依存しない)をさらに含む。一実施形態において、オペレーティングシステムに依存しないプロトコル116を実装することによって、デバッグパイプライン106を、プロセスおよびスレッドなど、オペレーティングシステムの概念と切り離すことができる。この実施形態において、デバッグパイプライン106は、プロセス識別子、オペレーティングシステムハンドルなど、オペレーティングシステム構成体を公開しない。例えば、デバッグパイプラインの第1の実施は、プロセス全体のデバッグを提供することができ、デバッグパイプラインの第2の実施は、単一のスレッド、スレッドのサブセット、または分散型システムなど、複数のプロセスを生成するステートマシンのデバッグを提供することができる。
【0023】
1組のデバッグプロトコル108は、1つまたは複数の第2のデバッグパイプラインから分離される第1のデバッグパイプラインを提供するように構成された分離プロトコル118をさらに含む。一実施形態において、単一のデバッグパイプラインは、単一のステートマシンを表すことができ、コンピュータコードの意図されたデバッグの外にあるコードに影響を与えない。このように、例えば、ホストアプリケーションで稼働しているユーザーが開発したコードをデバッグするために使用されているデバッグパイプラインは、ユーザーコードをホストするマシン上で稼働する他のアプリケーションに影響を与えず、ホストプロセスに影響を与えない。
【0024】
図1において、システム例100は、プロデューサコンポーネント104の実行環境102の外にあり、実行環境102においてコンピュータコード152のデバッグ154を提供するように構成することができるコンシューマーコンポーネント112をさらに含む。例えば、コンシューマーコンポーネント112は、コンピュータコードに何らかの形のデバッグ体験を提供する一種のツールとすることができる。この例において、デバッグツールは、プロデューサコンポーネント104によって実施されるデバッグパイプライン106にリンクするために、パイプラインインターフェイス110を使用し(例えば、URLからインターフェイスを手に入れ、それをデバッグツールで制御に配線する)、それによってデバッグプロトコル108を使用してコンピュータコード152のデバッグ154を提供することができる。
【0025】
一実施形態において、コンシューマーコンポーネント112は、リッチクライアントアプリケーション開発プラットフォームの一部であるデバッグツールとすることができる。一例として、開発プラットフォームのユーザーは、リッチクライアントアプリケーション開発プラットフォームのデバッグツールをパイプラインインターフェイスに「配線」し、それによってプロデューサ104にデバッグツールを接続することができる。別の実施形態において、コンシューマーコンポーネント112は、デバッグツールを含むブラウザとすることができる。一例として、ユーザーは、ブラウザからデバッグツールをプロデューサとリンクして、そのツールを使用してデバッグを提供するために、ブラウザを使用して、パイプラインインターフェイスにリンクすることができる。
【0026】
本明細書において説明した技術およびシステムは、上述の実施形態に制限されないことを理解されたい。デバッグパイプラインのデバッグツールとして機能することができる代替のコンシューマーコンポーネントを当業者であれば考案することができること、および本明細書において説明した技術およびシステムはこれらの代替のコンシューマーコンポーネントを含むことを理解されたい。例えば、コマンドラインシェル、自動化ツール、処理中制御、および他のコンポーネントを、システム例100によってコンシューマーコンポーネントとして使用することができる。
【0027】
一態様において、デバッグパイプラインを使用して、コンピュータコードを実行することができるコンポーネントからデバッグツールにリンクすることによって、様々なプロセスを様々なツールによりデバッグできるようにすることができる。例えば、ユーザーは、ローカルブラウザを使用して、クラウドサーバ上で稼働するアプリケーションにアクセスすることができる。パイプラインインターフェイスへのリンクをURLにおいて発行し、これを(例えば、ブラウザのユーザーによる)ブラウザプラグインの制御によって手に入れることができれば、クラウドアプリケーションは、プロデューサとなることができる。この例において、パイプラインを使用すると、ブラウザプラグインに関連付けられたデバッグツールは、次に、クラウドアプリケーションで稼働するコンピュータコードのためのデバッグ情報についてクラウドアプリケーションに対してクエリを行うことができる。
【0028】
図2は、様々なコンシューマーコンポーネント222が、様々なプロデューサコンポーネント212をユーザーがデバッグできるようにするためのデバッグパイプラインに関連付けられたデバッグインターフェイス210をどのように実施することができるかを示す
図200である。現在、それぞれ所有権のある実行プラットフォーム、およびさらにはそれぞれのコンピュータ言語について、それぞれのデバッグシナリオのためのデバッグプロトコルがある。しかし、デバッグインターフェイス210を有するデバッグパイクラインを使用すると、デバッグ体験のためのコンポーネントを結合することができる。
【0029】
例えば、共通のプロデューサコンポーネント212は、実行時に、ユーザースクリプトコードをコンパイルし、実行するために、実行環境で実施することができるスクリプトインタープリター208を含むことができる。さらに、プロデューサ212は、そのコードが実行された後、ユーザーがデバッグのためにアクセスを使用することができるログファイルリーダ206を含む。さらに、プロデューサは、既存のデバッグプロトコル上にアダプター202を含むことができる。
【0030】
コンシューマーコンポーネント222は、プロデューサ212のデバッグツールとして使用することができ、この場合、コンシューマーコンポーネント222は、発行されたデバッグパイプライン210を使用する場合、互換性のあるデバッグプロトコルを有していないことがある。一実施形態において、コンシューマーコンポーネント222のデバッグ機能をプロデューサ212に提供する方法(例えば、C#では約30の方法)を有するプロデューサによって、デバッグパイプラインを実施する(例えば発行する)ことができる。
【0031】
例えば、リッチクライアントデバッグエンジン216(例えば、Visual Studio(登録商標)デバッガー)は、デバッグインターフェイスを使用して、デバッグパイプライン210にリンクすることができる。パイプライン210は、スクリプトインタープリター(例えば、JavaScript(登録商標)インタープリター)で稼働するコンピュータコードについての、リッチクライアントデバッグエンジン216のデバッグ体験を可能にする適切な数の方法を含む。さらに、別の例において、ブラウザベースのデバッグプラグイン218、またはコマンドラインシェル220は、プロデューサによって使用されるコンピュータコードのデバッグを提供するために、デバッグパイプライン210にリンクすることができる。
【0032】
さらに、第1の状態から第2の状態にデバッグパイプラインを変換するために、フィルタコンポーネント214が適用される。例えば、フィルタ214は、226で、プロデューサ212によって発行されたデバッグパイプライン210を取得し、変換をそれに適用し(例えば、内容を追加または削除し)、新しいパイプラインの実施224を戻すことができる。コンシューマーコンポーネントから見れば、フィルタ214は単に別のプロデューサとすることができ、プロデューサ212からパイプラインを取得するのと、フィルタ214からパイプラインを取得するのとの間に差はない可能性がある。例えばプロキシサーバへのパイプラインをリモート処理する、セキュリティ「読み取り専用」フィルタを作成する、またはコンシューマーへのアクセス可能性からアプリケーションのいくつかの部分を削除するなど、フィルタを様々な目的に使用することができる。
【0033】
一態様において、デバッグパイプラインインターフェイスによって、パイプラインの周りにフィルタを作成することができる。一実施形態において、デバッグオブジェクトは、その親へのバックポインタを必要としない場合がある。これによってフィルタは、例えば、パイプラインインターフェイス面全体を完全に包む必要なく、その元のパイプラインとデバッグオブジェクトを共有することができる。別の実施形態において、フィルタは、それぞれのデータの周りにプロキシを作成し、プロキシに対する要求を基礎を成す実際のオブジェクトに転送することができる。次いでプロキシは、例えば設定値など、ターゲットを変更することができるAPIを不可にすることによって、所望の挙動をオーバーライドすることができる。
【0034】
この態様において、一実施形態では、パイプラインは、フィルタを使用してリモート処理することができる。
図3は、リモートのプロデューサとコンシューマーとをリンクするためにフィルタが使用される環境例300の図である。この環境例において、リモート処理パイプライン302は、パイプライン境界308のプロデューサ側においてカスタマイズされたフィルタ310を稼働させることができる。フィルタ310は、パイプライン境界308のコンシューマー側においてデータをリモートプロキシ312に送信する前にパイプラインを事前にフィルタ処理することができる。例えば、フィルタ310を使用して、望まれていないデバッグイベントを排除し、または条件付きブレークポイントを処理すると共に、データをリモートプロキシ312にリモート処理することができる。
【0035】
環境例300において、リモートフィルタ310は、プロデューサ304からパイプラインインターフェイスを消費する。フィルタ310は、リモートプロキシ312と共にプライベートリモート処理プロトコルを使用して、リモート処理境界308を横切ることができる。一実施形態において、プライベートプロトコルは、「ネットワークのチャット」を低減し、リモートプロキシ312におけるキャッシュ状態と協調するように設計することができる。例えば、任意のeagerフェッチおよびキャッシュを可能にするプライベートプロトコルを共有する「発行」および「接続」の機能を、リモート処理フィルタにおいて実施することができる。次いでリモートプロキシ312は、パイプラインインターフェイスをコンシューマー306に公開することができ、これは、リモート処理パイプライン302内で動作するデバッグパイプライン内で機能するようにインターフェイスを実施することができる。
【0036】
別の態様において、
図1で上述したように、デバッグパイプラインインターフェイスオブジェクトは、1組のデバッグプロトコルを実施するように構成される。デバッグプロトコルは、実行環境外のコンシューマーコンポーネントによって実行環境においてコンピュータコードのデバッグ体験を定義するように構成される。デバッグプロトコルは、基礎を成すデバッグ対象操作を知ることなく、デバッグ中に参照されるコンピュータコードにおける位置を提供するように構成することができる位置プロトコルをさらに含んでいてもよい。例えば、パイプラインは、ソースファイル抽象レベルで動作し、明示的なシンボル概念を有することなく、ソースファイルコンテンツを提供することができる。
【0037】
通常、コンパイラは、例えば、ソースファイルがどのようにコンパイルされ、大きいマッピングファイルが生成され、およびCPUがどのようにソースレベル状態にマッピングされて戻ることができるかを知っている。この例において、元のソースファイルを見つけ、マッピングを行うのはデバッガーの責任である。一実施形態において、「ソーススパン」の概念は、アドレス参照に使用される。この実施形態において、「ドキュメント」を使用してソースユニットを参照することができ、「スパン」は、「ドキュメント」における特定の位置を参照する。
【0038】
この実施形態において、「ドキュメント」は、それら自体のセマンティックフラグを有し、それ自体のコンテンツを提供し、ディスクまたはメモリ内テキストストリームにおける位置を参照することができる。さらに、「スパン」は、ユーザーコードの位置を参照するための、デバッグパイプラインインターフェイスオブジェクト(例えばパイプラインAPI)と共通の通貨とすることができる。スパンは、それが含まれるファイルへのバックポインタを有することができ、ファイルが与えられると、そのファイル内のスパンを探すことができる。この実施形態において、呼び出しスタックは、スパンを提供することができ、パイプラインは、有効なソースファイルの列挙を可能にすることができる。したがって、例えば、コンシューマーは、例えば中間言語コード、ネイティブコード、インタープリター状態など、基礎を成すデバッグ対象操作が何かを知る必要なく、ソースレベルでコンピュータコードをデバッグすることができる。
【0039】
図4は、「スパン」406を実装することが可能な環境例400を示す図である。ホストされた制御402は、ブレークポイントにいる間にブレークポイントにマッピングするソースラインを強調表示するためになど、ソースファイルを示すことができることを望む場合がある。デバッグパイプラインは、例えば、(例えば、デバッグイベントをもたらしたとき)ブレークポイントに到達したことがわかり、そのため、スレッドがわかり、フレーム410を列挙することができる。フレーム410から、フレーム410が対応するユーザーコードにおける現在の位置を伝えるスパン406を取り出す452ことができる。
【0040】
環境例400において、上述したように、スパン460は、それが配置されているドキュメント404へのバックポインタ456を有し、それを使用してドキュメントにおけるその位置のドキュメントコンテンツ454を取り出すことができる。例えば、スパン406についてドキュメントにおける現在のラインを強調表示するなど、スパン406のその位置におけるドキュメント404のコンテンツが制御402のために458で示される。
【0041】
さらに、この環境例400において、スクリプトエンジン408は、ユーザーコードにおけるそれぞれのドキュメント404へのアクセス450の機能を提供することができる。例えば、スパンは、ユーザーコードにおける位置を参照する「通貨」とすることができる。この実施形態において、スパンは、自己記述的とすることができ、この場合、ファイルのコンテンツに触れてソース情報を取り出す必要はない。一例において、この特徴は、コードが「その場で」作成され、そこから取り出すのに使用可能なファイルがない場合、有用である。
【0042】
この態様において、デバッグプロトコルは、データレイアウトまたはデータ型を公開することなく、データ検査デバッグ要求が要求されたデータを戻すことができるように構成される型ユニバースに依存しないプロトコル(type−universe agnostic protocol)をさらに含む。現在のデバッグAPIは、データの基礎を成すレイアウト、およびデータを記述するタイプシステムを理解するためのデバッガーが必要である。例えば、通常のデバッガーは、1つのデータが(例えば、基本型または複合型に対して)配列型であることを知っている必要がある。さらに、この例において、デバッガーは、ユーザーコードにおけるデータの型ユニバースを介して具体的に復号するためのリッチAPIを有する必要がある。
【0043】
しかし、一実施形態において、型ユニバースに依存しないプロトコルを使用することによって、デバッグパイプラインインターフェイスオブジェクト(例えば、インターフェイスAPI)は、より抽象的となり、型ユニバースの必要なく、自己記述的な方法でデータを提示することができる。例えば、検査されているそれぞれの値は、文字列として提示され、その子の値を列挙することができる。したがって、この例において、データ型は必要ない。というのは、値は単に、データ型無しに検査のために要求される値を含む文字列であるからである。
【0044】
別の態様において、一実施形態では、デバッグパイプラインインターフェイスオブジェクトは、実行環境でコンピュータコードをデバッグするためのデバッグツールから1つまたは複数のデバッグツール機能を実施するように構成することができるデバッグツール機能インプリメンタを含むことができる。例えば、コンシューマーコンポーネントは、デバッグツールとすることができ、デバッグパイプラインインターフェイスオブジェクトを使用して、コンピュータコードについてのデバッグツールのデバッグ機能を実施することができる。
【0045】
一実施形態において、デバッグツール機能は、通常、デバッグ中にデバッグ対象を停止し、再開するため、デバッグ中にイベントを非同期停止するため、ステートマシンにおいてスレッドを列挙するため、値を検査する、実行制御操作、スレッドの呼び出しスタックを列挙する、それぞれのスタックフレームにおけるローカルを検査する、ソースファイルのフェッチ、および式評価など、デバッグイベントの同期ストリームを提供するように構成された機能など、デバッグツールのユーザーによって使用される機能を含む。
【0046】
本明細書において説明した技術およびシステムは、上記に列挙したデバッグ機能に制限されないことを理解されたい。デバッグパイプラインインターフェイスオブジェクトにおける実施のための代替のデバッグ機能を、当業者であれば考案することができることを理解されたい。例えば、ほとんどのデバッグツールは、上記のものよりさらに多くのデバッグ機能を含む。
【0047】
ユーザーが、実行環境外からデバッグツールを使用して、一実施形態において実行される、コンピュータコードをデバッグすることができる方法が考案される。
図5は、実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコードのデバッグを容易にするための方法例500を示すフロー図である。方法例500は、502で開始し、504でユーザーがデバッグ可能であることを望むコンポーネントをデバッグツールとリンクするデバッグパイプラインを実施することを伴う。例えば、ユーザーは、スクリプトインタープリターでユーザーが開発したコードを実行している場合、インタープリターを使用する現在の実行環境で使用できないデバッグツールを使用してコードをデバッグすることを望む。この例において、所望のデバッグツールにインタープリターをリンクするように、デバッグパイプラインを実施することができる。
【0048】
506で、デバッグパイプラインを実施することは、(例えばユーザーが開発したコードのための実行プラットフォームなど)デバッグすることが望まれる第1のコンポーネントからデバッグパイプラインインターフェイスオブジェクトのインスタンスを作成することを含む。例えば、第1のコンポーネントは、ユーザーがデバッグ可能であることを望み、デバッグパイプラインインターフェイスオブジェクトのインスタンスを使用可能にする(例えば、ウェブページ上のURLを介して使用可能にする)ことによってパイプラインを発行することができる。508で、デバッグパイプラインを実施することは、所望のデバッグツールを含む第2のコンポーネントが(例えばインターフェイスを手に入れるなど)デバッグパイプラインインターフェイスオブジェクトを消費することを含む。例えば、デバッグすることが望まれるコンポーネントとデバッグツールとの間のリンクを作成するために、デバッグツールは、デバッグすることが望まれるコンポーネントからデバッグパイプラインインターフェイスオブジェクトを手に入れることができる。
【0049】
方法例500において、510で、デバッグ体験のためのデバッグパイプラインプロトコルが実施される。例えば、デバッグパイプラインを使用してコンピュータコードのデバッグを提供するために、特定のパイプラインプロトコルが実施される。512で、言語に依存しないアーキテクチャが使用されて、少なくとも2つのコンピュータ言語のうちの少なくとも一方でコンピュータコードのデバッグ要求を処理することができる。例えば、このアーキテクチャを使用することによって、パイプラインでリンクされたデバッグツールに関わらず、様々なコンピュータ言語およびスクリプトコードのうちの任意のもので、コンピュータコードのデバッグが可能になる。
【0050】
514で、オペレーティングシステムに依存しないアーキテクチャが使用されて、オペレーティングシステム固有の構成体を公開することなく、それぞれの署名でコンピュータコードの言語タイプを処理できるようにすることができる。例えば、このアーキテクチャを使用することによって、オペレーティングシステム(OS)固有の構成体のものを超える抽象レベルを作成し、それによって、特定のOSのために設計されたデバッグツールが異なるOSで実行されるコンピュータコードのデバッグを可能にすることができるOSに依存しない手法が可能になる。
【0051】
516で、分離プロトコルを使用して、1つまたは複数の第2のデバッグパイプラインから分離される第1のデバッグパイプラインが提供される。例えば、あるパイプラインを別のパイプラインから分離することは、単一のパイプラインが単一のステートマシンを表すことを含み、個別のパイプラインが分離されたままであることを提供する。このように、この例において、パイプラインは、デバッグ体験外のコードに干渉しない場合がある。
【0052】
方法例500において、518で、デバッグパイプラインによってリンクされたデバッグツールを使用して実行環境でホストされるコンピュータコードで、デバッグ関数が実行される。例えば、コンピュータコードを実行しているコンポーネントと、実行環境外のデバッグツールとの間にパイプラインがいったんリンクされると、ユーザーは、デバッグツールを使用して、そのコードにおいてデバッグ要求を実行することができ、デバッグパイプラインにおけるデバッグプロトコルを実施する。
【0053】
一実施形態において、デバッグパイプラインにフィルタ処理が適用される。この実施形態において、フィルタ処理は、フィルタ処理コンポーネントに(例えば、この時点でデバッグツールの代わりに)デバッグパイプラインインターフェイスオブジェクトを消費させることを含む。フィルタは、デバッグパイプラインインターフェイスオブジェクトをいったん消費すると、パイプラインを第1の状態から第2の状態に変更することによって、パイプラインに変換を適用することができる。例えば、あるユーザーは、ユーザーが開発した何らかのコードにおいて第2の人がデバッグを実行できるようにすることを望む。この例において、ユーザーは、第2の人がアプリケーションの特定の要素を表示することを望まない、またはコードに任意の変更を行うことを望まない場合がある。ユーザーは、パイプラインを変換して、システムの単に特定の部分のみへのアクセスを可能にすることができる、または単に「読み取り専用」機能を可能にするフィルタを適用することができる。
【0054】
この実施形態において、変換を適用した後、フィルタは、変換されたデバッグパイプラインインターフェイスオブジェクトを、デバッグツールなど、コンシューマーコンポーネントに公開することができる。このように、フィルタコンポーネントは、単にパイプラインのコンシューマーに対するデバッグパイプライン生成コンポーネントであるように見える場合がある。一例において、フィルタは、リモート処理プロトコルを適用して、パイプラインインターフェイスオブジェクトをリモートプロキシに公開することができるリモートプロキシとすることができる。このように、この例において、リモートプロキシは、次いでパイプラインインターフェイスオブジェクトを、リモート処理プロキシの反対側において、例えばデバッグツールなどのコンシューマーコンポーネントに公開することができる。
【0055】
別の態様において、デバッグパイプラインは、デバッグツールのデバッグ機能を実施することができる一連の方法を含む。例えば、デバッグに共通の、デバッグパイプラインによって実施することができるいくつかのデバッグ機能は、デバッグイベントの同期ストリーム、デバッグ中のデバッグ対象の停止および再開、デバッグ中のイベントの非同期停止、値の検査、および制御操作の実行を提供することを含む。多くの代替のデバッグ機能は、例えば、コンピュータコードの所望のデバッグ体験を提供するためのデバッグパイプラインによって実施することができることを理解されたい。
【0056】
別の態様において、一実施形態では、デバッグパイプラインプロトコルを実施することは、ソース位置に依存しないアーキテクチャを使用して、基礎を成すデバッグ対象操作を知ることなく、デバッグ中に参照されるコンピュータコードにおける位置を提供することをさらに含む。例えば、大きいマッピングファイルおよび基礎を成すソースレベル状態に依存する代わりに、デバッガーは、スパンを使用して、ドキュメントにおけるコードを識別することができる。この例では、より高いレベルの抽象によって、スパンを自己記述的にすることができ、ソースファイルのコンテンツに触れる必要なく、単にフレームからデータを取り出すことができる。
【0057】
さらに、別の実施形態において、デバッグパイプラインプロトコルを実施することは、型ユニバースに依存しないアーキテクチャを使用して、データレイアウトまたはデータ型を公開することなく、データ検査デバッグ要求が要求されたデータを戻すことができるようにすることをさらに含む。この実施形態において、例えば、デバッグプロトコルによって、データ型を知る必要なく、自己記述的な方法でデータを提示することができる。この例において、ある位置におけるデータの要求は、それが何の型のものであるかを知ることなく、そのデータを文字列として戻すことができる。
【0058】
別の態様において、2つ以上のデバッグパイプラインを単一のデバッグパイプラインに構成して、それぞれのパイプラインについての統一されたデバッグ体験を提示することができる。2つ以上のパイプラインを構成することは、それぞれの子デバッグパイプラインのそれぞれの特徴を構成する親パイプラインを作成することを含む。例えば、「Compose()」関数は、新しいパイプラインの実装(親)を作成することができ、そのデバッグパイプラインインターフェイスオブジェクトの実装は、インターフェイスによって公開されるそれぞれのデバッグ機能についてそれぞれの「子パイプライン」を構成する。
【0059】
一実施形態において、親は、デバッグイベントストリームを戻すことができ、この場合、親は、それぞれの子のスレッドをスピンアップすることができ、子にデバッグイベントを待たせ、子がデバッグイベントを取得した場合、親は、非同期中断要求を他方の子に対して実行し、次いでそれぞれの子から集められたデバッグイベントを要求の呼び出し元に戻すことができる。他の実施形態は、ソースファイルまたはスレッドの列挙、スレッドおよび呼び出しスタックの統一などを含むことができる。
【0060】
別の態様において、デバッグアダプターは、ライトウェイトアプリケーションプログラミングインターフェイス(API)により既存のインタープリターをインストルメント化することによって作成することができる。一実施形態において、全デバッグパイプラインを生成することができるアダプターを作成するために、2、3のデバッグ関数を含むAPIを既存のインタープリターにインストルメント化することができる。関数は、ステートメント間のステッピング、トレースバック用のコールバックの挿入など、基本的なデバッグ機能を含んでいてもよく、インタープリターを容易にインストルメント化することができ、APIを実施するパイプラインコンシューマーを介して全デバッグサポートを得ることができる。
【0061】
図6は、実行環境外でホストされるデバッグツールによって、実行環境でホストされるコンピュータコードのデバッグを容易にするための方法を実施することができる環境例600の図である。ユーザー610は、インターネット606を介して、そのローカルマシン608を使用して、リモートアプリケーションサーバ602上にホストされるアプリケーションにアクセスすることができる。例えば、ユーザー610は、リモートサーバ602上のホストアプリケーションで稼働するようにマクロを開発することができ、そのローカルマシン608に配置されたデバッグツールを使用して、マクロをデバッグすることを望む。
【0062】
この環境例において、リモートアプリケーションサーバ(例えば、プロデューサ)は、ウェブサイト604上のデバッグパイプラインインターフェイスオブジェクトへのリンクを張ることによって、デバッグパイプラインを発行することができる。次いでユーザー610は、ウェブサイト604にあるインターフェイスオブジェクトに、ローカルマシン608上のデバッグツールからの制御を「配線でつなぐ」ことによって、インターネット606を介してパイプラインインターフェイスオブジェクトを実施することができる。このように、ローカルマシン608上にあるデバッグツールを使用して、リモートサーバ602上で稼働するマクロのためのデバッグツールがユーザー601に提供される。
【0063】
さらに別の実施形態は、本明細書に提示した技術のうちの1つまたは複数を実施するように構成されたプロセッサ実行可能命令を含むコンピュータ可読媒体を伴う。
図7にこうした方法で考案されるコンピュータ可読媒体例が示されており、実装700は、コンピュータ可読媒体708(例えば、CD−R、DVD−R、またはハードディスクドライブのプラッタなど)を含み、そこにおいてコンピュータ可読データ706が符号化される。このコンピュータ可読データ706は次いで、本明細書に述べた原理のうちの1つまたは複数に従って動作するように構成された1組のコンピュータ命令704を含む。こうした一実施形態702において、プロセッサ実行可能命令704は、例えば
図5の方法例500など、方法を実行するように構成される。こうした別の実施形態において、プロセッサ実行可能命令704は、例えば
図1のシステム例100など、システムを実施するように構成される。多くのこうしたコンピュータ可読媒体は、本明細書に提示した技術に従って動作するように構成され、当業者によって考案される。
【0064】
本主題は、構造的な特徴および/または方法動作に固有の言葉で説明されているが、添付の特許請求の範囲に定義された主題は、上述の固有の特徴または動作に必ずしも限定されるわけではないことを理解されたい。むしろ、上述の固有の特徴および動作は、特許請求の範囲を実施する形の例として開示される。
【0065】
本出願で使用する場合、「コンポーネント」、「モジュール」、「システム」、「インターフェイス」などの用語は、一般に、ハードウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、または実行中のソフトウェアのいずれかのコンピュータ関連のエンティティを指すものとする。例えば、コンポーネントは、それだけには制限されないが、プロセッサ上で動作するプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、プログラム、および/またはコンピュータとすることができる。例として、コントローラ上で稼働するアプリケーションおよびコントローラはいずれもコンポーネントとすることができる。1つまたは複数のコンポーネントがプロセスおよび/または実行スレッド内に存在していてもよく、また1つのコンポーネントを1つのコンピュータ上に配置する、および/または2つ以上のコンピュータの間に分散することができる。
【0066】
さらに、特許請求された主題を、標準のプログラミングおよび/またはエンジニアリング技術を使用して、ソフトウェア、ファームウェア、ハードウェア、またはその任意の組み合わせを生成して、開示された主題を実施するようコンピュータを制御するための方法、装置、または製品として実装することができる。「製品」という用語は、本明細書で使用される場合、任意のコンピュータ可読装置、キャリア、または媒体からアクセス可能なコンピュータプログラムを含むものとする。特許請求された主題の範囲または意図から逸脱することなく、この構成に多くの変更を加えることができることを当業者であれば当然理解されよう。
【0067】
図8および以下の説明は、本明細書に述べた提供のうちの1つまたは複数の実施形態を実施するのに適したコンピューティング環境の簡単な概要を提供する。
図8の動作環境は、適した動作環境の一例にすぎず、動作環境の使用または機能の範囲に関する任意の制限を示唆するものではない。コンピューティング装置の例には、それだけには制限されないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、モバイル装置(例えば携帯電話、PDA(個人用デジタル補助装置)、メディアプレーヤなど)、マルチプロセッサシステム、消費者向け電気機器、ミニコンピュータ、メインフレームコンピュータ、上記の任意のシステムまたは装置を含む分散コンピューティング環境などがある。
【0068】
必須ではないが、実施形態は、1つまたは複数のコンピューティング装置によって実行される「コンピュータ可読命令」の一般的な文脈で説明される。コンピュータ可読命令は、コンピュータ可読媒体(後述)を介して分散される。コンピュータ可読命令は、特定のタスクを実行し、または特定の抽象データ型を実施する関数、オブジェクト、アプリケーションプログラミングインターフェイス(API)データ構造など、プログラムモジュールとして実装することができる。通常、コンピュータ可読命令の機能は、必要に応じて様々な環境で結合され、または分散させることができる。
【0069】
図8は、本明細書に提供した1つまたは複数の実施形態を実施するように構成されたコンピューティング装置812を含むシステム810の一例を示す。一構成において、コンピューティング装置812は、少なくとも1つの処理ユニット816およびメモリ818を含む。コンピューティング装置の正確な構成およびタイプに応じて、メモリ818は、揮発性(例えばRAMなど)、不揮発性(例えばROM、フラッシュメモリなど)、またはこれら2つの何らかの組み合わせとすることができる。この構成は、
図8に点線814で示されている。
【0070】
他の実施形態において、装置812は、追加の特徴および/または機能を含む。例えば、装置812は、それだけには制限されないが、磁気ストレージ、光ストレージなどを含む追加のストレージ(例えば、取外し式および/または固定式)も含む。こうした追加のストレージは、
図8にストレージ820によって示されている。一実施形態において、本明細書に提供した1つまたは複数の実施形態を実施するためのコンピュータ可読命令がストレージ820に存在する。ストレージ820は、オペレーティングシステム、アプリケーションプログラムなどを実施するための他のコンピュータ可読命令を格納することもできる。コンピュータ可読命令は、例えば、処理ユニット816によって実行するように、メモリ818にロードされる。
【0071】
「コンピュータ可読媒体」という用語は、本明細書で使用される場合、コンピュータ記憶媒体を含む。コンピュータ記憶媒体には、コンピュータ可読命令、または他のデータなど、情報を記憶するための任意の方法または技術で実施される揮発性および不揮発性の取外し式および固定式の媒体がある。メモリ818およびストレージ820は、コンピュータ記憶媒体の例である。コンピュータ可読媒体には、それだけには制限されないが、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、DVD(デジタル多用途ディスク)または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、または所望の情報の格納に使用でき、装置812からアクセスできる他の任意の媒体などがある。こうした任意のコンピュータ記憶媒体は、装置812の一部とすることができる。
【0072】
装置812は、装置812が他の装置と通信できるようにする通信接続826も含む。通信接続826は、それだけには制限されないが、モデム、NIC(ネットワークインターフェイスカード)、統合ネットワークインターフェイス、無線周波数送受信機、赤外線ポート、USB接続、またはコンピューティング装置812を他のコンピューティング装置に接続するための他のインターフェイスを含む。通信接続826は、有線接続または無線接続を含む。通信接続826は、通信媒体を送信および/または受信することができる。
【0073】
「コンピュータ可読媒体」という用語は、通信媒体を含みむ。通信媒体は通常、コンピュータ可読命令、または他のデータを搬送波または他の移送機構などの「変調されたデータ信号」に組み込む。これには任意の情報配送媒体がある。「変調されたデータ信号」という用語は、信号に情報を符号化するように1つまたは複数のその特性が設定または変更された信号を含む。
【0074】
装置812は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、赤外線カメラ、映像入力装置、および/または任意の他の入力装置などの入力装置824を含む。1つまたは複数のディスプレイ、スピーカ、プリンタ、および/または任意の他の出力装置などの出力装置822は、装置812に含まれる。入力装置824および出力装置822は、有線接続、無線接続、またはその任意の組み合わせを介して装置812に接続される。一実施形態において、別のコンピューティング装置からの入力装置または出力装置は、コンピューティング装置812の入力装置824または出力装置822として使用することができる。
【0075】
コンピューティング装置812のコンポーネントは、バスなどの様々な相互接続によって接続される。こうした相互接続は、PCI ExpressなどのPCI(周辺部品相互接続)、USB(ユニバーサルシリアルバス)、firewire(IEEE1394)、光バス構造などがある。別の実施形態において、コンピューティング装置812のコンポーネントは、ネットワークによって相互接続される。例えば、メモリ818は、ネットワークによって相互接続される異なる物理位置に配置される複数の物理メモリユニットから成る。
【0076】
コンピュータ可読命令を格納するために使用される記憶装置は、ネットワークを介して分散されてもよいことを当業者であれば理解されたい。例えば、ネットワーク828を介してアクセス可能なコンピューティング装置830は、本明細書に提供した1つまたは複数の実施形態を実施するためのコンピュータ可読命令を格納する。コンピューティング装置812は、コンピューティング装置830にアクセスし、実行のためのコンピュータ可読命令の一部分またはすべてをダウンロードすることができる。あるいは、コンピューティング装置812は、必要に応じて、コンピュータ可読命令のいくつかをダウンロードすることができ、または命令の一部は、コンピューティング装置812で実行され、別の一部はコンピューティング装置830で実行されるようにしてもよい。
【0077】
実施形態の様々な操作が本明細書に提供される。一実施形態において、説明した操作のうちの1つまたは複数は、1つまたは複数のコンピュータ可読媒体に格納されるコンピュータ可読命令を構成することができ、これは、コンピューティング装置によって実行される場合、コンピューティング装置に、説明した操作を実行させる。操作の一部またはすべてを説明した順序は、これらの操作が必ずしも順序に依存することを含意するものと解釈されないものとする。代替の順序は、この説明の恩恵を受ける当業者によって理解されよう。さらに、本明細書に提供された各実施形態に必ずしもすべての操作が存在するわけではないことを理解されたい。
【0078】
さらに、「例」という単語は、本明細書では、例、例示、例証として働くことを意味するために使用される。「例」として本明細書において説明した任意の態様または設計は、必ずしも他の態様または設計より有利と解釈されない。むしろ、例という単語の使用は、具体的なやり方で概念を提示するものとする。本出願で使用される場合、「または」という用語は、排他的な「または」ではなく包括的な「または」を意味するものとする。すなわち、特に明記しない限り、または文脈から明らかである場合を除いて、「XはAまたはBを使用する」は、自然な包括的置き換えのうちの任意のものを意味するものとする。すなわち、XがAを使用する、XがBを使用する、またはXがAおよびBを使用する場合、「XはAまたはBを使用する」は、上記の例のうちのいずれかで満たされる。さらに、本出願および添付の特許請求の範囲で使用する場合、冠詞「a」および「an」は、特に明記しない限り、または文脈から明らかである場合を除いて、通常、「1つまたは複数」は単一の形を対象とすることを意味するものと解釈することができる。
【0079】
また、本開示は、1つまたは複数の実装形態に関して示され、説明されているが、当業者であれば、本明細書および添付の図面を読み、理解することに基づいて、同等の変形および修正を思いつく。本開示は、こうしたすべての変更および変形を含み、以下の特許請求の範囲によってのみ限定される。特に、上述のコンポーネント(例えば要素、リソースなど)によって実行される様々な機能に関して、こうしたコンポーネントを説明するために使用される用語は、特に明記しない限り、たとえ本開示の本明細書に示した実装形態例における機能を実行する開示された構造に構造的に同等ではない場合でも、(例えば、機能的に同等な)説明したコンポーネントの指定された機能を実行する任意のコンポーネントに対応するものとする。さらに、本開示の特定の特徴は、いくつかの実装形態のうちの1つのみに関して開示されているが、こうした特徴は、任意の所与のまたは特定のアプリケーションに望ましいまたは有利であるかにより、他の実装形態の1つまたは複数の他の特徴に結合することができる。さらに、用語「含む(includes)」、「有する(having)」、「有する(has)」、「備える(with)」またはその変形が詳細な説明または特許請求の範囲で使用されている限り、こうした用語は、「含む(comprising)」と同じような方法で包含されるものとする。