(57)【要約】ソフトウェアデバッギングシステムは、ソフトウェアプロセスを実行するプロセッサを提供し、ソフトウェアプロセスはバグまたは他の不具合を有する。高速応答レポータ回路は、リオーダバッファ、コミットバッファ、または高速データパスなどの、プロセッサ内の低レベル資産に接続する。高速応答レポータ回路は低レベル資産からデータを選択的に抽出するように構成され、抽出されたデータは、検討および分析のために証拠ファイルに送信される。１つの構成では、高速応答セントリ回路もプロセッサ内の低レベル資産に接続し、定義済みイベントを監視するように構成される。定義済みイベントが発生すると、高速応答セントリ回路は、レポータ高速応答回路の起動などの動作を発生させる。【選択図】図１
2007500401.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプロセスを実行するように構築されたプロセッサと、
前記プロセッサ内の低レベル資産に接続され、前記低レベル資産からデータを選択的に抽出するように構成可能な高速応答回路と、
前記高速応答回路から伸びて、抽出された証拠データを証拠ファイルに送信するように構築されたデータパスと、
を有するデバッギングシステム。
【請求項２】
ソフトウェアプロセスを実行するように構築されたプロセッサと、
前記プロセッサ内の低レベル資産に接続され、予め定められたイベントに対して前記低レベル資産からのデータを選択的に監視するように構成可能な高速応答回路と、
前記高速応答回路から伸びて、前記イベントに応答して動作信号を送信するように構築された動作ラインと、
を有するデバッギングシステム。
【請求項３】
ソフトウェアプロセスを実行するように構築されたプロセッサと、
前記プロセッサ内の低レベル資産に接続され、予め定められたイベントに対して前記低レベル資産からのデータを監視するように構成可能な第１の部分を有し前記予め定められたイベントの発生時に動作信号を生成するように構築され、かつ前記低レベル資産からデータを選択的に抽出するように構成可能な第２の部分を有し動作信号に応答して動作するように構築された高速応答回路と、
前記高速応答回路から伸びて、抽出された証拠データを証拠ファイルに送信するように構築されたデータパスと、
を有するデバッギングシステム。
【請求項４】
前記低レベル資産が、コミットバッファ、リオーダバッファ、高速データバス、またはレジスタとして構築された、請求項１、２、または３のいずれか1項に記載のデバッギングシステム。
【請求項５】
前記高速応答回路が前記プロセッサの低レベル資産とオンチップで集積化された、請求項１、２、または３のいずれか１項に記載のデバッギングシステム。
【請求項６】
前記高速応答回路が高速レジスタを有する、請求項１、２、または３のいずれか1項に記載のデバッギングシステム。
【請求項７】
前記データパスは、前記高速応答回路から前記プロセッサのキャッシュオンチップまで伸びる高速バスである、請求項１、２、または３のいずれか1項に記載のデバッギングシステム。
【請求項８】
前記高速応答回路の第１の部分に接続されるシーケンス論理をさらに含み、
前記シーケンス論理は複合プロセスイベントを選択的に監視するようにプログラム可能であり、かつ前記シーケンス論理は前記複合プロセスイベントに応答して動作可能である、
請求項３に記載のデバッギングシステム。
【請求項９】
前記高速応答回路の第２の部分に接続されるシーケンス論理をさらに含み、
前記シーケンス論理は複合規準に従ってデータを選択的に抽出するようにプログラム可能である、
請求項３に記載のデバッギングシステム。
【請求項１０】
前記シーケンス論理がコプロセッサとして構築された、請求項８または９に記載のデバッギングシステム。
【請求項１１】
前記シーケンス論理が前記プロセッサの低レベル資産とオンチップで集積化された、請求項８または９に記載のデバッギングシステム。
【請求項１２】
低レベル資産と、
前記低レベル資産に接続され、予め定められたイベントに対して前記低レベル資産からのデータを監視するように構成可能な第１の部分を有し前記予め定められたイベントの発生時に動作信号を生成するように構築され、かつ前記低レベル資産からデータを選択的に抽出するように構成可能な第２の部分を有し動作信号に応答して動作するように構築された高速応答回路と、
前記高速応答回路からキャッシュメモリまで伸びて、抽出された証拠データを証拠ファイルに送信するように構築されたデータパスと、
を有するプロセッサチップ。
【請求項１３】
中央処理装置内の低レベル資産から選択的に抽出されたデータを含む、コンピュータ読出し可能なフォーマットの証拠ファイル。
【請求項１４】
低レベル資産と、
高速応答回路と、
前記低レベル資産から前記高速応答回路にデータを送信するように構築された高速データパスと、
を有するプロセッサであって、
イベントを監視する高速応答論理を予め構成するステップと、
データを選択的に抽出する前記高速応答論理を予め構成するステップと、
中央プログラムを実行するステップと、
前記高速応答論理を使用してイベントを検出するステップと、
前記高速応答論理を使用してデータを選択的に抽出するステップと、
抽出されたデータをキャッシュメモリに転送するステップと、
を実行するプロセッサ。
【請求項１５】
前記高速応答回路に接続される第２の低レベル資産をさらに有し、
前記抽出するステップが、前記第２の低レベル資産からデータを選択的に抽出することを含む、
請求項１４に記載のプロセッサ。
【請求項１６】
前記高速応答回路に接続されるシーケンス論理回路をさらに有し、
イベントの検出に応答して動作信号を前記シーケンス論理に送信するステップを実行する、
請求項１４に記載のプロセッサ。
【請求項１７】
証拠ファイルを検査する自動化された方法であって、コンピュータシステムを使用して、
処理装置から収集したデータを有する証拠ファイルを提供すること、
分岐命令が予想したとおり実行されなかったことを特定すること、
前記分岐命令を発見するための検索定義を設定すること、
前記処理装置が実行するために前記分岐命令が利用可能であったことを示す前記証拠ファイル内のデータ部を検索すること、
前記データ部を使用して、利用可能なときに前記分岐命令が実行されなかったことを検出すること、
前記データ部を検査すること、
を有する自動化された方法。
【請求項１８】
プロセッサから証拠ファイルを生成する方法であって、
分岐命令が予想したとおりソフトウェアプログラム内で実行されなかったことを特定すること、
前記分岐命令を発見するための検索定義を設定すること、
処理装置が実行するために前記分岐命令が利用可能であったことを示すデータ部を発見するために、前記プロセッサからのデータを監視すること、
前記データ部を使用して、利用可能なときに前記分岐命令が実行されなかったことを検出すること、
前記データ部を前記証拠ファイルに抽出すること、
を有する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ソフトウェアコードのデバッギングのためのハードウェアツールおよびソフトウェアツールの分野に関する。より詳細には、本発明は、デバッギングデータ収集のためにプロセッサと相互作用するように設定可能なハードウェア回路に関する。
【背景技術】
【０００２】
＜関連出願の相互参照＞
本発明は、米国仮特許出願第６０／＿＿＿，＿＿＿号、２００３年７月２５日出願、名称「バグトレーサ：ソフトウェアバグ診断のための改善されたツールおよび方法（Ｂｕｇ  Ｔｒａｃｅｒ：Ｂｅｔｔｅｒ  Ｔｏｏｌ  ＆  Ｍｅｔｈｏｄ  ｔｏ  Ｄｉａｇｎｏｓｉｓ  Ｓｏｆｔｗａｒｅ  Ｂｕｇｓ）」に対する優先権を主張し、この出願を参考として本明細書に組み込む。
【０００３】
＜連邦政府の資金援助による研究および開発に関する記述＞
適用なし。
【０００４】
＜コンピュータ一覧、テーブル、またはコンピュータプログラム一覧コンパクトディスクの付属物の参照＞
適用なし。
【０００５】
ソフトウェアデバッギングは、ソフトウェアプログラム内のエラーを検出、修正するプロセスである。このプロセスにおいて開発者を支援するための多くのツールが開発されてきたが、デバッギングプロセスは、依然として多大な時間を要し、フラストレーションを引き起こし、通常は予測不能である。デバッギングプロセスにおいては、ソフトウェア開発者、コンピュータシステム、および診断未確定のバグを有する中央プログラムがある。中央プログラムは、コンピュータシステム上で実行可能であり、開発者が見ることができる少なくとも１つの不具合の症状を生成する。開発者は、中央プログラムに対する理解が不十分な場合があり、あるいは判明した特定の症状に対する理解が不十分な場合がある。したがって、開発者はバグを診断するのに苦労することがあり、さらに悪い場合には、不具合の原因を診断しようとする際に、余分なエラーをプログラムに取り込んでしまうことがある。特定の経験に関わらず、操作者がこのバグを診断できるようにすることが望ましい。しかしながら、バグの種類と診断の難しさは、非常に多岐にわたっていることにある。したがって、中央プログラムとバグとを１つの総体（範囲）として考えることが適切である。多くのソフトウェアプロジェクトにおいて、その費用とリスクは、ソフトウェアプログラムをデバッグするための時間およびリスクに強い相関関係がある。
【０００６】
従来のデバッギングプログラムは、高度な技術をもつ開発者が実行を１つ１つ検査できるようにするものである。非常に単純な例では、一度だけ実行して検査すれば十分な場合もある。ほとんどの場合は、何度も実行し、前の実行結果を引き続いて調べる必要がある。デバッガのブレークポイントや他の半自動ツールが有用である。いずれにしても、そのようなツールおよび方法は、非常に扱いにくい。これらは扱いにくくはあるが、短時間で実行される単純なプログラムでは、単純なバグを診断するのには適切な場合がある。長時間で実行される複雑なプログラムでは、これはバグを、特に見つけにくいバグを診断するのに大変困難な場合がある。ソフトウェア内では、「原因」（バグ）が不具合の結果（症状）の前にある。したがって、開発者は、現在の不具合状況に至る履歴の中のあるポイントを見つけなければならない。
【０００７】
多くの従来のツールおよび方法は、開発者が、バグに「近い」仮説を持っている場合にのみ有効である。これは、中央プログラム、ツールおよび方法に非常に精通した専門家にとっては有用かも知れない。仮説がバグから「遠い」場合には、従来のツールおよび方法は実質的にはそれほど有効ではない。したがって、症状の診断に取り組み始めたばかりの専門家ではない開発者にとっては、これらは効率的でない場合が非常に多い。ソフトウェアをデバッギングするための従来のツールおよび方法では、比較的少ない関連する証拠しか提供されない。これらは、バグに「近い」場合にのみ有用である。しかしながら、そのように関連する証拠が少ないことは、バグから「遠い」仮説から始まる診断を案内するのには適切でないことが多い。指定されたイベントで実行を中断し、次に「シングルステップ」の人的方法によって先に進む場合、帯域幅の狭いまたは理論的容量の小さい証拠を収集する場合、あるいは大量の関連性のない証拠を収集する場合に限って、適切でないことが多い。
【０００８】
コンピュータシステムは、典型的には、Ｌ１キャッシュ、Ｌ２キャッシュ、メインメモリ、記憶装置、および関係するバスおよびコントローラという階層を含んでいる。これにより、データ転送速度が速く理論的容量の大きいデータを保存し転送するための、高度に設計されたリソースと、異なる実行スレッドおよび異なるデータセット間でリソース（メモリ空間、バス帯域幅）を共有するための手段が提供される。また、この階層は、従来のコンピュータの目標によって既に償却されている。
【０００９】
従来のツールおよび方法のいくつかは、実行中に証拠を抽出し保存するために、ソフトウェアレベルの手段を用いていた。しかしながら、これは、実行速度、証拠用の最大帯域幅、および証拠用の理論的最大容量を大きく低下させる。メモリおよび記憶装置が階層構造のハードウェアを使用しても、可能性のあるすべての実行データを抽出してそれを証拠ファイルに保存することは、実現不可能である。（コンピュータ工学において有用な用語がいくつかある。「ギガ」は、「１０億」または１０の９乗を意味する接頭語である。バイトはデータの単位である。１バイトは８ビットを含み、２５６個の候補のうち１つを指定することができる。例えば、キーボードの文字は１バイトとして符号化される。）より具体的には、メモリへの書込みを行うあらゆる命令について考える。今日のシステムでは、代表的なＣＰＵクロックは、２．０ギガサイクル／秒である。平均的には、ＣＰＵは１０サイクルごとに約８バイトをメモリに書き込むと考えられる。したがって、平均データ転送速度は、８×２．０／１０＝１．６ギガバイト／秒である。
【００１０】
次に、メインメモリへのバスの帯域幅について考える。代表的なバスは、約０．１ＧＨｚの周波数と８バイトの幅を持っている。公称帯域幅は約０．８ギガバイト／秒であってもよい。待ち行列の影響により、使用可能な帯域幅は多くてもその５０％であると考えられる。また、このバスは、中央プログラムとソフトウェアのデバッギングプログラムとで共有しなければならず、それにより、約５０％の因数がさらに導入される可能性がある。したがって、デバッギングの証拠に対して許される帯域幅は、０．８×０．５×０．５＝０．２ギガビット／秒である。結果として、バス帯域幅は、証拠のデータ転送速度を約８倍の不整合比で制限する。
【００１１】
実際の不整合はさらに大幅に大きくなる可能性がある。現代の汎用プロセッサチップは、複数のプロセッサを有することが多い。典型的には、それぞれが複数の機能ユニットと、それらを同時に動作させるための手段（命令レベルの並列性、ＩＬＰ）とを含んでいる。対照的に、単一のメモリと記憶装置の階層は、これら複数のプロセッサと複数の機能ユニットすべての機能を果たしている。それぞれの要因は不整合比を増加させる。また、ムーアの法則は年を追って継続しており、ＣＰＵクロックはより速くなっているが、一方でバスおよびメモリの帯域幅の向上はそれよりもはるかに遅い。他の待ち行列による影響により、有用な帯域幅がさらに低下することがある。メインメモリから記憶装置へのバスは、ＣＰＵからメインメモリへのバスよりも小さい帯域幅を持つ場合がある。メモリコントローラが効率の悪さの原因となることがある。メモリバスの方向を切換え、読取りと書込みとの間でメモリを切換えることが、効率の悪さの原因となることがある。魅力的でない解決法は、ＣＰＵの速度を８倍またはそれ以上低減させることである。これは、他の機能との調整を複雑にし、時間に依存するバグの診断を大幅に複雑にする可能性がある。また、これにより、証拠を抽出し保存する実行速度が遅くなる。いずれにしても、より緩やかな低下が許容範囲内であろう。
【００１２】
理論的容量によってさらに制限がもたらされる。バグと症状との間に１，０００秒＝１６．６分の時間があると仮定する。この時間に生成されたすべてのデータを記録するには、約１２，８００ギガビット、すなわち１，６００ギガバイトの証拠ファイルが必要になる。これは、記憶および使用するには大きすぎる。証拠ファイルの検査は、非常に遅い速度で行われる。さらに悪いことには、これにより証拠ファイルの実現可能なサイズが制限される。したがって、階層をもつハードウェアを使用しても、短期には証拠のためのデータ転送速度、また長期には証拠ファイルの理論的容量という実用上の制約がある。従来のツールおよび方法には、大きすぎ、また非常に効率の悪い証拠を提供するものが多い。手動の方法を使って、関連性のない証拠の巨大な「干草の山」の中にある中枢となる証拠の小さな「針」を発見することは非常に困難である。残念なことに、非常に選択的な自動ツールは、操作者がどのように選択するかを分かっている場合にのみ有用なものが多い。また、非常に選択的な自動ツールは、専門性の低い操作者には難しい場合が多い。いくつかの従来のツールおよび方法は人間による仕事を必要とし、そのことが、バグと自動手段で選択された命令との間の実行距離（実行された命令の数）を直線的に増加させる。実行距離が小さければこれは実現可能かも知れない。実行距離が十分大きければ、これは実現不可能である。例えば、一作業日の間旧式のデバッガを使用すると、操作者が、１，０００，０００個の別々の時間ステップのそれぞれに対して、ディスプレイを注意深く観察することは、実現不可能である。しかしながら、このような大きな実行距離は比較的一般的である。
【００１３】
典型的なコンピュータおよびプロセッサにおいて、メモリ階層は、Ｌ１キャッシュ、Ｌ２キャッシュ、およびメインメモリという３つのレベルを含んでいる。これらのそれぞれに対して、プロセッサチップハードウェアは各レベル用のコントローラを含んでいる。しかしながら、典型的には、記憶装置用のハードウェアコントローラはない。その代わりに、オペレーティングシステムの一部であるソフトウェアコントローラがある。例えば、これにより、メモリマップドファイルを支援するためのソフトウェア方法が提供される。したがって、仮想メモリ内のアドレス範囲は、記憶装置内のファイルと透過的に結合している。
【００１４】
コンピュータシステム内には、すべての法定命令およびデータの動作とシンタックスを定義する命令セットアーキテクチャ（ＩＳＡ）がある。これは、マシンレベルのソフトウェア（ＭＬＳＷ）から見たコンピュータの動作、特に実行可能コードを定義する。コンピュータの機能の中には、ＩＳＡおよびＭＬＳＷよりも深いレベルで支援されるものもある。これらのコンピュータの機能は、典型的にはハードウェアまたはファームウェア内で支援され、通常はＩＳＡおよびＭＬＳＷの下の基盤を提供する。典型的には、これらの機能は、ＭＬＳＷの実行に対して明確な中断がほとんどなく動作する。一般に、これらの機能は、ＩＳＡおよびＭＬＳＷに比べて「透明」または「自動」であり、ＩＳＡおよびＭＬＳＷにより「当然のものと見なす」ことができる。このような機能は、「深いレベルのリソース」または低レベル資産と呼ばれる。例えば、後述するように、メモリ階層、記憶レジスタ、データパス、およびリオーダバッファは、深いレベルのリソースである。
【００１５】
典型的なコンピュータでは、他の機構は深いレベルのリソースではないが、高レベルのソフトウェアソースコードと比べてこれらのリソースはやはり「透明」かつ「自動」であり、高レベルのソースコードおよび開発者によって「当然のものと見なす」ことができる。以下において、２つの例は（ｉ）コールスタックを支援するもの、および（ｉｉ）メモリマップドファイルを支援するものである。既知のシステムは、メモリ内のアドレスを指定するために、ソフトウェア（特にＩＳＡに準拠したＭＬＳＷ）に対していくつかの異なるモードを提供する。第１のモードはアドレスであり、より正確には「仮想アドレス」である。第２のモードは「添字付きアドレス」である。これは、「開始アドレス」と「オフセット」を加算することにより形成される。これは、マトリックスなどの多くのデータ構造において有用である。第３のモードは「間接アドレス」である。元のアドレスが、最終アドレスを提供するメモリの場所に対するポインタとして使用される。場合によっては、一連の間接アドレスが最終アドレスにつながることもある。他のコンピュータは、追加のアドレスモードを提供する。代表的なコンピュータでは、アドレスモードを支援するのは、ＭＬＳＷに対して透明な深いレベルのリソースである。
【００１６】
典型的なコンピュータシステムでは、メモリは論理的にセクタに分割され、各セクタは秘密区分を有する。一例では、秘密区分の値は、アプリケーション用データ、アプリケーション用アーカイブ、アプリケーション用プログラム、外部システム機能用のデータ、外部システム機能用のプログラム、カーネルシステムプログラム、高安全性データ、および高安全性プログラムに対応する。オペレーティングシステムは、各スレッドに安全性ステータスを割り当てる。スレッドは、実行時にメモリ内のセクタへのアクセスを要求する。システムは、スレッドのステータスとセクタの区分を比較し、その結果このアクセスを許可または阻止する。
【００１７】
コンピュータはまた、典型的には、理論的容量とアクセスの待ち時間が増加する複数レベルのメモリ階層を有する。Ｌ１キャッシュが最も小さくかつ最も速く、Ｌ２キャッシュは中程度の大きさと速さであり、Ｌ３キャッシュはより大きく、より遅くかつ任意であり、メインメモリはさらにより大きくかつ遅い。Ｌ１キャッシュは、命令用とデータ用の２つの別個の部分に分割される。Ｌ１キャッシュおよびＬ２キャッシュは両方とも、プロセッサとしての同じチップ上に配置される。これにより、非常に大きい帯域幅をもつ低レベルのデータバスが可能になる。Ｌ３キャッシュは、プロセッサチップ上にあってもよく、その近傍の別のチップ上にあってもよく、あるいは含まれなくてもよい。メインメモリは、プロセッサチップとは明確に区別される。コンピュータはまた、メモリ階層のレベル間でデータを転送するための手段を含み、後述するように、仮想アドレスと物理的アドレスとの変換を行うための手段も含んでいる。典型的には、これらは深いレベルのリソースであって、ハードウェア内に組み込まれ、ＩＳＡおよびＭＬＳＷに比べて透明かつ自動である。したがって、ＣＰＵ内の中央プログラムは、キャッシュおよびメモリにデータを書き込むまたはそこからデータを読み出すための、統合された仮想アドレス空間を使用することができる。したがって、中央プログラムは、キャッシュとメモリを明確に区別しない。
【００１８】
コンピュータは、メモリ階層内のレベル間でデータを転送するための、深いレベルのリソース（低レベル資産）を有する。Ｌ１キャッシュとＬ２キャッシュとの間で「行」（例えば、６４バイト）を転送するための、深いレベルのリソースがある。Ｌ１キャッシュのコントローラがＬ１キャッシュ内により大きな空間を設けることを必要とするたびに、行が使用されてデータがＬ１キャッシュからＬ２キャッシュに書き込まれる。同様に、Ｌ２キャッシュとメモリとの間で「ページ」（例えば、５１２バイト）を転送するための、深いレベルのリソースがある。Ｌ２キャッシュのコントローラがキャッシュ内により大きな空間を設けることを必要とするたびに、ページがキャッシュからメモリに書き込まれる。オペレーティングシステムは「コールスタック」を定義する。実行中、コールスタックは保留の方法をすべて要約する。コールスタックは、メモリ範囲と、次の未使用アドレスに対するスタックポインタ、範囲の先頭に対するポインタ、および範囲の末尾に対するポインタといった複数のポインタとを含んでいる。方法に対するコールは、典型的にはパラメータのベクトルを含んでいる。コールが発生すると、このベクトルをコピーするのにスタックポインタが使用され、スタックポインタはスタックの上にコピーされる。次いで、スタックポインタは増分されるので、次の未使用アドレスを示す。したがって、ベクトルはコールスタック上に「押し上げられる」。方法を実行する際、このベクトルを、単純な値またはデータに対するポインタなどのパラメータとして使用する。方法が完結すると、次にスタックポインタが減分される。したがって、そのパラメータベクトルはコールスタックを有効に「飛び出させる」。
【００１９】
典型的な汎用プロセッサには、リオーダバッファと、このバッファ内のデータを訂正するための手段がある。リオーダバッファから転送されたデータストリームは、各命令の定義と詳細な記述、およびその結果を含んでいる。実行された各命令に対して、詳細な記述は、オペレーションコード（オペコード）を含む命令のすべてのビット、すべての関連するレジスタ番号とレジスタ値、およびすべての関連する述語ベクトル（この命令を変調する）を含んでいる。メモリ系（読込みまたは記憶）命令に関しては、メモリアドレスおよび転送される値も含まれる。分岐系命令に関しては、この命令によって選択された宛先Ｉのアドレスも含まれる。リオーダバッファとそれらに関係する機能は、深いレベルのリソースの形態をとる低レベル資産である。
【００２０】
分岐系命令には、実行シーケンスを変えることができるあらゆる命令が含まれる。例えば、これには、飛越し、無条件分岐、分岐実行、条件付き分岐、スイッチ、呼出し、呼出しとリンク、割込み、および戻りが挙げられる。
【００２１】
以下ではこれを簡単に文脈に当てはめる。典型的なコンピュータでは、中央処理装置は、命令の「アウトオブオーダー」実行を支援して、より速い平均実行を提供する。各命令に対して、その必須条件が処理装置内で利用可能になり次第、命令は実行を開始する。結果は一時的に「リオーダバッファ」（「コミットバッファ」とも呼ばれる）に記憶される。後に正しい順序で、これらの結果が「引き渡され」、すなわちレジスタやメモリなどに転送される。具体的には、これは分岐系命令の方向を「予測」する。したがって、この計算は「推測的」である。各結果は引き渡される前に有効性がテストされる。時として、予測が間違っており、その結果は有効ではない。したがって、命令は再度計算され、新しい結果が引き渡される。平均的には、実行をより早く開始する時間的利点は、時々発生する再計算による時間的不利点に勝る。
【００２２】
サーキュラバッファは、データアドレスの１以上の範囲とポインタを含んでいる。サーキュラバッファ内の各アドレス範囲に対して、それが終わることを示すヘッドポインタとテールポインタがある。ライトポインタは、このバッファのどこにデータを書き込むかを案内する。データが書き込まれると、ライトポインタは増分される。これがアドレス範囲の末尾に達すると、（次の）アドレス範囲の先頭に飛ぶ。このようにして、データをバッファ内で循環的順序をもつアドレスに書き込むことができる。同様に、リードポインタは循環的順序をもつバッファアドレスからのデータの読出しを案内する。制限があることを前提として、サーキュラバッファへのデータの書込みおよびそこからのデータの読出しをほぼ同時に行うことができる。やはり制限があることを前提として、データの全体的な理論的容量がこのバッファの理論的容量を上回る場合でも、このバッファを介してデータを転送することができる。１つの制限は、最高データ転送速度が大きすぎないこと（例えば、関連するチャネルの帯域幅を越えない）である。別の制限は、データがバッファよりも小さいブロックとして分解可能でなければならないことである。
【００２３】
デバッギングプロセスを支援するための既知のソフトウェアプログラムがいくつかある。例えば、特許文献１は、プログラムを実行し、ログファイルを記録するための方法を記載している。各時間ステップにおいて、レジスタまたはメモリに新たに割当てられたあらゆる値がログファイル内に記録される。実行後、このログを順方向または逆方向の順序で検査することができ、また値が変えられてもよい。これに基づいて模擬実行が再開される。ソフトウェアデバッギングプログラムの別の例が、非特許文献１に記載されている。「ＤｅｊｅＶｕ」は、特別なＪＶＭと共に動作するソフトウェアツールである。ＤｅｊａＶｕは記録と再生の２つのモードで作動する。Ｊａｖａ（登録商標）プログラムがＪＶＭ上で実行されると、ＤｅｊｅＶｕは記録モードで作動し、実行データ（アドレス、値、タイミング、外部入力を含む）をファイルに記憶する。再生モードでは、このファイルが読み出されてデータが再生される。これは、ＪＶＭを再び駆動するのに使用されてもよい。このモードでは、ファイルと実行は、時間に沿った順序と時間に逆行する順序のいずれの組み合わせで再生することもできる。また、このプロジェクトは、ＤｅｊａＶｕおよびＪＶＭと共に作動するリモートデバッガを含んでいる。また、このプロジェクトは、実行の複数のスレッドとタイミングの詳細に関する複雑さにも関わらず、再生の繰返し可能性を広範囲にわたって扱う。
【００２４】
また、ソフトウェアプログラムの「追跡」もソフトウェアバグの診断を支援するものとして既知である。プログラムのソースコードに対して、開発者は命令文を追加していくつかの変数を記録する。これには、開発者が、どこにこれらの命令を挿入するかを仮定することが求められる。これは開発者にとって非常に困難な場合が多い。これは、開発者がプログラムの実行を理解していることを必要以上に要求することがある。開発者の中央プログラムに対する知識が適切でない場合、これが増幅される。非常に多くの場合、開発者は「暗闇の中で発砲する」ような状態に追い込まれる。したがって、追跡はデバッギングには十分というには程遠いことが多い。挿入された命令文はまた、プログラムの実行と実質的に干渉することがあり、プロセスに新たなバグを取り込むこともある。追跡システムはまた、実行コード内の多くの場所にデバッギング命令文、特に印刷に関する命令文を追加する半自動または自動プロセスという第２の方法も提供する。これにはさらなる困難がある。多くの場合、これは、抽出して保存できる証拠の帯域幅と理論的容量内に厳密に限定される。多くの場合、デバッギング命令文が追加または除去されるときに、新たなバグが取り込まれるという危険がある。実行の時間歪みは、デバッギング命令文の密度とともに急速に上昇する。別の例では、中央プログラムのマシンコードは低レベルのエミュレータ上で実行される。実行全体を通して、エミュレータは多くの印刷命令文を有効に補間する。しかしながらこれには深刻な欠点がある。エミュレーションは、典型的にはプログラムのタイミングを極端に大きな率で歪ませる。エミュレーションは、オペレーティングシステムを含むソフトウェアの多くのレベルと相互作用する必要がある。成功するエミュレーションは、多くの場合、特に大きなプログラムに対する操作者の多大な労力と技術、あるいは複雑な文脈のプログラムを必要とする。また、エミュレーションは余分なエラーにつながることがあり、これらのことが元のバグの診断を複雑にする。
【００２５】
しかしながら、すべての既知のソフトウェアベースのデバッギングシステムでは、開発者が十分なデータを収集することができず、十分に深いレベルで効率的にバグを検出し修正することができない。デバッギングの別の方策は、ハードウェアレベルのトラブルシューティングに依存している。ハードウェアのトラブルシュータは、大量の証拠データを収集することができるが、柔軟にデータ収集の焦点を合わせるという柔軟性に欠ける。したがって、開発者は巨大な証拠ファイルを収集することができるが、バグを検出して修正するのに有用な何らかの情報を発見するために、証拠全体を通して並べ替えを試みるという重大なタスクを有する。
【００２６】
既知のハードウェアレベルのトラブルシュータがいくつかある。例えば、特許文献２は、デバッグモードとＪＴＡＧチャネルを有するマイクロプロセッサを開示している。ＣＰＵコアの内部には、実行モードとデバッグモードとの間で切換え可能なベクトルスイッチング回路がある。デバッグモードは、ＪＴＡＧチャネルを用いて小さい帯域幅のデータをマイクロプロセッサ内部から送出する。エミュレータインタフェースを作動させるような外部ハードウェアとＪＴＡＧチャネルが使用されて、ベクトルスイッチング回路とデバッグモードを制御する。別の例では、特許文献３は、集積回路内の選択された構成要素によって生成される選択されたデータ帯域を、外部エミュレータに送信するように動作可能なデータ帯域セレクタを含む、オンチップデバッグシステムを有する。データ帯域セレクタは、ホストコンピュータから受け取った命令に基づいて、エミュレータによって方向付けられる。別の例では、特許文献４は、制御レジスタのハードウェアイベントモニタを使用し、プログラム可能な汎用フィールドを有する。これは内部でまたは外部からプログラムして、処理イベントの連続的な比較を開始することができる。これらの規準がすべて満たされると、このモニタは外部動作を始動させる。ハードウェアイベントモニタおよびシステムは、制御動作を単一の統合された総体として追跡する。この総体は、ＵＢＵＳを通じて遠隔でプログラムすることができる。さらに最後の例として、特許文献５は、メモリの特定の画定された部分に対するプロセッサによるアクセスを監視する装置を提供している。ユーザは監視すべきアドレスまたは範囲を指定し、各プロセッサは、外に出て行くメモリ参照を監視するハードウェアを含む。これは、デバッギングソフトウェアパッケージと併せて使用することができる。プロセッサが誤った命令を実行し、メモリアドレスに不適切に書き込まれたと仮定する。これは、いくつかの命令の中のエラーを正確に示すことができる。この装置は、プロセッサとは完全に独立して、これと並行して動作し、システム性能に悪影響を及ぼさない。
【特許文献１】米国特許第５，７８４，５５２号
【特許文献２】米国特許第６，６６８，３３９号
【特許文献３】米国特許第６，５１６，４２８号
【特許文献４】米国特許第６，１３４，６７６号
【特許文献５】米国特許第５，２９５，２６０号
【非特許文献１】Ｂ．Ａｌｐｅｒｎ，Ｊ．−Ｄ．Ｃｈｏｉ，Ｔ．Ｎｇｏと、Ｍ．Ｓｒｉｄｈａｒａｎによる「ＤｅｊａＶｕ：Ｊａｌａｐｅｎｏ  ＶＭのための決定論的Ｊａｖａ（登録商標）再生デバッガ（ＤｅｊａＶｕ：Ａ  Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｊａｖａ（登録商標）  Ｒｅｐｌａｙ  Ｄｅｂｕｇｇｅｒ  ｆｏｒ  Ｊａｌａｐｅｎｏ  ＶＭ）」
【発明の開示】
【課題を解決するための手段】
【００２７】
簡潔には、ソフトウェアデバッギングシステムはソフトウェアプロセスを実行しているプロセッサと共に始動し、ソフトウェアプロセスはバグまたは他の不具合を有する。高速応答レポータ回路は、リオーダバッファ、コミットバッファ、高速データパスなどの、プロセッサ内の低レベル資産に接続している。高速応答レポータ回路は、低レベル資産からデータを選択的に抽出するように構成され、抽出されたデータは、検討および分析のために証拠ファイルに送られる。１つの構成では、高速応答セントリ回路もプロセッサ内の低レベル資産に接続し、定義済みイベントを監視するように構成される。定義済みイベントが発生すると、高速応答セントリ回路は、レポータ高速応答回路の起動などの動作を生じさせる。
【００２８】
デバッギングシステムの特定の一実施例では、高速応答セントリ回路は、予め定められたソフトウェアイベントに対してプロセッサ内の低レベル資産を監視し、そのイベントが発生すると、高速応答レポータ回路を始動させて低レベル資産からデータを選択的に抽出する。セントリ回路とレポータ回路はそれぞれシーケンス論理回路に結合し、それによりより洗練された複合的な監視と選択が可能になる。データが一旦抽出されると、データは検討および分析のために証拠ファイルに記憶される。これらの監視、選択および抽出プロセスのための手段とプロセスを用いて、ユーザは、対象となる仮定範囲に効率的に焦点を絞ることができ、さらに有望な範囲におけるデータ収集に集中することができる。準備ソフトウェアツールを使用して、レポータおよびセントリを構成し、設定する支援としてもよい。デバッギングシステムはまた、抽出された証拠ファイルの検査を支援するためのツールも有する。例えば、自動ディテクティブソフトウェアは、証拠ファイルの関連する証拠データを検索するプロセスを簡素化してもよい。
【００２９】
デバッギングシステムの特定の構成では、高速論理回路がオンチップでプロセッサと集積化され、それにより、低レベル資産に効率的に接続することが可能になり、プロセッサ上で実行しているプログラムとの干渉をほとんど起こさない。さらに、シーケンス論理もまた、コプロセッサまたはマルチスレッドのプロセッサ内のスレッドとして、オンチップで集積化されてもよい。デバッギングシステムはまた、コントローラ、キャッシュメモリ、およびデータパスなど、プロセッサ上で利用可能な多くのリソースを活用するように構築されてもよい。既存のリソースを共有することにより、デバッギングシステムは、より容易に既存のチップアーキテクチャに組み込むことができる。
【００３０】
デバッギングシステムを使用する際、ユーザはバグの原因について一般的な仮定を作成する。準備ソフトウェアを用いて、ユーザは、ランドマーク、コードマーク、またはバグの原因を発見する支援となり得る他のソフトウェアイベントを定義し、有用な量の証拠データを抽出する選択規準を設定する。ユーザは、ソフトウェアプログラムを実行し、セントリ回路がソフトウェアイベントを検出するのに応答して証拠ファイル内の選択されたデータを収集する。検査ツールを用いて、ユーザは証拠ファイルを検討して分析し、バグの場所または原因に関する洞察を得る。検査ツールを用いるにあたって作成されたクエリは、セントリ回路に対する次のランドマークを構築する際に、またレポータ回路用の選択規準にとって有用である。ユーザは、デバッガの構成、新たなデータの収集、データの評価、およびさらに焦点を絞って集中させた仮定の作成を繰返す。このようにして、デバッギングシステムにより、ソフトウェアの不具合をデバッギングするための体系的でより予測可能な方法論が可能になる。
【発明を実施するための最良の形態】
【００３１】
本発明の実施形態の詳細な説明が本明細書に記載される。しかしながら、本発明は様々な形態で実施してもよいことが理解されるべきである。したがって、本明細書に開示される特定の詳細は、限定的なものではなく、実質的にあらゆる詳細なシステム、構造、または方式で本発明をどのように実施するかを当業者に対して教示するための、代表的な原理として解釈されるべきである。また、接続または結合は、その間にある構造またはプロセスを含んでもよいことも理解されるであろう。
【００３２】
ここで図１を参照して、デバッギングシステム１０が示される。デバッギングシステム１０は、プロセッサチップ１２上に実装され、コンピュータソフトウェアプロセスを実行するための中央処理装置１４を含んでいる。これらのプロセスの１つは、ソフトウェアバグが原因で動作に不具合を起こすコンピュータプログラムであってもよい。デバッギングシステム１０は、不具合のあるプログラム内のバグを検出して修正するのに有用である。標準的なコンピュータプロセッサが示されているが、他の集中処理構造を使用してもよいことが理解されるであろう。プロセッサは、データバス、バッファ、およびレジスタなどの、複数の内部の低レベル資産または深いレベルのリソースを有し、これはソフトウェアプロセスを実行する際に協働する。これらのリソースの中には、既知のプロセッサ内に既に存在するものもあり、新たなデバッギングシステムにより有利に使用されてもよい。例えば、プロセッサ１４は、メモリおよび記憶装置の階層１６、および階層レベル間での転送を管理するのに必要な回路構成およびコントローラを含んでいる。メモリ階層１６は、Ｌ２キャッシュ１７などのキャッシュメモリを含んでいる。このＬ２キャッシュは、高速データバス１８を介してメインメモリ２３に接続している。これらのリソースを、そのままの状態であるいは何らかの修正を加えて再利用することにより、デバッギングシステム１０は、既存のプロセッサ設計により容易に組み込まれてもよく、また中央処理装置内で動作するプログラムへの干渉がより少ない状態で動作してもよい。
【００３３】
中央処理装置１４はまた、リオーダバッファ２１を含む制御および命令論理１５を有する。リオーダバッファ２１は、中央処理装置上で動作するプログラムの動作に関する詳細な記述情報を保持する。他のプロセッサアーキテクチャは、類似の詳細な記述を提供してもよい他の低レベル資産を有することが理解されるであろう。不具合のあるプログラムが中央処理装置１４上で実行されると、リオーダバッファ２１は、変数、分岐、および他の実行の詳細に関する詳細な情報を保持する。この有益な情報を使用するために、リオーダバッファ２１はセントリ回路３１およびレポータ回路３１に接続する。セントリ回路３１およびレポータ回路３３はどちらもオンチップで高速応答回路構成から構築されているため、最大プロセッサ速度またはその近傍で動作することができる。一実施例では、セントリ回路およびレポータ回路は、高速レジスタおよびコンパレータを含んでいる。しかしながら、そのような高速応答回路構成を実装するために他の回路を使用してもよいことが、理解されるであろう。 
【００３４】
セントリ回路３１は、定義済みのソフトウェアイベントに関してリオーダバッファ２１から受け取ったデータを監視するように構成されてもよい。その結果、不具合のあるプログラムの実行中、セントリ回路３１は、データ値、データアドレス、命令アドレス、命令コード、または宛先Ｉアドレスに基づいて、ソフトウェアイベントに対するバッファデータを監視する。セントリ３１が目的のイベントを検出すると、セントリ３１は、実行すべき対応する動作を生じさせてもよい。一実施例では、セントリ３１は、特定の定義済みのソフトウェアイベントに応答してフラッグ３５を設定する。セントリ回路は他の動作を行ってもよく、または異なる低レベル資産からのデータを監視してもよいことが、理解されるであろう。
【００３５】
セントリ３１によって設定されたフラッグまたは他のトリガ信号に応答して、レポータ３３は、リオーダバッファ２１から選択されたデータを抽出する。レポータ３３は、定義済みの選択規準に従って構成されている。例えば、レポータ３３は、データアドレスの特定の範囲に関係するデータ値のみを抽出するように構成されてもよい。このようにして、レポータ３３はすべての他のデータを拒絶し、特定の目的の変数の数列に焦点を当てた証拠ファイルを生成する。他の実施例では、レポータ３３は、特定のアドレス、分岐、または期間に焦点を当ててもよい。レポータ３３は、様々な特定のデバッギングの要求に応じたデータの焦点を適用するために、柔軟に構成されてもよいことが理解されるであろう。さらに、セントリおよびレポータは既に定義済みの規準を用いるが、セントリおよびレポータは、実行前に柔軟に構成されてもよく、さらには実行中に再構成可能であってもよいことが理解されるであろう。
【００３６】
レポータ３３がリオーダバッファ２１からデータを抽出すると、レポータ３３は、抽出されたデータをＬ２キャッシュ内の証拠バッファ１９に送る。有利には、レポータ３３は転送の際に既存の高速データバス１８を使用する。このようにして、レポータ３３は、中央処理装置上で動作しているプログラムにほとんど干渉することなく、所望のレベルのデータの詳細を捕捉するのに十分な速度で、証拠バッファ１９をロードすることができる。Ｌ２キャッシュは、デバッギングプロセスと中央処理装置上で動作するプログラムとの間で共有される制限付きのリソースである。したがって、証拠バッファ１９を時々より大きなメモリまたは格納場所にフラッシュする必要がある。このタスクは、スクライブプロセス４１によって管理および監視される。スクライブ４１は、レポータ３３が、証拠バッファ内のデータをＬ２キャッシュからメインメモリ２３に移動させるのを支援する。このようにして、スクライブ４１は、Ｌ２キャッシュ１７内の証拠バッファ１９からメインメモリ２３内の証拠バッファ３７へ、また外部記憶装置２５内の証拠ファイル３９へ証拠データが移動する際に、その流れを維持および管理する。スクライブ４１は、記憶装置コントローラ２７などの既存のリソースを使用して、データの転送を実現してもよい。このようにして、スクライブの使用およびデータ転送の管理の実施が簡便になる。
【００３７】
デバッギングシステム１０は、このようにして、プロセッサ内の深いレベルにある証拠データの収集を可能にする。データは、プロセッサに対する少量のオーバーヘッドのみで収集されてもよく、したがって、データは、プロセッサの動作速度またはその近傍で収集されてもよい。さらに、収集されたデータは、証拠データを特定の対象に焦点を当ててこれに集中させるように選択されてもよい。セントリ３１およびレポータ３３は、典型的には、オンチップで構築されプロセッサと集積化されて、プロセッサ性能に対する影響を最小限に抑えて最も効率的な証拠の収集を可能にする。しかしながら、これらの機能は他の構成で構築されてもよいことが理解されるであろう。
【００３８】
次に図２を参照して、デバッギングプロセス５０が象徴的に示される。プロセス５０は、ソフトウェア開発者が、不具合のあるソフトウェアプログラム内のバグを検出し修正するのに有用である。開始５２において、ソフトウェア開発者はソフトウェアの不具合の証拠５４を検査する。この証拠は、図１を参照して全体を説明したようなデバッギングにより生成される証拠ファイルであってもよい。証拠５４を検討した後、開発者は仮定５６を作成する。仮定５６に基づいて、開発者は、プロセッサを監視しデータを選択的に抽出するツールを、デバッギングシステム内に準備する５８（照準を合わせる、プログラムする）。不具合のあるプログラムが次に実行される６０。実行中、ツールは新たな証拠を選択的に抽出し新たな証拠ファイルに記憶する６０。次の手順が繰返される。開発者は、新たな証拠ファイルを評価し、仮定を修正し、再びツールを準備し、再び不具合のあるプログラムを実行する。開発者がこれらの繰返しを実施する際、開発者は、新たな証拠を用いて次の繰返しの焦点をさらに絞って集中させる。このようにして、開発者は、体系的かつ論理的に、らせん６１を描くようにしてバグの原因および診断６２に迫る。多くの場合、このプロセス５０により、バグのおおまかな証拠と大まかな仮定から、より良好な証拠とより良好な仮定を介して、明確な証拠と明確な診断まで、効率的かつ体系的に収束することが可能になる。
【００３９】
次に図３を参照して、デバッギングプロセス７５が示される。プロセスは、ソフトウェア開発者が、不具合のあるソフトウェアプログラム内のバグを検出し修正するのに有用である。デバッギングプロセス７５は、ブロック７７に示すように、ソフトウェア開発者が証拠ファイルを検査することから開始される。証拠ファイルは、不具合のあるプログラムが実行されている間に、プロセッサの低レベル資産から抽出したデータを含んでいる。このようにして、証拠ファイルは、プログラムの不具合の原因を発見するのに有用なデータを含んでもよい。開発者は次に、ブロック７９に示すようにバグに対する仮定を作成する。この仮定は、バグの症状、バグのプレカーソル、またはバグのポストカーソルを扱ってもよい。開発者は、ブロック８１に示すように、セントリ回路を構成またはプログラムして、ランドマークまたは他のソフトウェアイベントを監視し、またランドマークが発生したときにセントリが行う対応する動作を設定する。開発者は、セントリの構成を支援するために、分かりやすいインタフェース、メニュー、またはウィザードを提供するオフラインの準備ソフトウェアを使用してもよい。開発者はまた、ブロック８３に示すように、不具合のあるプログラム内にコードマークを設置してもよい。実行の際、これらのコードマークは、特定のコード区分を実行するときにそれを特定し、データ抽出の焦点をさらに絞るのに有用である。開発者はまた、ブロック８６に示すように、所望のレベルのデータの証拠を抽出するためにレポータを構成またはプログラムする。開発者は、ランドマーク、コードマーク、または他のソフトウェアイベントに応答して実施されるべきレポータ方式を割当ててもよい。このようにして、特定のランドマークまたはコードマークを、レポータに対する異なる選択規準としてもよい。開発者はまた、レポータの構成を支援するために、分かりやすいインタフェース、メニュー、またはウィザードを提供する準備ソフトウェアを使用してもよい。典型的には、ソフトウェア開発者および準備ソフトウェアは、中央プログラムのソースコードに小さな修正を取り込んで、セントリ、レポータおよびコードマークのためにプログラムを読込んでこれをリンクさせる。また、再コンパイルによって、命令ストリーム内にソースコード名をコメントとして追加することが可能になり、これらの命令を理解する支援となるアドレステーブルが提供される。したがって、開発者は、ブロック９０に示すように、プログラムを再コンパイルすることが必要な場合がある。開発者は次に、ブロック９３に示すように、不具合のあるプログラムをプロセッサ上で実行して、新たな証拠ファイルを生成する。開発者は、この新たな証拠ファイルを用いて手順を繰返し、新しいさらに焦点を絞ったランドマークおよび選択規準を設定する。開発者がこれらの繰返しを実施する際、開発者は、新たな証拠を用いて次の繰返しの焦点をさらに絞って集中させる。このようにして、開発者は、体系的かつ論理的にバグを検出してもよい。
【００４０】
次に図４を参照して、デバッギングシステム１００が示される。デバッギングシステム１００は、ソフトウェア開発者または他のユーザが体系的にソフトウェアの不具合の原因を発見するのに使用されてもよい。ユーザが、コンピュータ上で実行できるが正しく動作しない中央プログラムを有すると仮定する。不具合は、ユーザには既知の少なくとも１つの症状を含み、これは中央プログラム内にバグ（エラー）があることを示す。ユーザはこのバグを診断する必要がある。このタスクのため、デバッガ１００は、体系的な方法および関連ツール、特にコンピュータのプロセッサ１０１に緊密に結合されたツールを使用する。デバッガ１００は、「セントリ」１１０、「レポータ」１１１、「フラッグ」１１３と称される複数の深いレベルのツール、およびＬ２キャッシュ１０６内の証拠バッファ１３６を提供する。さらに外部にまたはオフチップで、このデバッギングシステムは、メインメモリ１０８内の証拠バッファ１３７および記憶装置１０９内の証拠ファイル１３８も有する。
【００４１】
ツールおよび方法は、最初に大まかに定義され、次にデバッガ１００の選択された観点がさらなる詳細とともに提示される。一般に、セントリ１１０は指定されたイベント（ランドマーク）を検出し、一方レポータ１１１は指定された証拠を抽出して保存する。証拠は一時的に証拠バッファに保存され、後に証拠ファイルに恒久的に保存される。深いレベルのツールはプロセッサに緊密に結合される。これらのツールの中には、中央プログラムの実行中に、実行にほとんど歪みを起こすことなく動作するものもある。一実施例では、セントリおよびレポータはそれぞれ、プログラム１２３／１２４、メモリ１２０／１２１、シーケンス論理１１７／１１８（例えば、コプロセッサ）および高速論理１１５／１１６（例えば、レジスタおよびゲート論理）を含んでいる。デバッガ１００の一応用例では、中央処理装置１０２は増大されたリオーダバッファ１１２を含んでいる。命令文が実行されると、増大されたリオーダバッファ１１２は、命令文および関連データの詳細な記述を提供する。
【００４２】
詳細な記述は、深いレベルの高速データパスを介して、指定されたランドマークを検出するためのコンパレータおよびレジスタを有するセントリの高速論理に供給される。検出されると、高速論理は、セントリのシーケンス論理を始動させて、指定された対応する動作を行わせてもよい。詳細な記述はレポータの高速論理にも供給される。場合によっては、詳細な記述の一部は証拠として抽出され保存される。
【００４３】
フラッグは、実行中に証拠を集めて保存する支援に使用されてもよい。フラッグとしては、例えば、ランドマークフラッグ、コードフラッグ、およびモジュレーションフラッグが挙げられる。セントリは、ランドマークを検出すると、ランドマークフラッグを設定する。これにより、レポータが関連するレポータ方式に導かれる。モジュレーションフラッグは、証拠の抽出および保存を直接修正する。中央プログラムの実行中、任意の命令文がコードマークを指定することができる。コードマークが実行されると、セントリは対応するコードフラッグを設定し、１以上のモジュレーションフラッグを修正する。
【００４４】
証拠バッファおよび証拠ファイルは、プロセッサチップ上または関連するオフチップ回路構成上で使用するのに既に利用可能な汎用リソースと共に使用されてもよい。汎用リソースとしては、例えば、Ｌ２キャッシュ、メインメモリ、および記憶装置内のメモリ空間割当て、Ｌ１キャッシュ、Ｌ２キャッシュ、メインメモリ、記憶装置間でデータを転送するための自動手段、および時間／優先順位割当てが挙げられる。プロセッサチップを越える機能に対しては、デバッガ１００は、「スクライブソフトウェア」１３０、「エキジビターソフトウェア」、「ディテクティブソフトウェア」および「準備ソフトウェア」と称される、いくつかのソフトウェアツールを提供する。一実施例では、これらのソフトウェアツールはすべて元のコンピュータで動作する。
【００４５】
セントリおよびレポータが構成された後、中央プログラムがコンピュータ上で実行される。実行中、中央処理装置は実行の詳細な記述を提供する。セントリは詳細な記述中のデータをテストし、指定されたランドマークイベントが発生したこと、またそれが発生したときを検出し、指定された対応する動作を行う。典型的には、動作は、ランドマークフラッグを設定してランドマークの発生を示し、レポータを起動させる。場合によっては、動作は、ランドマークの定義をはっきりさせるための追加のテストを含んでいてもよい。実行中、レポータは証拠を抽出して保存する。このプロセスとその結果得られる証拠は、レポータ用の明細（プログラム）により案内され、またランドマークおよびコードマーク用のフラッグによって修正される。したがって証拠は選択的に抽出される。また、証拠はＬ２キャッシュ内の証拠バッファ、メインメモリ内の証拠バッファ、および記憶装置内の証拠ファイルに保存される。
【００４６】
より効率的な使用に関して、デバッガ１００は、コンピュータ内に既に含まれている多くのリソースを利用してもよい。例えば、コンピュータは、メモリ階層（Ｌ１キャッシュ、Ｌ２キャッシュ、メインメモリ）、さらにこのメモリ階層のレベル間でデータを転送するためのデータパスおよび自動手段を有する。またコンピュータは、記憶装置と、さらにメモリ階層と記憶装置の間でデータを転送するためのデータパスおよび自動手段を有する。デバッガ１００はまた、Ｌ２キャッシュ内の証拠バッファからメインメモリ内のより大きな証拠バッファへ、次に記憶装置内の証拠ファイルへ証拠を転送するために、これらのリソースを利用する。デバッガ１００を概ね説明したので、使用の実施例をまず説明し、選択されたツールおよび方法をより詳細に説明する。
【実施例】
【００４７】
このセクションでは、デバッギングシステムの使用法、機能および構造を紹介して説明するいくつかの実施例を教示する。
【００４８】
（実施例Ａ）
＜ランドマーク＞  初期の証拠および仮定：操作者が初期の証拠を検査すると仮定する。これは、２つの異なる値を有する特定の変数を示す。初期の実行中、この変数は正しい値を有する。その後の実行中、この変数は誤った値を有する。したがって、操作者は以下の大まかな仮定を作成（予測）する。
【００４９】
プレカーソルが存在する：この変数に対する正しい値の代入
症状が存在する：この変数に対する誤った値の代入
バグが存在する：実行中、プレカーソルと症状の間でバグが発生
以下の証拠は明確な説明を提供する場合がある：プレカーソルと症状の間の実行の証拠
バグに関する仮定は極めて大まかである。いずれにしても、これが最終的な診断につながることが多い。したがって、操作者は以下の擬似コードを作成（予測）する。
｛ランドマーク：プレカーソル｝特定の（正しい）値が特定の変数に代入された。
｛対応する動作｝このランドマークが発生したときに、以下の対応する動作を行う。第１に、実行を停止して値をランドマークフラッグに代入する。第２に、何らかのデータを証拠として抽出して保存する。第３に、実行を再開してデータのストリームを絶えず証拠として抽出して保存する。
｛ランドマーク：症状｝特定の（誤った）値が特定の変数に代入された。
｛対応する動作｝このランドマークが発生したときに、以下の対応する動作を行う。第１に、実行を停止して（異なる）値をランドマークフラッグに代入する。第２に、証拠バッファから証拠ファイルにフラッシュする。第３に、実行を再開する。
【００５０】
デバッギングシステムは、操作者がこの擬似コードをセントリおよびレポータ用の明細およびプログラムに変換するのを支援するツール（準備ソフトウェア）を提供する。実行中、中央処理装置はセントリに各命令の詳細な記述を提供する。これには、命令オペコード（動詞）、データアドレス、データ値、命令アドレスが含まれる。セントリは、この詳細な記述を指定されたオペコード（動詞）、アドレス、データ値と比較する手段を有する。セントリは、直列論理またはシーケンス論理（例えば、コプロセッサ）を含んでいる。ランドマークが発生すると、セントリは指定された対応する動作を実行してもよい。例えば、セントリは、ランドマークフラッグに値を代入してレポータを起動させてもよい。次にレポータは、ランドマークフラッグと対応する動作への分岐をテストする。これにより、証拠を抽出して保存するためのレポータ方式が呼び出される。セントリおよびレポータは、「深いレベルのリソース」によって支援される。多くの場合、これらは中央プログラムと非常に適合性がある。これらは、大きな時間歪みなしに、中央プログラムの実行とほぼ同時に動作することができる。操作者は、セントリをプログラムまたは構成して、実行中に各ランドマークを検出する。命令オペコード（動詞）が「メモリに書込まれる」たびに、セントリはデータアドレスを指定されたアドレスと比較し、データ値を指定された値と比較する。また操作者は、各ランドマークに対する対応する動作と共にセントリおよびレポータをプログラムする。これらの準備を行って、中央プログラムが再び実行される。これは、上述の仮定に対応する新たな証拠ファイルを抽出して保存する。操作者は、エキジビターおよびディテクティブソフトウェアツールを使用して、この証拠ファイルを検査することができる。したがって、操作者は体系的かつ効率的に、診断上の質問「中央プログラムの実行中、このプレカーソルが発生した後、いつこの症状が生したか？どのように、またなぜこの症状が発生したか？」に関する証拠を抽出して保存することができる。この質問は、「いつ、どのように、またなぜこの症状が発生したか？」と省略することができる。操作者による証拠ファイルの検査を支援するために、ディテクティブは、同様の診断上の質問を質問し回答するための効率的な手段を提供する。したがって、操作者は、プレカーソルおよび症状から、それらを明らかにする証拠の抽出および保存に進むことができる。このデバッギングプロセスは繰返すことができる。したがって多くの場合、操作者は効率的かつ体系的に証拠を抽出し、症状からその原因となったバグまで証拠を追跡することがでる。
【００５１】
（実施例Ｂ）
＜検査および準備＞  上述の実施例Ａでは、指定されたアドレスに指定された値がいつ代入されたかを検出することがいかに有用であるかを説明した。ここで、実施例Ｂは、どのようにアドレスを指定し、値を指定するかを説明する。
【００５２】
アドレスの種類：中央プログラムが繰返し実行される場合、いくつかまたは多くのアドレスは、実行全体を通して同じ（「繰返し可能な」）１６進仮想アドレスであることが多い。 他の場合では、アドレスは、ソースコードに類似した記号形式でさらによく記述される（さらに繰返し可能またはさらに分かりやすい）。いずれのアドレス形式も、ランドマーク用のテストにおいて指定されてもよい。操作者が中央プログラムの実行後に証拠ファイルを検査するのを支援するために、デバッギングシステムは、エキジビターソフトウェアおよびディテクティブソフトウェアを提供する。エキジビターおよびディテクティブは、アドレスを「００００  １Ｂ３Ｆ」のような１６進仮想アドレスとして表示することを支援する。また、エキジビターおよびディテクティブツールは、アドレスをソースコード記号アドレスおよびその文脈として表示することを支援する。ここで文脈は、この記号アドレスに対する定義または有効範囲を提供する。例えば、
アドレス「ｖｅｃｔｏｒ／７２／」
文脈では「Ｍｅｔｈｏｄ  ＣａｌｃｕｌａｔｅＲｏｕｔｅ０の中の命令文＃２３」
【００５３】
ソフトウェアの実体は、典型的には名前、アドレス、理論的容量を有する。これらのそれぞれは、プログラム内でそれが有効な場所としての「有効範囲」と、それが有効な時としての実行中の有効範囲を有する。文脈は、これら３つがすべて有効な場所と有効な時の命令文である。場合によっては、これは実体を作成または定義する命令文のすぐ後に続く。ソースコード言語「Ｊａｖａ（登録商標）」などの場合には、文脈は実体のスタックでなければならない。クラスＡはクラスＢのローカルオブジェクトＶａｂを有すると仮定する。クラスＢはクラスＣのローカルオブジェクトＶｂｃを有すると仮定する。クラスＣはクラスＤのローカルオブジェクトＶｃｄを有すると仮定する。Ｊａｖａ（登録商標）ソースコードでは、式「Ｖａｂ．Ｖｂｃ．Ｖｃｄ」は、変数Ｖｃｄが文脈Ｖｂｃを有し、これが文脈Ｖａｂを有することを記述する。）操作者は、中央プログラムの後に続く実行のために、セントリおよびレポータを準備する（照準を合わせる、構成する、プログラムする）。この準備を支援するために、本発明はツール、すなわち準備ソフトウェアを提供する。これは、ランドマーク定義のメニューおよびセントリ用のサブ定義を提供する。
【００５４】
これらはいくつかの例である。
【００５５】
ランドマークの種類を指定する。
「指定されたＤアドレスを検出」
「指定されたＤアドレスおよび指定されたＤ値を検出」
「実行された命令に対する指定されたＩアドレスを検出」
「分岐系命令の拒絶された宛先に対する指定されたＩアドレスを検出」
【００５６】
ランドマーク用のオペコード（動詞）を指定する。
「オペコードを指定しない」
「書込みを検出」
「読出しを検出」
「分岐系命令を検出」
【００５７】
ランドマーク用のアドレスを指定する。
「正確なアドレスを指定」は、｛｝「１つのアドレスを入力」
「アドレスの範囲を指定」は、｛｝「２つのアドレスを入力」
「１６進表記のアドレスを指定」は、｛｝「１６進アドレスを入力」
「ソースコード記号式のアドレスを指定」は、｛｝「式を入力」
「記号アドレス用のソースコード文脈を指定」は、｛｝「文脈を入力」
【００５８】
ランドマーク用の値を指定する。
「値を指定しない」
「正確な値を指定」は、｛｝「値を入力」
「上位の値を指定」は、｛｝「値を入力」
「下位の値を指定」は、｛｝「値を入力」
「値の範囲を指定」は、｛｝「２つの値を入力」
「除外される値の組を指定」は、｛｝「１以上の値を入力」
「除外される値の範囲を指定」は、｛｝「値の対を入力」
【００５９】
このようにして、操作者は、ランドマーク用のアドレスおよび値を決定し指定することができる。上述のものは、相当の能力および柔軟性と、専門性の低いソフトウェア開発者に対して良好な使いやすさを提供する。専門性の低い操作者は自由形式のプログラミングを避けることができるが、より専門性のより高い熟練者はこれを使用することができる。
【００６０】
同様の方式で、準備ソフトウェアは、操作者がランドマークに対してどのように応答するかを指定できるようにする。
セントリ用の対応する動作。
レポータ用の対応する規則。
【００６１】
デバッギングシステムは、様々な種類のランドマークを支援してもよい。好ましくはこの支援は、関連するパラメータを表示するためのエキジビターソフトウェアおよびディテクティブソフトウェア機能、関連するパラメータを指定するための準備ソフトウェア機能、および実行中にランドマークを検出するためのセントリ機能を含んでいる。本実施例は、検査と準備との相互作用を説明する。このようにして、初期の証拠の検査によって、体系的に、より照準が合わされて焦点が絞られた後の証拠に対する準備が可能になる。
【００６２】
（実施例Ｃ）
＜コードマーク＞  シナリオ：上述の実施例Ａでは、操作者は、初期の証拠における明確で顕著な症状を分かっている。対照的に、実施例Ｂでは、初期の証拠は、実行中の２つのイベント間のどこかにエラーがあることを示しているのみである。初期のイベントはプレカーソルと呼ばれ、後のイベントはポストカーソルと呼ばれる。初期の証拠が、既知の、明確で顕著な症状を提供しないものと仮定する。プレカーソルとポストカーソルの間に広範な実行があると仮定する。プレカーソルとポストカーソルの間のそれだけの量の実行を完全に記述した証拠を抽出し、保存し検査することは、負担が大き過ぎると考えられる。中央プログラムが、十分に確立していない新たなソフトウェアを含み、十分に確立され、エラーを含まないと考えられる成熟したソフトウェア（ライブラリ方式など）も含むと仮定する。プレカーソルとポストカーソルの間の実行中、ほとんどの実行時間および詳細には成熟したソフトウェアが関与し、新たなソフトウェアはあまり関与しなくてもよい。例えば、新たなソフトウェアは、詳細な計算のために成熟したソフトウェアを呼び出す、簡潔な新しい関数であってもよい。したがって、操作者は、エラーは恐らく新たなソフトウェア内にあって、成熟したソフトウェア内にはないであろうと仮定する。操作者は、新たなソフトウェアの実行のみを明らかにする「高レベルの追跡」を必要とし、また成熟したソフトウェアの過度の量を含む「低レベルの追跡」によって大きすぎる負担を負うことを避ける必要がある。
【００６３】
操作者はコードマークを用いて、あるソフトウェアの実行における証拠に集中し、また他のソフトウェアの実行における証拠を最小限にすることができる。例えば、準備ソフトウェアを用いて、操作者は、中央プログラム内の中心方式にコードマーク値を割当てることができる。後述するように、テーブルは様々な中心方式のコードマークをリストアップする。この中心方式を実行する際、そのコードマークはコードマーク中心フラッグに読込まれる。準備ソフトウェアを用いて同様の方法で、操作者はコードマーク値をレポータ方式に割当てることができる。例えば、別のテーブルは様々なレポータ方式のコードマークをリストアップする。この中心方式を実行する際、そのコードマークはコードマークレポータフラッグに読込まれる。このレポータ方式を実行する際、そのコードマークはコードマークフラッグと比較される。コードマークフラッグの方が大きいまたは等しければ、レポータ方式は有効である。中心コードマークの方が小さければ、レポータ方式は阻止される。
【００６４】
ソフトウェアの実体の「ハンドル」は、実行中にこのソフトウェアの実体を特定するための、６４ビットの整数などの実行時間値である。デバッギングシステムは、方式および対応するコードマーク値用のハンドルをリストアップするテーブルを提供してもよい。準備ソフトウェアにより、操作者がこのテーブルを埋めることが可能になる。このテーブルは、深いレベルのリソースの支援によって文脈アドレス可能である。実行中、ハンドルが与えられると、このテーブルは迅速にそのコードマークを提供する。またテーブルは、初期値のコードマークを含んでいてもよい。明確に含まれていないいずれかのハンドルが与えられると、初期値のコードマークに戻る。あるいは、コードマーク値はインライン命令文で表されてもよい。
【００６５】
さらに高度な実施例：操作者が、（ｉｉ）バグを含むかも知れない新たなコードであって、より詳細な証拠が示される、（ｉｉ）バグとは関連が少ないと思われる新たなコードであって、それほど詳細ではない証拠が示される、または（ｉｉｉ）バグを含まないと思われる成熟したコードであって、証拠は示されない、という３つの方式の分類があると仮定するものとする。コードマークに対して３つの値を用いることにより、この選択性は容易に実現される。
【００６６】
（実施例Ｄ）
＜陰性の症状＞  初期の証拠および仮定：初期の証拠の検査によって、実施例Ａで上述したように、明確で顕著な症状が示されないものと仮定する。その代わりに、中央プログラムのいくつかのセグメントが、「実行されるべきだった」のにも関わらず、実行されなかったことが示される。これを「陰性の症状」と呼ぶことにする。これにより、関連する証拠を抽出するのが困難になる。いずれにしても、デバッギングシステムは、多くの場合この困難を効率的に解決する手段および方法を教示する。本実施例をよりよく理解するため、いくつかの用語を以下に定義する。
【００６７】
分岐系命令：これには、実行シーケンスを変えることができるあらゆる命令が含まれる。例えば、これには、飛越し、無条件分岐、分岐実行、条件付き分岐、スイッチ、呼出し、呼出しとリンク、割込み、および戻りが挙げられる。
【００６８】
宛先：分岐系命令は、次に実行する可能性のあるアドレスとして１以上のＩアドレスを提供する。これらを「宛先」と呼ぶことにする。宛先の中には、命令内で明示されるものもある。分岐系命令のフォールスルー、戻り命令の戻りアドレスなど、他の宛先は暗示的である。
【００６９】
拒絶、選択：次に実行される宛先は「選択される」かまたは「受入れられる」。次に実行されない宛先は「拒絶される」かまたは「受入れられない」。
【００７０】
方向、表示させる：実行された分岐系命令に関して、その「方向」はどの宛先が選択されたか、およびどれが拒絶されたかを示す。「分岐の周囲を表示させる」は、「分岐系命令において拒絶された宛先を観察する」ことと理解されるものとする。本発明は、どのように分岐の周囲を表示させるかが特定のバグを診断する支援となることを教示する。
【００７１】
方式および使用：以下の「陰性の症状」において、「方式」は「あらゆる方式、手順またはコードセグメント」を意味すると理解されるものとする。また以下の語句については、
ＭｅｔｈｏｄＲがＭｅｔｈｏｄＳを使用するとは、いくつかの可能性を含むものと理解される
（ＭｅｔｈｏｄＲがＭｅｔｈｏｄＳを呼出す）または
（ＭｅｔｈｏｄＲがＭｅｔｈｏｄＳに分岐する）または
（ＭｅｔｈｏｄＲがＭｅｔｈｏｄＳにフォールスルーする） 。
【００７２】
操作者は以下の予備的な仮定を作成（予測）する。
｛予想される実行｝実行中、操作者は「実行すべきであった」方式のシーケンスを予想する。
ＭｅｔｈｏｄＡがＭｅｔｈｏｄＢを使用し、これが・・・ＭｅｔｈｏｄＹを使用し、これがＭｅｔｈｏｄＺを使用する。
｛観察される証拠｝しかしながら初期の証拠は、ＭｅｔｈｏｄＡは実行されたがＭｅｔｈｏｄＺは実行されなかったことを示している。
｛バグ｝実行はこのシーケンスに従って開始されたが、このシーケンスは完了しなかった。
したがって、実行中、何らかの分岐系命令がこのシーケンスから外れた。
｛このシーケンスから外れた分岐系命令の証拠を見つけるためのよりよい証拠。 
【００７３】
このことは、操作者が以下の擬似コードを作成（予測）することにつながる。
【００７４】
操作者は、「実行すべきであった」命令アドレスのリストを提供する。
【００７５】
中央プログラムの実行の関連する部分の間、実行された各分岐系命令において、以下が証拠として抽出され保存されるべきである。この命令のＩアドレス、各宛先Ｉアドレス、およびこの分岐の方向。
【００７６】
必要であれば、検索をはっきりさせる。そのＩアドレスがこのリストにしたがう、何らかの拒絶された宛先がこのリストにしたがう、および選択された宛先がこのリストにしたがわないなどとなるように、いずれかの分岐系命令を見つける。
【００７７】
拒絶された宛先のそれぞれは上述のリストと比較される。適合があれば、操作者によって指定される対応する動作を行う。例えば、これは、どのレポータ方式を使用するか、すなわちどのさらなる証拠を抽出して保存するかを指定する。
【００７８】
初期の段階では、ディテクティブが証拠ファイル内にこれを発見する。後の段階では、これは、実行中にセントリが発見するランドマークを定義する。実施例Ａと同様、このことは、デバッギングシステムがどのように、より明瞭な証拠および明白な診断につながる体系的な改善を提供するかを示す。当然ながら、本実施例の有効性はＩアドレスのリストに依存する。
【００７９】
（実施例Ｅ）
＜証拠の集中＞  ランドマークによって、実行中のいつ証拠を集めるかを選択することが可能になる。コードマークによって、プログラム中のどこで証拠を集めるかを選択することが可能になる。多くの場合、これら２つは論理的にまったく異なり、両方を同じ実行中に使用することができる。これらは併せて、証拠を大幅に集中させるのに使用することができる。
【００８０】
（実施例Ｆ）
＜持続性のレポータ方式用のランドマーク＞  操作者が、顕著で明確な症状を分かっていて、既にランドマークを定義しているものと仮定する。実行中、このランドマークはバグが発生した後に発生する。対照的に、いくつかのレポータ方式は「持続性」である。関連する証拠を集めて保存するために、これらのレポータ方式はバグの前に開始されるべきである。したがって、症状のランドマークは、これらのレポータ方式を始動させるのに有用ではない。したがって、操作者は、バグの前に発生するプレカーソルランドマークを構築してもよい。これは、持続性のレポータ方式を始動させるのに有用である。症状のランドマークは持続性のレポータ方式を終了させるのに有用である。
【００８１】
＜セントリ＞
デバッギングソフトウェアの分野において、頻繁に発生する問題は「干草の山の中で針を見つけること」である。言い換えれば、アイテム（可能性、証拠）の大きな組が存在する場合があり、関連するアイテムを見つけることは困難な可能性がある。バグをより体系的に特定するために、デバッギングシステムはセントリおよびランドマークを使用する。これらにより、実行中の指定されたイベントを検出してこれに応答するための自動手段が提供される。多くの場合、非常に多くの命令が高速で実行されるにも関わらず、これにより数少ないイベントを効率的に検出することができる。多くの場合、デバッガによって、不具合の仮定に密接に対応する不具合の証拠を抽出し保存することが可能になる。デバッギングシステムは、セントリおよび中央処理装置が区別されるところに構築してもよい。他の構成では、これらはより高度に集積化されている。セントリおよび中央処理装置は同じチップ上に構築されてもよい。セントリは、典型的には、セントリ高速論理、セントリデータレジスタまたは非常に高速のメモリ、セントリシーケンス論理、および命令用のセントリメモリを含んでいる。他の構成要素または構造に置き換えてもよいことが理解されるであろう。
【００８２】
プロセッサは、典型的にはタイムクロックを含んでいる。クロックは、命令、プロセッサのサイクル、物理的な秒数、または他の時間的単位を測定してもよい。これは任意の基点あるいは意味のある基点からの時間を測定してもよい。タイムクロックからの読取り値はタイムスタンプと呼ばれる。主なプロセスは、コミットまたはリオーダバッファも含んでいてもよい。各命令が実行を完了すると、リオーダバッファは命令の詳細な記述とその直接の結果を提供する。詳細な記述は、タイムスタンプおよび現在の命令のＩアドレス（すなわち、プログラムカウンタ内のアドレス）で増大されてもよい。
【００８３】
各分岐系命令は１以上の宛先Ｉアドレスを提示する。無条件分岐は１つを提示する。従来の条件付き分岐は、明示的なアウトオブラインアドレス、およびフォールスルーインラインアドレスの２つを提示する。Ｎ通りのスイッチ命令は、フォールスルーインラインアドレスを含むＮ個の宛先を提示する。分岐はこれらの宛先の１つを選択し（「受入れ」）、他をすべて拒絶する（「受入れない」）。次に、各分岐系命令に対して、詳細な記述は、宛先の数、この分岐命令によって提示されるすべての宛先Ｉアドレス、および分岐方向（すなわち、どの宛先が選択されたか）でさらに増大される。
【００８４】
中央処理装置のリオーダバッファからセントリの高速論理にはデータパスがある。各命令が実行を完了すると、増大された詳細な記述はこれを介してセントリの高速論理に供給される。セントリの高速論理は、非常に頻繁に実行される機能、特にランドマーク用のテストを支援する。これは、現在の記述パラメータ（上述のような）を指定された値と比較する手段を有し、また指定された値を保持する手段を有する。これは、同等、片側、両側、１以上の比較のブール組み合わせなど、様々な種類の比較を支援する手段を有する。（「ＣＤＡ」、「ＣＤＶ」、「ＣＯｐＣ」を、「現在のデータアドレス」、「現在のデータ値」および「現在のオペレーションコード」の略語とする。）一実施例として、セントリのパイプライン論理は以下のランドマークを効率的に支援する。
【００８５】
ランドマーク＝（ＣＯｐＣは「メモリ書込み」に等しい）および（指定されたアドレス範囲内のＣＤＡ）および（指定された値範囲内のＣＤＶ）
ランドマークが検出されると、セントリは対応する動作を行う。セントリの高速論理は、非常に単純な対応する動作を支援してもよい。例えば、これは、指定された値をランドマークフラッグに割当てるか、セントリのシーケンス論理を起動させることができる。しかしながら、さらにより複雑な対応する動作はセントリのシーケンス論理によって支援される。
【００８６】
一実施例では、セントリの高速論理は、レジスタ、コンパレータおよびゲートを用いる論理パイプラインとして実装される。現在の指定された情報を保持するためのレジスタがある。これらのレジスタ間にはコンパレータがある。コンパレータ間には、比較のブール組み合わせのためのゲートがある。これらは、情報を案内し、セントリの高速論理を再構成するための補助ゲートである。セントリの高速論理はまた、ランドマークに対して有用な多くの高速テストを支援してもよい。セントリの高速論理は、頻繁に実行される機能を支援する。はるかに少ない頻度で、これはランドマークを検出し、セントリのシーケンス論理を起動させる。この低減された頻度は、セントリのシーケンス論理のより遅い速度を緩和する。
【００８７】
セントリのシーケンス論理は、より少ない頻度かつより遅い動作速度で発生する機能に対してより幅広い用途を提供する。セントリのシーケンス論理は、それにより、より複雑な対応する動作、結果として高速論理回路を支援する。複雑なランドマークに対して、セントリのシーケンス論理は追加のテストを提供する。これは、セントリのパイプライン論理を増大するのに有用であってもよい。第１の例では、ランドマークは、指定されたマトリックスの指定された行に対するメモリ書込み命令によって定義される。第２の例は、指定されたシーケンス内で発生するより小さなイベントによって定義されるランドマークである。これは、実行シーケンスに関するバグを診断するのに有用であり得る。
【００８８】
シーケンス論理は、セントリレジスタとメモリ階層の間でのデータの読込みまたは記憶を支援し、また中央プログラム内の方式との相互作用を支援する。例えば、これは、メモリ階層内のデータのテスト、指定された値のセントリレジスタへの割当て、およびセントリプログラムのメモリ階層からセントリメモリ内への読込みを支援する。１つの構成では、セントリのシーケンス論理は、非常に小さなデジタル信号プロセッサ（ＤＳＰ）に類似する小さな高速のコプロセッサを含んでいる。
【００８９】
デバッギングシステムは、セントリデータおよびセントリ命令用のメモリを有する。（ＳＲＡＭおよびＤＲＡＭは「スタティックランダムアクセスメモリ」および「ダイナミックランダムアクセスメモリ」として理解されるべきである。）一実施例では、データメモリは、ＳＲＡＭまたは恐らくは非常に高速の内蔵ＤＲＡＭの小さなアレイである。デバッギングシステムのセットアップおよび準備の間、操作者は、セントリプログラムを構築してセントリのパイプライン論理とセントリのシーケンス論理を案内するための、ソフトウェアツールを使用する。これらのプログラムは、各ランドマークテストおよびその対応する動作を指定してもよい。指定されたアドレスは、数値または記号で（すなわち、中央プログラム用のソースコードに類似した様式で）表されてもよい。
【００９０】
セットアップまたは準備ソフトウェアは、セントリプログラム用のリンカーまたはローダーを提供してもよい。セントリプログラムはメモリ階層を介して転送されてもよい。中央プログラムの実行前および実行中に、セントリプログラムはセントリメモリ内に転送される。中央プログラムの実行前または実行中に、メモリが割付けられ、アドレスが中央プログラムのソフトウェア要素に割当てられる。次に、これらのアドレスがセントリメモリ内に読込まれ、指定されたアドレスとして作用する。場合によっては、中央プログラムに対する命令によってセントリの機能を増大することが有用であってもよい。これは、中央処理装置が、命令の複数のスレッドの近接した〜同時の実行を支援する場合に、さらに魅力的である。これは汎用性と利便性を提供する。具体的には、これにより、操作者が高水準言語のソースコートを使用して、ランドマークの検出と対応する動作の実行を増強することが可能になる。しかしながら、これは顕著な時間歪みを起こす実行となり、その結果中央プログラムとの適合性を低下させる場合がある。
【００９１】
プロセッサチップはまた、フラッグ、特にランドマークフラッグ、コードマークフラッグおよびモジュレーションフラッグを保持するためのレジスタを含んでいてもよい。ランドマークフラッグは、セントリのシーケンス論理内のスイッチ命令文を駆動する。コードマークは、いくつかのレポータ方式を駆動し、それにより証拠の抽出を修正する。他の構成では、追加のまたは異なるフラッグを提供してもよい。第１の例は、コールスタックに類似したコードマークフラッグのスタックである。第２の例は、より多くのランドマークフラッグを提供して、どのようにそれらの効果が重なり合うかを制御することを可能にする。第３の例では、証拠をより多目的に修正するために他のフラッグを追加する。
【００９２】
セントリ回路のオンチップでの構築は、プロセッサチップの設計と開発計画とに依存してもよい。中央処理装置がすでに設計されている場合には、分離した構成が使用されてもよいが、オンチップ構成と同様に機能しないことがある。中央処理装置が初期設計段階にある場合には、より集積化された構成が好ましい。一実施例では、セントリの高速論理は、中央処理装置内の低レベル資産、例えばリオーダバッファと非常に近く隣接するかまたは１つにまとめられる。これにより、特に詳細な記述のためのデータパスにおいて、またセントリの高速論理において、より低い電力損失が可能になる。先端の中央処理装置の中には、命令の複数のスレッドをほぼ同時に実行することを支援するものもある。これらのプロセッサでは、中央処理装置上の追加のスレッドがシーケンス論理と置き換えられてもよい。他の先端のプロセッサチップは複数のプロセッサを含んでいる。これらのプロセッサでは、１つのプロセッサが中央処理装置として作用してもよく、他のものがセントリおよびレポータ用のシーケンス論理を支援する。同様に、フラッグおよび中央処理装置は分離していても、非常に近く隣接していても、または中央処理装置と１つにまとめられていてもよい。さらに同様に、レポータと中央処理装置は分離していても、非常に近く隣接していても、または１つにまとめられていてもよい。
【００９３】
＜レポータ＞
実行中、レポータは証拠を抽出し、それをＬ２キャッシュ、メインメモリ、または記憶装置に保存することができる。より完全には、レポータは以下の機能を支援する。（ｉ）操作者がレポータをプログラムまたは構成してもよい、（ｉｉ）セントリがレポータを起動してもよい、および（ｉｉｉ）レポータがレポータ方式を提供してもよい。いくつかのレポータ方式では、実行中、レポータ方式が証拠を抽出してＬ２キャッシュまたはメインメモリに保存する。これらのレポータ方式は深いレベルのリソースである。いくつかのレポータ方式は、証拠を記憶装置内のファイルに保存してもよい。レポータ方式は、深いレベルおよびソフトウェアレベルの両方のリソースを使用するように構成されてもよい。
【００９４】
操作者は、ソフトウェアツールを用いて任意のレポータ方式をプログラムしてもよい。この方式は、ソフトウェアレベルのリソースを用いて、実行中に証拠を抽出して保存してもよい。レポータは、定義済みの１回限りのレポータ方式、定義済みの持続性のブロック指向のレポータ方式、定義済みの持続性の命令指向のレポータ方式、およびユーザのプログラムによるレポータ方式など、いくつかの種類のレポータ方式を支援する。一実施例では、レポータは、レポータのシーケンス論理、レポータメモリ、レポータデータパス、レポータゲート、レポータフラッグ、およびこれらのゲートおよびフラッグを駆動するための補助論理を含んでいる。シーケンス論理は、Ｌ１キャッシュ、Ｌ２キャッシュ、メインメモリおよび記憶装置用のコントローラと相互作用する。またシーケンス論理はレポータゲートを駆動する。コンピュータシステムは既に、中央処理装置とＬ１キャッシュ、Ｌ２キャッシュ、メインメモリおよび記憶装置との間のデータバスを有している。レポータは、増大されたリオーダバッファとＬ２キャッシュ、およびメインメモリとの間にデータパスおよびゲートを追加する。一実施例では、レポータのシーケンス論理とレポータメモリは、非常に小さく単純なデジタル信号プロセッサおよびその命令メモリに類似する。
【００９５】
１つの構成では、定義済みのレポータ方式は、コンピュータシステムに既に含まれているリソースおよび内部設計の上に構築され、これらと密接に対応する。これにより、中央処理装置上で実行する中央プログラムと非常に適合性のある定義済みのレポータ方式が容易になる。多くの場合、このようなレポータ方式と中央プログラムの両方はほぼ同時に実行可能であり、時間歪みは大きくないかまたは小さく、結果は中央プログラムによって変えられない。異なるプロセッサのアーキテクチャおよび実装は、異なるレポータ方式およびプログラムにつながることが理解されるであろう。
【００９６】
レポータは、下記の実施例などの、定義済みの単一の短いレポータ方式を提供してもよい。このようなレポータ方式が呼出されると、データの指定された有限ブロックを抽出して証拠に保存する。このようなレポータ方式は、レポータのシーケンス論理用の手順（プログラム）を含んでいる。これが、Ｌ２キャッシュ用のコントローラ、および／またはメインメモリ用のコントローラ、および／または記憶装置を動作させるためのソフトウェア、特にメモリマップドファイル用のソフトウェアを駆動する。これらのレポータ方式は、記憶装置内のファイルを動作させるシステムソフトウェアによって増大される、深いレベルのリソースとして使用されてもよい。多くの場合、これらのレポータ方式は、中央プログラムの実行とよく適合して動作する。いくつかのレポータ方式の例を以下に示す。
【００９７】
｛実行メインメモリを証拠ファイルにコピーする｝（関連するコンピュータシステムにおいて、いくつかの記憶装置コントローラ機能はオペレーティングシステム内のソフトウェアによって提供される。特に、これは典型的には「ＭＭＦ」すなわちメモリマップドファイルを提供する。これは、メインメモリ内の範囲を、データを記憶装置に書込むためのドアとして使用する。）したがって、このレポータ方式は、メインメモリのすべてを証拠ファイルに直接コピーする。このレポータ方式は、中央プログラムの実行を中断し、後で再開する。対照的に、他のレポータ方式のほとんどは実行とさらによく適合する。
【００９８】
｛アプリケーションデータセクタを実行メインメモリから証拠ファイルにコピーする｝このレポータ方式は、上述のレポータ方式に類似するが、アプリケーションデータ用のセキュリティコードを有するメインメモリセクタに限定される。また、このレポータ方式は、中央プログラムの実行を中断し、後で再開する。
【００９９】
｛実行Ｌ２キャッシュを証拠にコピーする｝実行Ｌ２キャッシュからそれぞれのページを、メインメモリ内の証拠バッファ、および／または記憶装置内の証拠ファイルにコピーする。これは、メモリ階層内のリソース、および記憶装置およびファイル用のリソースを利用してもよい。したがって、メインメモリ内へダンピングされる証拠は深いレベルのリソースである。
【０１００】
｛ページを実行Ｌ２キャッシュから証拠にコピーする｝このレポータ方式は、メモリコントローラを使用して、指定されたページをＬ２キャッシュから証拠バッファメインメモリにおよび／または記憶装置内の証拠ファイルにコピーする。
【０１０１】
｛実行Ｌ１キャッシュを証拠にコピーする｝すべての行を実行Ｌ１キャッシュからＬ２キャッシュ内の証拠バッファ、および／またはメインメモリ内の証拠バッファにコピーする。この方式はメモリ階層内のリソースを利用してもよく、これは深いレベルのリソースである。
【０１０２】
｛行を実行Ｌ１キャッシュから証拠にコピーする｝行が実行Ｌ１キャッシュから実行Ｌ２キャッシュに書込まれると、これはＬ２キャッシュ内の証拠バッファにも書込まれ、および／またはメインメモリ内の証拠バッファに書込まれる。この方式は、メモリ階層内のリソースを利用するので、深いレベルのリソースである。
【０１０３】
｛指定された仮想アドレス範囲を実行から証拠にコピーする｝この範囲のサイズ、およびメモリ階層内でのその物理的アドレスに応じて、この範囲からの実行データは、Ｌ２キャッシュ内の証拠バッファ、および／またはメインメモリ内の証拠バッファ、および／または記憶装置内の証拠ファイルにコピーされる。これは、メモリ階層内のリソース、および記憶装置およびファイル用のリソースを利用してもよい。証拠をＬ２キャッシュまたはメインメモリにコピーするため、これは深いレベルのリソースである。
【０１０４】
｛呼出しスタックを証拠にコピーする｝このレポータ方式は、呼出しスタックの起点に対するポインタを使用し、また呼出しスタックの次の未使用アドレスに対するポインタを使用する。これらは併せて、前のレポータ方式で使用される仮想アドレス範囲を指定し、呼出しスタックをすべてメモリ階層内の証拠バッファにコピーする。このレポータ方式は、証拠がＬ２キャッシュまたはメインメモリに保存される場合には、深いレベルのリソースである。しかしながら、これが記憶装置内の証拠ファイルに保存する場合には、メモリマップドファイルを動作させるためのソフトウェアも使用する。
【０１０５】
｛指定された呼出しベクトルを呼出しスタックから証拠にコピーする｝このレポータ方式は、呼出しスタックに対するポインタのリストを使用する。このレポータ方式は、２つの連続するポインタを使用してアドレスの範囲を定義する。この範囲および先行するレポータ方式を用いて、これは呼出しベクトルを証拠にコピーする。場合によっては、これは主に深いレベルのリソースである。
【０１０６】
レポータはまた、以下に定義されるような、定義済みの持続性のブロック指向レポータ方式を提供してもよい。このようなレポータ方式が呼出されると、これはバッファをフラッシュし、次にブロックを実行から証拠にコピーする。このレポータ方式が停止されるまで、新たなブロックに対してこれが繰返される。このようなレポータ方式は、レポータのシーケンス論理で動作する手順を含んでいる。これは、上述したメモリ階層のコントローラと相互作用する。ブロックがこの階層の下に向けて転送されると仮定する。ほぼ同時に、このレポータ方式手順はこれらのコントローラを用いて、同じまたはより低いレベルの証拠にコピーも転送する。このようなレポータ方式の実施例を以下に示す。
【０１０７】
｛実行ページをＬ２キャッシュから証拠に繰返しコピーする｝必要であれば、メモリ階層は自動的にページを実行Ｌ２キャッシュから実行メインメモリに書込む。このレポータ方式はメモリコントローラを使用し、ほぼ同時にこのページを、メインメモリ内の証拠バッファ、および／または記憶装置内の証拠ファイルにコピーする。この方式はいくつかの重要な長所を有する。この方式は、Ｌ２キャッシュおよびメインメモリ間でのデータ転送速度負荷を増加させない。メインメモリへのコピーに関しては、このレポータ方式は深いレベルのリソースである。多くの場合、このレポータ方式は中央プログラムの実行と非常によく適合する。場合によっては、このレポータ方式は診断に有用な証拠を抽出して保存する。
【０１０８】
｛行を実行Ｌ１キャッシュから証拠に繰返しコピーする｝行が実行Ｌ１キャッシュから実行Ｌ２キャッシュに書込まれると、このレポータ方式はそれを、Ｌ２キャッシュ内の証拠バッファ、および／またはメインメモリ内の証拠バッファにコピーする。この方式はメモリ階層内のリソースを利用するので、深いレベルのリソースである。
【０１０９】
｛直前の呼出しベクトルを呼出しスタックから証拠に繰返しコピーする｝このレポータ方式は、呼出しスタックに対するポインタのリストを使用する。このレポータ方式は、最後の２つのポインタを使用してアドレス範囲を定義する。この範囲と先行するレポータ方式を用いて、これは呼出しベクトルを証拠にコピーする。場合によっては、これは主に深いレベルのリソースである。
【０１１０】
｛分岐系命令を繰返しコピーする｝実行された各分岐系命令に対して、その詳細な記述を証拠にコピーする。これは特に、宛先Ｉアドレス、および分岐の方向、さらにこの命令に対するプログラムカウンタをも含んでいる。さらなる検討については、本発明の「陰性の症状」に関するいずれかの箇所を参照のこと。
【０１１１】
レポータはまた、以下に記載されるような、定義済みの持続性の命令指向レポータ方式を提供してもよい。このようなレポータ方式が呼出されると、これは、明確に停止されるまでほぼ途切れることなく証拠を抽出し保存する。このようなレポータ方式は以下の構造を用いてもよい。各命令が実行を完了すると、増大されたリオーダバッファが命令の増大された詳細な記述およびその直接の結果を提供する。レポータは、各命令の詳細な記述に対するレジスタ、増大されたリオーダバッファからＬ２キャッシュまで、メインメモリまで、および記憶装置内のファイルまでを接続するレポータゲートおよびデータパスを含んでいる。共にレポータゲートを修正する、レポータフラッグおよびコードマークフラッグが存在する。このレポータ方式は、レポータのシーケンス論理に関する手順を含んでいる。この手順はレポータメモリ内に記憶される。これは、中央処理装置およびメモリ階層から読込むことができる。このレポータ方式は以下のように動作する。レポータ方式手順は、レポータのシーケンス論理で動作し、レポータゲートを修正する値をレポータフラッグに割当てる。また、コードマークフラッグはレポータゲートを修正する。したがって、詳細な記述のいくつか（ゼロ、一部、すべて）はレポータデータパスを介して抽出され保存される。これは、レポータフラッグの値が再割当てされるまで続く。そのようなレポータ方式の実施例を以下に示す。
【０１１２】
｛詳細な記述を証拠に途切れなくコピーする｝このレポータ方式は、それぞれの詳細な記述を途切れなく抽出し、Ｌ２キャッシュ内の証拠バッファ、および／またはメインメモリ内の証拠バッファに保存する。このレポータ方式を支援するために、１つの構成では、論理ゲートおよびデータパスをリオーダストリームのソースからＬ２キャッシュ用のＬ２キャッシュコントローラに追加する。このゲートが開くと、このデータストリームが証拠バッファに供給される。このレポータ方式は、非常に詳細な証拠を非常に大きな平均データ転送速度で抽出して保存する。これによりいくつかのバグの診断が容易になる。しかしながら、これは、時間歪みのある実行となり、他のバグの診断を複雑にする可能性がある。
【０１１３】
｛詳細な記述を証拠に選択的にコピーする｝場合によっては、証拠のより良好な抽出（選択、修正）によって、有効な診断のために十分に選び抜かれた証拠が提供されるが、いずれにしても平均データ転送速度は大幅に低減され、時間歪みも低減される。一実施例では、証拠は各命令のオペコード（オペレーションコード、動詞）に基づいて修正される。現在の詳細な記述が詳細な記述レジスタ内にストローブされ、そのオペコードは指定されたオペコードと比較される。これが、証拠バッファへのデータパスを修正するレポータゲートを駆動する。一実施例では、メモリ書込み命令のみを選択し、これを抽出して保存する。これは中央プログラムの実行の「状態」を大まかに捕らえる。これは、「実施例」セクションの「実施例Ａ」に記載したようなバグの診断に有用である。別の実施例では、すべての宛先命令アドレスを含む分岐系命令のみを抽出して保存する。これは、「実施例」セクションの「実施例Ｃ」に記載したような特定のバグの診断に有用である。
【０１１４】
以下の特徴はレポータ方式のすべてまたは多くに適用される。
【０１１５】
｛サーキュラバッファおよびポインタ｝多くの場合、この構造により書込みおよび読出しをほぼ同時に発生させることが可能になる。したがって、サーキュラバッファは、十分なデータ転送速度および大きなブロックサイズでも証拠を保存することができる。サーキュラバッファは深いレベルのリソースであるため、これは中央プログラムの実行と適合する場合が多い。
【０１１６】
｛タイムスタンプ｝「セントリ」のセクションではタイムクロックおよびタイムスタンプを説明した。証拠が抽出されるとき、これは、証拠のシーケンスを十分適切に明確にする場合が多いタイムスタンプを含んでいてもよい。したがって、証拠の連続する要素間で時間の重複または時間の干渉がある場合には常に、タイムスタンプを含むことが望ましい。また、証拠の大きなブロックごとにタイムスタンプを含むことが望ましい。任意に、連続する証拠セグメント間に大幅な時間のギャップがある場合に、タイムスタンプが含まれていてもよい。
【０１１７】
｛アドレス変換｝一実施例では、Ｌ２キャッシュ内の証拠はアドレスタグを含み、メインメモリ内または記憶装置内の証拠はアドレス変換テーブルを含んでいる。
【０１１８】
｛修正｝修正により、レポータ方式の限定的なカスタマイズが可能になる。この修正は深いレベルのリソースであり、中央プログラムの実行と適合性がある。デバッガは、熟練度の低い操作者がこの深いレベルの修正をプログラムできるように、インタフェース、ウィザードまたは高レベルの機能を提供してもよい。これにより、熟練度の低い操作者は、証拠が仮定に基づいた最高値を有するときに証拠を集中させることができる。これは簡便性と論理上の電力との間で適切な均衡を提供する。
【０１１９】
以下の実施例に示すように、追加のユーティリティレポータ方式が提供されてもよい。
【０１２０】
｛証拠バッファを記憶装置にフラッシュする｝Ｌ２証拠バッファからメインメモリの証拠バッファへ、また記憶装置の証拠ファイルへフラッシュする。レポータのシーケンス論理は、Ｌ２キャッシュ、メインメモリ、および記憶装置用のコントローラを方向付けてこのデータを転送してもよい。
【０１２１】
｛停止｝定義済みの持続性レポータ方式の動作を停止する。
【０１２２】
｛他のレポータ方式を呼出す｝このレポータ方式は、レポータのシーケンス論理上で動作する手順として表される。この手順は、定義済みのレポータ方式を含む他のレポータ方式を呼び出さないか、その１以上を呼出すことができる。多くの場合、操作者は、複合レポータ方式を作成し、および／または中央プログラム内のソフトウェアと相互作用させるために、準備ソフトウェアを使用する。
【０１２３】
多くの場合、定義済みのレポータ方式は、便利かつ効率的で、また強力である。しかしながら、これらは有限かつ定義済みである。特定の場合には、より特化したレポータ方式が正しいものとされてもよい。専門的な開発者は、特化した証拠を抽出して保存するためのソフトウェアを構築してもよい。このソフトウェアは深いレベルのリソースによって増大される。一実施例では、レポータ方式ソフトウェアはセントリ内の深いレベルのリソースによって呼出される。別の実施例では、この証拠は深いレベルのパスを介してＬ２キャッシュまたはメインメモリに保存される。ソフトウェアを含むレポータ方式は重要な制限を有してもよく、開発者が特別な技術を有していることが求められてもよい。例えば、このようなレポータ方式は、データ転送速度が比較的小さい証拠に対してのみ実施可能であってもよく、実行中に時間歪みを生じてもよい。いずれにしても、これは特定の場合に有用であり得る。
【０１２４】
＜スクライブ＞
スクライブソフトウェアは、中央プログラムの実行中に動作する。スクライブソフトウェアは、メインメモリ内の証拠バッファから記憶装置内の証拠ファイルへデータを転送する手段を制御する。より完全には、スクライブは以下の機能を支援する。（ｉ）セントリ、レポータまたは中央プログラムはスクライブを起動できる、（ｉｉ）スクライブは記憶装置内の証拠ファイルを初期化できる、（ｉｉｉ）スクライブは、メインメモリ内の証拠バッファから記憶装置内の証拠ファイルへデータを転送できる、（ｉｖ）スクライブは、データがサーキュラバッファに書込まれているときに、途切れることなく転送を行うことができ、その結果、より古い証拠が記憶装置内の証拠ファイルに転送されるのとほぼ同時に、より新しい証拠をセントリによって証拠ファイル内に転送することができる、（ｖｉ）証拠バッファを一回で証拠ファイルに「フラッシュ」することができる、（ｖｉｉ）スクライブとレポータは共に、Ｌ２キャッシュ内の証拠バッファから記憶装置内の証拠ファイルに証拠を転送する、および（ｖｉｉｉ）スクライブは記憶装置内の証拠ファイルを閉じることができる。
【０１２５】
１つの構成では、スクライブは、スクライブのシーケンス論理およびスクライブメモリを含んでいる。これは、スクライブ機能それぞれに対する方式でプログラムされる。スクライブのシーケンス論理は以下の要素と相互作用する。ＭＭＦ用のソフトウェアリソース、メインメモリ内のサーキュラバッファ用の深いレベルのリソース、およびレポータ。スクライブ機能は、これらの３つの要素によって提供される機能と密接に対応する。これにより、スクライブのシーケンス論理およびスクライブメモリを非常に単純にすることができる。１つの構成では、スクライブは極めて小さなコプロセッサおよびメモリを用いて実装される。これにより、追加のスクライブ機能に対する追加のスクライブ方式が可能になる。したがって、専門性のある熟練者はさらにスクライブ機能を追加することができる。別の構成では、固定の有限な状態機械を直接実装するシーケンスゲート論理を使用する。これは定義済みのスクライブ機能を支援するが、追加のスクライブ機能を制限する場合がある。
【０１２６】
中央処理装置の設計には、単一のプロセッサ内で命令の複数のスレッドをほぼ同時に実行することなど、進行中の改善がある。このようなプロセッサでは、スクライブは、中央処理装置内で、ただし中央プログラムとほとんど同時にかつそれとは独立して実行する、追加のスレッドとして実装されてもよい。スクライブと中央プログラムの実行とは、メインメモリ、記憶装置内のファイル、および記憶装置に対する帯域幅を共有して使用する。１つの構成では、スクライブには、メインメモリの約５０％と記憶装置内の１つのファイルとが割付けられる。スクライブと実行の両方が帯域幅を要求した場合、それぞれに約５０％が配分される。一方のみが帯域幅を要求した場合には、ほぼ１００％が配分される。反対に、実行には、メインメモリの約５０％とデータバスの帯域幅の約５０％が割付けられる。このリソースの共有は、実行に対する命令当たり平均サイクルを大きく低下させる可能性は低い。重要なのは、多くの場合、記憶装置への証拠の転送は、中央プログラムの最高速度または最高速度近くでの実行と極めて適合性が高い点である。いずれにしても、証拠の転送は依然として、メインメモリ、理論的容量、記憶装置に対する帯域幅、および記憶装置の大きな割合を使用することができる。
【０１２７】
＜準備ソフトウェア＞
不具合の証拠の検査に基づいて、開発者または操作者は、実行中のどのソフトウェアイベント（ランドマーク）がより良好にバグを取り囲む可能性があるか、どの新たな証拠がより良好にバグを明確にする可能性があるか、どの中央プログラムのセグメントがバグに関連性が高いまたは低い可能性があるか、という仮定を作成する。この仮定に基づいて、開発者は次に、準備ソフトウェアを用いてセントリ、レポータ、および中央プログラムに対する任意のソフトウェアの修正を準備する（照準を合わせる、プログラムする、または構成する）。例えば、いくつかのソフトウェアの修正は、中央プログラムのどこでより詳細な証拠を、またどこでより詳細でない証拠を抽出するかを指定するように作られてもよい。（典型的には、中央プログラム内のいくつかのアドレスは実行中に割当てられる。これらは「動的アドレス」と呼ばれる。）いくつかのソフトウェアの修正はまた、動的アドレスを、例えばセントリおよびレポータに供給してもよい。ソフトウェアの修正が行われると、中央プログラムは一般には再コンパイルされる。これにより上述のようなソフトウェアの修正が統合される。また、これはデバッギング用のコンパイル機能を導入するために使用されてもよい。例えば、コンパイルは、最も高速の実行ではなく最も単純な実行に照準を合わせている。また、ソースコードの命令文および名前はマシンコード内のコメントとして含まれる。
【０１２８】
準備ソフトウェアは、より専門性の低い操作者が以下を行うのを支援するために使用されてもよい。（ｉ）セントリをプログラムする、これは各ランドマークおよびそれに対応する動作を指定することを含む、（ｉｉ）コードマークをプログラムする、これは中央プログラムに小さな追加を行うことによって指定される、（ｉｉｉ）レポータをプログラムする、これは各ランドマークおよびコードマーク用のレポータ方式を指定することを含む、（ｉｖ）中央プログラムへの追加をプログラムする、これは、コードマークを指定し、セントリまたはレポータ用のいくつかのパラメータを指定する。後者は実行中に割当てられたまたは評価されたアドレスまたは式である、（ｖｉ）中央プログラムを再コンパイルする、これは上述の小さな追加を統合し、「デバッグ用フック」を含んでいる。
【０１２９】
準備ソフトウェアは、定義済みの診断上の質問のリストを提供してもよい。操作者はこれらの中から選択する。操作者は関連するパラメータを指定する。これらは、数値的な定数またはソースレベルの式およびその文脈として指定されてもよい。操作者は、このランドマークに対する名前を指定し、ランドマークフラッグに割当てる値を指定する。準備ソフトウェアはまた、レポータ方式のリストを提供してもよく、操作者はこれらの中から選択する。操作者の入力に基づいて、準備ソフトウェアはセントリを構成するためのプログラムを生成する。
【０１３０】
準備ソフトウェアはまた、操作者が、レポータを用いてどのように証拠を抽出して保存するかを指定するのを支援してもよい。準備ソフトウェアはランドマークのリストを提供し、操作者はこれらの中から選択する。準備ソフトウェアは定義済みのレポータ方式のリストを提供し、操作者は１以上を選択してもよい。選択された持続性のレポータ方式それぞれに対して、この操作者は次に、その動作を停止する規準のリストを提供し、操作者はその中から選択する。操作者の入力に基づいて、準備ソフトウェアはレポータを構成するためのプログラムを生成する。
【０１３１】
上述したように、操作者が準備ソフトウェアを使用するには中程度の技術があればよい。このようにして、操作者には、セントリおよびレポータおよび中央プログラム内の関連する小さな修正を準備するための、使用は簡単であるが強力な手段が提供される。このことにより、プログラミングおよび開発の技術が限定されていても、多くのバグの体系的かつ効率的な診断が可能になる。一実施例では、セントリ準備ソフトウェアおよびレポータ準備ソフトウェアのそれぞれは、インタフェースプログラムまたはウィザードプログラムを提供する。これは、オプションを示す選択ボックス、および式と文脈を入力するエントリボックスを含んでいてもよい。コンピュータと人間との相互作用における継続中の進展があり、これは、本明細書に組み込むことができる、相互作用に対する追加の手段を提供すると考えられる。このようにして、プログラミングの分野に対する専門性が低い場合にも、準備ソフトウェアを用いてデバッギングシステムを有効に使用することができる。
【０１３２】
準備ソフトウェアは、例えば、診断上の質問、ランドマークに対する対応するテスト、対応する動作、レポータ方式、または上述のそれぞれに対するパラメータを入力する手段といった、セントリ用の定義済みプログラムのメニューを提供してもよい。同様に、準備ソフトウェアは、定義済みのレポータ方式を提供してもよい。したがって、より専門性の低い操作者は、指定をレポータに容易に供給することができる。これらの定義済みメニューは、システム内で利用可能な診断上の質問のそれぞれおよび各レポータ方式、またはそれに対する選択されたサブセットを支援するのに使用されてもよい。また、準備ソフトウェアは、専門性の高い熟練した開発者が、追加のバグを診断するための追加の要素を自由に構築することを可能にする。これにより、より専門性の低い操作者が再利用できる、セントリプログラムの成長するアーカイブを促進する。同様に、準備ソフトウェアは、専門性の高い熟練した開発者がレポータをプログラムまたは構成することを可能にする。したがって、熟練者は、実行中に証拠を抽出して保存するための新たなレポータ方式を書くオプション、権限および課題を有する。
【０１３３】
１つの有用なランドマーク定義は、指定されたアドレスでメモリに書込むことである。場合によっては、アドレスは固定の数値仮想アドレスとして最もよく指定される。例えば、初期の実行はこのアドレスにおける不当な読出しによって停止され、これにより小さな「ダンプ」が発生する。中央プログラムが再実行されると、この停止およびこのアドレスが繰返される。したがって、操作者がこのアドレスをあまり理解していなくても、数値アドレスが明確に定義される。他の場合には、指定されたアドレスは、Ｍｅｔｈｏｄ  Ｍａｉｎ（）内のｍｅｔｈｏｄ  ＭＭ（）の局所変数ＵＵなどの、ソースコード記号アドレスとして最もよく表される。これは式および文脈のスタックとして指定される。
式＝「ＡｄｄｒｅｓｓＯｆ（ＵＵ）」
文脈＝「ＭｅｔｈｏｄＭＭ（）」
文脈＝「ＭｅｔｈｏｄＭａｉｎ（）」
（式の構文およびその文脈はソースコードの言語に依存する。）
【０１３４】
ＵＵ用のメモリ空間は、ｍｅｔｈｏｄＭＭ（）がＭａｉｎ（）の下で実行を開始したときに割付けられ、割当てられる。この場合のみ（この有効範囲において）は、この式および文脈のスタックに対して意味のある数値仮想アドレスである。この有効範囲の間、この仮想アドレスは中央処理装置で評価され、次にセントリに渡される。準備ソフトウェアは、操作者がセントリおよびレポータを準備する（プログラムするまたは構成する）のを支援する。準備ソフトウェアは、数式を入力する手段と、式および文脈のスタックを入力する手段の両方を提供する。これに基づいて、命令文がＭａｉｎ（）下のＭｅｔｈｏｄＭＭ（）に対するソースコードに投入されるか、または命令がＭａｉｎ（）下のＭｅｔｈｏｄＭＭ（）に対するマシンコードに投入される。
【０１３５】
別のランドマーク定義は、指定されたアドレスに対する指定された値でメモリに書込むことである。値の指定は、どのように、いつ指定された値を評価するかに依存する。第１の例では指定は固定の数値である。第２の例では、指定は、一度評価されてセントリに渡された式および文脈のスタックである。第３の例では、関連する値が頻繁に変化する。ランドマークは、予備テストと条件付きでその後に続く追加のテストとで構成される。予備テストは、既に評価されたパラメータを使用する。追加のテストはさらに複雑であり得る。一実施例では、予備テストは指定されたアドレスにおけるあらゆる書込みに対するものである。次に条件付きで、追加のテストがコードマークフラッグを（それが発生した場所の命令アドレスを評価するために）使用する。次に条件付きかつ任意で、セントリは中央処理装置を中断させる。これは指定された式および文脈のスタックを評価し、それをセントリに送り、実行を再開する。セントリは、新たに評価された値をメモリに既に書込まれている値と比較する。これらの条件がすべて満たされていれば、ランドマークは始動され、セントリは対応する動作を行う。したがって、準備ソフトウェアは、（ｉ）固定の数値またはアドレスの指定、（ｉｉ）実行の比較的初期に評価された式および文脈の指定、（ｉｉｉ）比較的初期に評価された式および文脈に基づいた予備テストの指定、および（ｉｖ）予備テストを通った後に評価されるべき式および文脈のスタックの指定、といったいくつかの指定オプションを支援する。
【０１３６】
操作者は、実行中の証拠の抽出および保存を修正し案内するために、コードマークを使用してもよい。コードマークは、命令を、ソースコードレベルまたはマシンコードレベルで中央プログラムに投入する。命令は、セントリに、すなわちコードマークフラッグに渡された値を含んでいる。任意に、これはまた、人間が読取り可能な名前を含んでいてもよい。操作者が積極的に開発しているソースコードに対する場合などには、中央プログラムのソースコードが利用可能である。１つの用途では、準備ソフトウェアはソースコードエディタを提供し、ソースコードレベルの関数を提供する。関数の引数として、操作者は、このコードマークに対する値と人間が読取り可能な名前を指定することができる。このようにして、操作者はコードマークを投入することができる。ライブラリプログラムなどの他の場合には、マシンコードのみが利用可能である。この場合、準備ソフトウェアは、すべての方式を見つけ、これらの方式のメニューを構築する自動手段を提供してもよい。操作者には、これらのメニューの表示と、方式を選択してコードマーク値および任意の人間が読取り可能な名前を割当てる手段が提供される。これに基づいて、準備ソフトウェアは命令をプログラムに接続する。またこれにより、方式の大きな組を選択し、コードマーク値および名前をそれらのそれぞれに割当てるなど、大まかな初期設定が容易になる。
【０１３７】
レポータ用の準備ソフトウェアでは、操作者は、どのようにコードマークフラッグをテストするか、すなわちどのように証拠の収集および保存を修正するかを指定することができる。従来のデバッギングプロセスにおいて、共通の問題は、初期のバグを診断するためにコードを追加または除去する際に、余分のまたは新たなバグが中央プログラムに取り込まれてしまうことである。新たなデバッギングシステムはこの問題を大幅に低減する。例えば、準備ソフトウェアは、中央プログラムをソースコードレベルまたはマシンコードレベルで「掃除する」手段を提供する。これは、自動または半自動で、セントリ、レポータまたはコードマークに関係する上述したコードの拡張部分を見つけて除去する。変形例では、これらの拡張部分はコメント文に類似する。したがって、これらの拡張部分は通常のコンパイル中は無視される。コンパイルオプションが起動されると、コメントは解析され、これらの拡張部分が認識されてコンパイルされる。
【０１３８】
デバッギングはまた、別の場合には実行に必要のないオプションによって容易にされてもよい。例えば、ソースコードは以下のオプションで再コンパイルされてもよい。（ｉ）上述の拡張部分（セントリ、レポータ、コードマーク）をコンパイルする、（ｉｉ）マシンコードのコメントとして追加することにより、（変数、方式、オブジェクト、クラスに対する）ソースコード名、命令文およびハンドルを含む、または（ｉｉｉ）より高速な場合もあるより複雑なコードではなく、最も単純なマシンコードを生成する、および（ｉｖ）マシン命令、アドレス、ソースコードおよび記号変数の間の対応を明確にするために、アドレステーブルを生成する。
【０１３９】
＜検査＞
デバッギングシステムは、レポータによって生成された証拠ファイルを検査するためのエキジビターソフトウェア、ディテクティブソフトウェア、およびリプレーヤーソフトウェアの、３つのソフトウェアツールを提供する。これら３つのツールは、証拠ファイルの実行および収集の後に動作する。これらは、元のコンピュータシステムまたは異なるコンピュータシステム上で作動してもよい、オフラインのソフトウェアプログラムである。これらのソフトウェアツールは、操作者が証拠ファイルを検査するのを支援する。実行中にタイムスタンプを与えられると、エキジビターは、ソースコードに類似した人間が読取り可能な様式で対応する証拠を表示することができる。ディテクティブソフトウェアは、指定された規準を満たす証拠の検索を自動化する。エキジビターおよびディテクティブは、時間に沿った順序または時間に逆行する順序での証拠ファイルの検査を可能にする。これにより、症状からそれを引き起こしたバグに遡って作業することが容易になる。リプレーヤーソフトウェアは、ダンプから始まる大まかな実行の再開（またはエミュレーション）、またはシステムの状態の非常に詳細なスナップショットを可能にする。
【０１４０】
操作者は、エキジビターを用いて証拠ファイルを点検する。エキジビターは証拠データをソースコードに類似した様式に変換し、その表示は既知のデバッガの表示に類似していてもよい。エキジビターはまた、対応するソースコード、値およびアドレスなどと共にタイムスタンプを表示してもよい。因果関係があるため、バグはそれが引き起こす症状に進まなければならない。（場合によっては、バグは時間延長されて症状と重複する。一例は、終結しないソフトウェアループである。）したがって、後に発生した症状から先に発生したバグに向かって、時間に逆行する順序で証拠ファイルを検査することが望ましい。証拠ファイルは予め記録されているため、エキジビターは時間に沿った順序または時間に逆行する順序で証拠ファイルを進んでもよい。このようにして、操作者は実行の時間シーケンスを自由に進むことができる。しかしながら、操作者およびエキジビターは、有限の非常に制限された最大速度で証拠ファイルを検査できる。多くの場合、これは非常に有用かつ有効である。しかしながら、場合によっては、証拠ファイルは大きく検査速度は不適切である。ディテクティブソフトウェアがこの制限を解決することを支援してもよい。ディテクティブソフトウェアは、それが回答しようとする「診断上の質問」のリストを提供してもよい。操作者は１以上を選択し、関連するパラメータを指定するためのソースコードの式を提供する。ここにいくつかの例を示す。
【０１４１】
診断上の質問１＝「これはランドマークまたはコードマークである。いつどのようにこれが発生したか？」
入力＝明示的なリストからランドマークまたはコードマークを選択する。
検索方式＝証拠ファイル全体を検索し、発生した各フラッグをテストし、それがこの指定と一致するかを検出する
【０１４２】
診断上の質問２＝「これはＤアドレスの範囲およびＤ値の範囲である。いつどのようにこのような値がこのようなアドレスに割当てられたか？」
入力＝Ｄアドレスの範囲およびＤ値の範囲を指定するソースコード式を提供する。
検索方式＝証拠ファイル全体を検索し、この範囲内の値がこのアドレス範囲にいつ割当てられたかを検出する。
【０１４３】
診断上の質問３＝「これはＩアドレスのリストである。いつどのようにこれらのＩアドレスのいずれかが条件付き分岐で拒絶されたか？」
入力＝Ｉアドレスのリストを指定する。（１つの用途では、ディテクティブがソースコードを表示し、操作者が関連する命令文を選択する）。
検索方式＝証拠ファイル全体を検索し、各分岐系命令に対して、その拒絶された宛先Ｉアドレスをテストし、この組に拒絶された宛先が含まれているかを検出する。これは、中央プログラムの一部の非実行によって定義されたバグを診断するのに特に有用である。
【０１４４】
診断上の質問それぞれに対して、入力によってさらに操作者が以下を特定することを可能にしてもよい。（ｉ）検索する証拠ファイルの範囲、（ｉｉ）検索の時間方向（時間に沿ってまたは時間に逆行して）、および（ｉｉｉ）この指定を満たすどのインスタンスを見つけるか。選択肢には、最初のＮインスタンス、最後のＮインスタンス、すべてのインスタンスを含んでいる。ここでＮは、操作者が指定する整数である。各検索の後、ディテクティブは検索を満たすタイムスタンプをリストアップする。操作者は１つを選択し、エキジビターを用いて関連する証拠を表示する。
【０１４５】
ディテクティブは、新たなデバッギングシステムのいくつかの重要な観点を明らかにする。（ｉ）ディテクティブは時間に逆行する順序で検索することができる。これにより、後に発生した症状から先に発生したバグに向かって進むことが容易になる。これは時間に沿ったデバッギングと比較して大きな利点である。（ｉｉ）検索は、ランドマークまたはコードマークなどの、指定されたマーカーによって定義された証拠セグメントに照準を合わせることができる。これにより、より関心の深い関連のある証拠に集中し、関連の低い証拠の氾濫を防ぐことができる。（ｉｖ）検索は、指定された詳細レベルの証拠を評価することができる。これにより過剰な詳細の氾濫を食い止めることができる。ディテクティブが指定されたタイムスタンプを明らかにした後、操作者は、手動でエキジビターを案内して、証拠をさらに完全に検査することができる。場合によっては、これが直接バグの診断につながり得る。他の場合では、これで初期の症状を明らかにすることができ、このプロセスを繰返して、不具合の原因を体系的に発見することができる。
【０１４６】
いくつかの中央プログラムおよびいくつかのバグに関して、第１の証拠ファイルは完全かつ迅速な診断に対して十分に適切でなくてもよい。それでも多くの場合、第１の証拠ファイルは、バグと仮定上より密接に相関する他のランドマークまたは他の証拠を明らかにするか、または提示する。したがって、操作者はより良好な仮定、すなわちより良好なセントリプログラムおよびレポータプログラムを構築することができる。これらを用いて、操作者は再び中央プログラムを実行し、それにより、バグにさらに近づくと思われる新しいより良好な証拠ファイルを生成することができる。これは図２に象徴的に示される。
【０１４７】
デバッギングシステムは、操作者には既知の少なくとも１つの明確な症状を直接生成する中央プログラムおよびバグに対して容易に作用する。一例は、既知の不適切な値をもつ既知のデータアドレスを読込むバグである。他の場合では、バグは、中央プログラムの一部の非実行によって定義される。したがって、重要な診断上の質問は、「なぜこのソフトウェアコンポーネントは実行されなかったか？」である。この種の「陰性のバグ」は、検出して修正するのが非常に困難な可能性がある。いずれにしても、デバッギングシステムは、この課題を多くの場合効率的に解決する手段を提供し、その方法を教示する。このジレンマを解決する際、デバッギングシステムは分岐系命令を検査する。分岐系命令は２つの潜在的な宛先を提示する。１つの宛先は「選択され」または「受入れられ」、他方は「拒絶され」または「受入れられない」。バグの診断に関して、両方の宛先はセントリおよびレポータに対する有用な入力であり得る。特に、拒絶されたパスは、何らかのソフトウェアセクションがいつ、およびなぜ実行されなかったかを直接示す。このことは、「いつおよびなぜこのパス（Ｉアドレス）が分岐系命令に拒絶されたか」という診断上の質問につながる。場合によっては、実行されなかったソフトウェアは、実行されて互いに呼出される（即ち、Ｍｅｔｈｏｄ  ＡがＭｅｔｈｏｄ  Ｂを呼出し、それがＭｅｔｈｏｄ  Ｃを呼出した）「べきであった」ソフトウェアコンポーネントの「スタック」の一部であり、この潜在的なスタックの１以上の層は実行されない。このことは、「これは一組のＩアドレスである。いつおよびなぜこれらのＩアドレスのいずれかが、何らかの分岐系命令に拒絶されたか？」というより良好な診断上の質問につながる。この診断上の質問は、証拠ファイルを検索するディテクティブ方式にリンクされており、この潜在的スタックの中のいずれかのＩアドレスを拒絶するいずれかの分岐系命令を検出する。セントリは類似のランドマーク「これらのＩアドレスのいずれかを拒絶するいずれかの分岐系命令を検出する」を検出することができる。このようにして、非常に困難な「陰性のバグ」を体系的に検出して修正してもよい。
【０１４８】
場合によっては、適切なバグの診断には、特にバグに非常に「近い」非常に詳細な証拠が求められてもよい。実行全体を通してこのような詳細な証拠を抽出して保存することは、便利でも実行可能でもないことがある。場合によっては、有用なオプションは詳細な「スナップショット」を抽出して記録することである。これにより、バグにつながる「初期条件」または「コンピュータの状態」のほとんどが提供されてもよい。中央処理装置と類似のコンピュータを検査している間、このスナップショットおよび中央プログラムを、何らかの実行を「再生（リプレイ）」するのに使用することができる。これは、特に外部システムおよび外部データとの相互作用に関する証拠ファイルによって増大されてもよい。したがって、本発明は「リプレーヤー」ソフトウェアを提供する。コンピュータの状態をあるタイムスタンプにおいて非常に完全に記述した「ダンプ」または「スナップショット」があるとすると、リプレーヤーはプログラムを近似的に実行可能である。しかしながら、この近似は厳密なものとは程遠いことがある。実行時間および帯域幅が歪む場合がある。スレッド間の相互作用が歪む場合がある。オペレーティングシステムなどの複雑なソフトウェアとの相互作用が歪む場合がある。
【０１４９】
検査の間、操作者は自由に有用なものを探索し、検査し、異なる可能性を試し、発見することができる。ユーザは、新たなものが分かったときに、エキジビター、ディテクティブおよびリプレーヤーを数回または多数回使用してこれを繰返してもよい。この柔軟性は、操作者が証拠ファイルから有用な情報を収穫する支援となる。非常に多くの場合、このことはより良好な仮定の作成につながる。これは、今後の実行のために、セントリ、レポータ、ランドマーク、コードマークのより良好な使用に関する発想をもたらすことが多い。
【０１５０】
次に図５を参照して、セントリ回路の一実施例を実装するデバッガモジュール１５０が示される。デバッガモジュール１５０は、リオーダバッファ１５７、プログラムカウンタ１５３、およびクロック１５５を有するプロセッサチップ１５１を有する。これらの低レベル資産はプロセッサにおいて標準的であるが、デバッガモジュールにおける改善された実用性のために修正されてもよい。高速データパスは、バッファ１５７、プログラムカウンタ１５３、およびクロック１５５から高速論理１５８まで延在する。一実施例では、データパスは、プロセッサチップ１５１から外部の高速論理まで延在するデータパスであってもよい。別の実施例では、プロセッサチップは、点線１７１で示すような高速論理オンチップを含んでいる。高速論理オンチップを含むことにより、高速論理は、より効率的に低レベル資産に反応し、プロセッサが、データの収集中であっても最高動作速度またはそれに近い速度で動作するように維持することを可能にしてもよい。高速論理１５８は、低レベル資産からのデータを監視するのに使用される高速レジスタ１５９を含んでいてもよい。レジスタは、１以上のランドマーク１６７または他のソフトウェアイベントを監視するように構成されている。高速論理１５８が定義済みのランドマークを検出すると、高速論理１５８は、アクティビティを始動させるのに使用されてもよい動作信号１６０を生成する。例えば、動作は証拠データの収集を始動させるか、またはプロセッサを停止することができる。
【０１５１】
高速論理は低レベル資産と緊密に協働し、高速論理が最高プロセッサ速度またはその近傍で資産を監視することが望ましいため、高速論理１５８は、単純なランドマークを検出し、単純な動作を起動するのに最も有用である。より複雑な動作については、デバッギングモジュール１５０は追加のシーケンス論理を提供してもよい。一実施例では、シーケンス論理はコプロセッサ１６１として提供される。コプロセッサ１６１は、より複雑な複合論理関数またはランドマークでプログラムされてもよいプログラム可能なメモリ１６２を有する。例えば、コプロセッサは、いくつかが時間遅延していてもよい複数のイベントを監視し、複合ソフトウェアイベントを検出したときに複雑な動作１６５を行ってもよい。コプロセッサはプロセッサよりも遅い速度で動作してもよいので、高速論理は、コプロセッサに選択的にデータまたは動作を送ってもよい。コプロセッサは、プロセッサ１５１の外部にあってもよく、点線１７４で示すようにオンチップで含まれていてもよい。コプロセッサオンチップを含むことにより、コプロセッサは、より効率的にイベントを監視し、より迅速に動作を実行してもよい。
【０１５２】
次に図６を参照して、デバッガシステム２００が示され、これはレポータ回路２０１の一実施例を実装する。図６は、任意のセントリ回路２０２に接続されたレポータ回路２０１を示す。図５を参照して検討したセントリ回路１５０と同様の形式で、任意のセントリ回路２０２は、リオーダバッファ２０８、およびカウンタおよびクロック２０７を有するプロセッサユニット２０５に接続している。プロセッサユニット２０５、およびセントリ回路２０２およびレポータ回路２０１はプロセッサチップ２０３内にある。これらの低レベル資産は典型的にはプロセッサ内にあるが、デバッガモジュール内の改善された実用性のために修正されてもよい。高速データパスは、バッファ２０８、カウンタ、およびクロックからセントリ高速論理２０６まで延在する。高速論理オンチップを含むことにより、高速論理はより効率的に低レベル資産に反応し、プロセッサが、データの収集中であっても最高動作速度またはその近傍での動作を維持できるようにしてもよい。セントリ高速論理２０６は、低レベル資産からのデータを監視するのに使用される高速レジスタを含んでいてもよい。レジスタは、１以上のランドマークまたはコードマーク、あるいは他のソフトウェアイベントを監視するように構成されている。高速論理２０６が定義済みのランドマークを検出すると、高速論理２０６は、レポータまたはフラッグ、あるいは別のアクティビティを始動させるのに使用されてもよい動作信号２０９を生成する。高速論理２０６が低レベル資産と緊密に協働して動作し、高速論理２０６が最高プロセッサ速度またはその近傍で資産を監視することが望ましいため、高速論理２０６は、単純なランドマークを検出し、単純な動作を起動するのに最も有用である。より複雑な動作については、セントリ回路構成２０２は追加のシーケンス論理を提供してもよい。一実施例では、シーケンス論理はコプロセッサ２１０として提供される。コプロセッサ２１０は、より複雑な複合論理関数またはランドマークでプログラムされてもよいプログラム可能なメモリを有する。例えば、コプロセッサは、いくつかが時間遅延していてもよい複数のイベントを監視し、複合ソフトウェアイベントを検出したときにより複雑な動作２１１を行ってもよい。
【０１５３】
レポータ２０１は、高速データレジスタ２１８をもつ高速論理回路構成２１７を有する。高速論理２１７は、プロセッサ２０５の低レベル資産からの高速データパスに接続する。レポータの高速論理２１７は、任意にセントリの高速論理２０６からのトリガ信号を受け取るように構築されてもよい。このようにして、セントリの高速論理２０６は、セントリの回路構成が構成されたランドマークまたは他のソフトウェアイベントを検出したときに、レポータの高速論理２１７にトリガ信号を送ってもよい。セントリが提供されない場合、他のトリガ関係が使用されてもよく、あるいはレポータはその構成に従って頻繁にまたは継続的にデータを抽出してもよい。トリガ、動作、または他のイベントに応答して、高速論理２１７は証拠の抽出および保存を始め、またはどのように抽出および保存されるかを変更してもよい。高速論理２１７は、レポータ方式またはコードマークに応じてデータを抽出するように構成されていてもよい。高速論理がデータを抽出すると、それが例えばＬ２キャッシュに渡される。他のメモリまたはキャッシュを使用してもよいが、Ｌ２キャッシュ２２２は、高速論理２１７への接続に適している。例えば、Ｌ２キャッシュ２２２は、高速論理２１７がプロセッサの実行に対する大幅な妨害なしにデータを渡すことができる程度に十分早いが、実際的な量の証拠データを保持できるほど十分に大きい。Ｌ１キャッシュ２２０は、非常に高速なデータの要求に対して有用であってもよいが、そのサイズが小さいことにより、実行を急速に低下させることなく抽出できるデータの量が制限される。同様に、メインメモリ２２４は、より大量の証拠データを保存するのに有用であってもよいが、それを使用することが、中央プログラムの実行を妨害するまたは遅くする場合がある。
【０１５４】
高速論理２１７はまた、高速データパス上のゲート２２８を制御してもよい。高速論理は、データパス上のすべてのデータがＬ２証拠バッファ２４０、またはメインメモリの証拠バッファ２４１に送られる、あるいは間接的に記憶装置の証拠ファイル２３０に送られるという条件にゲートを置いてもよい。この最初の２つは、高速サーキュラバッファとしてそれぞれ作用してもよい。サーキュラバッファは新しいデータを受入れ、またバッファがいっぱいになると、より古いデータがより新しいデータで上書きされるように構成される。このようにして、サーキュラバッファは常に現在の最新の履歴データを保持する。何らかのソフトウェアイベントに応答して、高速論理２１７は、データがサーキュラバッファに渡されることを停止させて、サーキュラバッファがその内容を証拠ファイル２３０にダンプするように、ゲートを構成してもよい。証拠ファイルはその結果、ソフトウェアイベントに対する最新の履歴の完全なデータのダンプを含んでいる。同様に、高速論理はまた、Ｌ１キャッシュ２２０、Ｌ２キャッシュ２２２、またはメインメモリ２２４が証拠ファイル２３０にダンプされるようにしてもよい。
【０１５５】
いくつかのレポータ方式では、証拠用のデータは、直接レポータの高速論理を介して渡されない。その代わりに、このデータはプロセッサからＬ２キャッシュ内の証拠バッファを介して、次にメインメモリに、そして記憶装置に渡る。この流れは、階層用の１以上のコントローラ（すなわち、Ｌ２コントローラ、メインメモリコントローラ、ソフトウェア記憶装置コントローラ、ハードウェア記憶装置コントローラ）によって案内される。レポータは制御ラインを介してこの流れを管理する。図６はまた、これらのコントローラおよび制御ラインを示す。このような制御信号を修正することにより、レポータは証拠の抽出および保存を修正することができる。
【０１５６】
レポータの高速論理２１７が低レベル資産と緊密に協働して動作し、高速論理２１７が最高プロセッサ速度またはその近傍で資産から大きな帯域幅のデータを抽出することが望ましいため、高速論理２１７は、適度に単純な比較または論理テストあるいは場所に基づいてデータを抽出するのに最も有用である。より複雑な動作については、レポータ回路構成は追加のシーケンス論理を提供してもよい。一実施例では、シーケンス論理はコプロセッサ２１４として提供される。コプロセッサ２１４は、より複雑な複合論理関数またはレポータ方式でプログラムされてもよいプログラム可能なメモリ２１５を有する。例えば、コプロセッサは、いくつかが時間遅延していてもよい複数のイベントを監視し、複合ソフトウェアイベントを検出したときにより複雑な動作を行ってもよい。一実施例では、コプロセッサは、セントリのコプロセッサ２１０から、何らかの複合または複雑なソフトウェアイベントが発生したことを示すトリガ、フラッグまたはデータを受取る。そのトリガに応答して、コプロセッサ２１４はさらに論理的な判断を行って、何らかのより複雑な動作を起こさせてもよい。例えば、コプロセッサは、１以上の階層レベルを証拠ファイル２３０にダンプし、証拠バッファを再設定して新たなデータ用の証拠ファイルを準備してもよい。
【０１５７】
図７はデバッギングプロセス２５０を示す。デバッギングプロセス２５０は、ソフトウェアの不具合またはバグの原因を発見する体系的な方法を提供する。このプロセスを使用する際、操作者は最初に、症状、プレカーソル、またはバグの原因に関する仮定を作成する。デバッギングシステムが仮定をテストするように構成されると、操作者は主要なソフトウェアプログラムを実行し、ブロック２５２に示すようにデバッギングシステムが証拠ファイルを収集する。操作者は次に証拠ファイルを検討して、ブロック２５４に示すように、症状、プレカーソル、またはバグの原因に対するさらなる洞察を得てもよい。具体的には、操作者は、バグの原因は、プログラムが何らかの時点で誤った値２５６を読込んでいること、またはプログラムが予測される分岐２５８に従っていないことであるという証拠を検出してもよい。
【０１５８】
操作者が、原因が誤った値の種類であると確信している場合、操作者は証拠ファイルを検討して、ブロック２６０に示すように、データ値が最後に正しく発見されたプレカーソルのポイントを見つける。操作者は、フリーフォームで、またはより構造化された準備ソフトウェアを用いて、ブロック２６３に示すように、操作者がそこでプレカーソルまたは症状を発見できると確信している１以上のランドマークを定義する。操作者が、原因が誤った分岐の種類であると確信している場合、操作者は、ブロック２６１に示すように予測されるパスを推測し、プログラムが予測されるパスから外れるポイントを特定するためのランドマークを定義する。例えば、ランドマークは、特定の分岐が利用可能であるが、プログラムがその分岐を選択しなかったことを示すデータをテストすることができる。
【０１５９】
ランドマークが定義されると、操作者は次に、ブロック２６７に示すように抽出の選択性のレベルを設定する。操作者は、レポータ方式を設定してデータ抽出の細かさを定義し、またコードマークを用いてデータ抽出の焦点を特定のコードセクションまたはモジュールに絞ってもよい。レポータ方式とコードマークは共に、操作者が、原因の検索を絞り込むための正しい情報を提供するようにデバッギングシステムを構成できるようにする。操作者は次に、ブロック２６９に示すように定義済みのランドマークをテストするセントリ回路構成を設定し、ブロック２７０に示すように所望のレベルのデータを抽出するレポータ回路構成を設定する。操作者は、準備ソフトウェアを使用してセントリ回路構成およびレポータ回路構成を構成してもよく、または別のプロセスが提供されてもよい。セントリ回路構成およびレポータ回路構成が構成された後、操作者は再びソフトウェアプログラムを実行してもよい。セントリ回路構成が構成されたランドマークを発見すると、レポータは所望のデータを抽出する。データは次に、ブロック２７３に示すように、操作者が検討するために証拠ファイルに記憶される。操作者は、新たな証拠ファイルを検討および分析して原因を発見するか、または原因に対する仮定をさらに絞り込む。
【０１６０】
図８は、どのようにユーザが証拠ファイルを検査できるかについての一実施例のプロセス３００を示す。証拠ファイル３０２は、検討のためにエキジビターソフトウェア３０４内に受入れられてもよい。エキジビターは、操作者が、より容易な分析のために、証拠ファイル内のデータをさらに人間が読取り可能なフォーマット３０６で見ることができるようにする。操作者は、ソフトウェアの不具合の原因をよりよく理解するために、手動で証拠ファイル内を進んでもよい。証拠ファイルは予め記録されているため、操作者は時間的に前進または後退してもよい。しかしながら、エキジビターは手動プロセスであるため、大きな証拠ファイル内を進むことは非常に大量の時間を要する可能性があり、より経験の少ない操作者は、重要な証拠情報を容易に特定する技術を有さない場合がある。したがって、デバッギングプロセスは、ディテクティブソフトウェア３０８も提供する。ディテクティブソフトウェア３０８は、操作者が自動で証拠ファイルを分析して肝要な点を発見できるようにする自動化されたツールである。ディテクティブソフトウェア３０８が興味深いデータを発見すると、ディテクティブは、タイムスタンプ３０９を操作者またはエキジビターに報告してもよく、また操作者は、エキジビターを使用して、その証拠セクションを人間が読取り可能なフォーマットで検討してもよい。ディテクティブソフトウェアは、操作者がディテクティブを構成するのを支援するための、インタフェース、ウィザード、または構造化されたメニューを有してもよい。例えば、ディテクティブ３０８は、操作者がランドマーク、コードマーク、分岐問い合わせ、および論理比較を、セントリ回路構成の設定に類似した形式で設定できるようにする、一組の定義済みの質問３１１を有してもよい。このようにして、操作者は、仮定を定義して次の証拠ファイルを生成することを支援する専門用語を用いて、証拠ファイルを自動的に点検してもよい。同様に、ディテクティブ３０８はまた、操作者が証拠ファイルの検討の焦点を絞り込むことを可能にするための、選択可能な設定３１２を有してもよい。１つの特に重要な設定では、操作者は、ディテクティブが自動的に証拠ファイルを時間を逆行する方式で検討するように設定してもよい。これは、操作者が証拠ファイル内の結果を検出し、次に自動で履歴を検索して、なぜソフトウェアがその結果に到達したかに関する情報を発見できるようにする、有力な機能である。
【０１６１】
＜他の考察＞
デバッギングシステムは、低レベル資産のいくつかのデータ転送速度が非常に大きいのにも関わらず、証拠を抽出して保存することができる。証拠は、キャッシュとメモリの間の（またはＣＰＵとメモリの間の）帯域幅によって、また証拠に割付けられた帯域幅の割合によって制約される。Ｉｎｔｅｌｘ８６コンピュータアーキテクチャを使用している典型的なパーソナルコンピュータであるｖｉｎｔａｇｅ２００４では、代表的な帯域幅は、次式のとおりである。
【０１６２】
｛４バイト／バスサイクル｝×｛１００Ｅ６バスサイクル／秒｝
＝｛４Ｅ８バイト／秒｝
【０１６３】
一実施例では、この帯域幅は、５０％が証拠に、５０％が中央プログラムの実行に割付けられる。この割付けは、いずれかの役割にすべての帯域幅を使用するのに比べて、それぞれの役割における低下が少ないため、適切な妥協点である。この帯域幅の制限は、中央プログラムの命令の実行速度と比較されてもよい。密接に関係する比は、実行された中央プログラムの命令に対する証拠のバイト数である。これらの制限は、操作者が、セントリを使用して実行の時間シーケンスにおける証拠に照準を合わせることにより、またレポータを使用して詳細の最適なレベルを選択することにより、大幅に緩和できる場合が多い。対照的に、既知のソフトウェアレベルのデバッギングツールを使用すると、最大証拠帯域幅は、１００倍〜１０，０００倍など非常に小さくなる。
【０１６４】
デバッギングシステムは、証拠の理論的容量が非常に大きくても、効率的に証拠を抽出、保存および検査することができる。証拠ファイルのバイナリサイズは、ハードウェアによって制約される。関連するハードウェアであるｖｉｎｔａｇｅ２００４は、数十または数百ギガバイトまでのファイルを扱うことができる。証拠ファイルは、このかなりの割合（例えば、５０％）を占めることができる。したがって証拠ファイルは巨大であることができる。別の制約は、操作者が証拠ファイルを分析する能力である。操作者は、エキジビターを使用して一労働時間あたり数千のタイムスタンプを検査することができると考えられる。しかしながら、ディテクティブによって、はるかに速い速度で自動検索が可能になる。
【０１６５】
実行中、証拠を抽出し保存するプロセスは時間歪みのある（速度の遅い）実行である場合がある。バグによっては時間歪みの影響を受けないものもある。他のものは時間歪みにある程度敏感である。さらに他のバグは実行タイミングの詳細に影響される。本発明の好ましい一実施形態では、上述したように、時間歪みは小さいか中程度（例えば、１倍〜３倍の時間比）である。これにより、時間に依存しないバグおよびある程度時間に敏感なバグの診断が可能になる。しかしながら、このことは、非常に時間に敏感なバグの効率的な診断を支援しない場合がある。時間に依存しないバグは、中央プログラムの減速する実行を許容し、これにより非常に詳細な証拠の保存が可能になる。これにより、異常度の高い時間に依存しないバグの診断が可能になる。ある程度時間に敏感なバグからは、中程度の証拠のみが得られる。したがって、それにより異常度がより低いある程度時間に敏感なバグの診断が可能になる。多くの場合、操作者は、セントリを使用して実行の時間シーケンスにおける証拠に照準を合わせ、またレポータを使用して詳細の最適なレベルを選択することができる。良好に使用すると、この選択性は歪みに関する問題点を大幅に緩和することができる。このようにして、操作者は、デバッギングシステムを使用して、多くのバグを体系的かつ効率的に診断し、他の多くのバグを中程度の効率で診断することができる。これにより、バグの診断に費やされる平均時間が大幅に改善される。
【０１６６】
デバッギングシステムは、プロセッサ、ハードウェアモジュール、およびコンピュータシステムの広範囲に統合することができる。いくつかの代替の実施例を概略的に下記に記載する。
【０１６７】
複数スレッド構成のプロセッサ：マシン命令の複数のスレッドをほぼ同時に実行できる、「複数スレッド構成」のプロセッサの開発が進行している。この技術が発展するに従って、以下の実施形態が可能になると考えられる。中央処理装置上で実行される追加のスレッドは、セントリおよび／またはレポータ用のシーケンス論理として機能する。これが十分に実現可能になれば、本発明に必要とされる余分なハードウェアが低減される。
【０１６８】
複数プロセッサチップ：単一のチップ上に複数のプロセッサを含む、「複数プロセッサ」チップの開発が進行している。これらのプロセッサは、マシン命令の複数のスレッドを同時に実行可能である。この技術が発展するに従って、以下の実施形態が可能になると考えられる。同じチップ上の追加のプロセッサは、セントリおよび／またはレポータ用のシーケンス論理として機能する。これが十分に実現可能になれば、デバッギングシステムに必要とされる余分なハードウェアが低減される。
【０１６９】
複数プロセッサモジュール用の複数チップモジュール：１つのハードウェアモジュールに複数のチップを互いに近接して搭載した、「複数チップモジュール」の開発が進行している。これにより、１つのモジュールが複数のプロセッサチップを含むことができる。この技術が発展するに従って、以下の実施形態が可能になると考えられる。同じモジュール内の追加のプロセッサチップは、セントリおよび／またはレポータ用のシーケンス論理として機能する。しかしながら、実現可能性は、このモジュール内の複数のチップ間の適切な接続性と帯域幅に依存する。これが十分に実現可能になれば、本発明に必要とされる余分なハードウェアが低減される。
【０１７０】
プロセッサおよびキャッシュを含む複数チップモジュール：別の複数チップモジュールの例は、複数の異なるチップ、特に１以上のプロセッサチップと１以上のキャッシュまたはメモリ用チップを含んでいる。この技術が発展するに従って、非常に大きなキャッシュをもつ実施形態が可能になると考えられる。これにより、より大きな証拠バッファ、すなわち本発明の別の実施形態が可能になると考えられる。非常に望ましい一実施形態は、米国特許出願第２００４０１０８５９１号、発明者Ｐｈｉｌｉｐ  ＥｍｍａおよびＡｒｔｈｕｒ  Ｚｉｎｇｈｅｒ、名称「電子基板、モジュールおよびシステムのための新規なエッジフラワーターミナルアレイを用いる向上した接続性（Ｅｎｈａｎｃｅｄ  ｃｏｎｎｅｃｔｉｖｉｔｙ  ｆｏｒ  ｅｌｅｃｔｒｏｎｉｃ  ｓｕｂｓｔｒａｔｅｓ，ｍｏｄｕｌｅｓ  ａｎｄ  ｓｙｓｔｅｍｓ  ｕｓｉｎｇ  ａ  ｎｏｖｅｌ  ｅｄｇｅ  ｆｌｏｗｅｒ  ｔｅｒｍｉｎａｌ  ａｒｒａｙ）」に記載されているモジュールを使用する。
【０１７１】
向上したキャッシュまたはメモリを用いた実施形態：別の実施形態では、階層はＬ３キャッシュを含んでいる。一実施例は、上述の複数チップモジュールである。他の技術によってもＬ３キャッシュが可能になる。このような技術が十分に発展するに従って、理論的容量が比較的大きいキャッシュ、およびプロセッサに対する比較的大きい帯域幅が可能になると考えられる。したがって、この一部（例えば、５０％）を、大きな理論的容量および帯域幅を有するサーキュラ証拠バッファに使用することが特に好ましい。特定の例では、リソースが十分に大きい場合があるので、完全に別個のキャッシュまたはメモリを証拠の保存および中央プログラムの実行に割当てることが実現可能である。このようにさらに分離されていることにより、実行と証拠の間の実時間相互作用、特に回路へのアクセスの多重化が低減される。これにより、本発明と中央プログラムの実行との適合性が向上する。
【０１７２】
他の種類のプロセッサ：本発明は、プログラムを実行するシーケンス論理マシン上でバグを診断するツールおよび方法によって実施することができる。これは、「コプロセッサ」または「コンピュータ」ではなく、「コントローラ」などの別の名前で説明できる。いくつかの実施例としては、ルータ用のコントローラ、記憶装置用のコントローラ、通信バス用のコントローラ、メモリまたはキャッシュ用のコントローラ、などがある。
【０１７３】
他の種類のコンピュータシステム：デバッギングシステムは、多種多様なコンピュータで実施することができる。例としては、「スマート」携帯電話、手のひらサイズの可搬型クライアントコンピュータ、ラップトップ可搬型クライアントコンピュータ、デスクトップクライアントコンピュータ、ウェブサーバコンピュータ、アプリケーションサーバコンピュータ、データベースサーバコンピュータが挙げられる。これらの多種多様な実施形態にわたって、一実施形態のパラメータおよび詳細はコンピュータシステムの種類によって異なる。例えば、通信リンクを有する小さなシステムでは、証拠ファイルは、離れた位置にある装置への通信リンクによって実現することができる。帯域幅および理論的容量に対する関連する値もまた実施形態によって異なる。同様に、セントリ、レポータ、および準備ソフトウェア用の定義済みのプログラムおよび診断上の質問も、実施形態によって異なる。
【０１７４】
リオーダバッファの代替形態：現在のヴィンテージの汎用コンピュータプロセッサでは、サイクル当たりに実行される命令を向上させるために、マシン命令の「アウトオブオーダー」（ＯＯＯ）実行および「見込み」実行を多用している。したがって、これらのプロセッサは、典型的には上述したような「リオーダバッファ」を含んでいる。しかしながら、このようなプロセッサは、電力損失がさらに大きく内部の複雑性も増す。可搬型のシステムには、バッテリーの制約が大きいという不利点がある。定置型のコンピュータにおいても、直接的および間接的に費用が増大する。プロセッサのためのより良好な内部設計に対する非常に多くの研究開発が進行している。したがって、リオーダバッファを含まないプロセッサもある。デバッギングシステムは、リオーダバッファを有さないプロセッサでも実現できる。オペレーションコード（動詞）、データアドレス、分岐宛先アドレスなどの、実行された命令の詳細を提供する内部資産が含まれていれば十分である。例えば、プロセッサの中には、命令をこれらの構成要素に解析し、各構成要素を処理するサブユニットを有するものがある。このようなプロセッサにはリオーダバッファを有さないものもある。
【０１７５】
セントリ、レポータ、プロセッサの分離対集積化：明瞭にするため、セントリ、リポータおよびプロセッサが明確に区別された実施例を用いて、デバッギングシステムを説明してきた。しかしながら、他の実施形態ではこれらのユニットは高度に集積化されている。他の実装および配置は、プロセッサチップの設計履歴に依存する場合がある。これが予め設計されたプロセッサに厳密に従っていれば、別個のセントリおよびプロセッサを使用することがより適合する。しかしながら、プロセッサが最初から設計される場合、セントリおよびレポータをプロセッサ内に緊密に集積化することがより効率的である。特に、セントリおよびレポータ用の高速論理は、プロセッサ内の他の高速論理と集積化することができる。また、セントリ／およびレポータのシーケンス論理は、プロセッサと組み合わせることができる。例えば、上述の「複数スレッド構成のプロセッサ」、「複数プロセッサチップ」「複数チップモジュール」、「複数プロセッサモジュール」、および「プロセッサおよびキャッシュを含むモジュール」を参照のこと。
【０１７６】
検査中の再生：場合によっては、適切なバグの診断には、特にバグに非常に「近い」、非常に詳細な証拠が必要なことがある。このような詳細な証拠を実行全体にわたって抽出し保存することは、便利ではなくまたは実現可能でないことがある。場合によっては、詳細な「スナップショット」を抽出し記録することが有用なオプションである。これにより、バグにつながる「初期条件」または「コンピュータの状態」のほとんどが提供されてもよい。中央処理装置に類似のコンピュータ上での検査の間、このスナップショットおよび中央プログラムは、いくつかの実行を「再生する」のに使用できる。これは、特に外部システムおよび外部データとの相互作用に関する証拠ファイルによって、増大されてもよい。
【０１７７】
命令セットアーキテクチャ（ＩＳＡ）を上述した。また、既知のデバッギングシステムでは、「ファームウェア」または「マイクロコード」のプログラミングのレベルはＩＳＡよりも深い。典型的には、ファームウェアはシステムエンジニアによって使用されるが、一般にソフトウェア開発者には使用されない。デバッギングシステムは、一般に、ＩＳＡレベルでソフトウェア内にあるバグを診断する手段として説明されてきた。しかしながら、本発明は、以下にさらに完全に説明するように、他の目的にも適用できる。
【０１７８】
ソフトウェア性能の最適化：デバッギングシステムは、ソフトウェアの性能の最適化を導くために使用することができる。この場合、証拠および検査は、中央プログラムの性能を測定して明確にする性能の詳細および統計データを、抽出、保存および分析するのに有用である。この場合、レポータ方式は典型的に、実行タイミングに関する情報を抽出する。いくつかの追加のおよび特化したレポータ方式が、この適用に有用であり得る。
【０１７９】
ファームウェアのデバッギングおよび最適化：デバッギングシステムは、ファームウェアに関して、バグを診断し性能の最適化を導くために使用できる。これは、本発明とファームウェアとの間で実行に十分な適合性がある場合に有効である。 
【０１８０】
ハードウェアの設計および開発：場合によっては、デバッギングシステムはコンピュータハードウェアの設計および開発に使用することができる。これは、関連するハードウェア機能と本発明との適合性に影響される。例えば、デバッギングシステムは、キャッシュ、メインメモリおよび記憶装置、階層内のデータ管理用の関連するハードウェアおよびファームウェアのアルゴリズムを含む、階層の設計と開発に関して有用であり得る。デバッギングシステムは、これらの機能に関して証拠を抽出および保存し、統計データを分析するための効率的な方法を適用する。対照的に、コンピュータ工学の従来技術では、そのような証拠を抽出して集めるのは困難な場合が多かった。
【０１８１】
時間指向のバグに対する適用：デバッギングシステムは、命令の複数のスレッド間のタイミングの不一致など、いくつかの時間指向のバグに使用することができる。この場合、いくつかのレポータ方式は、タイミング情報、特に各方式の実行に対する開始時間、持続時間、終了時間を抽出し記録するように予め定義される。実現可能性は、本発明、中央プログラムおよびバグの実行の適合性に依存する。本セクションで上述したように、これは、ある程度時間に敏感なバグに対してさらに有用である。しかしながら、非常に時間に敏感なバグは、デバッギングシステムの動作によっても不明瞭な場合がある。
【０１８２】
＜他のシナリオ＞
プロダクションシステムでのデバッギング：新たなソフトウェアをオフラインで開発することが一般的である。目的は、デバッグを行ってソフトウェアを完全にテストし、それによりすべてのバグを排除することである。商業条件下では、この目的が完全に達成されることはほとんどない。次に、典型的にソフトウェアは、実際の顧客に関する実際のデータを処理する「プロダクション」コンピュータに転送される。その後、新たな要件および新たなソフトウェア開発が偶発的に生じ、これが新たなバグにつながる場合がある。したがって、熱心な努力にも関わらず、いずれにしても生産中にバグが発生する。
【０１８３】
生産の後期には、バグはかなり少なくなるかも知れない。しかしながら、バグが少ないことは、隔離されたバグによる影響が拡大されることで相殺される場合がある。多くの、またほとんどの場合、ソフトウェアにバグが１つも残っていないという確信は得られない。生産の後期にバグが発生すると、ソフトウェアをオフラインのコンピュータシステムに転送することによってそのバグを適切に複製することは、要領よく実施できずまたは困難な場合が多い。このことは、バグが複数のシステムと相互作用する場合に、特に該当する。
【０１８４】
したがって、プロダクションコンピュータシステム上でも妨害を起こさないバグの診断が常に必要とされている。１つの比較例は保険証書である。第２の比較例は、信頼性の高いタイヤおよび平坦な道路が生まれる前の時代の、自動車のスペアタイヤである。第３の比較例は、盗難に対するセキュリティカメラである。多くの場合のプロダクションシステムにおいて、デバッギングシステムを背景モードで使用して、妨害されずに安定して証拠を抽出し保存することができる。典型的には、これは、比較的小さな帯域幅で証拠を集めて保存する。典型的には、バグの兆候がない限り検査は行われない。
【０１８５】
プロダクションシステムにおいて、バグの兆候があると、デバッギングシステムを方向変換して、より詳細な、より広い帯域幅の、より特定性の高い証拠を集めて保存することができる。これらの条件下では、このように予め優先順位付けをすることが合理的な場合がある。多くの場合、本発明は、バグを診断して訂正するための平均時間、影響、費用およびリスクを大幅に低減する。したがって、プロダクションコンピュータシステムに対しても、本発明は常に有用である。
【０１８６】
クライアントコンピュータ上でのリモートデバッギング：ソフトウェアによっては、「クライアント」コンピュータ上で、ソフトウェア開発者ではないユーザによって動作されるように設計されるものもある。ユーザがプローブに気付くと、ユーザはそれをソフトウェア開発者に報告する。ユーザは、問題の不適切な証拠を提供することが多く、開発者がその問題を複製することは困難である。
【０１８７】
この場合、クライアントコンピュータシステムが本発明を含むことが有用である。これにより、開発者がユーザに、クライアントコンピュータシステムにインストールするためのファイルを送信することができる。このファイルは、セントリ、レポータなどのための準備を提供する。後に続く実行中、これは証拠ファイルを抽出し保存することができる。その後、証拠ファイルを開発者に送信することができる。場合によっては、これは、デバッギングシステムの収束スパイラル方式によって繰返すことができる。このようにして、開発者は、クライアントシステムから離れていても、効率的にバグの診断を行うことができる。
【０１８８】
本発明を多数の実施例に関連して説明してきたが、本発明の範囲を上述の特定の形態に制限することを意図するものではなく、反対に、代替例、変形例、および同等例を本発明の範囲に含めてもよいものとして、含むことを意図する。
【図面の簡単な説明】
【０１８９】
図面は本明細書の一部を構成し、多様な形態で実現され得る本発明の代表的な実施形態を含んでいる。いくつかの例において、本発明の様々な態様は、本発明の理解を容易にするために強調または拡大されて示される場合があることを理解されたい。
【図１】本発明によるデバッギングシステムのブロック図である。
【図２】本発明によるデバッギングプロセスの説明図である。
【図３】本発明によるデバッギングプロセスのフローチャートである。
【図４】本発明によるデバッギングシステムのブロック図である。
【図５】本発明による高速応答セントリ回路に結合したプロセッサのブロック図である。
【図６】は、本発明による高速応答レポート回路および任意の高速応答セントリ回路に結合したプロセッサのブロック図である。
【図７】本発明によるデバッギングプロセスのフローチャートである。
【図８】本発明による証拠ファイルを用いたデバッギングプロセスのブロック図である。
【図１】
2007500401.tif 000003
【図２】
2007500401.tif 000004
【図３】
2007500401.tif 000005
【図４】
2007500401.tif 000006
【図５】
2007500401.tif 000007
【図６】
2007500401.tif 000008
【図７】
2007500401.tif 000009
【図８】
2007500401.tif 000010
【手続補正書】
【提出日】平成18年9月12日(2006.9.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ソフトウェアプログラムを実行するように構築されたプロセッサと、
前記プロセッサ内の低レベル資産に接続され、プロセッサ上で実行される前記ソフトウェアプログラムの大きな時間歪みなく前記低レベル資産からデータを選択的に抽出するように構成可能な高速応答回路と、
抽出された持続性のデータを証拠ファイルに転送するように構築されたデータパスと、を有するデバッギングシステム。
【請求項２】
ソフトウェアプログラムを実行するように構築されたプロセッサと、
前記プロセッサ内の低レベル資産に接続され、前記プロセッサ上で実行される前記ソフトウェアプログラムの大きな時間歪みなく予め定められたイベントに対して前記低レベル資産からの持続性のデータを選択的に監視するように構成可能な高速応答回路と、
を有し、
前記高速応答回路がイベントに応答して動作信号を送信するように構築された、
デバッギングシステム。
【請求項３】
ソフトウェアプログラムを実行するように構築されたプロセッサと、
前記プロセッサ内の低レベル資産に接続され、予め定められたイベントに対して前記低レベル資産からのデータを監視するように構成可能な第１の部分を有し予め定められたイベントの発生時に動作信号を生成するように構築され、かつ前記低レベル資産からデータを選択的に抽出するように構成可能な第２の部分を有し動作信号に応答して動作するように構築された高速応答回路と、
前記プロセッサ上で実行される前記ソフトウェアプログラムの大きな時間歪みなく抽出された持続性のデータを証拠ファイルに送信するように構築されたデータパスと、
を有するデバッギングシステム。
【請求項４】
前記低レベル資産が、コミットバッファ、リオーダバッファ、高速データバス、またはレジスタとして構築された、請求項１、２、または３のいずれか1項に記載のデバッギングシステム。
【請求項５】
前記高速応答回路が前記プロセッサの低レベル資産とオンチップで集積化された、請求項１、２、または３のいずれか1項に記載のデバッギングシステム。
【請求項６】
前記高速応答回路が高速レジスタを有する、請求項１、２、または３のいずれか1項に記載のデバッギングシステム。
【請求項７】
前記データパスが前記プロセッサの階層の１以上のリソースを有する、請求項１、２、または３のいずれか1項に記載のデバッギングシステム。
【請求項８】
前記高速応答回路の第１の部分に接続されるシーケンス論理をさらに含み、
前記シーケンス論理がプログラムイベントを選択的に監視するようにプログラム可能であり、かつ前記シーケンス論理が前記プログラムイベントに応答して動作可能な、請求項３に記載のデバッギングシステム。
【請求項９】
高前記速応答回路の第２の部分に接続されるシーケンス論理をさらに含み、
前記シーケンス論理がデータを選択的に抽出するようにプログラム可能である、請求項３に記載のデバッギングシステム。
【請求項１０】
前記シーケンス論理がコプロセッサとして構築された、請求項８または９に記載のデバッギングシステム。
【請求項１１】
前記シーケンス論理が前記プロセッサの低レベル資産とオンチップで集積化された、請求項８または９に記載のデバッギングシステム。
【請求項１２】
低レベル資産と、
前記低レベル資産に接続され、予め定められたイベントに対して前記低レベル資産からのデータを監視するように構成可能な第１の部分を有し前記予め定められたイベントの発生時に動作信号を生成するように構築され、かつ前記低レベル資産からデータを選択的に抽出するように構成可能な第２の部分を有し動作信号に応答して動作するように構築された高速応答回路と、
プロセッサの階層の１以上のリソースを含み、持続性の証拠データを証拠ファイルに送信するように構築されたデータパスと、
を有するプロセッサチップ。
【請求項１３】
低レベル資産と、
イベントを監視しデータを選択的に抽出するよう予め構成された高速応答回路と、
前記低レベル資産から前記高速応答回路に持続性のデータを転送するように構築された高速データパスと、
を有するプロセッサであって、
中央プログラムを実行するステップと、
高速応答論理を使用してイベントを検出するステップと、
前記高速応答論理を使用してデータを選択的に抽出するステップと、
抽出されたデータをメモリに転送するステップと
を実行し、
前記検出、抽出、および転送するステップは前記プロセッサ上で実行される中央プログラムの大きな時間歪みを生じることなく実行される、
プロセッサ。
【請求項１４】
前記高速応答回路に接続される第２の低レベル資産をさらに有し、
前記抽出するステップが前記第２の低レベル資産からデータを選択的に抽出することを含む、
請求項１３に記載のプロセッサ。
【請求項１５】
前記高速応答回路に接続されるシーケンス論理回路をさらに有し、
イベントの検出に応答して動作信号を前記シーケンス論理に送信するステップを実行する、
請求項１３に記載のプロセッサ。
【請求項１６】
ソフトウェアプログラムを実行するように構築され、共有高速データ転送バスを有するプロセッサと、
前記プロセッサ内の低レベル資産に接続され、前記低レベル資産から持続性のデータをに抽出するように構成可能な高速応答回路と、
証拠ファイルまで伸びて、前記共有高速データ転送バスを含む高速データパスと
を有するデバッギングシステム。
【請求項１７】
前記高速データパスは前記プロセッサの階層の１以上のリソースをさらに含む、請求項１６に記載のデバッギングシステム。
【請求項１８】
前記高速応答回路は、プロセッサ上で実行されるソフトウェアプログラムが大きな時間歪みを生じることなく持続性のデータを抽出するように構築された、請求項１６に記載のデバッギングシステム。
【請求項１９】
前記高速データパスは、前記プロセッサ上で実行される前記ソフトウェアプログラムが大きな時間歪みを生じることなく、持続性のデータを証拠ファイルに転送するように構築された、請求項１６に記載のデバッギングシステム。
【国際調査報告】
2007500401.tif 000011
2007500401.tif 000012
2007500401.tif 000013