(57)【要約】      （修正有）【課題】オーバーヘッドが小さいメッセージロギングメカニズムを提供する。【解決手段】ソフトウェア命令をストアするように構成される記憶媒体１３０と、ソフトウェア命令を実行するように構成される処理ユニット１０２と、バス１１２と、バスを介し処理ユニットに接続されるアクノリッジデバイス１６２と、を含む計算機システム。処理ユニットが更に、ソフトウェア命令の実行中、アクノリッジデバイスにデバッグメッセージを定期的に書き込むように構成されていて、アクノリッジデバイスは、デバッグメッセージを処理する前にデバッグメッセージをアクノリッジする。【選択図】図１Ａ
2010044747.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア命令をストアするように構成される記憶媒体（１３０）と、
前記ソフトウェア命令を実行するように構成される処理ユニット（１０２）と、
バス（１１２）と、
前記バス（１１２）を介し前記処理ユニット（１０２）に接続されるアクノリッジデバイス（１６２）と、
前記ソフトウェア命令の実行中、前記処理ユニット（１０２）によって前記アクノリッジデバイス（１６２）に書き込まれるデバッグメッセージをサンプリングするために、前記バス（１１２）に接続されるロジックアナライザー（１０４）であって、
前記アクノリッジデバイス（１６２）が、前記デバッグメッセージを処理する前に、前記デバッグメッセージをアクノリッジするように構成されるものと、
を含むシステム（１００）。
【請求項２】
更に、ソースコードファイル（２１６）から複数のフォーマットストリングを抽出し、抽出された前記複数のフォーマットストリングを参照ファイル（２１８）にセーブするように構成される第２の処理ユニット（２０２）であって、前記処理ユニット（２０２）が更に、前記抽出された複数のフォーマットストリングのうち少なくとも１つを、前記ロジックアナライザー（１０４）によってサンプリングされた前記デバッグメッセージと相互に関連付けるように構成されるものと、を含む請求項１のシステム（１００）。
【請求項３】
前記第２の処理ユニット（２０２）が、前記複数のフォーマットストリングそれぞれに対して、インデックス番号を前記ソースコードファイル（２１６）から抽出するように構成されていて、前記処理ユニット（２０２）が、前記複数のフォーマットストリングのうち少なくとも１つを、前記抽出されたインデックス番号に基づいて前記サンプリングされたデバッグメッセージと相互に関連付けること、を特徴とする請求項２のシステム（１００）。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、様々なデバイスに対するソフトウェアアプリケーションのメッセージロギングに関する。
政府のライセンス許諾
合衆国海軍によって授けられたＮ０００３０−０５−Ｃ−０００７（主契約）及びＳＣ００１−０００００００１４５（副契約）の契約条件によって提供されている通り、米国政府は、本発明の一定の権利を有し得る。
【背景技術】
【０００２】
実際のハードウェア上で複雑なソフトウェアをリアルタイムにデバッグすることは多くの場合、リアルタイムに作動するツールを使用せずに可能であり得ない。典型的なソフトウェア及びインサーキットエミュレーター（ＩＣＥ）デバッガーは、実行を停止する。フィードバック制御、通信及び他のアプリケーションは、実行が停止された時、制御不能、タイムアウト又は他の時間に関連する問題のために機能しなくなる。
【０００３】
ツールの中には、リアルタイムに作動するけれども使用困難なものもある。ロジックアナライザーは、データを捕捉するために使用されるが、多くの場合、ＣＰＵの鮮明な実行状況を再構成することは困難である。これに関する１つの理由は、ロジックアナライザーは通常、主記憶アクセスを監視するけれどもＣＰＵ命令及びデータキャッシュが、性能を改善するために主記憶アクセスを回避することにある。更に、低水準バスサイクルは、高水準ソースコードに変換してもソフトウェアのバグを追跡するためにナビゲートすることは多くの場合、困難である。
【０００４】
コア及びエッジルータ並びにもっとありふれたアプリケーションなど、高級な多くのインターネット装置アプリケーションは、様々な装置に対しメッセージロギングを実行する。これは通常、ＦＡＴＡＬ、ＥＲＲＯＲ、ＷＡＲＮＩＮＧ及びＩＮＦＯＲＭＡＴＩＯＮに分類される高水準のデバッグ情報を出力するように実行される。カテゴリー名は変わるけれどもそれらの本来の意味は、アプリケーションごとに同一である。これによって開発者及びオペレータは、システムの状態をチェックし、問題解決操作が可能になる。これに関する例が、Ｗｉｎｄｏｗｓ ＸＰ（登録商標）管理ツールの「イベントビューアー」である。
【０００５】
高性能又は低価格のアプリケーションにおいては、大量の情報を処理するとき、メッセージロギングの多大な性能コストが存在する。そのコストは、ロギング機能自体の呼び出し、メッセージデータフォーマッティング及びデータ転送のオーバーヘッド、出力装置ドライバー及びオペレーティングシステムのオーバーヘッド並びに実際のアプリケーションに対するＣＰＵキャッシュ使用時の悪化に関連する。従来のシステムにおいて、ドライバー及びオペレーティングシステムのオーバーヘッドを低減する一手段は、主記憶装置（ＲＡＭ）へデータをストアすることであるが、これはデータロギングの総量を制限する。従来のシステムにおいて、フォーマッティングのオーバーヘッドを低減する一手段は、アプリケーションが、処理するデータを待っているとき、フォーマッティングタスクを低い優先度で実行することである。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、リアルタイムシステムのデバッグを支援するために、オーバーヘッドが小さいメッセージロギングメカニズムを提供することである。
【課題を解決するための手段】
【０００７】
前述の問題及び他の問題が、本発明により解決されていて、以下の明細書を読み観察することによって理解されよう。
一実施形態において、計算機システムが提供されている。本計算機システムは、ソフトウェア命令をストアするように構成される記憶媒体と、前記ソフトウェア命令を実行するように構成される処理ユニットと、バスと、前記バスを介して前記処理ユニットに接続されるアクノリッジデバイスと、を含む。処理ユニットは更に、ソフトウェア命令の実行中、デバッグメッセージをアクノリッジデバイスに定期的に書き込むように構成されていて、アクノリッジデバイスは、デバッグメッセージを処理する前にデバッグメッセージを肯定応答（アクノリッジ）するように構成される。
【０００８】
図面を参照する以下の記述から本発明の特徴を当業者に明らかにする。図面が、単に本発明の典型的な実施形態を表していて、故に範囲を制限するように考慮される意図がないことを了解し、本発明を添付の図面の使用を介し更なる特徴及び詳細と共に記載する。
【図面の簡単な説明】
【０００９】
【図１Ａ】本発明の一実施形態によるメッセージロギングに関して使用されるシステムブロック図である。
【図１Ｂ】本発明の一実施形態によるメッセージロギングに関して使用されるシステムブロック図である。
【図１Ｃ】本発明の一実施形態によるメッセージロギングに関して使用されるシステムブロック図である。
【図２】本発明の一実施形態によるデバッグメッセージ送信のためのタイミングチャートである。
【図３】本発明の一実施形態によるメッセージロギングの方法を示す流れ図である。
【図４】本発明の一実施形態による人間が読み取れるフォーマットでメッセージログを生成する方法を示す流れ図である。
【発明を実施するための形態】
【００１０】
一般的な慣例に従って説明する様々な特徴を同一の比率で描かずに本発明に関連する特定の特徴を強調するように描く。様々な図面の同様な参照番号及び名称は、同様のエレメントを示す。
【００１１】
以下の詳細説明において、実施形態を当業者が本発明を実施することを可能にし得るように詳細に記載する。別の実施形態を本発明の範囲から逸脱せずに利用し得ることが理解されよう。以下の記述は、例えばＰｏｗｅｒＰＣのアーキテクチャと関連して本発明の実施形態を説明している。しかしながら、本発明の実施形態をＰｏｗｅｒＰＣのアーキテクチャに限定しないことが理解されよう。したがって、以下の詳細な説明を限定する意味にとるべきではない。
【００１２】
本発明の実施形態は、リアルタイムシステムのデバッグにおいて支援するために、オーバーヘッドが小さいメッセージロギングメカニズムを提供する。具体的には、本発明の実施形態は、デバッグメッセージ受理のアクノリッジを受信する処理ユニットに対する待ち時間を低減することによって、デバッグメッセージの更なる高速送信及びロギングを可能にする。本発明の実施形態は、人間が読み取れるフォーマットのエラーメッセージ出力も可能にする。
【００１３】
図１は、本発明の一実施形態によるデバッグメッセージロギングに関して使用されるシステム（１００）のブロック図である。システム（１００）は、ターゲット計算機システム（１０１）、ホスト計算機システム（２０５）及びロジックアナライザー（１０４）を含む。ターゲット計算機（１０１）が、検査又はデバッグされる計算機システムである。ロジックアナライザー（１０４）は、ターゲット計算機（１０１）からのデバッグデータを捕捉する際に使用され、ホスト計算機（２０５）は、ロジックアナライザーによって捕捉されたデバッグデータを処理する計算機システムである。ターゲット計算機（１０１）は、記憶媒体（１３０）上の実行可能コード（１３２）を処理するように構成される処理ユニット（１０２）を含む。記憶媒体（１３０）は、計算機が読み取れる命令又はデータ構造のストレージ用に使用される適切な任意の計算機可読媒体として実装される。そのような計算機の媒体は、汎用又は専用の計算機又はプロセッサー又は任意のプログラマブル論理回路によってアクセスされ得る利用可能な任意の媒体であり得る。適切な計算機可読媒体は、例えばＥＰＲＯＭ、ＥＥＰＲＯＭ又はフラッシュメモリー装置などの半導体記憶装置を含む不揮発性記憶装置、内蔵ハードディスク又は取り外し可能ディスク（例えばフロッピーディスク）などの磁気ディスク、磁気光ディスク、ＣＤ、ＤＶＤ又は他の光記憶ディスク、不揮発性ＲＯＭ、ＲＡＭ及びその他の媒体を含み得る。
【００１４】
処理ユニット（１０２）は、プロセッサーインターフェース（１１２）を介しデバイス（１０３）にアクセスする。適切な装置は、通信装置、入力及び出力装置、デジタル−アナログ又はアナログ−デジタルコンバーター及び記憶媒体（１３０）を含むがこれらを限定しない。アクセスが発生するたびに処理ユニット（１０２）は、それが別の転送を実行可能である指示を受信する。別の転送を実行する可能性を待つことは、処理を遅くする。この待ち時間は、アクセスされるデバイス（１０３）の速度に従って変化する。一般に、同一種類のデバイス（１０３）に関しては、より短い待ち時間を有する更に高速のデバイスは、より長い待ち時間を有する比較的遅いデバイスよりもコストがかかる。
【００１５】
処理ユニット（１０２）は、高速アクセスの命令キャッシュ（Ｉ−キャッシュ）（１２２）及びデータキャッシュ（Ｄ−キャッシュ）（１２４）を含む。処理ユニット（１０２）は、アクセス速度を総合的に改善するために、これらのキャッシュを介しプロセッサーインターフェース（１１２）にアクセスし得る。例えば記憶媒体（１３０）上でアクセスされた情報は、当業者に知られている技法を使用してＩ−キャッシュ（１２２）及びＤ−キャッシュ（１２４）にコピーされる。具体的には、Ｉ−キャッシュ（１２２）が命令をキャッシュし、Ｄ−キャッシュ（１２４）がデータをキャッシュする。同一情報への今後のアクセスは、プロセッサーインターフェース（１１２）上を伝達されるよりもむしろそのキャッシュコピーを使用し得る。Ｉ−キャッシュ（１２２）及びＤ−キャッシュ（１２４）それぞれは、複数の固定サイズのキャッシュラインを使用する。例えばＰｏｗｅｒＰＣ６０３Ｅのアーキテクチャにおいては、Ｉ−キャッシュ（１２２）及びＤ−キャッシュ（１２４）それぞれは、３２バイト固定である５１２のキャッシュラインをそれぞれ有する１６ＫＢのサイズである。命令及びデータ用の個別のキャッシュを使用することによって、命令及びデータの同時アクセスが可能になる。しかしながら、本発明の実施形態は、命令及びデータ用のキャッシュを分離することに限定する意図はない。更に、処理ユニット（１０２）は、仮想及び物理アドレス間のアドレス変換をするメモリーマネージメントユニットのような当業者に知られている別のコンポーネントを含み得る。
【００１６】
ターゲット計算機（１０１）は、処理ユニット（１０２）及び記憶媒体（１３０）のような複数のデバイス（１０３）の間の異なるインターフェースプロトコルをブリッジするためのブリッジデバイス（１０６）を含む。処理ユニット（１０２）は、処理ユニット（１０２）及びデバイス（１０３）のプロトコル要求に従う３つの方法のうちの１つでデバイス（１０３）にアクセスする。図１Ａの例示的な実施形態においては、処理ユニット（１０２）は、プロセッサーインターフェース（１１２）を介し直接にデバイス（１０３）にアクセスする。しかしながら、図１Ｂの例示的な実施形態においては、処理ユニット（１０２）は、ブリッジデバイスインターフェース（１１３）を介しデバイス（１０３）にアクセスする。別の実施形態においては、処理ユニット（１０２）は、ブリッジデバイス（１０６）の支援を用いてプロセッサーインターフェース（１１２）を介しデバイス（１０３）にアクセスする。ブリッジデバイス（１０６）は、ターゲット計算機（１０１）中の複数の異なる種類の記憶媒体（１３０）を含む複数の異なる種類のデバイス（１０３）に接続するために使用される。更に実施形態の中には、ブリッジデバイス（１０６）が、（図１Ｂに示される）複数の異なるブリッジインターフェース（１１３）を介し複数の異なるデバイス（１０３）をブリッジするために使用されるものもある。
【００１７】
ブリッジデバイス（１０６）は、Ｄ−キャッシュ（１２４）と同様の様々なデバイス（１０３）の実体へのアクセスをバッファリングする複数のバッファ（１６１）を含み得る。例えば、実施形態の中には、処理ユニット（１０２）が、ＤＲＡＭへの書き込みをポストし、ブリッジデバイス（１０６）がより遅いレートでのＤＲＡＭへの書き込みを代行する間に、ブリッジデバイス（１０６）が、より高速のアクノリッジを受信可能にするようにＤＲＡＭバッファをブリッジデバイスが支持するものもある。
【００１８】
本発明は、任意のデバイス（１０３）に対しプロキシとして機能せずに、処理ユニット（１０２）に対し高速のアクノリッジを提供する空媒体（ｎｕｌｌ  ｍｅｄｉｕｍ：１６３）も含む。空媒体（１６３）は、処理ユニット（１０２）から空媒体（１６３）へのリクエストを識別するためにデバッグ情報（１６４）を使用する。空媒体（１６３）及びデバッグ情報（１６４）は、適切な任意の高速メモリー装置として実装される。例えば、空媒体（１６３）及びデバッグ情報（１６４）は、特定用途向け集積回路（ＡＳＩＣ）又はフィールドプログラマブルゲートアレイ（ＦＰＧＡ）として実装され得る。この実施形態においては、空媒体（１６３）及びデバッグ情報（１６４）は、プロセッサーローカルバス（ＰＬＢ）などのバス（１１２）を介し処理ユニット（１０２）に接続される。更に、この実施形態においては、空媒体（１６３）及びデバッグ情報（１６４）は、ブリッジデバイス（１０６）の一部である。しかしながら、別の実施形態においては、空媒体（１６３）及びデバッグ情報（１６４）は、処理ユニット（１０２）の一部か、個別デバイス（１０３）又はロジックアナライザー（１０４）にアクセス可能なバスを介し書き込みアクセスを処理ユニット（１０２）に実行させる任意のコンポーネントの一部であり得る。
【００１９】
本発明の例示的なこの実施形態においては、アクノリッジデバイス（１６２）は、デバイス（１０３）に対しプロキシとして機能すると同時に処理ユニット（１０２）に高速のアクノリッジを提供するためのデバッグバッファ（１６５）も含む。デバッグバッファ（１６５）は、従来のシステムにおけるバッファと同様な機能を実行する。しかしながらデバッグバッファ（１６５）は、バス（１１２）上の処理ユニット（１０２）からデバッグバッファ（１６５）へのリクエストを識別し、バス（１１３）に対し要求されるデバイス（１０３）のトランザクションを識別するためにデバッグ情報（１６４）を使用する。従来のＤＲＡＭバッファよりも単純な設計を可能にするためデバッグバッファ（１６５）が、処理ユニット（１０２）による記憶媒体（１３０）への書き込みに使用される。このより単純な設計の一例は、従来のシステムにおいて使用されるキャッシュコヒーレンシーロジックの欠如である。具体的には、バス（１１２）上の処理ユニット（１０２）が、別の任意の処理ユニットのデバッグデータに関して知っている必要がないため、キャッシュコヒーレンシーロジックは、この例示的な実施形態において要求されない。本発明の実施形態をＤＲＡＭに対するバッファリングに限定する意図はないが、処理ユニットが書き込み得る記憶装置、通信装置又はディスプレイのように他の出力装置などの任意の装置用にバッファリングし得る。
【００２０】
この例示的な実施形態においては、アクノリッジデバイス（１６２）は、空媒体（１６３）、デバッグ情報（１６４）及びデバッグバッファ（１６５）を含んでいるが、別の実施形態においては、アクノリッジデバイス（１６２）は、任意の数の空媒体（１６３）及び／又はそのような組み合わせに対し必要とされるデバッグ情報（１６４）と共にデバッグバッファ（１６５）の任意の組み合わせから成り得る。
【００２１】
デバッグ関数（１３３）の呼び出しは、実行可能コード（１３２）の始めから終わりまで点在していて、処理ユニット（１０２）がコード（１３２）を実行するとき呼び出される。デバッグ関数（１３３）の実行中、処理ユニット（１０２）は、アクノリッジデバイス（１６２）にデバッグデータを書き込む。実施形態の中には、（デバッグ関数（１３３）の引数値を含む）デバッグデータが、ＦＡＴＡＬ、ＥＲＲＯＲ、ＷＡＲＮＩＮＧ及びＩＮＦＯＲＭＡＴＩＯＮに分類される情報などの従来のシステムにおいて通常、使用される情報を含むものもある。別の実施形態においては、デバッグデータは、サブルーチンの入り口及び出口、サブルーチンの引数、中間計算結果及び処理期限マージンなどの従来のシステムに通常、含まれない付加情報も含む。
【００２２】
処理ユニット（１０２）は、更に多くのデータを送信する前にブリッジデバイス（１０６）からのアクノリッジを待つ必要がある。従来のシステムにおいては、ブリッジデバイスは、ブリッジデバイスがデータの受理を受け入れてアクノリッジするまで、その書き込みのアクノリッジを遅らせる。しかしながら、本発明の実施形態においては、アクノリッジデバイス（１６２）が、即座に書き込みをアクノリッジする。具体的には空媒体（１６３）を実装する実施形態の中には、データが単にアクノリッジされ、ドロップされるものもある。この迅速なアクノリッジによって処理ユニット（１０２）は、通常のデータよりも速くデバッグデータを処理可能になる。図２の例示的なタイムチャートに示されるように、アクノリッジライン（ＴＡ）は、この実施形態においては、処理ユニット（１０２）が１バス帯域のデータを順次送信可能にして、データライン上のデバッグメッセージデータのバーストの期間は実質的に低に維持される。
【００２３】
実施形態の中には、ロジックアナライザー（１０４）が、インターフェース（１１２）に接続されるものもある。実施形態の中には、こうしてデバッグデータが、アクノリッジデバイス（１６２）によって失われても、ロジックアナライザー（１０４）が、デバッグデータをサンプリングし、ストアし得るものもある。したがってデバッグデータがアクノリッジデバイス（１６２）に書き込まれたとき、ロジックアナライザー（１０４）が、そのデータを記録し処理する。具体的にはロジックアナライザー（１０４）が、デバッグメッセージそれぞれにタイムスタンプを追加する。処理ユニット（１０２）が、アクノリッジデバイス（１６２）にデータをバーストし得るので、ロジックアナライザー（１０４）は、従来のシステムと比較するとデバッグメッセージデータを高速にロギングし得る。したがって本発明の実施形態は、従来のシステムにおいて見出される時間遅れ及び処理ユニット（１０２）の性能に関連するコストなしにデバッグデータのリアルタイムロギングを提供し得る。
【００２４】
代替としてロジックアナライザー（１０４）が、デバッグバッファ（１６５）から転送されるデバッグデータを捕捉するために図１Ｂに示されるようなインターフェース（１１３）に接続される。実施形態の中には、デバイス（１０３）が、ロジックアナライザー（１０４）によって接続されているインターフェース（１１３）上に存在しないものもある。例えば実施形態の中には、デバイス（１０３）がシリアルポートチップである場合、デバイス（１０３）が取り外されたときでもロジックアナライザー（１０４）が、インターフェース（１１３）において同一データを観測するものもある。別の実施形態においては、インターフェース（１１３）が単にロジックアナライザー（１０４）に対しデバッグインターフェースを提供するために使用される。更に、実施形態の中には、デバッグデータを失うことが望まれないものもある。そのような一実施形態においては、デバッグバッファ（１６５）がデバイス（１０３）に接続される。こうして速やかなデバッグデータのアクノリッジに加え、アクノリッジデバイス（１６２）は、バス（１１３）を介しデバイス（１０３）にデバッグデータを転送する。ロジックアナライザー（１０４）は、デバッグデータがデバイス（１０３）に転送されているとき、それを捕捉するようにバス（１１３）に接続されている。そのような実施形態の中には、デバイス（１０３）が、デバッグデータに対する捕捉装置としてだけ機能するものもある。例えば、デバイス（１０３）がディスクドライブコントローラである場合、実施形態の中には、データを捕捉し直接にディスクへ記録し得るものもある。
【００２５】
アクノリッジデバイス（１６２）にデバッグデータを書き込むために使用される例示的な一関数は、ｗｒｉｔｅＤｅｂｕｇＭｓｇ１（ａｄｄｒ，ＩＤ，ｘ，ｙ，ｚ）である。一実施形態においては、このデバッグ関数は、Ｄ−キャッシュ（１２４）からアクノリッジデバイス（１６２）に１つのキャッシュラインデータを書き込むために、Ｉ−キャッシュ（１２２）の１つのキャッシュラインだけを使用する。括弧内は、デバッグ関数によって使用される引数である。具体的には「ａｄｄｒ」は、データが書き込まれる先のアクノリッジデバイス（１６２）のアドレスである。引数「ＩＤ、ｘ、ｙ及びｚ」は、コード（１３２）が提供する関数によって使用される値又は引数を表し、主なデバッグデータコンポーネントである。ＩＤ、ｘ、ｙ、ｚの意味及び値は、特定のアプリケーション又は実装に基づいて変化する。名目上、ＩＤは、ｗｒｉｔｅＤｅｂｕｇＭｓｇ１（）の呼び出しに関する特定のパラメーター化を識別する固有番号である。
【００２６】
ｘ、ｙ及びｚのようなデバッグ関数の引数は、異なるデータ型として実装され得る。例えば、実施形態の中にはｘ、ｙ及びｚが浮動小数点変数であるものもある。別の実施形態においてはｘ、ｙ及びｚが整数変数であるものもある。特にこの例においては、引数ｘ、ｙ及びｚが使用されているが、本発明の実施形態をそのように限定しない。更に別の実施形態においては、デバッグ関数は、より少ないか又は追加された引数を含み得る。例えば、実施形態の中には、デバッグ関数が「フラグ」引数も含むものもある。この追加された引数は、目下のデバッグメッセージの重要性又は厳格性を示す。既に言及された従来のフラグの例は、ＦＡＴＡＬ、ＥＲＲＯＲ、ＷＡＲＮＩＮＧその他である。
【００２７】
別の実施形態においては、デバッグ関数はアドレス引数を使用しない。そのような例示的な一デバッグ関数は、ｗｒｉｔｅＤｅｂｕｇＭｓｇ２（ＩＤ、ｘ、ｙ、ｚ）である。このデバッグ関数は常に、所定のキャッシュアドレスに書き込む。その結果、この例示的な第２のデバッグ関数は、関数の呼び出し側にあまり負担をかけない。しかしながら、第２のデバッグ関数に関するキャッシュのフットプリントは、例示的な第１のデバッグ関数に関するキャッシュのフットプリントよりも大きくなり得る。ＰｏｗｅｒＰＣアーキテクチャに関する一実施形態においては、第２のデバッグ関数は、書き込む先のアドレスを特定する更なる必要性のために、Ｉ−キャッシュ（１２２）の１つ以上のキャッシュラインを使用する。
【００２８】
コード（１３２）を実行する時、デバッグ関数が頻繁に実行されるので、それは通常、Ｉ−キャッシュ（１２２）に配置される。これは、Ｉ−キャッシュ（１２２）が、ｌｅａｓｔ−ｒｅｃｅｎｔｌｙ  ｕｓｅｄ（ＬＲＵ）置換ポリシーを使用しキャッシュラインを置換する理由による。したがってデバッグ関数を頻繁に実行することは通常、Ｉ−キャッシュ（１２２）にデバッグ関数を保持する。Ｉ−キャッシュ（１２２）からデバッグ関数を実行することが、性能を大幅に改善する。例えば、一実施形態においては、Ｉ−キャッシュ（１２２）からデバッグ関数を使用し、４バイトのバスを介しアクノリッジデバイス（１６２）に書き込むための平均時間は、Ｉ−キャッシュ（１２２）からデバッグ関数を実行しないときのおよそ２５０〜５００のバスクロックと比較すると、およそ１７５のバスクロックである。例えば、別の実施形態においては、８００ＭＨｚｘ６４ビットのフロントサイドバス（すなわち（１１２）を用いると８７クロックは、デバッグ関数の呼び出しあたり１１０ナノ秒未満と同等に見なされる。１００Ｈｚのレートでタスクを繰り返す実行可能コード（１３２）は、タスクサイクルあたり２５０のデバッグ関数の呼び出しを有し、実行可能コード（１３２）に対してわずか０．２５％だけの処理時間を費やし得る。
【００２９】
本発明の実施形態は、ロジックアナライザー（１０４）に書き込まれる生のデータを人間が読み取れるメッセージにフォーマッティングすることも可能にする。この例示的な実施形態においては、フォーマッティングは、ホスト（２０５）によって実行される。これは、表示関数のフォーマッティング及び表示のために、ターゲット（１０１）内の処理ユニット（１０２）からホスト（２０５）内の処理ユニット（２０２）に処理をオフロードする。具体的には、デバッグ関数（１３３）に渡される固有番号（ＩＤ）が、ロジックアナライザー（１０４）によって捕捉されたデータとフォーマットストリングを相互に関連付けるために使用される。例えば、フォーマットストリングは、ｐｒｉｎｔ（）関数又はユーザーへの別の同様な出力に関連付けられたテキストメッセージを含む。
【００３０】
処理ユニット（２０２）は、ソースコード（２１６）が提供する表示関数から人間が読み取れるフォーマットストリングを検索し抽出するプログラム（２１５）を実行する。ソースコード（２１６）は、処理ユニット（１０２）によって実行される実行可能コード（１３２）に対するソースコードである。処理ユニット（２０２）は、抽出されたフォーマットストリング及び相互に関連付けられた固有のインデックス番号それぞれを参照ファイル（２１８）にセーブする。名目上、処理ユニット（２０２）は、インデックス番号それぞれがフォーマットストリング及びインデックス番号が抽出されるように固有であることを保証する。インデックス番号が固有でない場合、実施形態の中には、処理ユニット（２０２）が固有番号を生成するものもある。代替として、番号それぞれが固有であることを保証するために、ソースコード（２３２）が提供するインデックス番号を使用するよりもむしろ関数それぞれに対する固有番号を処理ユニット（２０２）が生成する。参照ファイル（２１８）が、記憶媒体（２１４）にストアされるように示されているが、参照ファイル（２１８）が、フラッシュメモリー装置などの適切な個別の記憶媒体、内蔵ハードディスク又は取り外し可能ディスク（例えばフロッピーディスク）などの磁気ディスク、光磁気ディスク、ＣＤ、ＤＶＤ又は他の光記憶ディスク、ＲＡＭ、その他の媒体にストアされ得ることが理解されよう。
【００３１】
ソースコード（２１６）は、処理済ソースコード（２１７）を生成するために、表示関数に挿入される固有ＩＤと共に更新される。例えば、以下の表示ステートメントにおいては、表示ステートメントに対する第１の引数であるＩＤ引数、この例においては０、が固有ＩＤによって置換される。
【００３２】
Print(0,"%d] meaningless error message on interface %d with data %d\n,interface, data);
本発明において、処理ユニット（２０２）は更に、表示関数に対する呼び出しが、デバッグ関数（１３３）（例えばｗｒｉｔｅＤｅｂｕｇＭｓｇ１）に対する呼び出しによって、参照ファイル（２１８）にセーブされている表示関数のストリングに対応するＩＤ引数で置換されている処理済ソースコード（２１７）をセーブする。処理済ソースコード（２１７）は個別ファイルとして示されているが、あるいはまたそれは、実行可能イメージを生成する間にＣコンパイラがソースコードを前処理し得る方法と同じ、ソースコード（２１６）から実行可能コード（１３２）への変換処理の一部のような一時的に生成されるファイルであり得る。
【００３３】
本発明の実施形態の中には、抽出されたフォーマットストリングそれぞれに関連付けられるインデックス番号が、単にフォーマットストリングに対する識別番号として使用されるものもある。処理ユニット（１０２）はデバッグ関数（１３３）を実行するときに、フォーマットされるフォーマットストリングの固有ＩＤ番号及び引数をアクノリッジデバイス（１６２）に渡す。ロジックアナライザー（１０４）は、ＩＤ及び引数値を捕捉し、実施形態の中には、タイムスタンプと共にその捕捉されたＩＤ及び引数の値をロギングするものもある。あるいはまたある実施形態は、デバイス（１０３）がＩＤ及び引数の値を捕捉するように構成されるものもある。
【００３４】
処理ユニット（２０２）は、参照ファイル（２１８）が提供するフォーマットストリング及びロジックアナライザー（１０４）によってストアされたトレースデータを使用して人間が読み取れるメッセージを再構築するために、ストリングフォーマッティングプログラム（２１９）に対するＩＤを実行する。ロジックアナライザー（１０４）のトレースデータから処理ユニット（２０２）は、ロジックアナライザー（１０４）によって追加されたタイムスタンプ及びシーケンス番号並びにロジックアナライザー（１０４）によって捕捉されたＩＤ及び引数ｘ、ｙ及びｚなどの値を取得する。処理ユニット（２０２）は、参照ファイル（２１８）からフォーマットストリングを取得する。処理ユニット（２０２）は、フォーマットストリングを使用し、ロジックアナライザーのデータをフォーマットし、出力装置（２０８）にその結果を出力する。出力装置（２０８）は、ディスプレイエレメント、プリンター、取り外し可能ディスクドライブその他として実装され得る。以下の例は、数字セットへのフォーマットストリングの変換及び人間が読み取れるフォーマットへのその再構築を例示する。以下に提供された例が単に例示的であって、本発明の実施形態をこの例によって限定する意図がないことが理解されよう。この例においては、ソースコード（２１６）における人間が読み取れるフォーマットストリングは以下である。
【００３５】
printf("The gimbals' angles are: (%g, %g, %g)\n", fl, f2, f3);
前述の表示ステートメントにおいて、変数ｆ１、ｆ２及びｆ３は、浮動小数点型の変数である。処理ユニット（２０２）は、ソースコード（２１６）中のこのステートメントを見出し、ソースコード（２１６）が提供するインデックス番号と共に参照ファイル（２１８）にそれをセーブする。参照ファイル（２１８）の例示的なセグメントを以下に示す。
【００３６】
1  "Current transpose of the matrix is: %g, %g, %g"
2  "void dispatcher (void)"
...
135 "The gimbals' angles are: %g, %g, %g"
...
上記参照ファイル（２１８）のセグメントは、人間が読み取れるフォーマットストリングのアレイを示す。ストリングそれぞれは、アレイ中に固有の識別番号を有する。処理ユニット（１０２）はその後、ソースコード（１３２）をデバッグするために、前述のｗｒｉｔｅＤｅｂｕｇＭｓｇ１（ａｄｄｒ，ＩＤ，ｘ，ｙ，ｚ）のようなコード（１３２）及びデバッグ関数を実行する。この例においては、ａｄｄｒ値は０ｘ５０Ｃ０００２０であって、ＩＤの値は１３５であって、ｘ、ｙ及びｚの値はそれぞれ１．０、２．０及び３．０である。この実施形態においては、アドレス０ｘ５０Ｃ０００２０は、アクノリッジデバイス（１６２）のアドレス範囲に対応する。このデバッグメッセージのロジックアナライザーのトレースは、以下のように現れる。
【００３７】
0x50C00020:   05000135 00000000 11111111 11111111 
22222222 22222222 33333333 33333333
見られるように表示ステートメントの例は、ロジックアナライザーのトレースにおいて（１．０その他に対し１１１１１１１１  １１１１１１１１などとして書き留められる）ちょうど４つの浮動小数点に単純化されている。更に、ロジックアナライザーのトレースは、表示ステートメントの引数値を含む。処理ユニット（２０２）はその後、ロジックアナライザー（１０４）が捕捉したデータに基づいて人間が読み取れるフォーマットでストリング例を再構築するために、ストリングフォーマットプログラム（２１９）に対するＩＤを実行する。実施形態の中には、ユーザー入力装置（２２０）を介しユーザー入力によって指示されたとき、処理ユニット（２０２）がフォーマットストリングを再構築するものもある。ユーザー入力装置（２２０）は、マウス、タッチスクリーン、キーボードその他として実装され得る。別の実施形態においては、処理ユニット（２０２）が、ロジックアナライザーのトレースからのフォーマットストリングを自動的に再構築するものもある。あるいはまた処理ユニット（２０２）は、エラーの検出又は実行可能コード（１３２）の実行完了のような特定の事象の発生時、再構築されたフォーマットストリングと共にロジックアナライザーのトレースを出力する。
【００３８】
再構築されたフォーマットストリングを有するロジックアナライザーのトレースの例示的な出力セグメントを以下に示す。
5402)  3.20:111.40 135  The gimbals' angles are: (1.0, 2.0, 3.0)
5403)  3.20:111.42 573  The ...
見られるように出力は、ロジックアナライザー（１０４）から取得されたシーケンス番号（例えば５４０２）及びタイムスタンプ（例えば３．２０：１１１．４０）を含む。出力は、参照ファイル（１１８）から取得されるメッセージＩＤ及び人間が読み取れるフォーマットストリングも含む。ｆ１、ｆ２及びｆ３の値も含まれている。特に、ロジックアナライザーのトレースは追加の情報を含み得る。例えば、実施形態の中には、ロジックアナライザーのトレースが、それが書き込まれた先のアドレス（例えば０ｘ５０Ｃ０００２０）に基づいてロジックアナライザー（１０４）から取得されるユーザーカテゴリーＩＤも含むものもある。カテゴリーは、参照ファイル（１１８）から取得されたフィルタリングのために使用されるユーザーカテゴリーに基づいて人間が読み取れるフォーマットで表示される。ロジックアナライザーのトレースの出力は、その時に使用された関数及び属性値に関するもっとユーザーフレンドリーな記述を提供する。したがってユーザーは、ロジックアナライザーのトレースを更に素早く解釈し、ソースコード（１３２）中の問題をデバッグし得る。
【００３９】
図３は、本発明の一実施形態によるメッセージロギングの方法（３００）を示す流れ図である。方法（３００）は、前述のシステム（１００）のようなシステムにおいて実装され得る。（３０２）において、処理ユニット（例えば処理ユニット（１０２））は、第１のデータ信号（例えばデバッグメッセージ）をバス（例えばバス（１１２））を介してアクノリッジデバイス（例えばアクノリッジデバイス（１６２））に送信する。（３０４）において、アクノリッジデバイスは第１のデータ信号を受信したとき、第１のデータ信号の別の処理をする前に第１のデータ信号の受理をアクノリッジする。具体的には、実施形態の中には、アクノリッジデバイスは、受理をアクノリッジした後に第１のデータ信号をドロップするものもある。別の実施形態においては、アクノリッジデバイスは、第１のデータ信号の受理をアクノリッジした後、データ信号を個別のメモリー（例えば記憶媒体（１３０））に転送するものもある。（３０６）において、ロジックアナライザー（例えばロジックアナライザー（１０４））は、バス上の第１のデータ信号を捕捉する。方法（３００）はその後、第２のデータ信号がアクノリッジデバイスに送信される（３０２）へ戻る。具体的には、処理ユニットは、前述のように第２及び次のデータ信号をアクノリッジデバイスにバーストする。
【００４０】
図４は、本発明の一実施形態によるロジックアナライザーのトレースにおいて、人間が読み取れるフォーマットストリングを再構築する方法（４００）を示す流れ図である。方法（４００）は、計算機可読媒体上に明白に具体化されたソフトウェア命令で実装され得、処理ユニット（１０２）のような処理ユニットによって実行され得る。そのような計算機可読媒体は、汎用又は専用の計算機又はプロセッサー又は任意のプログラマブル論理装置によってアクセスされ得る利用可能な任意の媒体であり得る。適切な計算機可読媒体は、磁気又は光媒体、例えばディスク又はＣＤ−ＲＯＭなどのストレージ又は記憶媒体、ＲＡＭ（例えばＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭその他）ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリーその他などの揮発性又は不揮発性媒体並びにネットワーク及び／又は無線リンクなどの通信媒体を介し伝達される電気的、電磁的又はデジタル信号のような伝送媒体を含み得る。
【００４１】
（４０２）において、処理ユニットは、ソースコード（例えばソースコード（１３２））から人間が読み取れるフォーマットストリングを抽出する。実施形態の中には、処理ユニットが、人間が読み取れるフォーマットストリングそれぞれに関連するソースコードからインデックス番号も抽出するものもある。（４０４）において、処理ユニットは、参照ファイル（例えば参照ファイル（１１８））に人間が読み取れるフォーマットストリングをストアする。人間が読み取れるフォーマットストリングは、（メッセージＩＤとしても参照される）固有の識別番号と共にアレイにストアされる。実施形態の中には、固有の識別番号が、ソースコードが提供するインデックス番号であるものもある。ソースコードが提供するインデックス番号が固有でない場合、処理ユニットが、識別番号が固有であることを保証し固有番号を生成する。
【００４２】
（４０６）において、処理ユニットは、抽出された人間が読み取れるフォーマットストリングを、ソースコードの実行中にデバッグ関数から取得されたロジックアナライザーのトレースと相互に関連付ける。抽出された人間が読み取れるフォーマットストリングは、前述のような固有の識別番号に基づいて、ロジックアナライザーのトレースと相互に関連付けられる。（４０８）において、処理ユニットは、参照ファイルが提供する人間が読み取れるフォーマットストリングを使用し、人間が読み取れるフォーマットでロジックアナライザーのトレース値を出力する。実施形態の中には、ユーザー入力によって指示されたとき、処理ユニットが、人間が読み取れるフォーマットを出力するものもある。別の実施形態においては、ソースコードの実行完了又はエラーの検出など指定された事象の発生時、処理ユニットが、人間が読み取れるフォーマットを出力する。
【００４３】
特定の実施形態を本明細書において例示し記載したが、同一の目的を達成するために計算される任意の処理が、示された特定の実施形態に対し代用され得ることが当業者に十分理解されよう。本出願は、本発明の任意の改作又は変形を範囲とするように意図されている。したがって本発明が、請求項及びその同等物によってのみ制限されることを明確に意図している。
【符号の説明】
【００４４】
１０１  ターゲット計算機システム
１０２  処理ユニット
１０３  デバイス
１０４  ロジックアナライザー
１０６  ブリッジデバイス
１１２  バス
１１３  デバイスインターフェース
１２２  高速アクセス命令キャッシュ
１２４  高速データキャッシュ
１３０  記憶媒体
１３２  実行可能コード
１３３  デバッグ関数
１６１  バッファ
１６２  アクノリッジデバイス
１６３  空媒体
１６４  デバッグ情報
１６５  デバッグバッファ
２０２  処理ユニット
２０５  ホスト計算機システム
２０８  出力装置
２１４  記憶媒体
２１５  ストリング抽出プログラム
２１６  ソースコードファイル
２１７  ソースコード
２１８  参照ファイル
２１９  ストリングフォーマッティングプログラム
２２０  ユーザー入力装置
【図１Ａ】
2010044747.tif 000003
【図１Ｂ】
2010044747.tif 000004
【図１Ｃ】
2010044747.tif 000005
【図２】
2010044747.tif 000006
【図３】
2010044747.tif 000007
【図４】
2010044747.tif 000008
【外国語明細書】
2010044747000001.pdf