JP5679989B2 - デバッグパイプライン - Google Patents

デバッグパイプライン Download PDF

Info

Publication number
JP5679989B2
JP5679989B2 JP2011543561A JP2011543561A JP5679989B2 JP 5679989 B2 JP5679989 B2 JP 5679989B2 JP 2011543561 A JP2011543561 A JP 2011543561A JP 2011543561 A JP2011543561 A JP 2011543561A JP 5679989 B2 JP5679989 B2 JP 5679989B2
Authority
JP
Japan
Prior art keywords
debug
pipeline
state
debugging
computer code
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
JP2011543561A
Other languages
English (en)
Other versions
JP2012513648A (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 JP2012513648A publication Critical patent/JP2012513648A/ja
Application granted granted Critical
Publication of JP5679989B2 publication Critical patent/JP5679989B2/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Description

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

  1. 実行環境にホストされたコンピュータコードを前記実行環境外にホストされたデバッグツールによってデバッグするための方法であって、
    前記コンピュータコードのオブジェクトのインスタンスをURLによって使用可能にすることによってデバッグパイプラインを発行するステップと、
    前記デバッグツールを備えるコンポーネントの少なくとも一部分が前記オブジェクトの前記インスタンスを選択することに応じて、前記デバッグパイプラインを介して前記コンピュータコードの前記オブジェクトを前記デバッグツールにリンクさせるステップと、
    前記デバッグパイプラインを第1の状態から第2の状態へ変換するように前記デバッグパイプラインをフィルタ処理するステップであって、前記第1の状態は前記コンピュータコードの一部分に対する読み取り/書き込みアクセスを可能にする状態であり、前記第2の状態は前記コンピュータコードの一部分に対する読み取り専用アクセスを可能にする状態である、ステップと、
    前記コンピュータコードの少なくともいくつかをデバッグするのを容易化するように前記フィルタ処理されたデバッグパイプラインにおいて1又は複数のプロトコルを実施するステップと、を含み、
    前記発行するステップ、前記リンクさせるステップ、前記フィルタ処理するステップ、又は前記実施するステップのうち少なくともいくつかは、少なくとも部分的に処理ユニットによって実現される、方法。
  2. 前記デバッグを容易化するためのソース位置に依存しないアーキテクチャを実施するステップを含む、請求項1に記載の方法。
  3. 前記デバッグパイプラインのパイプラインインターフェイスオブジェクトをリモートプロキシに公開するステップを含む、請求項1に記載の方法。
  4. 前記デバッグを容易化するための型ユニバースに依存しないアーキテクチャを実施するステップを含む、請求項1に記載の方法。
  5. 前記デバッグパイプラインを第2のデバッグパイプラインと結合することによって親パイプラインを作成するステップを含む、請求項1に記載の方法。
  6. 前記デバッグパイプラインはステートマシンを表す、請求項1に記載の方法。
  7. 前記デバッグパイプラインを前記デバッグツールに公開するステップを含む、請求項1に記載の方法。
  8. 前記デバッグツールはリッチクライアント、ブラウザ、又はコマンドラインシェルのうちの少なくとも1つを含む、請求項1に記載の方法。
  9. 実行環境にホストされたコンピュータコードを前記実行環境外にホストされたデバッグツールによってデバッグするためのシステムであって、
    前記コンピュータコードのオブジェクトのインスタンスをURLによって使用可能にすることによってデバッグパイプラインを発行するように構成された発行コンポーネントと、
    前記デバッグツールを備えるコンポーネントの少なくとも一部分が前記オブジェクトの前記インスタンスを選択することに応じて、前記コンピュータコードの前記オブジェクトを前記デバッグツールにリンクさせるように構成された前記デバッグパイプラインと、
    前記デバッグパイプラインの周りに1又は複数のフィルタを作成し、前記1又は複数のフィルタのうちの少なくとも1つを使用して、前記デバッグパイプラインを第1の状態から第2の状態へ変換するように前記デバッグパイプラインをフィルタ処理するように構成されたフィルタコンポーネントであって、前記第1の状態は前記コンピュータコードの一部分に対する読み取り/書き込みアクセスを可能にする状態であり、前記第2の状態は前記コンピュータコードの一部分に対する読み取り専用アクセスを可能にする状態である、フィルタコンポーネントと、
    前記デバッグツールと動作的に関連付けられ、前記コンピュータコードの少なくともいくつかをデバッグするのを容易化するように前記フィルタ処理されたデバッグパイプラインにおいて1又は複数のプロトコルを実施するように構成されたプロデューサコンポーネントと、を含み、
    前記発行コンポーネント、前記デバッグパイプライン、前記フィルタコンポーネント、又は前記プロデューサコンポーネントのうち少なくともいくつかは、少なくとも部分的に処理ユニットによって実現される、システム。
  10. 前記第2の状態はプロキシサーバへの接続に対応する、請求項に記載のシステム。
  11. 前記プロデューサコンポーネントは前記デバッグを容易化するための型ユニバースに依存しないアーキテクチャを実施するように構成されている、請求項に記載のシステム。
  12. コンピュータ実行可能命令を備えたコンピュータ可読メモリであって、前記コンピュータ実行可能命令は、コンピュータ上の処理ユニットによって少なくとも部分的に実行された時に、
    コンピュータコードのオブジェクトのインスタンスをURLによって使用可能にすることによってデバッグパイプラインを発行するステップと、
    デバッグツールを備えるコンポーネントの少なくとも一部分が前記オブジェクトの前記インスタンスを選択することに応じて、前記デバッグパイプラインを介して前記コンピュータコードの前記オブジェクトを前記デバッグツールにリンクさせるステップと、
    前記デバッグパイプラインを第1の状態から第2の状態へ変換するように前記デバッグパイプラインをフィルタ処理するステップであって、前記第1の状態は前記コンピュータコードの一部分に対する読み取り/書き込みアクセスを可能にする状態であり、前記第2の状態は前記コンピュータコードの一部分に対する読み取り専用アクセスを可能にする状態である、ステップと、
    前記コンピュータコードの少なくともいくつかをデバッグするのを容易化するように前記フィルタ処理されたデバッグパイプラインにおいて1又は複数のプロトコルを実施するステップと、
    を含む動作を実施する、コンピュータ可読メモリ。
  13. 前記デバッグパイプラインを前記デバッグツールに公開するステップを含む、請求項12に記載のコンピュータ可読メモリ。
  14. 前記デバッグパイプラインのパイプラインインターフェイスオブジェクトをリモートプロキシに公開するステップを含む、請求項12に記載のコンピュータ可読メモリ。
JP2011543561A 2008-12-23 2009-12-11 デバッグパイプライン Active JP5679989B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/342,876 2008-12-23
US12/342,876 US9703678B2 (en) 2008-12-23 2008-12-23 Debugging pipeline for debugging code
PCT/US2009/067785 WO2010075011A2 (en) 2008-12-23 2009-12-11 Debugging pipeline

Publications (2)

Publication Number Publication Date
JP2012513648A JP2012513648A (ja) 2012-06-14
JP5679989B2 true JP5679989B2 (ja) 2015-03-04

Family

ID=42267989

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011543561A Active JP5679989B2 (ja) 2008-12-23 2009-12-11 デバッグパイプライン

Country Status (7)

Country Link
US (1) US9703678B2 (ja)
EP (1) EP2368189B1 (ja)
JP (1) JP5679989B2 (ja)
KR (1) KR101645052B1 (ja)
CN (1) CN102265264B (ja)
CA (1) CA2744216A1 (ja)
WO (1) WO2010075011A2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11809576B2 (en) 2020-01-30 2023-11-07 Red Hat, Inc. Establishing secure remote access to debug logs
US11822641B2 (en) 2020-04-29 2023-11-21 Red Hat, Inc. Establishing controlled remote access to debug logs
JP7422484B2 (ja) 2018-11-14 2024-01-26 三菱電機株式会社 誘導加熱調理器

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10169199B2 (en) 2008-06-10 2019-01-01 Microsoft Technology Licensing, Llc Automatic model-specific debugger extensions
US9020939B2 (en) * 2009-06-30 2015-04-28 International Business Machines Corporation Correlating queries issued by applications with their source lines and analyzing applications for problem determination and where used analysis
FR2953612A1 (fr) 2009-12-03 2011-06-10 Flexycore Procede de mise au point d'application logicielle, systeme et produit programme d'ordinateur correspondant.
US8997049B1 (en) 2010-05-21 2015-03-31 Cadence Design Systems, Inc. Method and system for debugging of compiled code using an interpreter
US8589885B2 (en) * 2010-09-30 2013-11-19 Microsoft Corporation Debugger launch and attach on compute clusters
US8819631B2 (en) * 2011-01-13 2014-08-26 Hewlett-Packard Development Company, L.P. System and method for self dependent web automation
US9262298B2 (en) * 2012-02-16 2016-02-16 Microsoft Technology Licensing, Llc Debugging object abstractions
CN103324567B (zh) * 2012-03-22 2016-03-02 百度在线网络技术(北京)有限公司 一种应用引擎的调试方法和调试系统
US9710357B2 (en) * 2012-08-04 2017-07-18 Microsoft Technology Licensing, Llc Function evaluation using lightweight process snapshots
US11126522B2 (en) 2013-06-18 2021-09-21 Nxp Usa, Inc. Method and apparatus for offloading functional data from an interconnect component
CN104731696B (zh) * 2013-12-19 2017-10-10 腾讯科技(深圳)有限公司 定位程序代码中bug的方法及相关装置
US9268597B2 (en) * 2014-04-01 2016-02-23 Google Inc. Incremental parallel processing of data
US10044591B2 (en) 2014-09-04 2018-08-07 Home Box Office, Inc. Two-way remote communication system for testing a client device program
US9846496B2 (en) 2014-09-04 2017-12-19 Home Box Office, Inc. Virtual input device system
US10686539B2 (en) * 2015-05-29 2020-06-16 Avago Technologies International Sales Pte. Limited Flexible debug observation point insertion in pipeline designs
US10268566B2 (en) * 2016-11-04 2019-04-23 Sap Se Debugging in a private cloud environment
US10120779B1 (en) * 2016-11-08 2018-11-06 Amazon Technologies, Inc. Debugging of hosted computer programs
CN108804317A (zh) * 2018-05-24 2018-11-13 北京握奇智能科技有限公司 一种统一执行脚本的方法和系统
US11487643B1 (en) * 2018-11-12 2022-11-01 Xilinx, Inc. Debugging for integrated scripting applications
US10846197B1 (en) * 2018-12-13 2020-11-24 Facebook, Inc. Systems and methods for debugging mixed-language applications
US11669435B2 (en) * 2019-06-26 2023-06-06 Microsoft Technology Licensing, Llc Chat bot diagnostic visualization
US11966343B2 (en) 2021-07-19 2024-04-23 Samsung Electronics Co., Ltd. Universal mechanism to access and control a computational device
US20230281342A1 (en) * 2022-03-01 2023-09-07 Microsoft Technology Licensing, Llc Granting entitlements to log data generated by a data privacy pipeline to facilitate debugging

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07230393A (ja) 1994-02-17 1995-08-29 Canon Inc 情報処理システムおよび情報処理システムのプログラムデバッグ方法
JPH0883196A (ja) 1994-09-12 1996-03-26 Fujitsu Ltd 分散協調型デバッガ
US6011920A (en) * 1995-04-05 2000-01-04 International Business Machines Corporation Method and apparatus for debugging applications on a personality neutral debugger
US5778230A (en) * 1995-11-13 1998-07-07 Object Technology Licensing Corp. Goal directed object-oriented debugging system
US6126328A (en) 1997-02-28 2000-10-03 Oracle Corporation Controlled execution of partitioned code
US6353923B1 (en) * 1997-03-12 2002-03-05 Microsoft Corporation Active debugging environment for debugging mixed-language scripting code
US5958049A (en) * 1997-03-17 1999-09-28 International Business Machines Corporation Operating system debugger using kernel and dynamic extension with debugger drivers to support different output devices
US5892941A (en) * 1997-04-29 1999-04-06 Microsoft Corporation Multiple user software debugging system
US5901315A (en) * 1997-06-13 1999-05-04 International Business Machines Corporation Method for debugging a Java application having native method dynamic load libraries
US6145093A (en) * 1997-06-25 2000-11-07 Digital Electronics Corporation Debugging method and method of displaying information for data processing for use in programmable display device
US6393437B1 (en) * 1998-01-27 2002-05-21 Microsoft Corporation Web developer isolation techniques
US6119247A (en) * 1998-06-22 2000-09-12 International Business Machines Corporation Remote debugging of internet applications
WO2000033226A1 (en) * 1998-11-30 2000-06-08 Siebel Systems, Inc. Smart scripting call centers
US6671825B1 (en) * 1999-11-19 2003-12-30 Oracle International Corporation Method and apparatus for debugging a software program
US6587995B1 (en) * 2000-04-19 2003-07-01 Koninklijke Philips Electronics N.V. Enhanced programmable core model with integrated graphical debugging functionality
US6718294B1 (en) * 2000-05-16 2004-04-06 Mindspeed Technologies, Inc. System and method for synchronized control of system simulators with multiple processor cores
US20030005407A1 (en) * 2000-06-23 2003-01-02 Hines Kenneth J. System and method for coordination-centric design of software systems
US6915416B2 (en) * 2000-12-28 2005-07-05 Texas Instruments Incorporated Apparatus and method for microcontroller debugging
US6826746B2 (en) 2001-03-08 2004-11-30 International Business Machines Corporation Debugger probe for object oriented programming
US7185319B2 (en) * 2002-07-09 2007-02-27 Microsoft Corporation Debugging distributed applications
US20040230955A1 (en) * 2003-02-26 2004-11-18 Bea Systems, Inc. System for multi-language debugging
US20040243979A1 (en) 2003-02-27 2004-12-02 Bea Systems, Inc. Systems utilizing a debugging proxy
US7331049B1 (en) * 2003-04-21 2008-02-12 Borland Software Corporation System and methodology providing typed event and notification services
US7418697B2 (en) * 2003-07-25 2008-08-26 Microsoft Corporation Method and system for fast application debugging
US7617487B2 (en) * 2004-12-13 2009-11-10 Sap (Ag) Method and system for debugging individual threads in a productive environment
US7457999B2 (en) * 2005-06-28 2008-11-25 Intel Corporation Debug port system for control and observation
US7659901B2 (en) 2006-07-24 2010-02-09 Microsoft Corporation Application program interface for programmable graphics pipeline
US8230052B2 (en) * 2007-02-14 2012-07-24 Microsoft Corporation Module diagnostic toolkit for client-server based protocols
JP2008217545A (ja) 2007-03-06 2008-09-18 Nec Corp コンソール情報取得システム、コンソール情報取得方法及びコンソール情報取得プログラム
US8006232B1 (en) * 2007-07-30 2011-08-23 Nvidia Corporation Serialization of function calls to a graphics API for debugging a remote device

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7422484B2 (ja) 2018-11-14 2024-01-26 三菱電機株式会社 誘導加熱調理器
US11809576B2 (en) 2020-01-30 2023-11-07 Red Hat, Inc. Establishing secure remote access to debug logs
US11822641B2 (en) 2020-04-29 2023-11-21 Red Hat, Inc. Establishing controlled remote access to debug logs

Also Published As

Publication number Publication date
JP2012513648A (ja) 2012-06-14
CN102265264B (zh) 2013-10-23
CA2744216A1 (en) 2010-07-01
EP2368189B1 (en) 2021-07-14
EP2368189A4 (en) 2016-04-27
US20100162212A1 (en) 2010-06-24
KR20110102337A (ko) 2011-09-16
WO2010075011A3 (en) 2010-09-23
CN102265264A (zh) 2011-11-30
WO2010075011A2 (en) 2010-07-01
US9703678B2 (en) 2017-07-11
EP2368189A2 (en) 2011-09-28
KR101645052B1 (ko) 2016-08-02

Similar Documents

Publication Publication Date Title
JP5679989B2 (ja) デバッグパイプライン
CN106843869B (zh) 一种前端开发工程化系统和方法
Daniel et al. NeoEMF: A multi-database model persistence framework for very large models
EP2359247B1 (en) Transforming user script code for debugging
US8745584B2 (en) Dependency injection by static code generation
US8201143B2 (en) Dynamic mating of a modified user interface with pre-modified user interface code library
US8533666B2 (en) Interactive design environments to visually model, debug and execute resource oriented programs
JP7324831B2 (ja) ディープラーニングフレームワークにおける演算子の展開方法、展開装置及び電子機器
US8589864B2 (en) Automating the creation of an application provisioning model
US9052979B2 (en) Program code library searching and selection in a networked computing environment
WO2015019074A1 (en) Automated application test system
US10409567B2 (en) Trimming unused dependencies using package graph and module graph
US9715372B2 (en) Executable guidance experiences based on implicitly generated guidance models
CN116028028A (zh) 请求函数生成方法、装置、设备及存储介质
CN111078217A (zh) 脑图生成方法、装置和计算机可读存储介质
US7657869B2 (en) Integration of external tools into an existing design environment
US9448823B2 (en) Provision of a download script
MacDonald et al. Pro Asp. net 2.0 in C# 2005
CN111258802A (zh) 捕获应用程序崩溃信息的方法及相关设备
Le Comparison of State Management Solutions between Context API and Redux Hook in ReactJS
US20230214310A1 (en) Infrastructure to integrate an integrated development environment (ide) with game engines
CN117519691B (zh) 应用程序处理方法、装置、计算机设备和存储介质
Herron Learning Cython Programming
Martola An evaluation of implementing a progressive web application with micro frontend architecture
Classon et al. Phase 1: Analysis

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121029

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

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131015

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140114

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140530

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140901

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150106

R150 Certificate of patent or registration of utility model

Ref document number: 5679989

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