JP2019537782A - 垂直統合インストルメント化およびトレース再構成のためのシステム、方法およびデバイス - Google Patents
垂直統合インストルメント化およびトレース再構成のためのシステム、方法およびデバイス Download PDFInfo
- Publication number
- JP2019537782A JP2019537782A JP2019520612A JP2019520612A JP2019537782A JP 2019537782 A JP2019537782 A JP 2019537782A JP 2019520612 A JP2019520612 A JP 2019520612A JP 2019520612 A JP2019520612 A JP 2019520612A JP 2019537782 A JP2019537782 A JP 2019537782A
- Authority
- JP
- Japan
- Prior art keywords
- logged
- memory
- state
- image
- time
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
- G06F11/3096—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents wherein the means or processing minimize the use of computing system or of computing system component resources, e.g. non-intrusive monitoring which minimizes the probe effect: sniffing, intercepting, indirectly deriving the monitored data from other directly available data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/32—Monitoring with visual or acoustical indication of the functioning of the machine
- G06F11/323—Visualisation of programs or trace data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
Description
本願は、その全体が参考として援用される2016年10月11日に出願された米国仮出願第62/406,829号の利益を主張する。
コンピュータプログラマは、コンピュータプログラムのエラーすなわち「バグ」を発見するためにソフトウェアデバッガを使用する。エラーには発見が困難なものがあり、それらが発生した原因となる状況の後、長く経ってからそれらが現れるからである。例えば、数百万または数十億の命令が最初の計算の後に実行されるまで、不正な計算の結果は使用されないかもしれない。
時間走行デバッガについての改善バックエンドは、コンピュータプログラムの実行に関するデータを収集するためのインストルメント化を含み得る。インストルメント化は、プログラムの動作に直接は寄与しないコンピュータプログラムに追加される命令を含むことができる。インストルメント化は、例えば、コンパイラ、JIT(ジャストインタイム)コンパイラ、アセンブラ、リンカ、もしくはソースコードから実行可能コードにプログラムを変換するプロセスにて使用される他のツールによって、または、完全コンパイル化実行可能ファイルのポストプロセシングによって、自動的にプログラムに挿入されることができる。インストルメント化は、プログラマが明示的または黙示的にプログラムにインポートした命令のライブラリ、ヘッダファイル、または他のボディに埋め込まれることができる。インストルメント化は、プログラマによって手動でコンピュータプログラムに書き込まれることができる。コンパイラは、プログラマがプログラムソースコードに挿入してコンパイラに適切なインストルメント化命令を生成させることができる利用可能な特別コンパイラキーワードまたはイントリンシックを作成することによりプログラムを手動でインストルメント化できるようプログラマを支援するように構成することができる。インストルメント化は、コンピュータプログラムを実行するオペレーティングシステムまたはハイパーバイザに埋め込まれことができる。インストルメント化は、コンピュータプログラムが実行されるハードウェアまたはシミュレータに、またはコンピュータシステムの動作を監視する補助ハードウェアに埋め込まれることができる。
コンピュータプログラムに挿入されたインストルメント化は、ランタイムパフォーマンスおよび/またはそのコンピュータプログラムのメモリフットプリントに悪影響を与える可能性がある。インストルメント化はプログラムデバッグのためにおよび他の目的のために非常に有用である可能性があるが、いくつかまたはすべてのインストルメント化を除去したコンピュータプログラムの実行可能ファイルを構築することが有益であり得る状況もある。
改善バックエンドは、プログラマの手作業による挿入、ライブラリもしくまたはオペレーティングシステムにおける埋め込み、またはソースコードから実行可能ファイルにプログラムを変換するプロセス中の自動的挿入を含む、多くのソースからのインストルメント化を含むことができる。上記の場合のそれぞれにおいて改善バックエンドで、コンパイラは、実行可能コードにおけるインストルメント化のフットプリント低減、メモリ内のインストルメント化のフットプリント低減、および/またはインストルメント化のランタイムパフォーマンス影響低減、および/またはインストルメント化に必要なログ空間量低減のために、インストルメント化を最適化するように構成されることができる。
改善バックエンドは、インストルメント化を使用して、システムにおける実行のスレッドの実行パスをどれも記録しない、または、いくつかもしくはすべての実行のスレッドの実行パスを記録することができる。
実施形態において、改善バックエンドは、最新から最古までなど、データが時間的に逆方向にデコードされることを可能にするような方法でトレースデータをロギングすることができる。この目的のために、改善バックエンドは、変更されようとしているメモリの内容(「プリイメージ」)をロギングすることができる。プリイメージロギングの1つの方法が図18Aである。この例では、プリイメージがロードされ、そしてロギングされる。修正されたデータのアドレス、修正されたデータの長さ等などのメタデータが、同時にロギングされ得る。最後に、メモリの修正が行われる。プリイメージロギングの他の方法が、ロギングが行われる環境に応じて使用され得る。
プリイメージログインストルメント化は、本明細書に記載されるように、いくつかの実施形態では、基本ブロック内の各メモリストアオペレーションについて、影響を受けたメモリのアドレス、プリイメージ、ストアの幅等などの情報をロギングすることができる。しかし、ロギングされた情報の消費者は、他のソースからのこの情報のサブセットが、情報のサブセットが冗長であってロギングの必要がない場合にあたるかを決定し得る。不要なデータをロギングしないようにインストルメント化を最適化することは、不要なロギング命令を排除することでランタイムパフォーマンスを向上させることができてログ空間のより効率的な使用につながるという点で有利である。本明細書中に記載の留保トレースデータ最適化は、このような最適化である。
いくつかの場合、特定のメモリ位置(「副作用メモリ」と称することができる)からプリイメージ値をロードしようとすることは、望ましくない効果を有し得る。例えば、特定のメモリマップ化レジスタは、読み出し時にハードウェアデバイスの状態に影響を与える可能性がある。副作用メモリへのストアが行われた場合、改善バックエンドにおけるコンパイラは、プリイメージを読み出さない代替インストルメント化を生成するように構成することができ、したがって、任意の望ましくない副作用を回避する。このようなインストルメント化は、例えばストアのアドレスをロギングすることにより、通常の情報のサブセットをロギングすることができる。プリイメージを除いて、通常の情報をロギングすることにより、プリイメージに依存しない改善バックエンドおよび時間走行デバッガは、副作用メモリ上で動作しているときに、依然として正常に機能することができる。例えば、時間的に前方または後方への移動を停止する条件内でも、このようなストアを依然として使用することができる。
レジスタ状態スナップショット
実施形態では、改善バックエンドは、プログラマが関心のあり得るオペレーティングシステムイベントをロギングすることができる。例としては、実行のスレッドおよび/またはアドレス空間の作成および破壊、実行のスレッドおよび/またはアドレス空間の間の通信、システム上で実行中のアプリケーションのパフォーマンスに影響を与える可能性がある、および/または、データの到着もしくは関心のあるなんらかの他の外部イベントを示す可能性があるものを含むハードウェア割り込み、実行のスレッドのスケジューリングに影響を及ぼす、および/または、アプリケーションレジスタまたはメモリ状態を修正するオペレーティングシステムイベント、仮想メモリのマッピングおよび/またはマッピング解除、ミューテックス、セマフォなどの同期プリミティブの使用が挙げられる、これらに限定されない。
アプリケーション内外で発生するメモリおよびレジスタ変更のロギングのための本明細書に記載された技術は、その実行時のアプリケーションの状態へのほとんどの変更を捕捉するのに十分である。しかし、改善バックエンドが様々な時点でシステムの状態を正確に再現するように別個に取り扱うことができる捕捉されない付加的な場合がある可能性がある。
実施形態では、トレースデータの一部または全部は、ターゲットコンピュータシステムの(RAMなどの)メモリに保存することができる。実施形態では、トレースデータの一部または全部は、コンパイラを実行するコンピュータシステムなどの別のコンピュータシステムのメモリに記憶することができる。実施形態では、トレースデータのストレージを、ターゲットコンピュータシステムおよび別のコンピュータシステムのメモリにわたって分割することができる。
いくつかの実施形態では、改善バックエンドは、コンピュータプログラムに挿入されるインストルメント化がRAM内のログにデータを挿入することができる、本明細書に記載のロギング機構などの1つ以上の機構を含むことができる。システムのCPUアーキテクチャおよびキャッシュの構造に依存するが、このようなログにログデータを書き込むと、プログラムデータがキャッシュから削除される可能性があり、アプリケーションプログラムのより遅いランタイムパフォーマンスとなってしまう。キャッシュ使用量を管理するための様々な技術により、改善バックエンドがこのパフォーマンスへの影響を軽減または解消することを可能にし得る。
;次の例では、r15が、書き込まれる次のログ位置をポイントする。
;前の命令とともに、その内容をプリフェッチせずに、
;次のキャッシュラインがログに割り当てられることを確保する
;前の命令とともに、最も近い時点で書かれたログの
;セクションをキャッシュからフラッシュし、よってそれは
;再利用され得る。
実施形態では、改善バックエンドは、最新から最古までのロギングされたデータを収集する。所与のレコードの解釈が以前にロギングされたレコードに依存しないようにロギングされたデータが構成されている場合には、改善バックエンドは時間走行デバッガユーザインタフェースへの検索時にすぐに、収集されたデータを利用可能にすることができ、プログラマは、収集されるとすぐにデータの解析およびデバッグを開始することができる。より多くのデータが収集されると、すべてのデータが収集されるまで、それはプログラマに利用できるようになる。
改善バックエンドは、いくつかの実施形態による複数ログへとデータをロギングすることができる。複数ログにロギングされたデータはマージされて、全体として解析されることができる。複数ログへのロギングにより、複数の実行のスレッドを有するシステムにおいて、より効率的なロギングが可能となり、ロックなどの競合処理機構を必要とせずともよい。複数ログからロギングされたデータをマージすることにより、SMPシステム、および、実行のスレッドが同時に実行されてメモリを共有し得る他の構成のデバッグが可能になる。複数ログからロギングされたデータをマージすることにより、分散システム、および実行のスレッドが同時に実行されるがメモリを共有しない他の構成のデバッグが可能になる。複数ログからロギングされたデータをマージすることにより、異なるタイプおよび/またはアーキテクチャの複数のCPUを有するもの、メモリを共有するおよびしない同時に実行される実行のスレッドの任意の組み合わせを有するもの、または、CPUが共有メモリによってまたはメッセージパッシングによってまたは他の手段によって互いに通信するもののなどの複雑なシステムのデバッグが可能になる。
改善バックエンドは、いくつかの実施形態によれば、ログに表される任意の時点におけるターゲットプログラムのメモリの状態を再構成することができる。プリイメージデータを含む以前に記録されたメモリ変更レコードを使用して、次のようにターゲットプログラムのメモリ状態を再構成することができる。
メモリ変更レコードは、本明細書に記載されるように、いくつかの実施形態では、メモリ状態の漸進的変化を表すことができる。それら自身によりそのような変化を解析することによって、改善バックエンドは経時的に変化するメモリ位置の内容を再構成することができる。デバッグ中のシステムのメモリの完全なイメージを作成するために、改善バックエンドは、既知の時点でのシステムのメモリの一部またはすべての内容を含むベースラインイメージを使用することができる。改善バックエンドは、ベースラインイメージから始まって、メモリ変更レコードを使用してメモリを再構成する以前に記載された技術、または同様の技術を用いて、時間的に前または後にメモリを再構成することができる。そのようなベースラインイメージは、システムメモリの単一スナップショットであることができ、または、それは、同時にまたは異なる時間に撮られた複数のスナップショットを含むことができる。ベースラインイメージは、ログによってカバーされる任意の時間に由来することができる。
改善バックエンドが、ベースラインメモリイメージの構築のために、またはなんらかの他の目的のために必要な時に一度に1つのプログラムメモリのセクションをダウンロードする実施形態では、プログラムメモリの内容が2つのセクションのコピー間隔を変更することが起こり得、プログラムのメモリの不整合イメージとなってしまう。いくつかの実施形態は、この問題を緩和するために(本明細書に記載の)同期実行制御などの実行制御戦略を採用することができる。しかし、採用される実行制御戦略または他の理由により、改善バックエンドがこのようなプログラムメモリのダウンロードを開始した後にプログラムメモリが修正されないことを保証しない実施形態では、改善バックエンドは、プログラムのメモリの整合性のあるイメージを保証するために、本明細書に記載されるものなどの技術を使用することができる。
いくつかの実施形態では、ターゲットシステムのメモリを再構成するとき、改善バックエンドは、仮想メモリアドレス、物理メモリアドレス、またはその両方で動作することができる。改善バックエンドは、仮想アドレスと物理アドレスとの間の関係に関する情報を含む仮想メモリマッピング情報をターゲットシステムから収集することができる。このようなセキュリティモデルをサポートするCPU上では、改善バックエンドによって収集された仮想メモリマッピング情報は、保護リングに関する情報、およびより少ない特権コードからデータを保護する他の手段を含むことができる。改善バックエンドは、ターゲットシステムのその内部表現を編成するのを助けるために、仮想メモリマッピング情報と他のメモリ保護情報とを使用することができる。例えば、改善バックエンドは、異なる仮想アドレス空間で同じアドレスを区別するために仮想メモリマッピング情報を使用することができ、これは、異なる物理的メモリを表し、したがって異なる値を含むことができる。改善バックエンドは、共有メモリを表すために仮想メモリマッピング情報を使用することができ、そこでは、同じまたは異なる仮想アドレス空間内の異なる仮想アドレスが同じ物理メモリを表している。共有メモリを表すために仮想メモリマッピング情報を用いることにより、改善バックエンドは、任意の特別なインストルメント化または共有メモリへのストアのロギングを提供する改善バックエンドの必要性を排除することができる。
時には、改善バックエンドが、デバッグ中のシステム内の1つ以上のCPUの実際のまたは理論的な挙動を再構成するなど、1つ以上のCPUの命令レベルシミュレーションを実行できるようにすることが有用であり得る。これは再構成シミュレーションによって達成することができる。
改善バックエンドの実装は、いくつかの実施形態によればCPUレジスタ状態の再構成を必要とし得る。(本明細書に記載されるように)レジスタ状態スナップショットを定期的にロギングする場合は、次の技術が、ログ内の任意のポイント(「宛先ポイント」と称され得る)でのレジスタ状態を再構成するために使用し得、そこでは、そのレジスタ状態が宛先ポイントにおいて未知である各CPUの宛先ポイントの前にロギングされた少なくとも1つのレジスタ状態スナップショットが存在している。
いくつかの実施形態では、改善バックエンドは、特定の宛先への後方/前方実行などの様々な時間走行デバッガ動作を実行するための基礎として本明細書に記載の技術を使用することができる。いくつかの典型的な宛先は、特定のメモリ位置に保存された命令が実行される次/前のポイント、特定のメモリ位置またはレジスタが修正される次/前のポイント、または、特定のタイムスタンプなどの特性の区別によって識別される特定のイベントである。
いくつかの実施形態では、本明細書に記載されるような複数のソースからマージされたログ上で動作する改善バックエンドが、単一の実行のスレッドで、記録された実行のスレッドのサブセットで、または必要に応じてログ全体で、動作を行うことができる。改善バックエンドは、そのスレッドに関連しないデータを無視することによって、単一の実行のスレッドからのデータ上で動作することができる。例えば、図22は、スレッド1に関するデータ(X802)および他のスレッドに関するデータ(X803)を含むマージされたログ(X801)を示す。データは、本明細書に記載されたものなどの1つ以上のマージ技術を使用して単一ログ(X801)にマージされ得、それにより、それらはマージされたログにおいて論理的に狂った順序とならない。この例ではプログラマは、時間走行デバッガが、スレッド1に関するログの後のセクション(X804)で始まり、スレッド1に関するログの前のセクション(X805)で終わるバックステップ動作などのスレッド1に特有の動作を実行するよう要求することができる。バックステップ動作の開始ポイントおよび終了ポイントを決定するために、改善バックエンドはスレッド1に関するデータ(X802)のみを考慮する必要があり得る。しかし、バックステップ動作を行う際に、改善バックエンドは、スレッド1に関しないデータを含む可能性があるマージされたログからのデータの範囲で動作する、本明細書に記載のものなどの技術を使用してメモリ再構成およびレジスタ再構成を適用することができる。結果として、バックステップなどの単一の実行のスレッドにのみ関する動作を行うと、他の実行のスレッドのシミュレートされた状態を変更して、論理的に整合性のあるシステムの全体の状態を維持することができる。
本明細書に記載の機能を使用して、改善バックエンドは、いくつかの実施形態では、典型的には時間走行デバッガによって必要とされるステッピングおよび実行動作の一部またはすべてを実行することができる。このような動作はしばしばマシン命令粒度で動作し、これは、デバッグ中のシステム内のCPUによって実行される個々のマシン命令がそのような動作を実行するために異なる時点が考慮されることを意味する。改善バックエンドは一意かつ明確にマージされたログ内の個々のマシン命令の実行を表すことができる。個々のマシン命令は、マージされたログ内の位置およびメモリ内のマシン命令のアドレスによって一意かつ明確に表すことができる。
本明細書に記載の機能は、改善バックエンドが時間走行デバッガをサポートするのに十分ではあるが、改善バックエンドのいくつかの実施形態が、時間的により高いレベルの移動に関する責任の一部を実行するのに、より効率的である可能性がある。時間走行デバッガは、改善バックエンドでこれらの機能を利用するように構成されることができ、それにより、それ自身の作業負荷を低減する。
いくつかの実施形態では、改善バックエンドは、改善バックエンドを採用しないデバッガでは可能ではない多くの強力なデバッグ機能を提供することができる。例えば、改善バックエンドは、改善バックエンドを採用しないデバッガでは容易にまたは全く検出することができないメモリ破損および/または競合を伴うバグを検出するために使用されることができる。改善バックエンドを採用しないデバッガは典型的には、単一CPU上で発生したときにこのようなバグを検出することに限定されているのに対し、改善バックエンドは、単一のCPU上でもしくはSMP構成などのメモリを共有する複数のCPU上で発生する場合、または、CPUがメッセージパッシングによってまたは他の手段によって通信する分散環境において、または、上記もしくは他の構成のうちの1つ以上を伴う複雑なシステムにおいて、このようなバグを検出し、プログラマがデバッグするのを助けることができる。例えば競合は、メモリ位置が複数の実行のスレッドによって読み出しおよび/または書き込みされる場合に発生する可能性がある。このような競合は、予測不能なシステム挙動および他のこのような診断困難バグにつながる可能性がある。
いくつかの実施形態では、改善バックエンドは、時間の経過とともにコールスタック深度の変化に関する情報をロギングまたは合成することができ、これは、本明細書に記載の移動技術または類似の技術と組み合わせて、改善バックエンドがスタック深度感受性移動を実装することを可能にできる。スタック深度感受性移動の例としては、これらに限定されないが、固定コールスタック深度でのソースコードの行の間で(それぞれ)前または後にステップすることができるソースレベル前方および後方ステッピング、および、現在の関数を呼び出した関数へステップするフォワードおよびバックステップアップが挙げられる。例えば、ソースレベルバックステップは、現在の命令が以前のソース行に関連付けられた命令範囲内に収まり、コールスタック深度が変更されないままである限り継続する後方移動として実装することができる。
いくつかの実装では、一意にロギングされたイベントが識別できるようにすることが有用であり得る。例えば、時間走行デバッガ、または改善バックエンドによって収集されたデータを利用する他のデバッグツールは、プログラマにデータのグラフィカル表現を提供し得る。例えば、このようなデバッグツールは、システムの実行中に発生した関心対象のイベントのタイムラインを表示するために改善バックエンドからのデータを使用することができる。この表現内でクリックするなど、ユーザインタフェース手段を介して、プログラマは、対応する時点へと時間走行デバッガを走行させたいという要望を示すことができる。これを達成するために、時間走行デバッガは、改善バックエンドに所望の宛先を指定することができ、改善バックエンドはそして、所望の時間におけるシステムの状態を再構成することができる。これを達成するために、改善バックエンドは、ログ内のすべての異なる時点(「モーメント」と称され得る)について一意識別子を提供することができる。モーメントは、限定されるものではないが、単一マシン命令の実行、単一オペレーティングシステムイベント、または2つの実行のスレッド間の通信の単一インスタンスを含むことができる。いくつかの実施形態では、改善バックエンドは、本明細書に記載されているように、移動動作の停止ポイントを制御する条件のコンポーネントとして、このような識別子を受け入れることができる。別の例では、改善バックエンドは、改善バックエンドによって収集されたデータをグラフィカルに表示するユーザインタフェースで使用するために、各モーメントに一意タイムスタンプを割り当てることができる。このようなユーザインタフェースは、プログラムパフォーマンスのビジュアル化および解析、システムのタイミング特性の解析、ならびに、システムの競合条件および他の同時実行関連態様の検出および解析を含むがこれらに限定されない多くのもののために使用されることができる。いくつかの実施形態では、ユーザインタフェースは、システムの状態を再構成する時点の選択などの、ユーザ活動に応答して動的に更新または変更される。例えば、ユーザインタフェースは、選択された時点でのメモリおよび/またはレジスタの状態(例えばメモリおよび/またはレジスタに保存されている値)を表示するように更新または変更されることができる。システムの状態は、システムの1つ以上のCPUの状態を含むことができる。
ユーザまたはプログラマが、改善バックエンドを伴って実装された時間走行デバッガを使用する過程を経て、関心対象モーメントに遭遇した場合、改善バックエンドは、例えばユーザの要求に応じて、そのモーメント(「ブックマーク」と称され得る)に対応する識別子を保存するために命令され得る。実施形態では、改善バックエンドは、識別子を保存して後でそれを再呼び出しすることができ、ユーザがブックマークモーメントに容易に戻ることができる。いくつかの実施形態によれば、改善バックエンドは、本明細書に記載されるように移動動作の終了条件の一部として、このようなブックマークを使用することができる。例えば、改善バックエンドは、時間の移動を実行するように依頼されることができ、指定されたブックマークで表されるモーメントにおいてデバッグされるシステムの状態を再構成する。プログラマは、システムの実行中の関心対象モーメントの記録および再訪、ならびに、他のプログラマへの関心対象モーメントの通信を含むがこれらに限定されない多くの目的のために、ブックマークを使用することができる。
時間走行デバッガをサポートすることに加えて、いくつかの実装では、改善バックエンドは、アプリケーション実行中にこのようなバグにより不正アプリケーション挙動が生じなかった場合でも、(他のタスクの間でも)ロギングされたデータの自動解析、多くの異なる種類のバグの検出を行うことができる。このようなバグは、特定の再現困難な状況下でのみ、すなわち非常にまれにしかアプリケーションの不正挙動として現れ得ず、改善バックエンドの支援なしには発見およびフィックスするには非常に困難であり、時間がかかる。
いくつかの実施形態では、改善バックエンドによってロギングされたデータの解析を、本明細書に記載されるように、ログに表される実行についてのコードカバレッジデータを生成するために使用することができる。コードカバレッジデータは、プログラムの実行中に実行されたソフトウェアプログラム内の実行可能コードのサブセットに関する情報を含むことができる。コードカバレッジデータは、改善バックエンドによって生成されたログをスキャンし、基本ブロック実行情報を集約し、ログに表される時間の間に実行される各基本ブロック(またはその一部)のリストを生成することによって生成することができる。このリストは、プログラム内のすべての実行可能コード、または、プログラマの関心対象のプログラム内のコードのサブセット(例えば、システムおよび/またはサードパーティライブラリを省略する単なるユーザ書き込みコード)のリストと比較されることができる。実施形態では、得られたコードカバレッジデータをテーブル内に表示することができる。実施形態では、結果として得られるコードカバレッジデータは、ソースコードと併せて、例えば、ソースコード編集ウィンドウもしくはソースレベルデバッガにおけるコードの未実行の行を強調表示することによって、または他の方法で提示されることができる。実施形態では、本明細書に記載の技術は、テストスイートがソフトウェアプログラム内の実行パスをいかに良好にカバーするかを決定するために、テストスイートの実行中にコードカバレッジ情報を生成するために使用されることができる。実施形態では、結果として得られたコードカバレッジデータを、修正条件/決定カバレッジ解析(「MC/DC解析」)または他のそのようなソフトウェアテスト解析のために使用することができる。実施形態では、結果として得られたコードカバレッジデータを、DO−178B(「エアボーンシステムおよび機器のソフトウェア考慮事項」)認証、IEC61508(「機能安全」)認証、ISO/IEC15408(「コモンクライテリア」)認証、およびその他を含むがこれらに限定されないコードカバレッジ解析を必要とする多くの種類のソフトウェア認証のために使用することができる。改善バックエンドによってロギングされたデータからコードカバレッジデータを生成することは有利であり、それは、既に改善バックエンドによって必要とされるものを超えてコードカバレッジデータを生成するために追加のインストルメント化が必要とされず、コードカバレッジデータを生成するための定期的なサンプリングなどの不正確な技術に頼る必要はないからである。
ほとんどの場合、改善バックエンドの特定の実装が正確にメモリおよびレジスタの内容を再構成することができるが、データ値の再構成が可能ではない場合がある可能性がある。例えば、改善バックエンドは、例えば副作用揮発性メモリに保存する際に、メモリ変更についてのプリイメージ値をロギングしないかもしれない場合がある。また、ロギングされたデータの自動解析または他のそのような解析技術は、改善バックエンドがロギングされたイベントの正しい順序を特定することができないので、メモリまたはレジスタ値が未知である状況をもたらし得る。このような状況は一般的に、そのようなソフトウェアがSMP環境で実行されると、解析されているソフトウェアでの競合条件が原因で発生するが、他の原因も同様に可能である。このような場合についての特別な処理がなければ、デバッガがメモリまたはレジスタの内容を不正にプログラマに報告する可能性があり、混乱を招き、バグの発見およびフィックスが困難になる。
いくつかの実施形態では、改善バックエンドは、本明細書に記載されるように、時間走行デバッガおよび/または他のデバッグおよび解析ツールと関連して使用される場合、そうでなければ可能ではない方法でプログラマが複雑なコンピュータシステムの問題を診断およびデバッグすることを可能にする。本明細書に記載のシステムおよび技術を使用することにより、そうでなければ発見およびフィックスに数週間ないしは数か月かかるかもしれない、または全くフィックスされないかもしれない困難なバグを、典型的には数時間ないしは数日で解決することができる。
本明細書の開示は、垂直統合インストルメント化についての方法、システム、およびデバイス、ならびに、従来のデバッガと比較してデバッガのコンピュータ技術の機能、速度および動作を劇的に改善するトレース再構成システムを提供する。実施形態では、本明細書に開示されるシステムおよび方法は、ターゲットプログラムの実行中に発生したイベントの再生および/または再構成を提示するのに、ある場合には10倍以上の係数で時間を減少させることによって、ソフトウェアデバッガ技術分野における改善をもたらすように構成されることができる。
実施形態では、タイムスタンプは、基本ブロックへのエントリ時または基本ブロックからのイグジット時に挿入されない。代わりに、タイムスタンプは、とりわけ、FEEインストルメント化(本明細書で説明された)およびオペレーティングシステムとの通信などの他の動作の間に挿入される。補間は、1つ以上の命令または複数の命令の実行時間を決定するために用いられることができる。例えば、システムは、10個の命令などの命令のセットの平均実行時間を推定または測定することができ、この平均実行時間は、特定のタイムスタンプが挿入されなかった特定の複数の命令の実行時間を決定するために使用されることができる。具体的には、命令の平均実行時間は、2つのロギングされたタイムスタンプを発見し、これら2つのタイムスタンプがロギングされたポイント間に実行された命令の数をカウントし、タイムスタンプ間の経過時間を実行された命令の総数で除算することによって計算されることができる。
実施形態では、コンパイラは関数エントリおよび関数のイグジットに基づいてインストルメント化を挿入するように構成されている。以上はFEEインストルメント化と称され得、「関数エントリおよびイグジット」インストルメント化を意味する。本明細書で使用する場合、関数との用語は一般的に、特定のタスクを実行するソフトウェアプログラムの名前付きセクションまたは命令のグループを指す。FEEインストルメント化は、関数を実行するために使用される時間量の正確な推定値を提供することができる。この情報は、デバッグのためだけでなく、特定の関数の実行に費やされる時間量および/またはリソースを減らすなどの最適化のためにも有用である可能性がある。例えば、FEEインストルメント化に基づく情報は、視覚的にコールスタックを提示するために使用されることができる。実施形態では、インストルメント化は、関数へのエントリおよび関数からのイグジットの時にタイムスタンプを挿入することができる。実施形態では、補間は、その実行が例えばタイムスタンプの対の間に発生するエントリおよびイグジットポイント間にある関数の1つ以上の命令などの1つ以上の命令の実行時間を決定するために使用することができる。補間は、本明細書に記載されているように、線形、加重、非線形などである可能性がある。実施形態では、1つ以上のタイムスタンプを、関数へのエントリ後であるが関数からのイグジット前のトレースデータに追加的または代替的に挿入することができる。FEEインストルメント化を、基本ブロックのインストルメント化の代わりに、またはそれと組み合わせて使用することができる。実施形態において、コンパイラは、その実行が別の関数の実行から決定されることができる関数のインストルメント化をスキップするように構成されることができる。
図1Aは、デバッガおよびコンパイラを含む一般的なハードウェアおよびソフトウェアアーキテクチャのブロック図を示す。典型的なデバッガシステムは、実行可能コンピュータプログラムを生成するためのコンパイラおよびリンカプログラム108を有するホストシステム118を含む。デバッガプログラムは、トレースデータを収集してコンピュータプログラムの実行中またはその後にログファイルにそのようなデータを保存するように構成されているログダウンローダ112を含む。一般的に、コンパイラプログラムおよびリンカ108は、プログラマにより書かれたソースコード(図示せず)からターゲットプログラム114を生成する。コンパイラプログラムおよびリンカ108はまた、デバッガプログラム110の動作に役立つ情報を含むデバッガプログラム110によって使用されるデータファイル(図示せず)を生成することができる。一般に、デバッガプログラム110は、ユーザがターゲットプログラム114をデバッグできるように、ターゲットシステム120の要素と相互作用することができる。多くの場合、従来のデバッガシステムは、インタフェースマネージャ116を含み、これは、ユーザがデバッガプログラム110と相互作用するためのグラフィカルユーザインタフェースを提供するように構成されることができる。コンパイラおよびリンカプログラム108、デバッグプログラム110、ログダウンローダ112およびインタフェースマネージャ116は、ホストシステム118によって実行され、これは、例えばデバッグ接続117を介するターゲットプログラム114のように、コンピュータプログラムが実行されるターゲットシステム120とインタフェースする。ターゲットシステムは、ホストシステム118のハードウェアおよびオペレーティングシステム(図示せず)とは異なることができるオペレーティングシステム104を実行するハードウェア102を含む。オペレーティングシステム104は、コンピュータハードウェアおよびソフトウェアリソースを一般的に管理するシステムソフトウェアである。オペレーティングシステム104は、ターゲットプログラム114などのコンピュータプログラムのための共通のサービスを提供するためにシステムライブラリ106と併せて作動する。オペレーティングシステム104は、デバッガプログラム110にデバッグデータを提供するように構成されたエージェント122を含むことができる。デバッガプログラム110は、エージェント122に命令およびデータを提供することができる。
図4は、コンピュータプログラムをコンパイルしてデバッグするための高レベルプロセスの実施形態を示すフローチャートである。本明細書に開示されたシステムの実施形態は、ターゲットプログラムの実行を再構成および/またはシミュレートするためのコンパイラおよびデバッグシステムを含むことができる。ターゲットプログラムの実行を再構成および/またはシミュレートすることで、プログラマは、迅速に、効率的に、かつ正確にコンピュータプログラムをデバッグするために、このような情報を利用することができる。実施形態では、高レベルプロセスは、ブロック402で開始することができ、ブロック404において、システムは、コンピュータプログラムのソースコードファイルにアクセスするように構成されることができる。ブロック406において、システムは、システムのコンパイラを使用してターゲットプログラムに関連付けられたソースコードをコンパイルするように構成されることができる。コンパイラはさらに、トレースデータを生成するように構成されたインストルメント化命令を挿入することによって、ソースコードをインストルメント化するよう構成されることができる。ブロック408において、システムは、実行可能な機械可読プログラムを出力するためにリンカを利用するように構成されることができる。ブロック410において、システムは、トレースデータを収集し、ログファイルにそのようなデータを保存するように構成されたオペレーティングシステム上で機械可読プログラムを実行するように構成されることができる。ブロック412において、システムは、保存されたトレースデータに基づいてプログラムの実行を再構成および/またはシミュレートするために、デバッガシステムを利用するように構成されることができる。ブロック414において、プログラマは、再構成および/またはシミュレーションを解析するために、デバッガシステムのグラフィカルユーザインタフェースを利用することができる。グラフィカルユーザインタフェースを動的に変更または更新することができる。この解析を通して、プログラマは、プログラムのバグを特定し、任意のそのようなエラーを解決することができる。ブロック416では、プログラマはデバッガシステムによって生成された再構成および/またはシミュレーションの自身の解析に基づいて、ターゲットプログラムのソースコードをリバイズすることができる。任意選択的に、このプロセスは、ブロック404に戻って再度、処理を開始することができる。代替的に、プロセスは、ブロック418で終了することができる。実施形態では、プロセスを、オペレーティングシステムによって実行中の(すべての実行のスレッドについてを含む)複数の実行のスレッドについて実行することができる。
図11は、関数からなるソフトウェアプログラムの実施形態の高レベルの概要を示すブロック図である。実施形態では、ソフトウェアプログラム1100は、複数の関数から構成されることができる。本明細書で説明されるように、関数との用語は、一般的にソフトウェアプログラムの名前付きセクションまたは特定のタスクを実行する命令のグループを指す。実施形態では、ソフトウェアプログラム1100は、第1の関数(関数1)1102を含むことができ、これはプログラム(例えば主関数)へのエントリポイントとすることができる。実施形態では関数1は、1104で関数2に、1106で関数3に分岐することができる。関数2は、他の関数1108および1110につながる多数の他の分岐を含むことができる。
本明細書で説明されるシステムおよび方法の実施形態は、とりわけ、本明細書に記載される以下の最適化の1つ以上を利用することができる:後続する基本ブロックでのみ常に実行されるいくつかのまたはすべての基本ブロックへのエントリを別個に記録しないこと、図8Cおよび図8Dに関連して説明された最適化を行うこと、基本ブロックの最後に関連付けられたプログラムカウンタ値を記録すること、留保トレースデータ最適化、リーフ関数のインストルメント化をスキップすること、スタックエントリおよびイグジットマーカーを挿入しないこと。これらの最適化の1つ以上を使用することは、とりわけ、トレースデータの大きさの減少、ならびに、再生、再構成および/またはシミュレーションについての時間の短縮のうちの1つ以上に有利につながることができる。
図13A、図13Bは、時間走行デバッガシステムのグラフィカルユーザインタフェースを示す。図示のグラフィカルユーザインタフェースは、再生および/または再構成中に提示されることができる。実施形態では、ユーザは、グラフィカルユーザインタフェース1300と相互作用し、ターゲットコンピュータプログラムの実行をステップスルーしてターゲットコンピュータプログラムのソースコード内の対応する行と実行とを比較することができ、これは、プログラマがターゲットプログラムをデバッグするのを助けることができるプロセスである。本明細書に記載されるように、ユーザアクティビティまたは選択に応答して、グラフィカルユーザインタフェースを動的に変更または更新することができる。実施形態では、グラフィカルユーザインタフェース1300は、ユーザにソースコードを表示するための表示領域1322を含む。実施形態において、表示領域1322はまた、ターゲットプログラムの実行の再生または再構成を提示するための各種のデータを含み、例えば、実行コマンド、入力/出力、変数値/変更、レジスタ値/変更、メモリ値/変更、スタックトレース、ブレークポイント、ソースコード、ブレークポイントが配置され得る箇所を示すブレークドット等である。実施形態では、プログラムの現在の行および/またはデバッグされる時点は、矢印1332によって示される。実施形態では、コマンドの現在のコンテキストは、矢印1330によって示される。
実施形態では、本明細書で説明されるシステム、プロセスおよび方法が、図14に示したものなどのコンピューティングシステムを使用して実装される。例示的なコンピュータシステム1402は、1つ以上のネットワーク1418を介して1つ以上のコンピューティングシステム1420および/または1つ以上のデータソース1422と通信している。図14はコンピューティングシステム1402の実施形態を示すが、コンピュータシステム1402の構成要素およびモジュール内で提供される機能は、より少数の構成要素およびモジュールに結合、または、さらに追加的な構成要素およびモジュールに分離され得ることが認識される。
コンピュータシステム1402は、本明細書で説明する機能、方法、作用および/またはプロセスを実行するソフトウェア開発環境およびターゲットシステム1414を含む。ソフトウェア開発環境およびターゲットシステム1414は、本明細書にさらに論じられる中央処理ユニット1406によりコンピュータシステム1402上で実行される。実施形態ではターゲットシステムは、本明細書に示されるように、ソフトウェア開発環境1414と同じコンピュータシステム1402に常駐するのとは反対に、別のコンピュータシステム内に常駐し得る。
コンピュータシステム1402は、マイクロプロセッサなどのプロセッサを含み得る1つ以上の処理ユニット(CPU)1406を含む。実施形態において、コンピュータシステムは、対称型マルチプロセッサまたは対称マルチコア(SMP)システムなどのSMPシステムである。コンピュータシステム1402はさらに、情報の一時的保存のためのランダムアクセスメモリ(RAM)、情報の永久記憶のための読み出し専用メモリ(ROM)、および、ハードディスクドライブ、ソリッドステートドライブ(SSD)、フロッピーディスクまたは光学媒体記憶デバイスなどのマスストレージデバイス1404などのメモリ1410を含む。あるいは、マスストレージデバイスは、1つ以上のサーバで実装され得る。典型的には、コンピュータシステム1402の構成要素は、規格ベースのバスシステムを使用してコンピュータに接続される。バスシステムは、ペリフェラルコンポーネントインターコネクト(PCI)、マイクロチャネル、SCSI、インダストリアルスタンダードアーキテクチャ(ISA)およびエクステンデッドISA(EISA)アーキテクチャなどの様々なプロトコルを使用して実装することができる。
コンピュータシステム1402は、サーバ、Windowsサーバ、UNIXサーバ、パーソナルコンピュータ、ラップトップコンピュータおよび同様のものなどの様々なコンピューティングデバイス上で実行され得る。コンピューティングシステム1402は一般的に、z/OS、Windows95、Windows98、WindowsNT、Windows2000、WindowsXP、WindowsVista、Windows7、Windows8、Windows10、Linux、OS X、BSD、SunOS、Solaris、INTEGRITY、または独自のオペレーティングシステムを含む他の互換性のあるオペレーティングシステムなどの、オペレーティングシステムソフトウェアによって制御されて協調されている。オペレーティングシステムは、実行についてのコンピュータプロセスの制御およびスケジューリング、メモリ管理の実行、ファイルシステム、ネットワーキングおよびI/Oサービスの提供、ならびに/または、とりわけGUIなどのユーザインタフェースの提供を行うことができる。
図14に示すコンピュータシステム1402は、LAN、WANまたはインターネットなどのネットワーク1418に、通信リンク1416(有線、無線、またはそれらの組み合わせ)を介して結合されることができる。ネットワーク1418は、様々なコンピューティングデバイスおよび/または他の電子デバイスと通信する。ネットワーク1418は、1つ以上のコンピューティングシステム1420および1つ以上のデータソース1422と通信することができる。
実施形態では、非一時的コンピュータ記憶媒体は、タスクとしてターゲットコンピュータシステムのオペレーティングシステムによって実行されるコンピュータプログラムをデバッグするための命令を含み、命令は、ターゲットコンピュータシステムによって実行されると、実行を停止するための少なくとも1つの条件がトリガされるまで、ターゲットコンピュータシステム上でコンピュータプログラムの複数のプログラム命令を実行することを含む方法を実行し、ターゲットコンピュータシステムはメモリおよび少なくとも1つのプロセッサを含む。方法はまた、ターゲットコンピュータシステム上でコンピュータプログラムの複数の命令を実行しながら、コンピュータプログラムの実行に関連するトレースデータログにトレースデータを記録することを含むことができ、トレースデータは、実行中のプログラム命令のサブセットを識別するデータの第1のセット、コンピュータプログラムによって実行中の複数のメモリ書き込みを識別する第2のデータセット、および、実行を停止するための少なくとも1つの条件がトリガされたときにターゲットコンピュータシステムのメモリに保存されたメモリ値を含む第3のデータセットを含む。この方法はまた、複数のプログラム命令からのプログラム命令実行時のターゲットコンピュータシステムの状態の、少なくとも1つの条件がトリガされたときに実行中のプログラム命令からのコンピュータプログラムの実行とは逆の順序で、再構成用のトレースデータを提供することを含むことができ、再構成は一定のアルゴリズム的複雑さに応じて行われる。
一般的に本明細書中で使用される用語「モジュール」は、ハードウェアまたはファームウェアで具現されるロジックまたはソフトウェア命令の集合を指す。モジュールは、JAVA、CまたはC++などのプログラム言語で書かれる。ソフトウェアモジュールは実行可能プログラムにコンパイルまたはリンクされ、ダイナミックリンクライブラリにインストールされ得、または、BASIC、Perl、LUAもしくはPythonなどのインタープリタ言語で書かれ得る。ソフトウェアモジュールは、他のモジュールから、または、自身から呼び出され得、および/または、検出されたイベントまたは中断に応じて開始され得る。ハードウェアで実現されたモジュールは、ゲートおよびフリップフロップなどの接続された論理ユニットを含み、および/または、プログラム可能ゲートアレイまたはプロセッサなどのプログラム可能ユニットを含み得る。
Claims (204)
- 複数の時点における1つ以上のプログラムの状態を決定するために1つ以上のコンピュータプログラムをインストルメント化する方法であって、
変更した状態の少なくとも一部をロギングすることにより1つ以上のプログラムの状態で発生する複数の変更を、ロギングされた変更として記録すること、
ロギングされた変更の各々の発生前の時間から少なくとも前記一部の表現をプリイメージとしてロギングすることにより変更した状態の前記一部をロギングすること、
1つ以上のプログラムのベースライン状態をベースラインイメージとして得て、1つ以上のプリイメージを最も近い時点でロギングされたものから最も遠い時点でロギングされたものへと順次、ベースラインイメージに適用し、それにより、ベースラインイメージよりも前の時間での状態を再構成すること、および、
最新から最古まで1つ以上のプリイメージを検索および解釈し、それにより、検索、ダウンロードおよび/またはデコードされる対象の実行履歴を表すロギングされたデータの以前の部分を待たずに1つ以上のプログラムの最も近い時点での実行履歴の解析を可能とすることを含む、方法。 - ロギングされた変更の各々は、ロギングされた変更が発生する時間に記録されず、ロギングされた変更を1つ以上のレジスタの状態を含む少なくとも1つのレジスタ状態スナップショットを介して記録する、請求項1に記載の方法。
- 少なくとも1つのレジスタ状態スナップショットを記録することにより、1つ以上のプログラムのランタイムパフォーマンスおよび/またはメモリフットプリントに悪影響を与えることを回避する、請求項2に記載の方法。
- ベースラインイメージは、1つ以上のプログラムのメモリ状態を含む、請求項1〜3のいずれかに記載の方法。
- ベースラインイメージを取得することは、再構成に必要なときに1つずつベースラインイメージの複数のセクションを得て、それによりデバッグを開始するのに必要な時間をバウンディングすることを含む、請求項4に記載の方法。
- 少なくとも1つのセクションがダウンロードされた後にベースラインイメージを修正し、それにより異なる時間に得られたセクション間に1つ以上の不整合を引き起こし、方法はさらに、
1つ以上の不整合を解消するためにベースラインイメージの修正と併せて記録された1つ以上のプリイメージを適用することを含む、請求項5に記載の方法。 - ベースラインイメージは、システムメモリの少なくとも一部の以前に保存されたイメージを含む、請求項1〜6のいずれかに記載の方法。
- ベースラインイメージとしてシステムメモリの少なくとも一部の以前に保存されたイメージを使用すると、プログラマはデバッグを実行することができる、請求項7に記載の方法。
- デバッグは、1つ以上のプログラムが実行を停止した後のデバッグを含む、請求項8に記載の方法。
- ロギングされた変更が発生する前に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項1〜9のいずれかに記載の方法。
- ロギングされた変更が発生した後に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項1〜9のいずれかに記載の方法。
- ロギングされた変更中に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項1〜9のいずれかに記載の方法。
- 複数の時点における1つ以上のプログラムの状態の少なくとも一部を決定する方法であって、
ベースラインイメージとして1つ以上のプログラムのベースライン状態を得て、1つ以上のプリイメージを最も近い時点でロギングされたものから最も遠い時点でロギングされたものへと順次、ベースラインイメージに適用し、それにより、ベースラインイメージよりも前の時間での状態を再構成すること、および、
最新から最古まで1つ以上のプリイメージを検索および解釈し、それにより、検索、ダウンロードおよび/またはデコードされる対象の実行履歴を表すロギングされたデータの以前の部分を待たずに1つ以上のプログラムの最も近い時点での実行履歴の解析を可能とすることを含み、
1つ以上のプログラムの状態で発生した少なくとも1つの変更は、変更した状態の少なくとも一部をロギングすることによりロギングされた変更として記録されており、
変更した状態の前記一部は、ロギングされた変更の各々の発生前の時間から少なくとも前記一部の表現をプリイメージとしてロギングすることによりロギングされている、方法。 - ロギングされた変更の各々は、ロギングされた変更が発生する時間に記録されず、ロギングされた変更を1つ以上のレジスタの状態を含む少なくとも1つのレジスタ状態スナップショットを介して記録する、請求項13に記載の方法。
- 少なくとも1つのレジスタ状態スナップショットを記録することにより、1つ以上のプログラムのランタイムパフォーマンスおよび/またはメモリフットプリントに悪影響を与えることを回避する、請求項14に記載の方法。
- ベースラインイメージは、1つ以上のプログラムのメモリ状態を含む、請求項13〜15のいずれかに記載の方法。
- ベースラインイメージを取得することは、再構成に必要なときに1つずつベースラインイメージの複数のセクションを得て、それによりデバッグを開始するのに必要な時間をバウンディングすることを含む、請求項16に記載の方法。
- 少なくとも1つのセクションがダウンロードされた後にベースラインイメージを修正し、それにより異なる時間に得られたセクション間に1つ以上の不整合を引き起こし、方法はさらに、
1つ以上の不整合を解消するためにベースラインイメージの修正と併せて記録された1つ以上のプリイメージを適用することを含む、請求項17に記載の方法。 - ベースラインイメージは、システムメモリの少なくとも一部の以前に保存されたイメージを含む、請求項13〜18のいずれかに記載の方法。
- ベースラインイメージとしてシステムメモリの少なくとも一部の以前に保存されたイメージを使用すると、プログラマはデバッグを実行することができる、請求項19に記載の方法。
- デバッグは、1つ以上のプログラムが実行を停止した後のデバッグを含む、請求項20に記載の方法。
- ロギングされた変更が発生する前に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項13〜21のいずれかに記載の方法。
- ロギングされた変更が発生した後に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項13〜21のいずれかに記載の方法。
- ロギングされた変更中に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項13〜21のいずれかに記載の方法。
- 複数の時点における1つ以上のプログラムの状態を決定するために1つ以上のコンピュータプログラムをインストルメント化する方法であって、
変更した状態の少なくとも一部をロギングすることによって、1つ以上のプログラムの状態で発生する少なくとも1つの変更を、ロギングされた変更として記録するように構成された1つ以上の実行可能命令を挿入すること、および、
ロギングされた変更の各々の発生前の時間から少なくとも前記一部の表現をプリイメージとしてロギングすることにより変更した状態の前記一部をロギングするように構成された1つ以上の実行可能命令を挿入すること
を含み、
記録およびロギングにより、デバッガが、
1つ以上のプログラムのベースライン状態に対応するベースラインイメージに、1つ以上のプリイメージを最も近い時点でロギングされたものから最も遠い時点でロギングされたものへと順次、適用し、それによりベースラインイメージよりも前の時間での状態を再構成することができ、
最新から最古まで1つ以上のプリイメージを検索および解釈し、それにより、検索、ダウンロードおよび/またはデコードされる対象の実行履歴を表すロギングされたデータの以前の部分を待たずに1つ以上のプログラムの最も近い時点での実行履歴の解析を可能とする、方法。 - ロギングされた変更の各々は、ロギングされた変更が発生する時間に記録されず、ロギングされた変更を1つ以上のレジスタの状態を含む少なくとも1つのレジスタ状態スナップショットを介して記録する、請求項25に記載の方法。
- 少なくとも1つのレジスタ状態スナップショットを記録することにより、1つ以上のプログラムのランタイムパフォーマンスおよび/またはメモリフットプリントに悪影響を与えることを回避する、請求項26に記載の方法。
- ベースラインイメージは、1つ以上のプログラムのメモリ状態を含む、請求項25〜27のいずれかに記載の方法。
- 記録およびロギングにより、デバッガがさらに、再構成に必要なときに1つずつベースラインイメージの複数のセクションを得ることによりベースラインイメージを取得することができ、それによりデバッグを開始するのに必要な時間をバウンディングする、請求項28に記載の方法。
- 少なくとも1つのセクションがダウンロードされた後にベースラインイメージを修正し、それにより異なる時間に得られたセクション間に1つ以上の不整合を引き起こし、記録およびロギングにより、デバッガがさらに、
1つ以上の不整合を解消するためにベースラインイメージの修正と併せて記録された1つ以上のプリイメージを適用することができる、請求項29に記載の方法。 - ベースラインイメージは、システムメモリの少なくとも一部の以前に保存されたイメージを含む、請求項25〜30のいずれかに記載の方法。
- ベースラインイメージとしてシステムメモリの少なくとも一部の以前に保存されたイメージを使用すると、プログラマはデバッグを実行することができる、請求項31に記載の方法。
- デバッグは、1つ以上のプログラムが実行を停止した後のデバッグを含む、請求項32に記載の方法。
- ロギングされた変更が発生する前に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項25〜33のいずれかに記載の方法。
- ロギングされた変更が発生した後に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項25〜33のいずれかに記載の方法。
- ロギングされた変更中に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項25〜33のいずれかに記載の方法。
- 1つ以上のプロセッサによって実行されるとき、1つ以上のプロセッサに、複数の時点における1つ以上のプログラムの状態を決定するために1つ以上のコンピュータプログラムをインストルメント化する方法を実行させる命令を含む非一時的コンピュータ記憶媒体であって、方法は、
変更した状態の少なくとも一部をロギングすることにより1つ以上のプログラムの状態で発生する複数の変更を、ロギングされた変更として記録すること、
ロギングされた変更の各々の発生前の時間から少なくとも前記一部の表現をプリイメージとしてロギングすることにより変更した状態の前記一部をロギングすること、
1つ以上のプログラムのベースライン状態をベースラインイメージとして得て、1つ以上のプリイメージを最も近い時点でロギングされたものから最も遠い時点でロギングされたものへと順次、ベースラインイメージに適用し、それにより、ベースラインイメージよりも前の時間での状態を再構成すること、および、
最新から最古まで1つ以上のプリイメージを検索および解釈し、それにより、検索、ダウンロードおよび/またはデコードされる対象の実行履歴を表すロギングされたデータの以前の部分を待たずに1つ以上のプログラムの最も近い時点での実行履歴の解析を可能とすることを含む、コンピュータ記憶媒体。 - ロギングされた変更の各々は、ロギングされた変更が発生する時間に記録されず、ロギングされた変更を1つ以上のレジスタの状態を含む少なくとも1つのレジスタ状態スナップショットを介して記録する、請求項37に記載のコンピュータ記憶媒体。
- 少なくとも1つのレジスタ状態スナップショットを記録することにより、1つ以上のプログラムのランタイムパフォーマンスおよび/またはメモリフットプリントに悪影響を与えることを回避する、請求項38に記載のコンピュータ可読媒体。
- ベースラインイメージは、1つ以上のプログラムのメモリ状態を含む、請求項37〜39のいずれかに記載のコンピュータ記憶媒体。
- ベースラインイメージを取得することは、再構成に必要なときに1つずつベースラインイメージの複数のセクションを得て、それによりデバッグを開始するのに必要な時間をバウンディングすることを含む、請求項40に記載のコンピュータ記憶媒体。
- 少なくとも1つのセクションがダウンロードされた後にベースラインイメージを修正し、それにより異なる時間に得られたセクション間に1つ以上の不整合を引き起こし、方法はさらに、
1つ以上の不整合を解消するためにベースラインイメージの修正と併せて記録された1つ以上のプリイメージを適用することを含む、請求項41に記載のコンピュータ記憶媒体。 - ベースラインイメージは、システムメモリの少なくとも一部の以前に保存されたイメージを含む、請求項37〜42のいずれかに記載のコンピュータ記憶媒体。
- ベースラインイメージとしてシステムメモリの少なくとも一部の以前に保存されたイメージを使用すると、プログラマはデバッグを実行することができる、請求項43に記載のコンピュータ記憶媒体。
- デバッグは、1つ以上のプログラムが実行を停止した後のデバッグを含む、請求項44に記載のコンピュータ記憶媒体。
- ロギングされた変更が発生する前に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項37〜45のいずれかに記載のコンピュータ記憶媒体。
- ロギングされた変更が発生した後に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項37〜45のいずれかに記載のコンピュータ記憶媒体。
- ロギングされた変更中に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項37〜45のいずれかに記載のコンピュータ記憶媒体。
- 1つ以上のプロセッサによって実行されるとき、1つ以上のプロセッサに、複数の時点における1つ以上のプログラムの状態の少なくとも一部を決定する方法を実行させる命令を含む非一時的コンピュータ記憶媒体であって、方法は、
ベースラインイメージとして1つ以上のプログラムのベースライン状態を得て、1つ以上のプリイメージを最も近い時点でロギングされたものから最も遠い時点でロギングされたものへと順次、ベースラインイメージに適用し、それにより、ベースラインイメージよりも前の時間での状態を再構成すること、および、
最新から最古まで1つ以上のプリイメージを検索および解釈し、それにより、検索、ダウンロードおよび/またはデコードされる対象の実行履歴を表すロギングされたデータの以前の部分を待たずに1つ以上のプログラムの最も近い時点での実行履歴の解析を可能とすることを含み、
1つ以上のプログラムの状態で発生した少なくとも1つの変更は、変更した状態の少なくとも一部をロギングすることによりロギングされた変更として記録されており、
変更した状態の前記一部は、ロギングされた変更の各々の発生前の時間から少なくとも前記一部の表現をプリイメージとしてロギングすることによりロギングされている、
コンピュータ記憶媒体。 - ロギングされた変更の各々は、ロギングされた変更が発生する時間に記録されず、ロギングされた変更を1つ以上のレジスタの状態を含む少なくとも1つのレジスタ状態スナップショットを介して記録する、請求項49に記載のコンピュータ記憶媒体。
- 少なくとも1つのレジスタ状態スナップショットを記録することにより、1つ以上のプログラムのランタイムパフォーマンスおよび/またはメモリフットプリントに悪影響を与えることを回避する、請求項50に記載のコンピュータ記憶媒体。
- ベースラインイメージは、1つ以上のプログラムのメモリ状態を含む、請求項49〜51のいずれかに記載のコンピュータ記憶媒体。
- ベースラインイメージを取得することは、再構成に必要なときに1つずつベースラインイメージの複数のセクションを得て、それによりデバッグを開始するのに必要な時間をバウンディングすることを含む、請求項52に記載のコンピュータ記憶媒体。
- 少なくとも1つのセクションがダウンロードされた後にベースラインイメージを修正し、それにより異なる時間に得られたセクション間に1つ以上の不整合を引き起こし、方法はさらに、
1つ以上の不整合を解消するためにベースラインイメージの修正と併せて記録された1つ以上のプリイメージを適用することを含む、請求項53に記載のコンピュータ記憶媒体。 - ベースラインイメージは、システムメモリの少なくとも一部の以前に保存されたイメージを含む、請求項49〜54のいずれかに記載のコンピュータ記憶媒体。
- ベースラインイメージとしてシステムメモリの少なくとも一部の以前に保存されたイメージを使用すると、プログラマはデバッグを実行することができる、請求項55に記載のコンピュータ記憶媒体。
- デバッグは、1つ以上のプログラムが実行を停止した後のデバッグを含む、請求項56に記載のコンピュータ記憶媒体。
- ロギングされた変更が発生する前に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項49〜57のいずれかに記載のコンピュータ記憶媒体。
- ロギングされた変更が発生した後に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項49〜57のいずれかに記載のコンピュータ記憶媒体。
- ロギングされた変更中に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項49〜57のいずれかに記載のコンピュータ記憶媒体。
- 1つ以上のプロセッサによって実行されるとき、1つ以上のプロセッサに、複数の時点における1つ以上のプログラムの状態を決定するために1つ以上のコンピュータプログラムをインストルメント化する方法を実行させる命令を含む非一時的コンピュータ記憶媒体であって、方法は、
変更した状態の少なくとも一部をロギングすることによって、1つ以上のプログラムの状態で発生する少なくとも1つの変更を、ロギングされた変更として記録するように構成された1つ以上の実行可能命令を挿入すること、および、
ロギングされた変更の各々の発生前の時間から少なくとも前記一部の表現をプリイメージとしてロギングすることにより変更した状態の前記一部をロギングするように構成された1つ以上の実行可能命令を挿入すること
を含み、
記録およびロギングにより、デバッガが、
1つ以上のプログラムのベースライン状態に対応するベースラインイメージに、1つ以上のプリイメージを最も近い時点でロギングされたものから最も遠い時点でロギングされたものへと順次、適用し、それによりベースラインイメージよりも前の時間での状態を再構成することができ、
最新から最古まで1つ以上のプリイメージを検索および解釈し、それにより、検索、ダウンロードおよび/またはデコードされる対象の実行履歴を表すロギングされたデータの以前の部分を待たずに1つ以上のプログラムの最も近い時点での実行履歴の解析を可能とする、コンピュータ記憶媒体。 - ロギングされた変更の各々は、ロギングされた変更が発生する時間に記録されず、ロギングされた変更を1つ以上のレジスタの状態を含む少なくとも1つのレジスタ状態スナップショットを介して記録する、請求項61に記載のコンピュータ記憶媒体。
- 少なくとも1つのレジスタ状態スナップショットを記録することにより、1つ以上のプログラムのランタイムパフォーマンスおよび/またはメモリフットプリントに悪影響を与えることを回避する、請求項62に記載のコンピュータ記憶媒体。
- ベースラインイメージは、1つ以上のプログラムのメモリ状態を含む、請求項61〜63のいずれかに記載のコンピュータ記憶媒体。
- 記録およびロギングにより、デバッガがさらに、再構成に必要なときに1つずつベースラインイメージの複数のセクションを得ることによりベースラインイメージを取得することができ、それによりデバッグを開始するのに必要な時間をバウンディングする、請求項64に記載のコンピュータ記憶媒体。
- 少なくとも1つのセクションがダウンロードされた後にベースラインイメージを修正し、それにより異なる時間に得られたセクション間に1つ以上の不整合を引き起こし、記録およびロギングにより、デバッガがさらに、
1つ以上の不整合を解消するためにベースラインイメージの修正と併せて記録された1つ以上のプリイメージを適用することができる、請求項65に記載のコンピュータ記憶媒体。 - ベースラインイメージは、システムメモリの少なくとも一部の以前に保存されたイメージを含む、請求項61〜66のいずれかに記載のコンピュータ記憶媒体。
- ベースラインイメージとしてシステムメモリの少なくとも一部の以前に保存されたイメージを使用すると、プログラマはデバッグを実行することができる、請求項67に記載のコンピュータ記憶媒体。
- デバッグは、1つ以上のプログラムが実行を停止した後のデバッグを含む、請求項68に記載のコンピュータ記憶媒体。
- ロギングされた変更が発生する前に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項61〜69のいずれかに記載のコンピュータ記憶媒体。
- ロギングされた変更が発生した後に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項61〜69のいずれかに記載のコンピュータ記憶媒体。
- ロギングされた変更中に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項61〜69のいずれかに記載のコンピュータ記憶媒体。
- 少なくとも1つのメモリ、および、
複数の時点における1つ以上のプログラムの状態を決定するために1つ以上のコンピュータプログラムをインストルメント化するよう構成された1つ以上のプロセッサ
を備えるコンピュータシステムであって、1つ以上のプロセッサはさらに、
変更した状態の少なくとも一部をロギングすることにより1つ以上のプログラムの状態で発生する複数の変更を、ロギングされた変更として記録し、
ロギングされた変更の各々の発生前の時間から少なくとも前記一部の表現をプリイメージとしてロギングすることにより変更した状態の前記一部をロギングし、
1つ以上のプログラムのベースライン状態をベースラインイメージとして得て、1つ以上のプリイメージを最も近い時点でロギングされたものから最も遠い時点でロギングされたものへと順次、ベースラインイメージに適用し、それにより、ベースラインイメージよりも前の時間での状態を再構成し、および、
最新から最古まで1つ以上のプリイメージを検索および解釈し、それにより、検索、ダウンロードおよび/またはデコードされる対象の実行履歴を表すロギングされたデータの以前の部分を待たずに1つ以上のプログラムの最も近い時点での実行履歴の解析を可能とするように構成されている、システム。 - ロギングされた変更の各々は、ロギングされた変更が発生する時間に記録されず、ロギングされた変更を1つ以上のレジスタの状態を含む少なくとも1つのレジスタ状態スナップショットを介して記録する、請求項73に記載のシステム。
- 少なくとも1つのレジスタ状態スナップショットを記録することにより、1つ以上のプログラムのランタイムパフォーマンスおよび/またはメモリフットプリントに悪影響を与えることを回避する、請求項74に記載のシステム。
- ベースラインイメージは、1つ以上のプログラムのメモリ状態を含む、請求項73〜75のいずれかに記載のシステム。
- 1つ以上のプロセッサは、再構成に必要なときに1つずつベースラインイメージの複数のセクションを得て、それによりデバッグを開始するのに必要な時間をバウンディングするように構成されている、請求項76に記載のシステム。
- 少なくとも1つのセクションがダウンロードされた後にベースラインイメージを修正し、それにより異なる時間に得られたセクション間に1つ以上の不整合を引き起こし、1つ以上のプロセッサはさらに、
1つ以上の不整合を解消するためにベースラインイメージの修正と併せて記録された1つ以上のプリイメージを適用するように構成されている、請求項77に記載のシステム。 - ベースラインイメージは、システムメモリの少なくとも一部の以前に保存されたイメージを含む、請求項73〜78のいずれかに記載のシステム。
- 1つ以上のプロセッサは、ベースラインイメージとしてシステムメモリの少なくとも一部の以前に保存されたイメージを使用して、それにより、プログラマはデバッグを実行することができるように構成されている、請求項79に記載のシステム。
- デバッグは、1つ以上のプログラムが実行を停止した後のデバッグを含む、請求項80に記載のシステム。
- 1つ以上のプロセッサは、ロギングされた変更が発生する前に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行うように構成されている、請求項73〜81のいずれかに記載のシステム。
- 1つ以上のプロセッサは、ロギングされた変更が発生した後に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行うように構成されている、請求項73〜81のいずれかに記載のシステム。
- 1つ以上のプロセッサは、ロギングされた変更中に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行うように構成されている、請求項73〜81のいずれかに記載のシステム。
- 少なくとも1つのメモリ、および、
複数の時点における1つ以上のプログラムの状態の少なくとも一部を決定するよう構成された1つ以上のプロセッサ
を備えるコンピュータシステムであって、1つ以上のプロセッサはさらに、
ベースラインイメージとして1つ以上のプログラムのベースライン状態を得て、1つ以上のプリイメージを最も近い時点でロギングされたものから最も遠い時点でロギングされたものへと順次、ベースラインイメージに適用し、それにより、ベースラインイメージよりも前の時間での状態を再構成し、および、
最新から最古まで1つ以上のプリイメージを検索および解釈し、それにより、検索、ダウンロードおよび/またはデコードされる対象の実行履歴を表すロギングされたデータの以前の部分を待たずに1つ以上のプログラムの最も近い時点での実行履歴の解析を可能とするよう構成され、
1つ以上のプログラムの状態で発生した少なくとも1つの変更は、変更した状態の少なくとも一部をロギングすることによりロギングされた変更として記録されており、
変更した状態の前記一部は、ロギングされた変更の各々の発生前の時間から少なくとも前記一部の表現をプリイメージとしてロギングすることによりロギングされている、システム。 - ロギングされた変更の各々は、ロギングされた変更が発生する時間に記録されず、ロギングされた変更を1つ以上のレジスタの状態を含む少なくとも1つのレジスタ状態スナップショットを介して記録する、請求項85に記載のシステム。
- 少なくとも1つのレジスタ状態スナップショットを記録することにより、1つ以上のプログラムのランタイムパフォーマンスおよび/またはメモリフットプリントに悪影響を与えることを回避する、請求項86に記載のシステム。
- ベースラインイメージは、1つ以上のプログラムのメモリ状態を含む、請求項85〜87のいずれかに記載のシステム。
- 1つ以上のプロセッサは、再構成に必要なときに1つずつベースラインイメージの複数のセクションを得て、それによりデバッグを開始するのに必要な時間をバウンディングするように構成されている、請求項88に記載のシステム。
- 少なくとも1つのセクションがダウンロードされた後にベースラインイメージを修正し、それにより異なる時間に得られたセクション間に1つ以上の不整合を引き起こし、1つ以上のプロセッサはさらに、
1つ以上の不整合を解消するためにベースラインイメージの修正と併せて記録された1つ以上のプリイメージを適用するように構成されている、請求項89に記載のシステム。 - ベースラインイメージは、システムメモリの少なくとも一部の以前に保存されたイメージを含む、請求項85〜90のいずれかに記載のシステム。
- ベースラインイメージとしてシステムメモリの少なくとも一部の以前に保存されたイメージを使用すると、プログラマはデバッグを実行することができる、請求項91に記載のシステム。
- デバッグは、1つ以上のプログラムが実行を停止した後のデバッグを含む、請求項92に記載のシステム。
- ロギングされた変更が発生する前に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項85〜93のいずれかに記載のシステム。
- ロギングされた変更が発生した後に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項85〜93のいずれかに記載のシステム。
- ロギングされた変更中に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項85〜93のいずれかに記載のシステム。
- 少なくとも1つのメモリ、および、
複数の時点における1つ以上のプログラムの状態を決定するために1つ以上のコンピュータプログラムをインストルメント化するよう構成された1つ以上のプロセッサ
を備えるコンピュータシステムであって、1つ以上のプロセッサはさらに、
変更した状態の少なくとも一部をロギングすることによって、1つ以上のプログラムの状態で発生する少なくとも1つの変更を、ロギングされた変更として記録するように構成された1つ以上の実行可能命令を挿入し、および、
ロギングされた変更の各々の発生前の時間から少なくとも前記一部の表現をプリイメージとしてロギングすることにより変更した状態の前記一部をロギングするように構成された1つ以上の実行可能命令を挿入するよう構成され、
記録およびロギングにより、デバッガが、
1つ以上のプログラムのベースライン状態に対応するベースラインイメージに、1つ以上のプリイメージを最も近い時点でロギングされたものから最も遠い時点でロギングされたものへと順次、適用し、それによりベースラインイメージよりも前の時間での状態を再構成することができ、
最新から最古まで1つ以上のプリイメージを検索および解釈し、それにより、検索、ダウンロードおよび/またはデコードされる対象の実行履歴を表すロギングされたデータの以前の部分を待たずに1つ以上のプログラムの最も近い時点での実行履歴の解析を可能とする、システム。 - ロギングされた変更の各々は、ロギングされた変更が発生する時間に記録されず、ロギングされた変更を1つ以上のレジスタの状態を含む少なくとも1つのレジスタ状態スナップショットを介して記録する、請求項97に記載のシステム。
- 少なくとも1つのレジスタ状態スナップショットを記録することにより、1つ以上のプログラムのランタイムパフォーマンスおよび/またはメモリフットプリントに悪影響を与えることを回避する、請求項98に記載のシステム。
- ベースラインイメージは、1つ以上のプログラムのメモリ状態を含む、請求項97〜99のいずれかに記載のシステム。
- 記録およびロギングにより、デバッガがさらに、再構成に必要なときに1つずつベースラインイメージの複数のセクションを得ることによりベースラインイメージを取得することができ、それによりデバッグを開始するのに必要な時間をバウンディングする、請求項100に記載のシステム。
- 少なくとも1つのセクションがダウンロードされた後にベースラインイメージを修正し、それにより異なる時間に得られたセクション間に1つ以上の不整合を引き起こし、記録およびロギングにより、デバッガがさらに、
1つ以上の不整合を解消するためにベースラインイメージの修正と併せて記録された1つ以上のプリイメージを適用することができる、請求項101に記載のシステム。 - ベースラインイメージは、システムメモリの少なくとも一部の以前に保存されたイメージを含む、請求項97〜102のいずれかに記載のシステム。
- ベースラインイメージとしてシステムメモリの少なくとも一部の以前に保存されたイメージを使用すると、プログラマはデバッグを実行することができる、請求項103に記載のシステム。
- デバッグは、1つ以上のプログラムが実行を停止した後のデバッグを含む、請求項104に記載のシステム。
- ロギングされた変更が発生する前に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項97〜105のいずれかに記載のシステム。
- ロギングされた変更が発生した後に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項97〜105のいずれかに記載のシステム。
- ロギングされた変更中に、ロギングされた変更の各々に関連付けられたプリイメージのロギングを行う、請求項97〜105のいずれかに記載のシステム。
- ターゲットシステムの1つ以上の実行ユニット上で実行される1つ以上のコンピュータプログラムのメモリおよびレジスタの少なくとも一部の内容を再構成状態として宛先時点で再構成する方法であって、
複数の時点における再構成状態を再構成すること、
1つ以上のコンピュータプログラムの実行に起因するロギングされたデータに再構成を基づかせること
を含み、
前記ロギングされたデータは、1つ以上のコンピュータプログラムによって、または、オペレーティングシステムもしくは1つ以上のコンピュータプログラムの外部の別のエージェントによって、修正前の時間における再構成状態の少なくとも一部を表すプリイメージを含み、
前記ロギングされたデータはまた、宛先時点の前にロギングされた少なくとも1つのレジスタ状態スナップショットを含み、
方法は、宛先時点における再構成状態の少なくとも一部を決定するために命令セットシミュレータを適用することを含む、方法。 - 複数の時点のうちの少なくとも1つにおける再構成状態の表現を維持することをさらに含む、請求項109に記載の方法。
- 再構成状態の再構成中にロギングされたデータからプリイメージをコピーすることによってメモリ修正の直前における再構成状態を再現することをさらに含む、請求項110に記載の方法。
- 連続的に以前のメモリ修正記録の直前の時点における再構成状態を再現し、それにより1つ以上のコンピュータプログラムの実行中に連続的に以前のポイントを再現することをさらに含む、請求項111に記載の方法。
- ポストイメージを記憶するためのメモリ空間を予約することをさらに含む、請求項110に記載の方法。
- ポストイメージのために予約された同じメモリ空間にプリイメージを保存することをさらに含む、請求項113に記載の方法。
- ポストイメージを記憶するための予約されたメモリ空間にポストイメージとして表現の少なくとも一部をコピーすることをさらに含む、請求項113に記載の方法。
- ポストイメージをコピーすることによりメモリ修正直後の時点における再構成状態を再構成することをさらに含む、請求項113に記載の方法。
- 連続的に以後のメモリ修正直後の時点における再構成状態を再構成し、それにより1つ以上のプログラムの実行中に連続的にますます以後のポイントを再現することをさらに含む、請求項116に記載の方法。
- 実行ユニットが1つの時点で動作した再構成状態の少なくとも一部を再現すること、および、後の時点における再構成状態の少なくとも一部を決定するために命令セットシミュレータを適用することをさらに含む、請求項109〜117のいずれかに記載の方法。
- 実行ユニットが前方または後方にメモリを再構成することによって動作した再構成状態の少なくとも一部を再現することをさらに含む、請求項118に記載の方法。
- 後の時点を宛先時点とする、請求項119に記載の方法。
- レジスタ状態が宛先時点において未知である実行ユニットのセットを決定することをさらに含む、請求項109〜120のいずれかに記載の方法。
- レジスタ状態が宛先時点において未知である各実行ユニットについて、再構成ポイントと宛先時点との間の少なくとも1つのレジスタ状態スナップショットがロギングされているように再構成ポイントを決定することをさらに含む、請求項121に記載の方法。
- 再構成ポイントにおける再構成状態の少なくとも一部を再構成することをさらに含む、請求項122に記載の方法。
- 宛先時点に戻るためにメモリ再構成技術および再構成シミュレーション技術の組み合わせを使用することをさらに含む、請求項123に記載の方法。
- 実行ユニットのセットのうちの実行ユニットについての正確なレジスタ状態情報が利用可能であるとき再構成シミュレーション技術を使用することをさらに含む、請求項124に記載の方法。
- 実行ユニットのセットのうちの実行ユニットについての正確なレジスタ状態情報が利用できないときメモリ再構成技術を使用することをさらに含む、請求項124に記載の方法。
- 再構成状態のサブセットの再構成が可能ではないことを決定することをさらに含む、請求項109〜126のいずれかに記載の方法。
- 再構成状態のサブセットの再構成は、ロギングされないメモリ修正についての1つ以上のプリイメージ値のために可能ではない、請求項127に記載の方法。
- 副作用揮発性メモリに保存するとき、メモリ修正についての1つ以上のプリイメージ値がロギングされない、請求項128に記載の方法。
- メモリの状態のサブセットの再構成は、確かではないロギングされたイベントの正しい順序のために可能ではない、請求項127に記載の方法。
- ロギングされたイベントの正しい順序は、1つ以上のコンピュータプログラム内の1つ以上の競合条件のために確かではない、請求項130に記載の方法。
- 1つ以上の競合条件に関する情報を表示することをさらに含む、請求項131に記載の方法。
- 表示される情報は、1つ以上のメモリ位置にアクセス競合する1つ以上のコンピュータプログラム内の位置を含む、請求項132に記載の方法。
- 1つ以上のコンピュータプログラム内の位置は、ソースコード位置である、請求項133に記載の方法。
- 再構成状態の未知のサブセットを追跡することをさらに含む、請求項127に記載の方法。
- シミュレーションを行う際に再構成状態の異なるサブセットに再構成状態のサブセットの未知性を伝搬することをさらに含む、請求項135に記載の方法。
- 1つ以上のコンピュータプログラムの命令の結果が既知である場合、未知性を伝播しない、請求項136に記載の方法。
- 値が既知になったときに既知であると再構成状態の未知のサブセットをマーキングすることをさらに含む、請求項135に記載の方法。
- 値は、既知の値を伴うレジスタまたはメモリ位置をロードする命令をシミュレートした結果として既知になる、請求項138に記載の方法。
- レジスタ状態スナップショットから決定することができる場合に、値は既知になる、請求項138に記載の方法。
- 1つ以上のプロセッサによって実行されるとき、1つ以上のプロセッサに、ターゲットシステムの1つ以上の実行ユニット上で実行される1つ以上のコンピュータプログラムのメモリおよびレジスタの少なくとも一部の内容を再構成状態として宛先時点で再構成する方法を実行させる命令を含む非一時的コンピュータ記憶媒体であって、方法は、
複数の時点における再構成状態を再構成すること、
1つ以上のコンピュータプログラムの実行に起因するロギングされたデータに再構成を基づかせること
を含み、
前記ロギングされたデータは、1つ以上のコンピュータプログラムによって、または、オペレーティングシステムもしくは1つ以上のコンピュータプログラムの外部の別のエージェントによって、修正前の時間における再構成状態の少なくとも一部を表すプリイメージを含み、
前記ロギングされたデータはまた、宛先時点の前にロギングされた少なくとも1つのレジスタ状態スナップショットを含み、
方法は、宛先時点における再構成状態の少なくとも一部を決定するために命令セットシミュレータを適用することを含む、コンピュータ記憶媒体。 - 複数の時点のうちの少なくとも1つにおける再構成状態の表現を維持することをさらに含む、請求項141に記載のコンピュータ記憶媒体。
- 再構成状態の再構成中にロギングされたデータからプリイメージをコピーすることによってメモリ修正の直前における再構成状態を再現することをさらに含む、請求項142に記載のコンピュータ記憶媒体。
- 連続的に以前のメモリ修正記録の直前の時点における再構成状態を再現し、それにより1つ以上のコンピュータプログラムの実行中に連続的に以前のポイントを再現することをさらに含む、請求項143に記載のコンピュータ記憶媒体。
- ポストイメージを記憶するためのメモリ空間を予約することをさらに含む、請求項142に記載のコンピュータ記憶媒体。
- ポストイメージのために予約された同じメモリ空間にプリイメージを保存することをさらに含む、請求項145に記載のコンピュータ記憶媒体。
- ポストイメージを記憶するための予約されたメモリ空間にポストイメージとして表現の少なくとも一部をコピーすることをさらに含む、請求項145に記載のコンピュータ記憶媒体。
- ポストイメージをコピーすることによりメモリ修正直後の時点における再構成状態を再構成することをさらに含む、請求項145に記載のコンピュータ記憶媒体。
- 連続的に以後のメモリ修正直後の時点における再構成状態を再構成し、それにより1つ以上のプログラムの実行中に連続的にますます以後のポイントを再現することをさらに含む、請求項148に記載のコンピュータ記憶媒体。
- 実行ユニットが1つの時点で動作した再構成状態の少なくとも一部を再現すること、および、後の時点における再構成状態の少なくとも一部を決定するために命令セットシミュレータを適用することをさらに含む、請求項141〜149のいずれかに記載のコンピュータ記憶媒体。
- 実行ユニットが前方または後方にメモリを再構成することによって動作した再構成状態の少なくとも一部を再現することをさらに含む、請求項150に記載のコンピュータ記憶媒体。
- 後の時点を宛先時点とする、請求項151に記載のコンピュータ記憶媒体。
- レジスタ状態が宛先時点において未知である実行ユニットのセットを決定することをさらに含む、請求項141〜152のいずれかに記載のコンピュータ記憶媒体。
- レジスタ状態が宛先時点において未知である各実行ユニットについて、再構成ポイントと宛先時点との間の少なくとも1つのレジスタ状態スナップショットがロギングされているように再構成ポイントを決定することをさらに含む、請求項153に記載のコンピュータ記憶媒体。
- 再構成ポイントにおける再構成状態の少なくとも一部を再構成することをさらに含む、請求項154に記載のコンピュータ記憶媒体。
- 宛先時点に戻るためにメモリ再構成技術および再構成シミュレーション技術の組み合わせを使用することをさらに含む、請求項155に記載のコンピュータ記憶媒体。
- 実行ユニットのセットのうちの実行ユニットについての正確なレジスタ状態情報が利用可能であるとき再構成シミュレーション技術を使用することをさらに含む、請求項156に記載のコンピュータ記憶媒体。
- 実行ユニットのセットのうちの実行ユニットについての正確なレジスタ状態情報が利用できないときメモリ再構成技術を使用することをさらに含む、請求項156に記載のコンピュータ記憶媒体。
- 再構成状態のサブセットの再構成が可能ではないことを決定することをさらに含む、請求項141〜158のいずれかに記載のコンピュータ記憶媒体。
- 再構成状態のサブセットの再構成は、ロギングされないメモリ修正についての1つ以上のプリイメージ値のために可能ではない、請求項159に記載のコンピュータ記憶媒体。
- 副作用揮発性メモリに保存するとき、メモリ修正についての1つ以上のプリイメージ値がロギングされない、請求項160に記載のコンピュータ記憶媒体。
- メモリの状態のサブセットの再構成は、確かではないロギングされたイベントの正しい順序のために可能ではない、請求項159に記載のコンピュータ記憶媒体。
- ロギングされたイベントの正しい順序は、1つ以上のコンピュータプログラム内の1つ以上の競合条件のために確かではない、請求項162に記載のコンピュータ記憶媒体。
- 1つ以上の競合条件に関する情報を表示することをさらに含む、請求項163に記載のコンピュータ記憶媒体。
- 表示される情報は、1つ以上のメモリ位置にアクセス競合する1つ以上のコンピュータプログラム内の位置を含む、請求項164に記載のコンピュータ記憶媒体。
- 1つ以上のコンピュータプログラム内の位置は、ソースコード位置である、請求項165に記載のコンピュータ記憶媒体。
- 再構成状態の未知のサブセットを追跡することをさらに含む、請求項159に記載のコンピュータ記憶媒体。
- シミュレーションを行う際に再構成状態の異なるサブセットに再構成状態のサブセットの未知性を伝搬することをさらに含む、請求項167に記載のコンピュータ記憶媒体。
- 1つ以上のコンピュータプログラムの命令の結果が既知である場合、未知性を伝播しない、請求項168に記載のコンピュータ記憶媒体。
- 値が既知になったときに既知であると再構成状態の未知のサブセットをマーキングすることをさらに含む、請求項167に記載のコンピュータ記憶媒体。
- 値は、既知の値を伴うレジスタまたはメモリ位置をロードする命令をシミュレートした結果として既知になる、請求項170に記載のコンピュータ記憶媒体。
- レジスタ状態スナップショットから決定することができる場合に、値は既知になる、請求項170に記載のコンピュータ記憶媒体。
- 少なくとも1つのメモリ、および、
ターゲットシステムの1つ以上の実行ユニット上で実行される1つ以上のコンピュータプログラムのメモリおよびレジスタの少なくとも一部の内容を再構成状態として宛先時点で再構成するよう構成された1つ以上のプロセッサ
を備えるコンピュータシステムであって、1つ以上のプロセッサはさらに、
複数の時点における再構成状態を再構成し、
1つ以上のコンピュータプログラムの実行に起因するロギングされたデータに再構成を基づかせる
よう構成され、
前記ロギングされたデータは、1つ以上のコンピュータプログラムによって、または、オペレーティングシステムもしくは1つ以上のコンピュータプログラムの外部の別のエージェントによって、修正前の時間における再構成状態の少なくとも一部を表すプリイメージを含み、
前記ロギングされたデータはまた、宛先時点の前にロギングされた少なくとも1つのレジスタ状態スナップショットを含み、
1つ以上のプロセッサは、宛先時点における再構成状態の少なくとも一部を決定するために命令セットシミュレータを適用するよう構成される、システム。 - 1つ以上のプロセッサはさらに、複数の時点のうちの少なくとも1つにおける再構成状態の表現を維持するように構成されている、請求項173に記載のシステム。
- 1つ以上のプロセッサはさらに、再構成状態の再構成中にロギングされたデータからプリイメージをコピーすることによってメモリ修正の直前における再構成状態を再現するように構成されている、請求項174に記載のシステム。
- 1つ以上のプロセッサはさらに、連続的に以前のメモリ修正記録の直前の時点における再構成状態を再現し、それにより1つ以上のコンピュータプログラムの実行中に連続的に以前のポイントを再現するように構成されている、請求項175に記載のシステム。
- 1つ以上のプロセッサはさらに、ポストイメージを記憶するためのメモリ空間を予約するように構成されている、請求項174に記載のシステム。
- 1つ以上のプロセッサはさらに、ポストイメージのために予約された同じメモリ空間にプリイメージを保存するように構成されている、請求項177に記載のシステム。
- 1つ以上のプロセッサはさらに、ポストイメージを記憶するための予約されたメモリ空間にポストイメージとして表現の少なくとも一部をコピーするように構成されている、請求項177に記載のシステム。
- 1つ以上のプロセッサはさらに、ポストイメージをコピーすることによりメモリ修正直後の時点における再構成状態を再構成するように構成されている、請求項177に記載のシステム。
- 1つ以上のプロセッサはさらに、連続的に以後のメモリ修正直後の時点における再構成状態を再構成し、それにより1つ以上のプログラムの実行中に連続的にますます以後のポイントを再現するように構成されている、請求項180に記載のシステム。
- 1つ以上のプロセッサはさらに、実行ユニットが1つの時点で動作した再構成状態の少なくとも一部を再現し、および、後の時点における再構成状態の少なくとも一部を決定するために命令セットシミュレータを適用するように構成されている、請求項173〜181のいずれかに記載のシステム。
- 1つ以上のプロセッサはさらに、実行ユニットが前方または後方にメモリを再構成することによって動作した再構成状態の少なくとも一部を再現するように構成されている、請求項182に記載のシステム。
- 後の時点を宛先時点とする、請求項183に記載のシステム。
- 1つ以上のプロセッサはさらに、レジスタ状態が宛先時点において未知である実行ユニットのセットを決定するように構成されている、請求項173〜184のいずれかに記載のシステム。
- 1つ以上のプロセッサはさらに、レジスタ状態が宛先時点において未知である各実行ユニットについて、再構成ポイントと宛先時点との間の少なくとも1つのレジスタ状態スナップショットがロギングされているように再構成ポイントを決定するように構成されている、請求項185に記載のシステム。
- 1つ以上のプロセッサはさらに、再構成ポイントにおける再構成状態の少なくとも一部を再構成するように構成されている、請求項186に記載のシステム。
- 1つ以上のプロセッサはさらに、宛先時点に戻るためにメモリ再構成技術および再構成シミュレーション技術の組み合わせを使用するように構成されている、請求項187に記載のシステム。
- 1つ以上のプロセッサはさらに、実行ユニットのセットのうちの実行ユニットについての正確なレジスタ状態情報が利用可能であるとき再構成シミュレーション技術を使用するように構成されている、請求項188に記載のシステム。
- 1つ以上のプロセッサはさらに、実行ユニットのセットのうちの実行ユニットについての正確なレジスタ状態情報が利用できないときメモリ再構成技術を使用するように構成されている、請求項188に記載のシステム。
- 1つ以上のプロセッサはさらに、再構成状態のサブセットの再構成が可能ではないことを決定するように構成されている、請求項173〜190のいずれかに記載のシステム。
- 再構成状態のサブセットの再構成は、ロギングされないメモリ修正についての1つ以上のプリイメージ値のために可能ではない、請求項191に記載のシステム。
- 副作用揮発性メモリに保存するとき、メモリ修正についての1つ以上のプリイメージ値がロギングされない、請求項192に記載のシステム。
- メモリの状態のサブセットの再構成は、確かではないロギングされたイベントの正しい順序のために可能ではない、請求項191に記載のシステム。
- ロギングされたイベントの正しい順序は、1つ以上のコンピュータプログラム内の1つ以上の競合条件のために確かではない、請求項194に記載のシステム。
- 1つ以上のプロセッサはさらに、1つ以上の競合条件に関する情報を表示するように構成されている、請求項195に記載のシステム。
- 表示される情報は、1つ以上のメモリ位置にアクセス競合する1つ以上のコンピュータプログラム内の位置を含む、請求項196に記載のシステム。
- 1つ以上のコンピュータプログラム内の位置は、ソースコード位置である、請求項197に記載のシステム。
- 1つ以上のプロセッサはさらに、再構成状態の未知のサブセットを追跡するように構成されている、請求項191に記載のシステム。
- 1つ以上のプロセッサはさらに、シミュレーションを行う際に再構成状態の異なるサブセットに再構成状態のサブセットの未知性を伝搬するように構成されている、請求項199に記載のシステム。
- 1つ以上のコンピュータプログラムの命令の結果が既知である場合、未知性を伝播しない、請求項200に記載のシステム。
- 1つ以上のプロセッサはさらに、値が既知になったときに既知であると再構成状態の未知のサブセットをマーキングするように構成されている、請求項199に記載のシステム。
- 値は、既知の値を伴うレジスタまたはメモリ位置をロードする命令をシミュレートした結果として既知になる、請求項202に記載のシステム。
- レジスタ状態スナップショットから決定することができる場合に、値は既知になる、請求項202に記載のシステム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662406829P | 2016-10-11 | 2016-10-11 | |
US62/406,829 | 2016-10-11 | ||
PCT/US2017/055986 WO2018071450A1 (en) | 2016-10-11 | 2017-10-10 | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2019537782A true JP2019537782A (ja) | 2019-12-26 |
JP2019537782A5 JP2019537782A5 (ja) | 2020-11-19 |
JP7202293B2 JP7202293B2 (ja) | 2023-01-11 |
Family
ID=61188386
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019520612A Active JP7202293B2 (ja) | 2016-10-11 | 2017-10-10 | 垂直統合インストルメント化およびトレース再構成のためのシステム、方法およびデバイス |
Country Status (5)
Country | Link |
---|---|
US (8) | US9898385B1 (ja) |
EP (1) | EP3526673A4 (ja) |
JP (1) | JP7202293B2 (ja) |
CA (1) | CA3039198A1 (ja) |
WO (1) | WO2018071450A1 (ja) |
Families Citing this family (59)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10120781B2 (en) * | 2013-12-12 | 2018-11-06 | Intel Corporation | Techniques for detecting race conditions |
JP6223637B2 (ja) * | 2015-05-29 | 2017-11-01 | 三菱電機株式会社 | シミュレーション装置及びシミュレーション方法及びシミュレーションプログラム |
US10031834B2 (en) * | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US10042737B2 (en) | 2016-08-31 | 2018-08-07 | Microsoft Technology Licensing, Llc | Program tracing for time travel debugging and analysis |
WO2018071450A1 (en) | 2016-10-11 | 2018-04-19 | Green Hills Software, Inc. | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction |
US10310963B2 (en) | 2016-10-20 | 2019-06-04 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using index bits in a processor cache |
US10489273B2 (en) | 2016-10-20 | 2019-11-26 | Microsoft Technology Licensing, Llc | Reuse of a related thread's cache while recording a trace file of code execution |
US10310977B2 (en) | 2016-10-20 | 2019-06-04 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using a processor cache |
US10540250B2 (en) | 2016-11-11 | 2020-01-21 | Microsoft Technology Licensing, Llc | Reducing storage requirements for storing memory addresses and values |
US10318332B2 (en) | 2017-04-01 | 2019-06-11 | Microsoft Technology Licensing, Llc | Virtual machine execution tracing |
US10558809B1 (en) | 2017-04-12 | 2020-02-11 | Architecture Technology Corporation | Software assurance system for runtime environments |
JP6919338B2 (ja) * | 2017-05-30 | 2021-08-18 | オムロン株式会社 | プログラム開発支援装置、プログラム開発支援システム、プログラム開発支援方法、および、プログラム開発支援プログラム |
FR3067486B1 (fr) * | 2017-06-09 | 2021-08-27 | Cryptosense | Procede de detection non intrusif des failles de securite d'un programme informatique |
US20190042390A1 (en) * | 2017-08-01 | 2019-02-07 | Microsoft Technology Licensing, Llc | Focused execution of traced code in a debugger |
US20190102841A1 (en) * | 2017-10-04 | 2019-04-04 | Servicenow, Inc. | Mapping engine configurations with task managed workflows and grid user interfaces |
KR102415218B1 (ko) * | 2017-11-24 | 2022-07-01 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 이의 동작 방법 |
US10795801B2 (en) * | 2018-01-08 | 2020-10-06 | Ozcode Ltd | Time travel source code debugger incorporating asynchronous collaboration |
US10558572B2 (en) | 2018-01-16 | 2020-02-11 | Microsoft Technology Licensing, Llc | Decoupling trace data streams using cache coherence protocol data |
US11907091B2 (en) | 2018-02-16 | 2024-02-20 | Microsoft Technology Licensing, Llc | Trace recording by logging influxes to an upper-layer shared cache, plus cache coherence protocol transitions among lower-layer caches |
US10642737B2 (en) | 2018-02-23 | 2020-05-05 | Microsoft Technology Licensing, Llc | Logging cache influxes by request to a higher-level cache |
US10541042B2 (en) | 2018-04-23 | 2020-01-21 | Microsoft Technology Licensing, Llc | Level-crossing memory trace inspection queries |
US20190324891A1 (en) * | 2018-04-23 | 2019-10-24 | Microsoft Technology Licensing, Llc | Visualizing last/next known data values in time travel traces |
US10592396B2 (en) * | 2018-04-23 | 2020-03-17 | Microsoft Technology Licensing, Llc | Memory validity states in time-travel debugging |
US11237946B2 (en) * | 2018-05-03 | 2022-02-01 | Sap Se | Error finder tool |
US11599445B2 (en) * | 2018-06-15 | 2023-03-07 | Board Of Regents, The University Of Texas System | Watcher: precise and fully-automatic on-site failure diagnosis |
US10868825B1 (en) | 2018-08-14 | 2020-12-15 | Architecture Technology Corporation | Cybersecurity and threat assessment platform for computing environments |
US10620960B2 (en) * | 2018-08-20 | 2020-04-14 | Arm Limited | Apparatus and method for performing branch prediction |
US11086759B2 (en) * | 2018-09-27 | 2021-08-10 | SeaLights Technologies LTD | System and method for probe injection for code coverage |
US11010231B2 (en) * | 2018-10-03 | 2021-05-18 | International Business Machines Corporation | Automatic log generation |
US10884720B2 (en) | 2018-10-04 | 2021-01-05 | Microsoft Technology Licensing, Llc | Memory ordering annotations for binary emulation |
US10545850B1 (en) * | 2018-10-18 | 2020-01-28 | Denso International America, Inc. | System and methods for parallel execution and comparison of related processes for fault protection |
WO2020079676A1 (en) * | 2018-10-18 | 2020-04-23 | Sternum Ltd. | Applying security mitigation measures for stack corruption exploitation in intermediate code files |
US10684835B1 (en) * | 2018-12-11 | 2020-06-16 | Microsoft Technology Licensing, Llc | Improving emulation and tracing performance using compiler-generated emulation optimization metadata |
US10977162B2 (en) * | 2018-12-20 | 2021-04-13 | Paypal, Inc. | Real time application error identification and mitigation |
US10901658B2 (en) * | 2018-12-28 | 2021-01-26 | Micron Technology, Inc. | Host adaptive memory device optimization |
US10956304B2 (en) | 2019-01-25 | 2021-03-23 | Microsoft Technology Licensing, Llc | Dynamic diagnostic code instrumentation over a historic program execution |
US10877873B2 (en) | 2019-02-07 | 2020-12-29 | Microsoft Technology Licensing, Llc | Using historic execution data to visualize tracepoints |
US10949338B1 (en) * | 2019-02-07 | 2021-03-16 | Architecture Technology Corporation | Automated software bug discovery and assessment |
US11132280B2 (en) * | 2019-02-08 | 2021-09-28 | Microsoft Technology Licensing, Llc | Automatically identifying and highlighting differences between historic traces |
US11281560B2 (en) | 2019-03-19 | 2022-03-22 | Microsoft Technology Licensing, Llc | Input/output data transformations when emulating non-traced code with a recorded execution of traced code |
US11782816B2 (en) * | 2019-03-19 | 2023-10-10 | Jens C. Jenkins | Input/output location transformations when emulating non-traced code with a recorded execution of traced code |
US11074153B2 (en) | 2019-04-01 | 2021-07-27 | Microsoft Technology Licensing, Llc | Collecting application state in a runtime environment for reversible debugging |
US11113182B2 (en) * | 2019-04-01 | 2021-09-07 | Microsoft Technology Licensing, Llc | Reversible debugging in a runtime environment |
US10990506B2 (en) * | 2019-04-11 | 2021-04-27 | Microsoft Technology Licensing, Llc | Cross-thread memory indexing in time-travel debugging traces |
US10949332B2 (en) | 2019-08-14 | 2021-03-16 | Microsoft Technology Licensing, Llc | Data race analysis based on altering function internal loads during time-travel debugging |
US11030060B2 (en) | 2019-08-22 | 2021-06-08 | International Business Machines Corporation | Data validation during data recovery in a log-structured array storage system |
WO2021124464A1 (ja) * | 2019-12-17 | 2021-06-24 | 三菱電機株式会社 | 経路決定装置及び経路決定プログラム |
US11113180B2 (en) * | 2020-01-31 | 2021-09-07 | Salesforce.Com, Inc. | Efficiently tracking code location of run-time events in system software |
WO2021229295A1 (en) * | 2020-05-12 | 2021-11-18 | Lightrun Platform LTD | Systems and methods for debugging and application development |
WO2022031275A1 (en) * | 2020-08-05 | 2022-02-10 | Hewlett-Packard Development Company, L.P. | Detection of memory modification |
US11681508B2 (en) * | 2020-08-24 | 2023-06-20 | Cisco Technology, Inc. | Source code analysis to map analysis perspectives to events |
EP3961436A1 (en) * | 2020-08-28 | 2022-03-02 | Siemens Aktiengesellschaft | Methods and systems for controlling access to at least one computer program |
US20220100512A1 (en) * | 2021-12-10 | 2022-03-31 | Intel Corporation | Deterministic replay of a multi-threaded trace on a multi-threaded processor |
US12001989B2 (en) * | 2021-02-03 | 2024-06-04 | Dynatrace Llc | Optimizing cloud-based IT-systems towards business objectives: automatic topology-based analysis to determine impact of IT-systems on business metrics |
US11275638B1 (en) * | 2021-03-02 | 2022-03-15 | Quanta Computer Inc. | Systems and methods for storing debug information |
US11693759B2 (en) | 2021-05-14 | 2023-07-04 | International Business Machines Corporation | Providing for multi-process log debug without running on a production environment |
GB202110155D0 (en) * | 2021-07-14 | 2021-08-25 | Graphcore Ltd | GSP trace unit |
US20230195590A1 (en) * | 2021-12-20 | 2023-06-22 | Deep Vision Inc. | System and method for profiling on-chip performance of neural network execution |
KR20230094308A (ko) * | 2021-12-21 | 2023-06-28 | 삼성전자주식회사 | 저장 장치, 그것을 포함하는 호스트 시스템, 및 그것의 동작 방법 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0468446A (ja) * | 1990-07-09 | 1992-03-04 | Mitsubishi Electric Corp | デバッグ支援装置 |
JPH096647A (ja) * | 1995-06-21 | 1997-01-10 | Oki Electric Ind Co Ltd | 逆実行デバッグシステム |
US5784552A (en) * | 1993-07-28 | 1998-07-21 | Digital Equipment Corporation | Debugging a computer program by simulating execution forwards and backwards in a main history log and alternative history logs |
US20050086246A1 (en) * | 2003-09-04 | 2005-04-21 | Oracle International Corporation | Database performance baselines |
JP2012256279A (ja) * | 2011-06-10 | 2012-12-27 | Sony Corp | 情報処理装置および方法、並びにプログラム |
US20150052403A1 (en) * | 2013-08-19 | 2015-02-19 | Concurix Corporation | Snapshotting Executing Code with a Modifiable Snapshot Definition |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5894575A (en) * | 1996-11-25 | 1999-04-13 | International Business Machines Corporation | Method and system for initial state determination for instruction trace reconstruction |
US6253317B1 (en) * | 1997-01-09 | 2001-06-26 | Sun Microsystems, Inc. | Method and apparatus for providing and handling traps |
US6311327B1 (en) | 1998-03-02 | 2001-10-30 | Applied Microsystems Corp. | Method and apparatus for analyzing software in a language-independent manner |
US20020087949A1 (en) | 2000-03-03 | 2002-07-04 | Valery Golender | System and method for software diagnostics using a combination of visual and dynamic tracing |
US6901581B1 (en) | 2002-10-02 | 2005-05-31 | Eridon Corporation | Method for software debugging via simulated re-execution of a computer program |
US7490103B2 (en) * | 2004-02-04 | 2009-02-10 | Netapp, Inc. | Method and system for backing up data |
US7653899B1 (en) | 2004-07-23 | 2010-01-26 | Green Hills Software, Inc. | Post-execution software debugger with performance display |
US8271955B1 (en) | 2004-07-23 | 2012-09-18 | Green Hille Software, Inc. | Forward post-execution software debugger |
US8132159B1 (en) | 2004-07-23 | 2012-03-06 | Green Hills Software, Inc. | Post-execution software debugger with event display |
US8136096B1 (en) | 2004-07-23 | 2012-03-13 | Green Hills Software, Inc. | Backward post-execution software debugger |
US8015552B1 (en) | 2004-07-23 | 2011-09-06 | Green Hills Software, Inc. | Post-execution software debugger with coverage display |
US9152531B2 (en) * | 2005-02-18 | 2015-10-06 | Green Hills Sofware, Inc. | Post-compile instrumentation of object code for generating execution trace data |
US7620660B2 (en) * | 2005-06-30 | 2009-11-17 | Microsoft Corporation | Pre-image logging for database recovery |
GB0521465D0 (en) * | 2005-10-21 | 2005-11-30 | Law Gregory E W | System and method for debugging of computer programs |
US7325111B1 (en) * | 2005-11-01 | 2008-01-29 | Network Appliance, Inc. | Method and system for single pass volume scanning for multiple destination mirroring |
US7975262B2 (en) | 2007-08-16 | 2011-07-05 | Microsoft Corporation | Error tracing with context history |
US8868982B2 (en) | 2012-01-18 | 2014-10-21 | Infineon Technologies Ag | Compact function trace based on execution length of leaf functions |
US10133653B2 (en) | 2012-02-23 | 2018-11-20 | Cadence Design Systems, Inc. | Recording and playback of trace and video log data for programs |
US9448913B2 (en) * | 2013-08-28 | 2016-09-20 | Sap Se | Performance metric visualization systems and methods |
US9507609B2 (en) * | 2013-09-29 | 2016-11-29 | Taplytics Inc. | System and method for developing an application |
US9875173B2 (en) | 2014-06-30 | 2018-01-23 | Microsoft Technology Licensing, Llc | Time travel debugging in managed runtime |
US10353679B2 (en) * | 2014-10-31 | 2019-07-16 | Microsoft Technology Licensing, Llc. | Collecting profile data for modified global variables |
US9588870B2 (en) * | 2015-04-06 | 2017-03-07 | Microsoft Technology Licensing, Llc | Time travel debugging for browser components |
US9633088B1 (en) | 2015-10-20 | 2017-04-25 | Voalte, Inc. | Event log versioning, synchronization, and consolidation |
WO2018071450A1 (en) | 2016-10-11 | 2018-04-19 | Green Hills Software, Inc. | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction |
US20180173610A1 (en) * | 2016-12-19 | 2018-06-21 | Mediatek Inc. | Method for performing cared-zone code coverage evaluation with no source code modification |
US10372466B2 (en) | 2017-06-13 | 2019-08-06 | Western Digital Technologies, Inc. | Rule-based monitoring engine with tracing capabilities for multi-threaded logging |
-
2017
- 2017-10-10 WO PCT/US2017/055986 patent/WO2018071450A1/en unknown
- 2017-10-10 US US15/729,433 patent/US9898385B1/en active Active
- 2017-10-10 US US15/729,123 patent/US9904615B1/en active Active
- 2017-10-10 JP JP2019520612A patent/JP7202293B2/ja active Active
- 2017-10-10 CA CA3039198A patent/CA3039198A1/en active Pending
- 2017-10-10 EP EP17859981.7A patent/EP3526673A4/en active Pending
-
2018
- 2018-01-08 US US15/864,907 patent/US10324824B2/en active Active
-
2019
- 2019-04-22 US US16/391,108 patent/US10817404B2/en active Active
- 2019-10-07 US US16/594,642 patent/US10592394B2/en active Active
-
2020
- 2020-09-24 US US17/031,606 patent/US11243871B2/en active Active
-
2022
- 2022-02-04 US US17/665,258 patent/US11609840B2/en active Active
-
2023
- 2023-03-16 US US18/184,848 patent/US12001316B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0468446A (ja) * | 1990-07-09 | 1992-03-04 | Mitsubishi Electric Corp | デバッグ支援装置 |
US5784552A (en) * | 1993-07-28 | 1998-07-21 | Digital Equipment Corporation | Debugging a computer program by simulating execution forwards and backwards in a main history log and alternative history logs |
JPH096647A (ja) * | 1995-06-21 | 1997-01-10 | Oki Electric Ind Co Ltd | 逆実行デバッグシステム |
US20050086246A1 (en) * | 2003-09-04 | 2005-04-21 | Oracle International Corporation | Database performance baselines |
JP2012256279A (ja) * | 2011-06-10 | 2012-12-27 | Sony Corp | 情報処理装置および方法、並びにプログラム |
US20150052403A1 (en) * | 2013-08-19 | 2015-02-19 | Concurix Corporation | Snapshotting Executing Code with a Modifiable Snapshot Definition |
Also Published As
Publication number | Publication date |
---|---|
US20210117309A1 (en) | 2021-04-22 |
EP3526673A1 (en) | 2019-08-21 |
US20180253369A1 (en) | 2018-09-06 |
EP3526673A4 (en) | 2020-06-17 |
US20220245057A1 (en) | 2022-08-04 |
US9898385B1 (en) | 2018-02-20 |
US9904615B1 (en) | 2018-02-27 |
WO2018071450A1 (en) | 2018-04-19 |
JP7202293B2 (ja) | 2023-01-11 |
US10817404B2 (en) | 2020-10-27 |
CA3039198A1 (en) | 2018-04-19 |
US12001316B2 (en) | 2024-06-04 |
US10324824B2 (en) | 2019-06-18 |
US20200034276A1 (en) | 2020-01-30 |
US20200019487A1 (en) | 2020-01-16 |
US10592394B2 (en) | 2020-03-17 |
US11243871B2 (en) | 2022-02-08 |
US20230325302A1 (en) | 2023-10-12 |
US11609840B2 (en) | 2023-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12001316B2 (en) | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction | |
EP3788490B1 (en) | Execution control with cross-level trace mapping | |
EP3785127B1 (en) | Selectively tracing portions of computer process execution | |
Patil et al. | Pinplay: a framework for deterministic replay and reproducible analysis of parallel programs | |
US7849450B1 (en) | Devices, methods and computer program products for reverse execution of a simulation | |
EP3785124B1 (en) | Memory validity states in time-travel debugging | |
US20090037887A1 (en) | Compiler-inserted predicated tracing | |
Subhraveti et al. | Record and transplay: partial checkpointing for replay debugging across heterogeneous systems | |
US20190324891A1 (en) | Visualizing last/next known data values in time travel traces | |
EP3785125B1 (en) | Selectively tracing portions of computer process execution | |
US20120131559A1 (en) | Automatic Program Partition For Targeted Replay | |
US11599445B2 (en) | Watcher: precise and fully-automatic on-site failure diagnosis | |
US10671512B2 (en) | Processor memory reordering hints in a bit-accurate trace | |
Raza | A review of race detection mechanisms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20201009 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20201009 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20210915 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20210921 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20211217 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20220218 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20220628 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20221027 |
|
C60 | Trial request (containing other claim documents, opposition documents) |
Free format text: JAPANESE INTERMEDIATE CODE: C60 Effective date: 20221027 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20221116 |
|
C21 | Notice of transfer of a case for reconsideration by examiners before appeal proceedings |
Free format text: JAPANESE INTERMEDIATE CODE: C21 Effective date: 20221122 |
|
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: 20221206 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20221223 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7202293 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |