(57)【特許請求の範囲】
【請求項１】
１つ以上のコンピュータプログラムが実行しているコンピュータシステムにおいて、
状態情報の種類を定義する仕様書を受信することと、
前記コンピュータプログラムのうち少なくとも１つと関連したイベントであって前記コンピュータプログラムの関数の実行と関連付けられたイベントが発生したという表示を受信することと、
前記イベントが発生したときの前記コンピュータプログラムの前記実行の状態を記述する状態情報を収集することと、
前記イベントに対応する、前記仕様書に従ってフォーマットされた前記収集された状態情報の要素を含むエントリを生成することと、
前記エントリを記憶することと、
を含む、コンピュータにより実施される方法。
【請求項２】
各エントリが、前記エントリを含むログファイルを生成するデバッガ機構のネイティブフォーマットに従ってフォーマットされたデータの第１部分であってタイムスタンプとデバッガメッセージとのうち少なくとも１つを備えたデータの第１部分を含み、各エントリが、状態情報の種類を定義する前記仕様書に従ってフォーマットされたデータの第２部分を含み、前記仕様書に従ってフォーマットされた前記データが、前記ログファイルを生成するデバッガ機構のネイティブフォーマット以外のフォーマットであり、前記仕様書に従ってフォーマットされた前記データが、前記仕様書により定義されたタグに基づいて各々タグ付けされた前記状態情報の要素を含む、請求項１の方法。
【請求項３】
前記仕様書が、前記関数が実行されたオブジェクトのインスタンスの識別を定義する、請求項１の方法。
【請求項４】
前記仕様書が、前記関数の識別を定義するとともに、前記関数が呼び出された時刻の識別を定義する、請求項１の方法。
【請求項５】
前記仕様書が、前記関数に渡される引数を定義するとともに、前記関数と関連した変数を定義する、請求項４の方法。
【請求項６】
前記仕様書が、前記関数に渡される変数の識別、前記関数の出力、又は前記関数を呼び出した別の関数のうち少なくとも１つを定義する、請求項４の方法。
【請求項７】
前記仕様書が、前記コンピュータプログラムのうち少なくとも１つの実行の可視化を生成する設備と互換性のあるフォーマットを定義する、請求項１の方法。
【請求項８】
前記仕様書がＸＭＬ仕様書である、請求項１の方法。
【請求項９】
前記エントリ内の前記状態情報の種類のうち少なくともいくつかがタグにより識別される、請求項１の方法。
【請求項１０】
前記コンピュータプログラムのうち少なくとも１つの実行中にロギングのレベルを動的に調整することを含み、異なるレベルのロギングが特定されるときには、異なる種類のイベントがログをとられる、請求項１の方法。
【請求項１１】
前記コンピュータプログラムのうち少なくとも１つの実行中にロギングの詳細レベルを動的に調整することを含み、同じ種類のイベントについて、異なる詳細レベルのロギングが特定されるときには、異なる量の情報がログをとられる、請求項１の方法。
【請求項１２】
記録されるべきイベントの閾値を示す第１のコマンドと、各ログエントリに記録されるべき詳細レベルを示す第２のコマンドとを受信することと、
前記示された詳細レベルで、記録されるべきイベントの前記閾値を満足するイベントについてエントリを生成することと、
を含む、請求項１の方法。
【請求項１３】
記憶されるべきイベントの閾値を受信することと、
関数が実行しているときに前記閾値を満足するイベントのエントリを生成することと、
を含む、請求項１の方法。
【請求項１４】
各ログエントリに記録されるべき詳細レベルを受信することと、
関数が実行しているときに前記詳細レベルでイベントのエントリを生成することと、
を含む、請求項１の方法。
【請求項１５】
１つ以上のコンピュータプログラムが実行しているコンピューティングシステムに、
状態情報の種類を定義する仕様書を受信することと、
前記コンピュータプログラムのうち少なくとも１つと関連したイベントであって前記コンピュータプログラムの関数の実行と関連付けられたイベントが発生したという表示を受信することと、
前記イベントが発生したときの前記コンピュータプログラムの前記実行の状態を記述する状態情報を収集することと、
前記イベントに対応する、前記仕様書に従ってフォーマットされた前記収集された状態情報の要素を含むエントリを生成することと、
前記エントリを記憶することと、
を含む動作を行わせる指示を記憶する、コンピュータ読み取り可能な記憶装置。
【請求項１６】
１つ以上のコンピュータプログラムの実行中に動作を行うよう構成されたコンピュータシステムであって、前記動作が、
状態情報の種類を定義する仕様書を受信することと、
前記コンピュータプログラムのうち少なくとも１つと関連したイベントであって前記コンピュータプログラムの関数の実行と関連付けられたイベントが発生したという表示を受信することと、
前記イベントが発生したときの前記コンピュータプログラムの前記実行の状態を記述する状態情報を収集することと、
前記イベントに対応する、前記仕様書に従ってフォーマットされた前記収集された状態情報の要素を含むエントリを生成することと、
前記エントリを記憶することと、
を含む、コンピュータシステム。
【請求項１７】
１つ以上のコンピュータプログラムを実行するコンピュータシステムであって、
状態情報の種類を定義する仕様書を受信する手段と、
前記コンピュータプログラムのうち少なくとも１つと関連したイベントであって前記コンピュータプログラムの関数の実行と関連付けられたイベントが発生したという表示を受信する手段と、
前記イベントが発生したときの前記コンピュータプログラムの前記実行の状態を記述する状態情報を収集する手段と、
前記イベントに対応する、前記仕様書に従ってフォーマットされた前記収集された状態情報の要素を含むエントリを生成する手段と、
前記エントリを記憶する手段と、
を備えた、コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２０１３年３月１５日に提出された仮特許出願第６１／７９８，２４６号及び２０１４年１月１６日に提出された米国特許出願第１４／１５６，９０５号の優先権を主張する。これらの全内容は参照により本明細書に組み込まれる。
【０００２】
本明細書はプログラム実行の記録に関する。
【背景技術】
【０００３】
コンピュータプログラムは、そのコンピュータプログラムを構成する指示をマイクロプロセッサが遂行するときに実行していると言える。コンピュータプログラムは典型的には、プログラムの指示のサブセットを含む関数（プロシージャ又はメソッドと称されることもある）に分類される。このようにして、コンピュータプログラムの関数は、その関数の指示をコンピュータシステムが遂行しているときに実行していると言える。また、コンピュータプログラムの実行は、ログの形で記録されることもある。
【発明の概要】
【０００４】
第１の態様においては、方法は、１つ以上のコンピュータプログラムが実行しているコンピュータシステムにおいて、状態情報の種類を定義する仕様書を受信することと、コンピュータプログラムのうち少なくとも１つと関連したイベントであってコンピュータプログラムの関数の実行と関連付けられたイベントが発生したという表示（指示：indication）を受信することと、イベントが発生したときのコンピュータプログラムの実行の状態を記述する状態情報を収集することと、イベントに対応する、仕様書に従ってフォーマットされた収集された状態情報の要素を含むエントリを生成することと、エントリを記憶することと、を含む。
【０００５】
第１の態様に従った第２の態様においては、各エントリは、エントリを含むログファイルを生成するデバッガ機構のネイティブフォーマットに従ってフォーマットされたデータの第１部分であってタイムスタンプとデバッガメッセージとのうち少なくとも１つを備えたデータの第１部分を含み、各エントリは、状態情報の種類を定義する仕様書に従ってフォーマットされたデータの第２部分を含み、仕様書に従ってフォーマットされたデータは、ログファイルを生成するデバッガ機構のネイティブフォーマット以外のフォーマットであり、仕様書に従ってフォーマットされたデータは、仕様書により定義されたタグに基づいて各々タグ付けされた状態情報の要素を含む。
【０００６】
第１又は第２の態様に従った第３の態様においては、仕様書は、関数が実行されたオブジェクトのインスタンスの識別を定義する。
【０００７】
第１乃至第３の態様のいずれかに従った第４の態様においては、仕様書は、関数の識別を定義するとともに、関数が呼び出された時刻の識別を定義する。
【０００８】
第４の態様に従った第５の態様においては、仕様書は、関数に渡される引数を定義するとともに、関数と関連した変数を定義する。
【０００９】
第４の態様に従った第６の態様においては、仕様書は、関数に渡される変数の識別、関数の出力、又は関数を呼び出した別の関数のうち少なくとも１つを定義する。
【００１０】
第１乃至第６の態様のいずれかに従った第７の態様においては、仕様書は、コンピュータプログラムのうち少なくとも１つの実行の可視化を生成する設備と互換性のあるフォーマットを定義する。
【００１１】
第１乃至第７の態様のいずれかに従った第８の態様においては、仕様書はＸＭＬ仕様書である。
【００１２】
第１乃至第８の態様のいずれかに従った第９の態様においては、エントリ内の状態情報の種類のうち少なくともいくつかはタグにより識別される。
【００１３】
第１乃至第９の態様のいずれかに従った第１０の態様においては、ロギングのレベルはコンピュータプログラムのうち少なくとも１つの実行中に動的に調整され、異なるレベルのロギングが特定されるときには、異なる種類のイベントがログをとられる。
【００１４】
第１乃至第１０の態様のいずれかに従った第１１の態様においては、ロギングの詳細レベルはコンピュータプログラムのうち少なくとも１つの実行中に動的に調整され、同じ種類のイベントについて、異なる詳細レベルのロギングが特定されるときには、異なる量の情報がログをとられる。
【００１５】
第１乃至第１１の態様のいずれかに従った第１２の態様においては、記録されるべきイベントの閾値を示す第１のコマンドと、各ログエントリに記録されるべき詳細レベルを示す第２のコマンドとが受信され、示された詳細レベルで、記録されるべきイベントの閾値を満足するイベントについてエントリが生成される。
【００１６】
第１乃至第１２の態様のいずれかに従った第１３の態様においては、コンピュータプログラムの１つ以上のオブジェクト型を定義するクラスについて、記憶されるべきイベントの閾値が受信され、そのクラスに属する関数が実行しているときにその閾値を満足するイベントのエントリが生成される。
【００１７】
第１乃至第１３の態様のいずれかに従った第１４の態様においては、コンピュータプログラムの１つ以上のオブジェクト型を定義するクラスについて、各ログエントリに記録されるべき詳細レベルが受信され、そのクラスに属する関数が実行しているときにその詳細レベルでイベントのエントリが生成される。
【００１８】
第１５の態様においては、方法は、第１のコンピュータシステムにおいて、第２のコンピュータシステム上での１つ以上のコンピュータプログラムの実行中に発生したイベントに基づいて生成されたエントリを含むログを受信することと、ある期間にわたるコンピュータプログラムのうち少なくとも１つの実行を表す情報を抽出するためにログを解析することと、解析されたログに基づいて、コンピュータプログラムのうち少なくとも１つの実行の可視化を生成することと、を備え、エントリは、各イベントが発生した時刻におけるコンピュータプログラムのうち少なくとも１つの実行の状態を記述する情報を含み、可視化は、コンピュータプログラムのうち少なくとも１つの一部の実行と関連した時間の経過を表す少なくとも１つの図形を含む。
【００１９】
第１５の態様に従った第１６の態様においては、エントリのうち少なくともいくつかが、コンピュータプログラムのうち少なくとも１つの関数に対する呼び出しの実行と関連している。
【００２０】
第１５又は第１６の態様に従った第１７の態様においては、第２のコンピュータシステムでログが生成され、そのログが第２のコンピュータシステムから第１のコンピュータシステムに提供される。
【００２１】
第１５乃至第１７の態様のいずれかに従った第１８の態様においては、可視化はユーザインタフェースにおいて表示される。
【００２２】
第１５乃至第１８の態様のいずれかに従った第１９の態様においては、可視化はコンピュータプログラムのうち少なくとも１つの関数の図形的表示を含む。
【００２３】
第１９の態様に従った第２０の態様においては、関数の図形的表示は関数の実行の時間の図形的表示を含む。
【００２４】
第１９又は第２０の態様に従った第２１の態様においては、図形的表示のうち少なくともいくつかは、ログのエントリに基づいて決定される相互作用的な機能を含む。
【００２５】
第１９、第２０、又は第２１の態様に従った第２２の態様においては、図形的表示は、互いに関連して実行される複数の関数を表す範囲を含む。
【００２６】
第２２の態様に従った第２３の態様においては、複数の関数の各々が、コンピュータプログラムのうち少なくとも１つの実行中に複数の関数のうち別の関数によって呼び出された。
【００２７】
第１５乃至第２３の態様のいずれかに従った第２４の態様においては、可視化はコンピュータプログラムのうち少なくとも１つの状態情報の表形式の表示を含む。
【００２８】
第１５乃至第２４の態様のいずれかに従った第２５の態様においては、ログはＸＭＬ仕様書に従って定義されたフォーマットを含む。
【００２９】
第２５の態様に従った第２６の態様においては、ＸＭＬ仕様書はコンピュータプログラムの状態情報に対応するタグを定義する。
【００３０】
第１５乃至第２６の態様のいずれかに従った第２７の態様においては、可視化は、複数のレイヤと、コンピュータプログラムの実行中に複数のレイヤで発生するイベント間の関係とを示す。
【００３１】
第２７の態様に従った第２８の態様においては、レイヤはユーザ相互作用を表すレイヤを含み、可視化はユーザ相互作用及び他のイベント間の関係を示す。
【００３２】
第１５乃至第２８の態様に従った第２９の態様においては、可視化は、各々がコンピュータプログラムのうち少なくとも１つの一部に対応するレイヤを含み、可視化は、その少なくとも１つコンピュータプログラムが実行されるときに実行される関数の表示を含み、関数の各表示は、関数に対応するコンピュータプログラムの一部に対応するレイヤに配置される。
【００３３】
第１５乃至第２９の態様に従った第３０の態様においては、可視化は、コンピュータプログラムの実行の少なくとも一部の再生を含み、再生は、どの関数が呼び出されたのか、呼び出された関数に渡された値、及びコンピュータプログラムの実行中にユーザにより提供された入力を示す。
【００３４】
これらの態様のうち１つ以上は、単独で又は組み合わせて、システム又は装置として、あるいはコンピュータシステムにより実行されたときにその態様の動作を行う機械読み取り可能な指示を含むコンピュータプログラム製品を記憶しているコンピュータ読み取り可能な記憶装置として、表されてもよい。一例として、コンピュータ読み取り可能な記憶装置は、コンピュータシステムにより実行されたときに第１乃至第３０の態様のいずれかに従った動作を行う機械読み取り可能な指示を含むコンピュータプログラム製品を記憶することができる。別の一例として、１つ以上のプロセッサを備えたコンピュータシステムは、その１つ以上のプロセッサにより実行されたときに第１乃至第３０の態様のうちいずれかに従った動作を行う機械読み取り可能な指示を含むコンピュータプログラム製品を記憶しているコンピュータ読み取り可能な記憶装置を備え得る。
【００３５】
本発明の他の特徴及び利点は、下記の説明及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００３６】
【図１Ａ】コンピュータシステム及び関係するコンポーネントを示す。
【図１Ｂ】アノテーション付きのログファイルのブロック図を示す。
【図１Ｃ】仕様書のブロック図を示す。
【図２】アノテーション付きのログファイルを示す。
【図３Ａ】ＸＭＬ仕様書を示す。
【図３Ｂ】ＸＭＬ仕様書を示す。
【図３Ｃ】ＸＭＬ仕様書を示す。
【図４Ａ】ログファイルの可視化を示す。
【図４Ｂ】ログファイルの可視化を示す。
【図５Ａ】ログファイルの可視化を示す。
【図５Ｂ】ログファイルの可視化を示す。
【図６Ａ】フローチャートを示す。
【図６Ｂ】フローチャートを示す。
【図７】コンピュータシステム及び関係するコンポーネントのブロック図を示す。
【発明を実施するための形態】
【００３７】
プログラムの実行中に生成されるログ（エラーログ又はデバッグログと称されることもある）は、プログラマがプログラムに挿入したデバッギングメッセージを表示するエントリを含み得る。このログは、そのログのエントリが記録されたときにプログラムのどの関数（サブルーチン、メソッド、又はセグメントと称されることもある）が実行していたかについての情報を表示するアノテーションも含み得る。アノテーション付きのログは、そのアノテーションに含まれた情報に基づいてプログラムの実行を再現するために用いることができる。例えば、プログラムの実行を可視化することを希望するユーザには、実行の図形的表示が提示され得る。アノテーション付きのログは、例えば、プログラムの実行を表形式で見るなど、他の目的で用いられてもよい。このようにすれば、コンピュータプログラムの実行と並行的に（例えば同時に）動作するデバッガが用いられる必要がない。したがって、本明細書に記載の技術には、プログラムの実行を分析及びデバッグすることのできる手法の数を増加させるという利点がある。
【００３８】
図１Ａはコンピュータシステム１００及び関係するコンポーネントを示す。コンピュータシステム１００は、別のコンピュータシステム１０４上で実行したコンピュータプログラム１０２の実行を可視化するために用いられ得る。実装形態によっては、コンピュータシステム１０４は、コンピュータプログラム１０２の実行を表す情報を含むアノテーション付きのログファイル１０６を生成する。例えば、アノテーション付きのログファイル１０６は、アノテーション付きのログファイル１０６のエントリが記録されたときに実行していたコンピュータプログラム１０２の関数を識別する情報を含み得る。（エントリのログを記憶するログファイルを記載するが、ログは、データベース又は従来の意味におけるファイル以外のデータ記憶技術の形式をとり得る。）
【００３９】
いくつかの例においては、アノテーション付きのログファイル１０６は、コンピュータプログラム１０２の実行中に生成される。例えば、別のコンピュータシステム１０４は、コンピュータプログラム１０２の実行を行う実行及びロギングモジュール１１６を含んでいてもよい。実行及びロギングモジュール１１６は、コンピュータシステム１０４の１つ以上のマイクロプロセッサに、コンピュータプログラム１０２を構成する指示を実行させてもよい。指示のうちいくつかは、コンピュータプログラム１０２が実行される際にコンピュータシステム１０４にログファイル１０６を生成させるロギング指示１１４を含んでいてもよい。
【００４０】
アノテーション付きのログファイル１０６は、コンピュータシステム１００に提供され得る（例えば、ネットワークを介して送信されるか、又はデータ記憶装置上に提供される）。それに応答して、コンピュータシステム１００は、コンピュータプログラム１０２の実行の可視化１０８を生成することができる。例えば、可視化１０８は、コンピュータシステム１００上で実行するユーザインタフェース上に提示されてもよい。ユーザインタフェースは、アノテーション付きのログファイル１０６を取り込みそのアノテーション付きのログファイルの内容に基づいて可視化１０８を生成する可視化モジュール１１８によって生成されてもよい。このようにすれば、可視化１０８は、コンピュータプログラム１０２が実行している時間とは関係なく提示され得る。例えば、コンピュータプログラム１０２が特定の日に実行し、その後、何週間、何か月、又は何年か後であり得る別の日に、アノテーション付きのログファイル１０６がコンピュータシステム１００に提供されることが可能である。コンピュータシステム１００は、アノテーション付きのログファイルがコンピュータプログラム１０２の実行を再現して可視化１０８における再現の提示を生成するために用いられ得る状態情報を含んでいる場合には、このアノテーション付きのログファイル１０６を用いて可視化１０８を生成することができる。例えば、図３Ａ乃至３Ｃに示す状態情報のうちいくつかは、コンピュータプログラム１０２の実行を再現するために用いることができる。
【００４１】
可視化とは、データのネイティブフォーマット以外の形式でのデータの表示である。例えば、アノテーション付きのログファイル１０６がテキストの形式をとる場合には、可視化は、例えば、表又は図形といった、テキスト以外の要素を含み得る。テキスト以外の要素は、アノテーション付きのログファイル１０６のデータに基づいて生成され得る。いくつかの例においては、可視化において表示される図形は、アノテーション付きのログファイル１０６中のデータのうちいくつかのセマンティックな意味に基づくセマンティックな意味を有し得る。例えば、アノテーション付きのログファイル１０６が、関数が特定の時刻に実行を開始したことを示す場合には、可視化は関数の実行を表す図形的要素を含み得る。可視化は相互作用的な要素を有していてもよい。例えば、可視化は、ユーザインタフェース上に表示されてもよく、ユーザインタフェースのユーザが相互作用することのできる図形的要素を含んでいてもよい。いくつかの例においては、ユーザが（例えば入力装置を用いて）図形的要素と相互作用するとき、図形的要素が変化し、あるいは他の図形的要素が表示され、あるいは図形的要素の他の挙動が発生してもよい。図形的要素はテキストに基づいて生成されてもよく、ユーザインタフェースにおいて図形的要素がどのような挙動をするかはテキストに基づいていてもよい。
【００４２】
いくつかの例においては、可視化１０８とは、シーケンシャルな表示以外のデータの表示である。例えば、アノテーション付きのログファイル１０６は、データのシーケンシャルなエントリ、例えば作成順で記録されたエントリを含んでいてもよい。アノテーション付きのログファイル１０６のエントリは、エントリのテキストを読むことによって、（例えばプログラムを実行した人物、又はプログラムの実行を検討することを希望する別の人物により）直接見られ又は検査され得る。可視化１０８は、シーケンシャルなエントリの表示以外の形式をとり得る。例えば、可視化１０８は、シーケンシャルなエントリに基づく時間の経過を表す視覚的要素を含んでいてもよいが、シーケンシャルなエントリに対応する視覚的要素を何ら含まなくてもよい。
【００４３】
実装形態によっては、コンピュータプログラム１０２を実行するコンピュータシステム１０４は、コンピュータプログラム１０２の実行中に、他のコンピュータシステム１１０と相互作用する。コンピュータプログラム１０２は、他のコンピュータシステム１１０上の利用可能な資源を参照する指示を含んでいてもよい。例えば、コンピュータプログラム１０２はネットワーク上で利用可能なサーバと相互作用するクライアントプログラムであってもよく、例えばサーバ上のデータにアクセスするか、又はサーバ（例えば、コンピュータシステム１１０の１つ）上で関数を実行させる。別の一例として、コンピュータプログラム１０２は分散型のコンピュータプログラムであってもよい。分散型のコンピュータプログラムは、その指示のうちいくつか（例えば関数又は関数の一部）が１つのコンピュータシステム上で実行し、他の指示が他のコンピュータシステム上で実行するように構成される。
【００４４】
実装形態によっては、コンピュータプログラム１０２はオブジェクト指向言語で実装される。オブジェクトとは、関数及びデータ（例えば変数及び定数）の集合である。このようにすると、コンピュータプログラム１０２は、実行されたとき、インスタンス化された（例えばオブジェクトの関数及びデータを特定するクラスから生成された）１つ以上のオブジェクトの形をとり得る。
【００４５】
実装形態によっては、アノテーション付きのログファイル１０６は、コンピュータプログラム１０２の状態情報１１２を含み得る。状態情報１１２は、実行時のコンピュータプログラム１０２についての情報を含み得る。例えば、状態情報１１２は、特定の時点でコンピュータプログラム１０２のどの関数が実行しているのかについての情報を含んでいてもよい。状態情報１１２は、関数に渡される引数（パラメータと称されることもある）、関数に定義されている変数の値、及び関数の出力も含むことができる。また、状態情報１１２は、例えばインスタンス化されたオブジェクト、オブジェクトに定義されている変数、及び他の情報といった、関数のオブジェクトについての情報も含むことができる。状態情報１１２は、状態情報１１２に基づいてコンピュータプログラム１０２の実行の可視化を生成することのできる設備（例えばコンピュータシステム１００）用にフォーマットされ得る。
【００４６】
アノテーション付きのログファイル１０６のフォーマットは、仕様書１２０に基づいて決定され得る。仕様書１２０は、アノテーション付きのログファイルを生成し処理するコンピュータシステム（例えば図示するコンピュータシステム１００，１０４）の間で共有され得る。アノテーション付きのログファイルは、仕様書１２０により定義される共通のフォーマットを有することができるので、仕様書１２０へのアクセスを有するコンピュータシステムはアノテーション付きのログファイル１０６を生成及び処理することができる。
【００４７】
仕様書１２０のコピーを一方のコンピュータシステム１００上の可視化モジュール１１８に利用可能にすることができ、仕様書１２０のコピーを他方のコンピュータシステム１０４上の実行及びロギングモジュール１１６に利用可能にすることができる。これらのモジュールは、仕様書１２０に定義されたフォーマットに基づいてアノテーション付きのログファイル１０６を生成及び処理することができる。
【００４８】
図１Ｂは、アノテーション付きのログファイル１０６の一例を示す。図示する例においては、アノテーション付きのログファイル１０６は、それぞれフィールド１２４ａ，１２４ｂから成るエントリ１２２ａ，１２２ｂを含む。フィールド１２４ａ，１２４ｂはアノテーション付きのログファイル１０６に対応するコンピュータプログラム（例えば図１Ａに示すコンピュータプログラム１０２）の実行を表す情報を含む。フィールド１２４ａ，１２４ｂは、例えばエントリ１２２ａ，１２２ｂのタイムスタンプ１２６ａ，１２６ｂにより示される特定の時刻におけるコンピュータプログラムの状態を記述する状態情報１２２を含み得る。フィールドのうちいくつかは他のフィールド内に含まれ（ネストされ）得る。
【００４９】
図１Ｃは、仕様書１２０の一例を示す。仕様書は、タグ１３２ａ乃至ｄを含むことができ、その各々がアノテーション付きのログファイル１０６（図１Ａ）に記録され得る情報を定義する。例えば、タグ１３２ａ乃至ｄのうち１つ以上は、アノテーション付きのログファイル１０６のエントリ１２２ａ，１２２ｂ（図１Ｂ）に記録される情報を定義してもよい。エントリ１２２ａ，１２２ｂのフィールド１２４ａ，１２４ｂの各々は 特定のタグ１３２ａ乃至ｄに対応していてもよい。このようにすれば、エントリ１２２ａ，１２２ｂの目的が仕様書１２０に従って定義される。実装形態によっては、仕様書１２０は、タグ１３２ａ乃至ｄを説明するコメント１３４ａ乃至ｄも含み、これらは人が読める情報を含む。
【００５０】
図２は、アノテーション付きのログファイル２００の一部を示す。アノテーション付きのログファイル２００は、図１Ａに示すアノテーション付きのログファイル１０６の一例であり得る。このアノテーション付きのログファイル２００は、アノテーション付きのログファイル２００に対応するコンピュータプログラム（例えば図１Ａに示すコンピュータプログラム１０２）の実行を表す情報を含むフィールド２０２を含む。このようにして、アノテーション付きのログファイル２００は（例えばフィールド２０２に）、システム１００がコンピュータプログラムの実行を再現しその実行の可視化を生成することを可能にする状態情報を含んでいてもよい。アノテーション付きのログファイル２００は、エントリ、例えばコンピュータプログラムが実行される際に記録されるエントリ２０４，２０６を含む。いくつかの例においては、エントリ２０４，２０６は、対応するコンピュータプログラムの実行中に発生するイベントに応答して記録される。イベントは、コンピュータプログラムの任意のアクティビティであり得る。例えば、イベントは特定の指示の実行であってもよい。いくつかの例においては、指示、例えばデバッグメッセージをログファイルに書き込む指示が、エントリがアノテーション付きのログファイル２００に書き込まれることを明確に要求する。デバッグメッセージとは、プログラムをデバッグするためにプログラマにより用いられ得る情報を示すメッセージである。いくつかの例においては、指示は、エントリがアノテーション付きのログファイル２００に書き込まれることを明確に要求しない。例えば、コンピュータプログラムは、関数が呼び出されるたび、又は関数が戻る（例えば、実行を終えて呼び出し関数に出力データを提供する）たびに、エントリをアノテーション付きのログファイル２００に書き込むよう構成されていてもよい。関数は各エントリ２０４，２０６のフィールド２０２において識別され得る。
【００５１】
図示する例は、以下に示す擬似コードコンピュータプログラムを表し得る。：
【００５２】
【数１】
0006434957.tif 000002
0006434957.tif 000003
【００５３】
この例において、各エントリ２０４，２０６は、タグを含むフィールド２０２と、タグなし部分２０８とを含む。タグなし部分２０８は、タグを含んでおらず、ログファイルをプレーンテキストとして見ている人物が読めるように、例えばプレーンテキストとして見ることを意図したメッセージを作成するデバッガ機構のネイティブフォーマットに従って、フォーマットされている。例えば、ログメッセージは、特定のイベントの発生時にログファイルに書き込まれるテキスト（例えば、プログラマによって書かれ、例えばログメッセージの書き込みを要求する関数に対する引数としてログファイルにより表されるプログラムのコードに含まれるテキスト）を含んでいてもよい。例えば、ログメッセージは、上記の擬似コードに示されるように、“ｗｒｉｔｅＬｏｇ”関数により表示され得る。いくつかの例においては、ログメッセージはプログラマによって書かれたテキストに基づいていない。例えば、ログメッセージは、例えば関数の実行開始時にプログラムにより生成された、自動生成されたメッセージであり得る。
【００５４】
ログメッセージは、フィールド２０２のうちの１つにおいて、エントリ内のタグ“＜ｌｍ＞”によって表示されて登場することもできる。各エントリ２０４，２０６の他のタグ付けされた部分は他のタグにより表示される。
【００５５】
各エントリ２０４，２０６は、各エントリ２０４，２０６が記録されたときに実行していた関数についての情報も含む。関数名（“＜ｌｍ＞”）は、特定の関数、例えばコンピュータプログラムのオリジナルプログラムコードにおいて用いられていた関数名を識別する。例えば、上記の擬似コードにおいては関数名“ｆｕｎｃｔｉｏｎ１”及び“ｆｕｎｃｔｉｏｎ２”が示されている。各タグの目的は図３Ａ乃至３Ｃに関して後述する。各エントリ２０４，２０６は、タグ付けされたフィールド２０２とタグなし部分２０８との両方を含むので、アノテーション付きのログファイル２００は、人が読めるようにプレーンテキストとして見ることができ、可視化機構への機械読み取り可能な入力としても用いることができる。以下に詳述する。
【００５６】
実装形態によっては、状態情報は、アノテーション付きのログファイルに、スキーマにより定義されたフォーマットで記録され得る。スキーマは、エントリに記録され得る異なる状態情報の種類を定義する。スキーマはこの情報を、例えばコンピュータシステムがスキーマを調べることによって状態情報の一部の種類を識別できるように、機械読み取り可能なように定義する。例えば、あるエントリが記録されるとき、そのエントリは異なる情報から構成され、各情報はスキーマにより定義される状態情報の種類のうち１つに対応する。エントリは、スキーマに定義された状態情報の種類のすべてを含む必要はないが、エントリにおいて状態情報として表された情報の各々は、スキーマにより定義された情報の種類に確かに対応する。
【００５７】
図３Ａ乃至３Ｃは、アノテーション付きのログファイルのフィールドのＸＭＬ仕様書３００（スキーマと称されることもある）を示す。ここでは特定のＸＭＬ仕様書３００が例として用いられるが、これは一例に過ぎず、本明細書に記載の技術を実装するためには任意の他のＸＭＬ仕様書又は他の種類の仕様書が用いられ得る。本例においては、フィールドは図２に示すアノテーション付きのログファイル２００のフィールド２０２であり得る。ＸＭＬ仕様書は、フィールドを特定するタグ３０２と、各タグ３０２の目的を表示するコメント３０４とを含む。一般に、各タグは、状態情報の各要素がタグ付けされ得るように、状態情報の特定の種類に対応する。以下にタグ３０２のうちいくつかを図５Ａ及び５Ｂに関して詳述する。例えば、タグ３０２のうちいくつかは、オブジェクトのインスタンスに特有の情報（例えばオブジェクトインスタンスの変数及びそれらの値）、関数に渡された引数、及び後述する他のフィールドを含むフィールドを表してもよい。ログファイルが生成されると、タグ３０２のうちいくつかに含まれた情報が、システム１００がコンピュータプログラムの実行を再現し（例えば図４Ａ及び４Ｂにおいて以下に示すように）コンピュータプログラムの実行の可視化を生成することを可能にする。
【００５８】
ＸＭＬ仕様書は、異なるプログラミング言語で記述された様々なコンピュータプログラムによりアクセス可能である。ＸＭＬ仕様書を用いてアノテーション付きのログファイル２００のフィールド２０２のフォーマットが定義されるため、アノテーション付きのログファイルと関連したコンピュータプログラムを記述するのに用いられるプログラミング言語とは無関係に、同じログファイルフォーマットが用いられ得る。例えば、第１のプログラミング言語（例えばＪａｖａ）で記述されたコンピュータプログラムと関連したアノテーション付きのログファイルは、ＸＭＬ仕様書３００により定義されたフォーマットを用いることができ、別のプログラミング言語（例えばＦｌｅｘ）で記述された別のコンピュータプログラムと関連した別のアノテーション付きのログファイルは、ＸＭＬ仕様書３００により定義された同一のフォーマットを用いることができる。いくつかの例においてはＸＭＬ以外の言語を用いることが可能であり、例えば異なるマークアップ言語が用いられ得る。一般に、任意の手法を用いてデータ集合体の異なるフィールドを区切り識別することができる。
【００５９】
図３Ａ乃至３Ｃには数種類のタグが示されている。いくつかを図５Ａ及び５Ｂに関してより詳細に説明する。タグ＜ｕｉ＞は、特定のログエントリの一意識別子を特定する。タグ＜ｔｙｐｅ＞は、ログエントリにより表されるイベントの種類（発生と称されることもある）を識別する。タグ＜ｓｍ＞はエントリと関連した層を特定する。タグ＜ｌｍ＞は、ログエントリを記述するテキストの一部、例えばログエントリを記録させたイベントを示す。タグ＜ｃｏ＞は、エントリが記録されたときに実行していた関数を呼び出したオブジェクトを示す。タグ＜ｃｉ＞は、呼び出し元オブジェクトの（例えばオブジェクト名以外の）一意識別子である。タグ＜ｓｔ＞及び＜ｅｔ＞はログエントリと関連したイベント（例えば関数の実行）の開始時刻及び終了時刻を示す。タグ＜ｍｄ＞は、最長継続時間、例えば関数が実行可能な時間の最大量を示す。タグ＜ｌｉ＞及び＜ｄｌ＞は、ログレベル及びログの詳細レベルを示し得る。
【００６０】
仕様書は、＜ｉｎ＞タグの下に詳細な情報を含むことができる。例えばその情報は、関連したイベントの記述（＜ｄｓ＞）、実行している関数の名前（＜ｆｎ＞）、ならびに関数に渡されるパラメータ及びそのパラメータの値を示すタグ（＜ｐｎ＞，＜ｐｖ＞）を含み得る。パラメータはオブジェクト又は関数のインスタンス（＜ｉｓ＞と標示）に特有であり得る。他のタグは、イベントがいつ開始し（＜ｂｉ＞）いつ終了した（＜ｅｉ＞）のかに関するパラメータ及び値を表示してもよい。図４Ａ及び４Ｂは、多数の関数を含むコンピュータプログラムの実行の可視化４００を示す。この可視化は、経時的な実行の進行を明示するものであるため、タイムライン可視化と呼ばれることもある。ここに示す可視化４００は単一のコンピュータプログラムを表すものであるが、可視化は例えば１つよりも多くのログファイルに基づいて、複数のコンピュータプログラムの実行を表すためにも用いられ得る。例えば、可視化４００は図１Ａに示す可視化１０８の一例であり得る。可視化４００はコンピュータシステム（例えば図１Ａに示すコンピュータシステム１００）のユーザインタフェース上に表示され得る。この可視化は、コンピュータプログラムの第１及び第２の関数の経時的な実行を表す。第１及び第２の関数の実行は、各バーの長さが実行時間に比例するように、バーの形で表されている。
【００６１】
バーは、レイヤ４０６，４０８のような、層と称されることもある１つ以上のレイヤに配置され得る。例えば、レイヤ４０６，４０８は、可視化によって表されるコンピュータプログラムの部分又はレイヤに対応し得る。実装形態によっては、異なるレイヤ４０６，４０８は、異なるコンピュータシステム（例えば図１Ａに示すコンピュータシステム１０４，１１０）上で実行する異なるコンポーネントを表す。いくつかの例においては、レイヤ４０６，４０８は、コンピュータプログラムにより行われる作業の論理的な区分を表す。例えば、コンピュータプログラムは、ユーザインタフェースレイヤ、クライアント‐サーバ相互作用レイヤ、及びコンピュータプログラムが分割される他のレイヤなどのレイヤを有することができる。いくつかの例においては、レイヤは可視化又はデバッガなどの関連する関数のためにプログラマによって定義され、プログラムの実行という文脈においては他の意味を持つ必要はない。コンピュータプログラムの各レイヤは、可視化４００において、ユーザインタフェースレイヤ及びクライアント‐サーバ相互作用レイヤなどの対応するレイヤを有することができる。このようにすれば、可視化４００はどの関数がどのレイヤと関連しているのかを表示することができる。例えば、ある関数は、コンピュータプログラムのユーザインタフェースと関連していてもよく、ユーザインタフェース要素に関する指示を含み、その関数の実行を表すバー４０２がユーザインタフェースレイヤ４０６に示され得る。別の関数は、コンピュータプログラムのクライアント‐サーバ相互作用と関連していてもよく、ネットワーク通信に関する指示を含み、その関数の実行を表すバー４０４がクライアント‐サーバ相互作用レイヤ４０８に示され得る。実装形態によっては、可視化４００を生成するために用いられるログファイルが各関数と関連した１つのレイヤを表示し得る。
【００６２】
可視化４００は、プログラム開発者が、コンピュータプログラムがなぜエラーを発生するのか、あるいはなぜ遅いのか又は無反応なのかといった、コンピュータプログラムの実行のよりよい理解を得るのに役立ち得る。例えば、可視化４００が、コンピュータシステムが遅いか又は無反応であるかどうかを判断するために用いられている場合には、可視化４００は、ユーザインタフェースにおいてボタンがクリックされた後、結果が返ってくるのに２０秒かかることを示してもよく、その２０秒の間にいくつかのプロセスが異なるレイヤで実行される。これにより、可視化４００を見ているユーザは、例えばユーザ側ではなくクライアント側でといった具合に、どこで問題が発生し得たのかを識別することができる。これに対し、ログファイルを見ているユーザには、この情報は見えないであろう。例えば、ボタンがクリックされてから結果が戻るまでの２０秒の間に、ログファイルには何千ものエントリ（その各々は多くの行のテキストであり得る）があり得る。そのような何千行ものテキストのマニュアル検査によって何が問題であるのかを判断することは困難であるかもしれない。
【００６３】
並行的に実行した関数を表すバー４１１，４１３は、ここでは垂線４０５として表されている同一の時点に重複するものとして表示されている。同一のレイヤと関連した、並行的に実行するいくつかの関数又はコンポーネントがあってもよい。これは、単一のレイヤ内に互いに平行に延びるバー又はセグメントにより表される。
【００６４】
図４Ａに示されるように、可視化４００を見ているユーザは、バーのうち１つ、例えばバー４０２の上に（例えばマウス、トラックパッド、又はタッチスクリーンなどの入力装置の）カーソルを合わせ得る。すると、可視化４００には、バー４０２により表される関数の識別４１０が表示される。識別４１０は、バー４０２により表される関数を呼び出した別の関数、バー４０２により表される関数に提供される引数、バー４０２により表される関数の出力値、及びバー４０２により表される関数についての他の情報などの（例えば図１Ａに示す状態情報１１２から得られた）状態情報を含み得る。
【００６５】
図４Ｂに示すように、可視化４００は範囲インジケータ４１２，４１４を含み、その各々が可視化４００に示される関数の間に複数の関数の範囲が存在することを表示する。一般に、範囲とは実行した関数の集合である。いくつかの例においては、ある範囲の関数は、各々マーカにより識別される。例えば、関数を定義しているプログラムコードは、その範囲の各関数と関連したラベル又は他の識別子、あるいはその範囲の関数を含むオブジェクトクラスを含み得る。実装形態によっては、コンピュータプログラム内の範囲は、プログラマによって決定されるように、範囲の始まりの“ｂｅｇｉｎＳｐａｎ（）”関数呼び出しと範囲の終わりの“ｅｎｄＳｐａｎ（）”関数呼び出しとを表示することによって、コンピュータプログラムのプログラムコード内にマークされる。
【００６６】
いくつかの例においては、範囲とは、その範囲内のすべての関数が完了するまで他の関数に実行させる一連の関数である。実装形態によっては、ある範囲のいくつかの関数は、その範囲の他の関数を直接呼び出す。例えば、いくつかの関数は、他の関数のうちいくつかを呼び出す指示を含み、例えば引数を他の関数に渡してもよい。これは、同期範囲又は関数範囲と称されることもある。実装形態によっては、範囲のいくつかの関数は互いを直接呼び出さない。例えば、コンピュータプログラムの第１のスレッドの一部として実行している関数のうち１つは、第２のスレッドに対してリモートプロシージャコールを行い、第２のスレッドが呼び出された動作を行っている間、実行を継続してもよい。そして、リモートプロシージャコールが返されると、それに応じて別の関数が第１のスレッド又は第２のスレッドから呼び出され得る。様々なスレッドの関数はすべて、同一の範囲の一部であり得る。これは非同期範囲と称されることもある。ある範囲は、別の範囲を含むことができ、あるいは別の範囲と重複することができる。例えば、第２の範囲に属するものとしてマークされた関数が第１の範囲に属するものとしてマークされた関数により呼び出される場合には、第２の範囲の始まりは第１の範囲が終わる前に発生し得る。いくつかの例においては、非同期範囲は１つ以上の関数範囲を含んでいてもよい。例えば、非同期アクティビティ“Ａ”は範囲“Ｓ１”と関連付けられ得る。この非同期アクティビティ“Ａ”は、時刻Ｔ１で開始し、時刻Ｔ１＋１０００で終了する。時刻Ｔ１＋２００で、範囲“Ｓ２”と関連したアクティビティ“Ｂ”（これは同期であり得る）が開始する。これは時刻Ｔ１＋１３００まで継続する。このようにして、同期範囲“Ｓ２”は非同期範囲“Ｓ１”と重複する。
【００６７】
ユーザは、範囲インジケータのうち１つ、例えば４１２を起動（例えば入力装置を用いてクリック、選択、強調又はその他表示）して、範囲４１８を表示させることができる。範囲４１８は、複数の関数を含むとともに、関数の間でのデータの流れを表す線４２０も含む。例えば、第１の関数は、データを処理して、そのデータのうちいくつかを関数に対する引数として第２の関数に渡すことができ、その後第２の関数がデータをさらに処理できる、といった具合である。範囲４１８の表示は、相互作用する複数の関数の実行を調べるために用いられ得る。範囲４１８が表示されるときには、可視化４００には、その範囲についての情報４２２も表示され得る。例えば、情報４２２は、その範囲において最後に実行する関数の出力など、範囲４１８に関する状態情報を含み得る。
【００６８】
実装形態によっては、可視化４００はアニメーションとして表示され得る。例えば、可視化４００は、対応するコンピュータプログラムが実行された時間を表す期間にわたって関数４０２，４０４を表示することによりアニメ化され得る。関数４０２，４０４は、可視化４００においては、対応するコンピュータプログラムが当初実行されたときに実行された順序で現れ得る。また、関数４０２，４０４を表すバーは、関数が実行を完了するのに要した時間の量を表すために、大きくなり得る。この種のアニメーションは、コンピュータプログラムの実行の再生と称されることもある。
【００６９】
可視化４００の利点は、数百又は数千行を有する大きなログファイルに含まれる情報を単一のグラフで表すことが可能であり、プログラム開発者がコンピュータプログラムの実行のエラー又はボトルネックを迅速に識別できるということである。この技術は、様々な機能をシステムのどの部分が実行しているのかの迅速な可視化も提供する。図５Ａは、コンピュータプログラムの実行の表形式の可視化５００を示す。表形式の可視化は、図４Ａ乃至４Ｃに示すタイムライン可視化とは別の種類の可視化である。例えば、表形式の可視化５００は図１Ａに示す可視化１０８の一例であり得る。表形式の可視化５００はコンピュータシステム（例えば図１Ａに示すコンピュータシステム１００）のユーザインタフェース上に表示され得る。表形式の可視化５００は、エントリ、例えば図２に示すログファイル２００のエントリに対応するエントリ５０２，５０４を含む。適用可能な各エントリについて、表形式の可視化５００は、エントリのフィールド、例えば図２に示すフィールド２０２を表す列を含む。メッセージ（message）５１０は、コンピュータプログラムの指示により表示されたメッセージ、例えば、プログラムを記述したプログラマによって記述されたデバッギングメッセージを表す。継続期間（duration）５１２は、エントリと関連した指示が実行に要した時間の量を表す。次回呼び出しまでの時間（time to next call）５１４は、ある関数において、その関数の実行開始時刻と別の関数が呼び出された時刻との間に経過した時間の量を示す（例えば、他の関数を呼び出しその関数に引数を渡す関数の指示において）。言い換えれば、次回呼び出しまでの時間は、このエントリと次のエントリとの間でどのくらいの時間が経過したかを示す。終了後の時間（time after exit）５１６は、ある関数の終了と次の関数の開始との間でどのくらいの時間が経過したかを示す。言い換えれば、終了後の時間は、あるエントリの終了と次のエントリの開始との間のトラックされていない時間の量を示す。例えばこれは、ロギングを追加される必要のある機能がどこにあるのかを解明するために用いられ得る。例えば、終了後の時間５１６は、ログファイルに記録された状態情報に隙間があるかどうかを判断するために用いられ得る。タイムスタンプ（timestamp）５１８は、エントリ５０２，５０４がログファイルに記録された時刻を示す。例えば、エントリ５０２，５０４を記録させたイベントがある関数に対する呼び出しである場合には、そのタイムスタンプはその関数が呼び出された時刻に対応し得る。
【００７０】
表形式の可視化５００は、選択されたエントリ５０２についての情報を含む補助ウィンドウ枠５２０を備える。補助ウィンドウ枠５２０は、列フォーマットでは示されていない追加的な情報を表示する。メッセージ（message）５２２は、上に示された選択されたエントリ５０２のメッセージ５１０の完全版であり、そのデータが列フォーマットに収まらない場合（例えばメッセージが長すぎる場合）にメッセージを表すデータを見るために用いられ得る。説明（description）５２４は、エントリ５０２を生成させたイベント（例えばコンピュータプログラムの実行中に発生するイベント）の説明である。開始時刻（start time）５２６はエントリと関連した指示が実行を開始した開始時刻を示し、終了時刻（end time）５２８はエントリと関連した指示が実行を終了した時刻を示す。
【００７１】
ログレベル（log level）５３０は、エントリ５０２が記録される閾値を示す。多くの種類のデバッガシステムにおいて用いられるログレベルのいくつかの例は、“ＤＥＢＵＧ”、“ＩＮＦＯ”、“ＷＡＲＮ”、“ＥＲＲＯＲ”、及び“ＦＡＴＡＬ”である。例えば、“ＦＡＴＡＬ”のログレベルが選択されると、致命的なエラーを表すイベントによりトリガされたエントリのみがログをとられることになる。任意の種類のログレベルがここに説明する技術とともに用いられ得るものであり、ログレベルの種類はこれらの例に限定されない。実装形態によっては、図１Ａに示すアノテーション付きのログファイル１０６を生成するコンピュータシステム１０４が、コンピュータシステム１０４のユーザがアノテーション付きのログファイル１０６のログレベル５３０を特定できるようにしてもよい。
【００７２】
いくつかの例においては、いくつかの種類のエントリが、１つのログレベル５３０のログファイルには含まれるが、一方で、その同じ種類のエントリが、別のログレベル５３０のログファイルには含まれないかもしれない。例えば、コンピュータプログラムの実行中に発生するある種のイベントはエントリを１つのログレベル５３０（例えば“ｄｅｂｕｇ”）では記録させ得るが、その同じイベントはエントリを別のログレベル５３０（例えば“ｄｅｆａｕｌｔ”）では記録させないかもしれない。
【００７３】
詳細レベル（detail level）５３２は、エントリ５０２が記録された詳細レベルを示す。例えば、図１Ａに示すアノテーション付きのログファイル１０６を生成するコンピュータシステム１０４は、コンピュータシステム１０４のユーザがアノテーション付きのログファイル１０６の詳細レベルを特定できるようにしてもよい。いくつかの例においては、詳細レベルは、ログファイルに含まれているフィールドの数に対応する。例えば、ある詳細レベル５３２の下で動作するログファイルのエントリは、ＸＭＬ仕様書３００（図３Ａ乃至３Ｃ）により規定された可能なフィールドのサブセットを含み得るが、別の詳細レベル５３２の下で動作するログファイルのエントリは、ＸＭＬ仕様書３００により規定された可能なフィールドの異なるサブセットを含み得る。ある詳細レベル５３２（例えば“ｄｅｔａｉｌｅｄ”）ではより多数のフィールドが含まれ得るが、別の詳細レベル５３２（例えば“ｔｒｉｖｉａｌ”）ではより少数のフィールドが含まれ得る。
【００７４】
実装形態によっては、プログラムの各クラスが独自のログレベル及び詳細レベルを有することができる。クラスとは、オブジェクト指向プログラムのオブジェクト型の定義である。いくつかの例においては、設定ファイルがプログラムのいくつか又はすべてのクラスのログレベル及び詳細レベルを表示することができる。例えば、設定ファイルはプログラムと関連付けられ得る。このようにすれば、特定のクラスのログレベル又は詳細レベルが、プログラムのプログラムコードを修正することなく変更され得る。
【００７５】
いくつかの例においては、エントリ５０２を記録させた関数を含むオブジェクトの型は既知である。これは呼び出し元種類（caller type）５３４により表示され得る。
【００７６】
種類（type）５３６は、エントリ５０２を記録させたイベントの種類を示す。例えば、いくつかの種類は、“ｃｒｅａｔｉｏｎ”（例えばオブジェクトの作成）、“ｓｔａｃｋ”（例えば関数入（enter）／出（exit）メッセージなどの関数スタックのエントリ）、及び“ｄｅｆａｕｌｔ”（他のイベント）を含み得る。
【００７７】
関数スタックとは、どのネストされた関数呼び出しが行われ記録されたかの階層的な記録である。例えば、コンピュータプログラムは以下の３つの関数であり得る。：
【００７８】
【数２】
0006434957.tif 000004
【００７９】
この例においては、関数ａが関数ｂを呼び出し、関数ｂが関数ｃを呼び出す。関数ｃのｌｏｇＷｉｔｈＦｕｎｃｔｉｏｎＳｔａｃｋ関数呼び出しにより作成されるログエントリは、関数ａ−＞関数ｂ−＞関数ｃの関数スタックを示すであろう。実装形態によっては、関数スタックは、関数範囲と呼ばれる範囲の種類の形で表され得る。
【００８０】
層（stratum）５３８は、エントリ５０２を記録させた関数と関連したレイヤを示す。例えば、そのレイヤは、図４Ａに示すレイヤ（例えば４０６，４０８）のうち１つであり得る。いくつかのレイヤ種類は、“Ｕｓｅｒ  Ｉｎｔｅｒａｃｔｉｏｎ”（例えばユーザインタフェース項目）、“Ｃｌｉｅｎｔ−ｓｉｄｅ”（例えば、図１Ａに示すコンピュータシステム１０４のようなクライアントにおいて実行する指示）、“Ｃｌｉｅｎｔ−ｓｅｒｖｅｒ”（例えば、クライアントとサーバとの間での相互作用を処理する指示）、及び“Ｓｅｒｖｅｒ−ｓｉｄｅ”（例えば、例えば図１Ａに示すコンピュータシステム１１０のうちの１つのようなサーバにおいて実行する指示）を含み得る。
【００８１】
呼び出し元識別（caller identification）５４０は、エントリ５０２が記録されたときに実行していた関数を呼び出した特定のオブジェクトを識別するストリングである。例えば、いずれかのオブジェクトがコンピュータプログラムの実行の一部としてインスタンス化されるとき、そのオブジェクトには一意識別子が割り当てられてもよい。
【００８２】
範囲（span）５４２は、このエントリ５０２が属する範囲、例えばエントリ５０２が記録されたときに実行していた関数を含む範囲を示す。例えば、範囲は、図４Ｂに示す範囲４１８であり得る。
【００８３】
関数範囲（function span）５４４は、このエントリ５０２が属する関数範囲を示す。関数範囲については図４Ｂに関して上述した。例えば、関数範囲はエントリ５０２の生成をもたらした関数スタック（例えば一連の関数呼び出し）であってもよく、特定の関数などの特定の時点で開始する。
【００８４】
エントリ５０２は、アノテーション付きのログファイルに書き込まれるとき、固有のＩＤ（unique ID）５４６を割り当てられ得る。
【００８５】
図５Ｂは、補助ウィンドウ枠５２０が別のエントリ５０４に関する情報を表示する、表形式の可視化５００の別の図を示す。ここでは、補助ウィンドウ枠５２０は、先のエントリ５０２については示されなかったこのエントリ５０４についてのいくつかの追加的な情報を示す。インスタンス情報（instance information）５４５は、オブジェクトのインスタンスについての情報を示す。例えば、オブジェクトは、例えばエントリ５０４が記録されたときに実行していた関数などの関数を呼び出したオブジェクトであってもよい。インスタンス情報は、オブジェクトの変数及びその変数の値など、オブジェクトについての状態情報を含み得る。
【００８６】
パラメータ（parameters）５４８は、エントリ５０４が記録されたときに実行していた関数に提供される引数である。例えば、引数は、関数が呼び出されたときに提供されていてもよい。
【００８７】
表形式の可視化によれば、可視化を見ている人物は、プログラムの実行中に記録されたいずれか又はすべての状態情報を見ることが可能になる。表形式の可視化は図形的な可視化よりも包括的であるが、テキストエディタ又は他のテキストベースのビューアのログファイルを見るよりも読むのが容易である。
【００８８】
図６Ａはプロセス６００のフローチャートを示す。例えば、プロセス６００は、図１Ａに示すコンピュータシステム１０４によって、例えばそのコンピュータシステム上でコンピュータプログラムが実行している間に、行われ得る。
【００８９】
状態情報の種類を定義する仕様書が受信される（６０１）。例えば、仕様書は、図３Ａ乃至３Ｃに示すように、状態情報の種類を識別するタグを含み得る。
【００９０】
仕様書は、とりわけ、ａ）関数が実行されたオブジェクトのインスタンスの識別、ｂ）関数の識別、ｃ）関数が呼び出された時刻の識別、ｄ）関数に渡された引数及び関数と関連した変数、ｅ）関数に渡された変数の識別、ｆ）関数の出力、ｇ）関数を呼び出した別の関数、又は他の種類の情報を定義し得る。仕様書がこの情報を定義すると言うときには、仕様書がログエントリ内に情報の各種類を識別するために用いられ得る情報を含むことを意味する。
【００９１】
いくつかの例においては、仕様書のフォーマットは、コンピュータプログラムのうち少なくとも１つ（例えば図１Ａに示す可視化１０８のような可視化を生成するプログラム）の実行の可視化を生成する設備と互換性のあるフォーマットである。例えば、可視化設備は、仕様書に従ってフォーマットされたログを解析するために仕様書を用い、解析された情報から仕様書を生成することができる。
【００９２】
コンピュータプログラムのうち少なくとも１つと関連したイベントが発生したという表示（指示：indication）が受信される（６０２）。イベントはコンピュータプログラムの関数の実行と関連付けられている。例えば、イベントは、コンピュータプログラム内の関数への呼び出しであり得る。
【００９３】
イベントが発生したときのコンピュータプログラムの実行の状態を記述する状態情報が収集される（６０３）。例えば、状態情報はコンピュータプログラムの現在の状態又はコンピュータシステムの現在の状態を示し得るものであり、あるいは他の状態情報の種類であり得る。
【００９４】
イベントに対応するエントリが生成される（６０４）。このエントリは収集された状態情報の要素を含み、この状態情報の要素は仕様書に従ってフォーマットされる。
【００９５】
エントリはログレベル及び詳細レベルに基づいて記録され得る。例えば、異なるレベルのロギングが特定されるときには、異なる種類のイベントがログをとられる。エントリがログレベルに一致しない場合には、そのエントリは記録されない。また、同じ種類のイベントについて、異なる詳細レベルのロギングが特定されるときには、異なる量の情報がログをとられる。詳細レベルは、エントリが生成されるときにどのくらいの情報が含まれるかを決定する。いくつかの例においては、ログレベル又は詳細レベル、あるいはその両方が、コンピュータプログラムの実行中に動的に調整され得る。例えば、コンピュータプログラムは、ユーザがユーザインタフェース制御を用いてログレベル５３０（図５Ａ）を設定することを可能にしてもよい。ユーザはコンピュータプログラムの異なるセグメント（又はレイヤ）について異なるログレベルを設定してもよい。動的に調整するとは、コンピュータプログラムが実行されるときに、ロギングのレベルが、例えばどの関数が実行しているか、又はどの種類のオブジェクトから関数が実行するかに応じて、自動的に調整されることを意味する。
【００９６】
いくつかの例においては、ログレベル又は詳細レベル、あるいはその両方が、関数が属するオブジェクト型を定義するクラスと関連付けられている。オブジェクト指向プログラムにおけるオブジェクトは一般に、あらゆるオブジェクトがクラスのインスタンスとなるように、クラスに従って定義される。例えば、エントリが生成されるとき、あるオブジェクトと関連したログレベル及び／又は詳細レベルは、そのオブジェクトと関連したイベント（例えば関数呼び出しなどのイベント）に応答して生成された任意のエントリで使用するログレベル及び／又は詳細レベルを決定するために用いられる。
【００９７】
エントリが記憶される（６０５）。エントリは、ログファイル、又はログエントリのデータベースのような別の種類のログに記憶され得る。例えば、ログファイルは、図１Ａに示すアノテーション付きのログファイル１０６であり得る。
【００９８】
図６Ｂはプロセス６１０のフローチャートを示す。例えば、プロセス６１０は図１Ａに示すコンピュータシステム１００によって行われ得る。
【００９９】
第２のコンピュータシステム上での１つ以上のコンピュータプログラムの実行中に発生したイベントに基づいて生成されたエントリを含むログが受信される（６１２）。このログは第２のコンピュータシステムから受信され得るもので、エントリは各イベントが発生した時刻におけるコンピュータプログラムのうち少なくとも１つの実行の状態を記述するコンピュータプログラムの状態情報を含む。エントリのうち少なくともいくつかは、コンピュータプログラムのうち少なくとも１つの関数に対する呼び出しの実行と関連付けられ得る。
【０１００】
ある期間にわたるコンピュータプログラムのうち少なくとも１つの実行を表す情報を抽出するために、ログが解析される（６１３）。タグ付けされた状態情報は、タグを定義する仕様書に基づいて解釈され得る。
【０１０１】
コンピュータプログラムの実行の可視化がログに基づいて生成される（６１４）。実装形態によっては、プロセス６００はユーザインタフェースにおいて可視化を表示することを含む。
【０１０２】
いくつかの例においては、可視化はコンピュータプログラムの関数の図形的表示を含む。関数の図形的表示は関数の実行の時間の図形的表示、例えば実行の時間を表す長さを有するバーを含み得る。図形的表示のうち少なくともいくつかは、ログファイルのエントリに基づいて決定される相互作用的な機能を含んでもよい。
【０１０３】
いくつかの例においては、可視化は、コンピュータプログラムの状態情報の表形式の表示を含む。いくつかの例においては、ログファイルは、ＸＭＬ仕様書、例えばコンピュータプログラムの状態情報に対応するタグを定義するＸＭＬ仕様書に従って定義されたフォーマットを有するフィールドを含む。
【０１０４】
いくつかの例においては、図形的表示は、互いに関連して実行される複数の関数を表す範囲を含み、例えば、その複数の関数の各々は、コンピュータプログラムの実行中にその複数の関数のうちの別の関数によって呼び出されたものである。
【０１０５】
いくつかの例においては、可視化は、複数のレイヤと、コンピュータプログラムの実行中に複数のレイヤで発生するイベント間の関係とを示す。例えば、レイヤはユーザ相互作用を表すレイヤを含み得るものであり、可視化はユーザ相互作用及び他のイベント（例えばクライアント‐サーバイベント）間の関係を示す。例えば、ユーザインタフェースレイヤで実行する関数（例えばユーザインタフェースにおけるボタンの押下のようなユーザインタフェースイベントに応答する関数）は、関数に、クライアント‐サーバレイヤにおいて実行させてもよい（例えば、ボタンの押下に応答してクライアントとサーバとの間のネットワーク通信を開始する関数）。
【０１０６】
上述のプログラム実行を記録する技術は、コンピュータ、例えば図１Ａに示すコンピュータシステム１００又はコンピュータシステム１０４上で実行するためのソフトウェアを用いて実装され得る。例えば、ソフトウェアは、各々が少なくとも１つのプロセッサ、少なくとも１つのデータ記憶システム（揮発性及び不揮発性メモリ及び／又は記憶要素など）、少なくとも１つの入力装置又はポート、及び少なくとも１つの出力装置又はポートを備えた１つ以上のプログラムされた又はプログラム可能なコンピュータシステム（分散型、クライアント／サーバ、又は格子など、様々なアーキテクチャであり得る）上で実行する１つ以上のコンピュータプログラムにおけるプロシージャを形成する。ソフトウェアは、より大きなプログラムの１つ以上のモジュール又はコンポーネント又はレイヤ、例えば計算グラフの設計及び構成に関するサービスを提供するプログラムを形成し得る。グラフのノード及び要素は、コンピュータ読み取り可能な媒体に記憶されたデータ構造又はデータリポジトリに記憶されたデータモデルに準拠する他の組織的なデータとして実装され得る。
【０１０７】
ソフトウェアは、記憶装置又はＣＤ−ＲＯＭなどの汎用又は専用プログラム可能なコンピュータにより読み取り可能な媒体上に提供されてもよく、あるいはネットワークの通信媒体を介してそのソフトウェアが実行されるコンピュータへ配信（伝播信号中に符号化）されてもよい。機能のすべてが専用コンピュータ上で、又はコプロセッサなどの専用ハードウェアを用いて行われてもよい。ソフトウェアは、分散的に実装されて、ソフトウェアにより特定される計算の異なる部分が異なるコンピュータによって行われてもよい。そのようなコンピュータプログラムの各々は、好適には汎用又は専用のプログラム可能なコンピュータによって読み取り可能な記憶媒体又は装置（例えばソリッドステートメモリ又は媒体、あるいは磁気又は光学媒体）に記憶され又はダウンロードされて、本明細書に記載のプロシージャを行うべくこれらの記憶媒体又は装置がコンピュータシステムにより読み取られるときに、コンピュータを構成し動作させる。本発明のシステムは、コンピュータプログラムによって構成されたコンピュータ読み取り可能な記憶媒体として実装されるものと考えられてもよく、ここで、そのように構成された記憶媒体は、コンピュータシステムを、特定の所定の手法で動作させて、本明細書に記載の機能を行わせる。
【０１０８】
本発明の多数の実施形態を説明した。しかし、本発明の精神及び範囲を逸脱することなく様々な変形が行われ得ることは理解されるであろう。例えば、上述したステップのうちいくつかは順序に非依存であってもよく、したがって記載されたものとは異なる順序で行われ得る。例えば、ログファイルを生成するコンピュータは、ログファイルの可視化又はコンピュータプログラムの実行の可視化を表示するためにも用いられ得る。例えば、コンピュータ１００及び１０４は同一のコンピュータであり得る。図７に示すように、コンピュータシステム７００は実行及びロギングモジュール７０２及び可視化モジュール７０４を備える。実行及びロギングモジュール７０２は、コンピュータプログラム７０６の関数が実行している間にデータをログファイルに書き込ませるログ指示７０８を含むコンピュータプログラム７０６（例えばプログラムコードからコンパイルされたプログラム）を受信する。実行及びロギングモジュール７０２は、コンピュータプログラム７０６の実行に基づいてアノテーション付きのログファイル７１０を出力する。アノテーション付きのログファイル７１０は可視化モジュール７０４に提供されることが可能であり、これが可視化７１２をコンピュータシステム７００上で表示する（例えば、コンピュータモニタのような出力装置上でコンピュータシステムのユーザに対して可視化を表示する）。このようにすれば、コンピュータプログラムの可視化は、プログラムが実行しているのと同一のコンピュータシステム上で表示されることができる。可視化は実時間で表示され得る。例えば、ログエントリがアノテーション付きのログファイル７１０に現れるとすぐに、可視化７１２はコンピュータシステム７００の出力装置上で更新され得る。
【０１０９】
上述の記載は説明を意図したものであり、添付の特許請求の範囲によって規定される本発明の範囲を限定することを意図したものではないことが理解されるべきである。例えば、上述した多数の機能ステップは、全体の処理に実質的に影響を及ぼすことなく、異なる順序で実行され得る。他の実施形態は下記の特許請求の範囲内にある。  
以下に本願の出願当初の特許請求の範囲の内容を付記する。 
［１］
１つ以上のコンピュータプログラムが実行しているコンピュータシステムにおいて、
状態情報の種類を定義する仕様書を受信することと、
前記コンピュータプログラムのうち少なくとも１つと関連したイベントであって前記コンピュータプログラムの関数の実行と関連付けられたイベントが発生したという表示を受信することと、
前記イベントが発生したときの前記コンピュータプログラムの前記実行の状態を記述する状態情報を収集することと、
前記イベントに対応する、前記仕様書に従ってフォーマットされた前記収集された状態情報の要素を含むエントリを生成することと、
前記エントリを記憶することと、
を含む、コンピュータにより実施される方法。
［２］
各エントリが、前記エントリを含むログファイルを生成するデバッガ機構のネイティブフォーマットに従ってフォーマットされたデータの第１部分であってタイムスタンプとデバッガメッセージとのうち少なくとも１つを備えたデータの第１部分を含み、各エントリが、状態情報の種類を定義する前記仕様書に従ってフォーマットされたデータの第２部分を含み、前記仕様書に従ってフォーマットされた前記データが、前記ログファイルを生成するデバッガ機構のネイティブフォーマット以外のフォーマットであり、前記仕様書に従ってフォーマットされた前記データが、前記仕様書により定義されたタグに基づいて各々タグ付けされた前記状態情報の要素を含む、上記１の方法。
［３］
前記仕様書が、前記関数が実行されたオブジェクトのインスタンスの識別を定義する、上記１の方法。
［４］
前記仕様書が、前記関数の識別を定義するとともに、前記関数が呼び出された時刻の識別を定義する、上記１の方法。
［５］
前記仕様書が、前記関数に渡される引数を定義するとともに、前記関数と関連した変数を定義する、上記４の方法。
［６］
前記仕様書が、前記関数に渡される変数の識別、前記関数の出力、又は前記関数を呼び出した別の関数のうち少なくとも１つを定義する、上記４の方法。
［７］
前記仕様書が、前記コンピュータプログラムのうち少なくとも１つの実行の可視化を生成する設備と互換性のあるフォーマットを定義する、上記１の方法。
［８］
前記仕様書がＸＭＬ仕様書である、上記１の方法。
［９］
前記エントリ内の前記状態情報の種類のうち少なくともいくつかがタグにより識別される、上記１の方法。
［１０］
前記コンピュータプログラムのうち少なくとも１つの実行中にロギングのレベルを動的に調整することを含み、異なるレベルのロギングが特定されるときには、異なる種類のイベントがログをとられる、上記１の方法。
［１１］
前記コンピュータプログラムのうち少なくとも１つの実行中にロギングの詳細レベルを動的に調整することを含み、同じ種類のイベントについて、異なる詳細レベルのロギングが特定されるときには、異なる量の情報がログをとられる、上記１の方法。
［１２］
記録されるべきイベントの閾値を示す第１のコマンドと、各ログエントリに記録されるべき詳細レベルを示す第２のコマンドとを受信することと、
前記示された詳細レベルで、記録されるべきイベントの前記閾値を満足するイベントについてエントリを生成することと、
を含む、上記１の方法。
［１３］
記憶されるべきイベントの閾値を受信することと、
関数が実行しているときに前記閾値を満足するイベントのエントリを生成することと、
を含む、上記１の方法。
［１４］
各ログエントリに記録されるべき詳細レベルを受信することと、
関数が実行しているときに前記詳細レベルでイベントのエントリを生成することと、
を含む、上記１の方法。
［１５］
第１のコンピュータシステムにおいて、
第２のコンピュータシステム上での１つ以上のコンピュータプログラムの実行中に発生したイベントに基づいて生成されたエントリを含むログを受信することと、
ある期間にわたる前記コンピュータプログラムのうち少なくとも１つの前記実行を表す情報を抽出するために前記ログを解析することと、
前記解析されたログに基づいて、前記コンピュータプログラムのうち少なくとも１つの前記実行の可視化を生成することと、
を含み、
前記エントリは、前記各イベントが発生した時刻における前記コンピュータプログラムのうち少なくとも１つの実行の状態を記述する状態情報を含み、
前記可視化は、前記コンピュータプログラムのうち少なくとも１つの一部の前記実行と関連した時間の経過を表す少なくとも１つの図形を含む、コンピュータにより実施される方法。
［１６］
前記エントリのうち少なくともいくつかが、前記コンピュータプログラムのうち少なくとも１つの関数に対する呼び出しの実行と関連している、上記１５の方法。
［１７］
第２のコンピュータシステムで前記ログを生成することと、前記ログを前記第２のコンピュータシステムから前記第１のコンピュータシステムに提供することと、を含む、上記１５の方法。
［１８］
前記可視化をユーザインタフェースにおいて表示することを含む、上記１５の方法。
［１９］
前記可視化が前記コンピュータプログラムのうち少なくとも１つの関数の図形的表示を含む、上記１５の方法。
［２０］
前記関数の前記図形的表示が前記関数の実行の時間の図形的表示を含む、上記１９の方法。
［２１］
前記図形的表示のうち少なくともいくつかが、前記ログの前記エントリに基づいて決定される相互作用的な機能を含む、上記１９の方法。
［２２］
前記図形的表示が、互いに関連して実行される複数の関数を表す範囲を含む、上記１９の方法。
［２３］
前記複数の関数の各々が、前記コンピュータプログラムのうち少なくとも１つの前記実行中に前記複数の関数のうち別の関数によって呼び出された、上記２２の方法。
［２４］
前記可視化が、前記コンピュータプログラムのうち少なくとも１つの状態情報の表形式の表示を含む、上記１５の方法。
［２５］
前記ログがＸＭＬ仕様書に従って定義されたフォーマットを含む、上記１５の方法。
［２６］
前記ＸＭＬ仕様書がコンピュータプログラムの状態情報に対応するタグを定義する、上記２５の方法。
［２７］
前記可視化が、複数のレイヤと、前記コンピュータプログラムの実行中に前記複数のレイヤで発生するイベント間の関係とを示す、上記１５の方法。
［２８］
前記レイヤがユーザ相互作用を表すレイヤを含み、前記可視化がユーザ相互作用及び他のイベント間の関係を示す、上記２７の方法。
［２９］
前記可視化が、各々が前記コンピュータプログラムのうち少なくとも１つの一部に対応するレイヤを含み、前記可視化が、前記少なくとも１つのコンピュータプログラムが実行されるときに実行される関数の表示を含み、関数の各表示が、前記関数に対応する前記コンピュータプログラムの一部に対応するレイヤに配置される、上記１５の方法。
［３０］
前記可視化が前記コンピュータプログラムの前記実行の少なくとも一部の再生を含み、前記再生が、どの関数が呼び出されたのか、呼び出された前記関数に渡された値、及び前記コンピュータプログラムの前記実行中にユーザにより提供された入力を示す、上記１５の方法。
［３１］
１つ以上のコンピュータプログラムが実行しているコンピューティングシステムに、
状態情報の種類を定義する仕様書を受信することと、
前記コンピュータプログラムのうち少なくとも１つと関連したイベントであって前記コンピュータプログラムの関数の実行と関連付けられたイベントが発生したという表示を受信することと、
前記イベントが発生したときの前記コンピュータプログラムの前記実行の状態を記述する状態情報を収集することと、
前記イベントに対応する、前記仕様書に従ってフォーマットされた前記収集された状態情報の要素を含むエントリを生成することと、
前記エントリを記憶することと、
を含む動作を行わせる指示を記憶する、コンピュータ読み取り可能な記憶装置。
［３２］
第１のコンピューティングシステムに、
第２のコンピュータシステム上での１つ以上のコンピュータプログラムの実行中に発生したイベントに基づいて生成されたエントリを含むログを受信することと、
ある期間にわたる前記コンピュータプログラムのうち少なくとも１つの前記実行を表す情報を抽出するために前記ログを解析することと、
前記解析されたログに基づいて、前記コンピュータプログラムのうち少なくとも１つの前記実行の可視化を生成することと、
を含む動作を行わせる指示を記憶する、コンピュータ読み取り可能な記憶装置であって、
前記エントリは、前記各イベントが発生した時刻における前記コンピュータプログラムのうち少なくとも１つの実行の状態を記述する状態情報を含み、
前記可視化は、前記コンピュータプログラムのうち少なくとも１つの一部の前記実行と関連した時間の経過を表す少なくとも１つの図形を含む、記憶装置。
［３３］
１つ以上のコンピュータプログラムの実行中に動作を行うよう構成されたコンピュータシステムであって、前記動作が、
状態情報の種類を定義する仕様書を受信することと、
前記コンピュータプログラムのうち少なくとも１つと関連したイベントであって前記コンピュータプログラムの関数の実行と関連付けられたイベントが発生したという表示を受信することと、
前記イベントが発生したときの前記コンピュータプログラムの前記実行の状態を記述する状態情報を収集することと、
前記イベントに対応する、前記仕様書に従ってフォーマットされた前記収集された状態情報の要素を含むエントリを生成することと、
前記エントリを記憶することと、
を含む、コンピュータシステム。
［３４］
第２のコンピュータシステム上での１つ以上のコンピュータプログラムの実行中に発生したイベントに基づいて生成されたエントリを含むログを受信することと、
ある期間にわたる前記コンピュータプログラムのうち少なくとも１つの前記実行を表す情報を抽出するために前記ログを解析することと、
前記解析されたログに基づいて、前記コンピュータプログラムのうち少なくとも１つの前記実行の可視化を生成することと、
を含む動作を行うよう構成された第１のコンピュータシステムであって、
前記エントリは、前記各イベントが発生した時刻における前記コンピュータプログラムのうち少なくとも１つの実行の状態を記述する状態情報を含み、
前記可視化は、前記コンピュータプログラムのうち少なくとも１つの一部の前記実行と関連した時間の経過を表す少なくとも１つの図形を含む、第１のコンピュータシステム。
［３５］
１つ以上のコンピュータプログラムを実行するコンピュータシステムであって、
状態情報の種類を定義する仕様書を受信する手段と、
前記コンピュータプログラムのうち少なくとも１つと関連したイベントであって前記コンピュータプログラムの関数の実行と関連付けられたイベントが発生したという表示を受信する手段と、
前記イベントが発生したときの前記コンピュータプログラムの前記実行の状態を記述する状態情報を収集する手段と、
前記イベントに対応する、前記仕様書に従ってフォーマットされた前記収集された状態情報の要素を含むエントリを生成する手段と、
前記エントリを記憶する手段と、
を備えた、コンピュータシステム。
［３６］
第２のコンピュータシステム上での１つ以上のコンピュータプログラムの実行中に発生したイベントに基づいて生成されたエントリを含むログを受信する手段と、
ある期間にわたる前記コンピュータプログラムのうち少なくとも１つの前記実行を表す情報を抽出するために前記ログを解析する手段と、
前記解析されたログに基づいて、前記コンピュータプログラムのうち少なくとも１つの前記実行の可視化を生成する手段と、
を備えた第１のコンピュータシステムであって、
前記エントリは、前記各イベントが発生した時刻における前記コンピュータプログラムのうち少なくとも１つの実行の状態を記述する状態情報を含み、
前記可視化は、前記コンピュータプログラムのうち少なくとも１つの一部の前記実行と関連した時間の経過を表す少なくとも１つの図形を含む、第１のコンピュータシステム。
【図１Ａ】
0006434957.tif 000005
【図１Ｂ】
0006434957.tif 000006
【図１Ｃ】
0006434957.tif 000007
【図２】
0006434957.tif 000008
【図３Ａ】
0006434957.tif 000009
【図３Ｂ】
0006434957.tif 000010
【図３Ｃ】
0006434957.tif 000011
【図４Ａ】
0006434957.tif 000012
【図４Ｂ】
0006434957.tif 000013
【図５Ａ】
0006434957.tif 000014
【図５Ｂ】
0006434957.tif 000015
【図６Ａ】
0006434957.tif 000016
【図６Ｂ】
0006434957.tif 000017
【図７】
0006434957.tif 000018