JP2013117803A - トレース情報の数を算出する計算機、トレース情報の数を算出する方法及びトレース情報の数を算出させるプログラム - Google Patents
トレース情報の数を算出する計算機、トレース情報の数を算出する方法及びトレース情報の数を算出させるプログラム Download PDFInfo
- Publication number
- JP2013117803A JP2013117803A JP2011264227A JP2011264227A JP2013117803A JP 2013117803 A JP2013117803 A JP 2013117803A JP 2011264227 A JP2011264227 A JP 2011264227A JP 2011264227 A JP2011264227 A JP 2011264227A JP 2013117803 A JP2013117803 A JP 2013117803A
- Authority
- JP
- Japan
- Prior art keywords
- program
- trace information
- computer
- execution
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【解決手段】実行するプログラムの流れを制御するプログラム構成要素をソースコードもしくはバイナリから抽出し、それらをノードとするプログラム構成要素ツリーを制御フローに基づいて生成する(S203)。そして、生成したプログラム構成要素ツリーを構成するノードの数から、プログラム1回の実行で実行されるプログラム構成要素の数を特定し、特定したプログラム構成要素の数を基に、実行するプログラムのトレース情報の数を算出する。また、算出したトレース情報の数から、トレース情報を格納するメモリ領域であるバッファのサイズを決定する(S205)。
【選択図】図2
Description
本発明を適用した計算機システムの第1の実施形態では、プログラムの障害解析に用いるトレーサにおいて、対象システム上のプログラム1回の実行で実行され得るプログラム構成要素の数をソースプログラム及びバイナリから求めるための方法を説明する。ここで、プログラム構成要素とは、プログラムの流れを制御する要素である。具体的には、メソッド、ループ、条件分岐、再帰、引数・返り値及びローカル変数等の変数アクセスを指す。なお、本実施形態はJava(登録商標)で記述されたシステムを対象として説明するが、他の言語で記述されたシステムに対しても有効である。また、以下の記述において、単にプログラムという場合、Javaのバイトコード(バイナリ)を指すこととする。ただし、プログラムの具体例を用いて説明する場合においては、説明の容易化のためプログラムをソースコードの形式で表現している。
図1は、本発明を適用した第1の実施形態である計算機101の全体構成を示す。
計算機101は、CPU102とメモリ103とを有する。CPU102はJava仮想マシン104を実行する。Java仮想マシン104は、プログラム読込部105、静的解析データ生成部106、静的解析データ読込部107、バッファサイズ計算部108、プログラム書換部109、プログラム実行部110、トレース情報取得部111及びトレース情報出力部112を含む。上記の機能部は、CPU102と、プログラム113とが協働することにより実現される。
メモリ103は、プログラム113、拡張プログラム114、静的解析データ115及びトレース情報117を保持するバッファ116を有する。なお、プログラム113、拡張プログラム114、静的解析データ115はメモリ103上ではなく、外部記憶装置118に格納されていることもある。また、本実施形態では、メモリ103内にバッファ116を設けることとして説明するが、バッファ116をCPU102に設ける構成でもよい。
静的解析データ生成部106は、読込んだプログラム113の静的解析データ115を生成する。なお、静的解析データ115は、プログラム構成要素の実行順序を示す情報である。本実施形態では、プログラム構成要素をノードとしたツリー(以下、「プログラム構成要素ツリー」という。)で、静的解析データ115を構成するものとする。
静的解析データ読込部107は、静的解析データ生成部106で生成された静的解析データ115をメモリ103上から読込む。
バッファサイズ計算部108は、読込んだ静的解析データ115からバッファサイズを計算し、計算したバッファサイズのバッファ116をメモリ103上に生成する。
プログラム書換部109は、プログラム113にトレース情報117を取得するためのプローブを挿入し、プローブを挿入した拡張プログラム114をメモリ103に配置する。
プログラム実行部110は、拡張プログラム114をメモリ103から読込み、実行する。
トレース情報取得部111は、実行した拡張プログラム114からトレース情報117を取得し、取得したトレース情報117をバッファ116に格納する。
トレース情報出力部112は、バッファ116に格納したトレース情報117を外部記憶装置118に出力する。トレース情報117は、プログラム113を実行する度に取得されるため、取得済みのトレース情報117を外部記憶装置118に出力することで、バッファ116の使用量やメモリ103の負荷を低減することができる。
はじめに、S201で、プログラム読込部105が、メモリ103上に格納されているプログラム113を読込む。
次に、S202で、静的解析データ生成部106が、静的解析データ115が未生成であるか否かを確認する。静的解析データ115が未生成である場合(S202:Yes)、S203で、静的解析データ生成部106が、メモリ103上にあるプログラム113から静的解析データ115を生成し、メモリ103に配置する(静的解析データ生成処理)。静的解析データ115が生成済みである場合(S202:No)、S204で、静的解析データ読込部107が、メモリ103上から静的解析データ115を読込む(静的解析データ読込処理)。
次に、S205で、バッファサイズ計算部108が、静的解析データ115を基にバッファサイズを計算し、メモリ103上に計算したバッファサイズのバッファ116を生成する(バッファサイズ計算処理)。
次に、S206で、プログラム書換部109が、読込んだプログラム113にトレース情報117を取得するためのプローブを挿入し、プローブ挿入済みのプログラムを拡張プログラム114としてメモリ103に配置する(プログラム書換処理)。
次に、S207で、プログラム実行部110が、拡張プログラム114をメモリ103から読込み、読込んだ拡張プログラム114を実行しながらトレース情報117を取得する(プログラム実行処理)。このとき、取得したトレース情報117に障害発生しているか否かを確認する。なお、障害発生とは、Java仮想マシン104やJava仮想マシン104上で動作しているスレッド(Javaスレッド)が不正終了するような障害、任意もしくは特定の例外が発生する障害及び結果的に不正が発生する障害のことを指す。
次に、S208で、トレース情報取得部111が、取得したトレース情報117を、バッファ116に格納する(トレース情報取得処理)。
最後に、S209で、トレース情報出力部112が、システムの障害発生等を契機に、バッファ116に格納したトレース情報117を画面や外部出力デバイス(不図示)に出力する(トレース情報出力処理)。
図3は、静的解析データ生成部106が行う静的解析データ生成処理(図2のS203)の処理の流れを示すフローチャートを示す。静的解析データ生成処理は、プログラム113を元にプログラム構成要素ツリーを生成する。なお、プログラム構成要素ツリーでは、プログラム構成要素をノードとして扱う。また、ループや条件分岐等のボディ部(ループや条件分岐内における実処理部分)に存在する構成要素は、それらを内包する構成要素(ループノード、条件分岐ノード、再帰ノード)を親ノードとする子ノードとして扱う。
次に、S302で、プログラム113から始点メソッドを探索し、探索した始点メソッドに対応するノードを生成する。始点メソッドはJavaでいうmainメソッド、スレッドプログラミングのrunメソッド、サーブレットのdoGetメソッド等の処理の始点となるメソッドとする。なお、始点メソッドはユーザが任意で指定することもできる。
次に、S303で、生成したノードをカレントノードに設定する。カレントノードとは、プログラム構成要素ツリーに子ノードを追加する際の親ノードを意味する。
次に、S304で、設定したカレントノードに属するプログラム内から子ノードとなる次のプログラム構成要素を探す。
次に、S305で、探索したプログラム構成要素が、カレントノードに対応するプログラム構成要素の最後かどうかを確認する。すなわち、親ノードがメソッドノードなら、メソッドを構成する最終要素、ループノードならループボディを構成する最終要素であるかを確認する。
そして、S307で、読込んだプログラム構成要素が、ノード生成対象であるかを確認する。ここで、ノード生成対象である場合(S307:Yes)、S308で、ノード生成処理を行う。ノード生成対象でない場合(S307:No)、S305に戻る(ノード生成処理)。
次に、S309で、現在のカレントノードから生成した新しいノードにカレントノードの変更を行う(カレントノード変更処理)。そして、S305に戻りカレントノードに対応するプログラム構成要素の最後かどうかを確認する。
カレントノードが、始点メソッドのプログラム構成要素の最後でない場合(S310:No)、S311で、現在カレントノードとして設定されているカレントノードを親ノードに設定する(カレントノード復元処理)。
他方、カレントノードが、始点メソッドのプログラム構成要素の最後である場合(S310:Yes)、S312で、生成したプログラム構成要素ツリーを静的解析データ115として、メモリ103に出力しノード生成処理を終了する。
まず、プログラム401について、制御フロー解析を行う(図3のS301)。そして、プログラム401からプログラムの始点メソッドであるmainメソッド402を探索し、mainメソッド402のノード405を生成する(S302)。次いで、ノード405をカレントノードに設定し(S303)、mainメソッド402内の次のプログラム構成要素を探す(S304)。その結果、mainメソッド402内のmethodA403のプログラム構成要素を抽出し、methodA403はプログラム構成要素の最後ではなく(S305:No)、さらにノード生成対象のプログラムであるため(S307:Yes)、methodA403のノード406を生成する(S308)。そして、カレントノード変更処理を行い(S309)、methodA403内の次のプログラム構成要素としてmethodB404を抽出し、methodB404のノード408を生成する。
はじめに、S501で、ノード生成対象のプログラム構成要素がメソッドを呼出すプログラム構成要素であるか否かを確認する。メソッドを呼出すプログラム構成要素である場合(S501:Yes)、S502で、そのプログラム構成要素が再帰メソッドであるか否かを判断する。そして、再帰メソッドである場合(S502:Yes)、S503で、再帰メソッドノードを生成する。再帰メソッドでない場合(S502:No)、S504で、メソッドノードを生成する。
はじめに、S1001で、ノード生成処理(図3のS308)で生成したノードがメソッドノードであるか否かを確認する。
生成したノードが、メソッドノードである場合(S1001:Yes)、S1002で、次に読み込む構成要素の位置を呼出し先メソッドの先頭とする。
そして、S1003で、ノード生成処理で生成したノードをカレントノードに設定し、カレントノード変更処理を終了する。
また、生成したノードが、メソッドノードでない場合(S1001:No)、S1003を実行し、カレントノード変更処理を終了する。
はじめに、S1101で、プログラム構成要素の最後がメソッドであるか否かを確認する。プログラム構成要素の最後がメソッドである場合(S1101:Yes)、S1102で、プログラム113中のメソッドの呼出し元がある箇所に移動し、カレントノード復元処理を再開する。
そして、S1103で、現在カレントノードとして設定しているノードをカレントノードの親ノードに設定し、カレントノード復元処理を終了する。
また、プログラム構成要素の最後がメソッドでない場合(S1101:No)、S1103を実行しカレントノード復元処理を終了する。
以上が、静的解析データ生成処理の流れである。
はじめに、S1201で、静的解析データ115からプログラム構成要素ツリーの総ノード数を取得する。例えば、図9Bに示すプログラム構成要素ツリーの総ノード数は905〜912の8である。
次に、S1202で、総ノード数をもとにバッファサイズを算出する。なお、本実施形態では、バッファサイズを、「バッファサイズ=プログラム構成要素ツリーの総ノード数×1プログラム構成要素分のトレース情報を取得するのに必要なバッファサイズ」より求めるものとする。
次に、S1203で、メモリ103に算出したバッファサイズのバッファ領域をバッファ116として確保する。
なお、本実施形態では、1プログラム構成要素分のトレース情報117を取得するために必要なバッファサイズを2としているが、バッファサイズはトレース情報117を格納するバッファ116の仕様によってユーザが適宜指定することができる。
次に、S1303で、読込んだクラスがプログラム書換え対象のクラスか否かを確認する。読込んだクラスが書換え対象である場合(S1303:Yes)、S1304に進む。書換え対象のメソッドがない場合(S1303:No)、S1301に戻る。
次に、S1304で、書換え対象のメソッドがあるか否かを確認する。書換え対象のメソッドがある場合(S1304:Yes)、S1305で、再帰関連、メソッド関連、ループ関連及び条件分岐関連の各ノードに対応するイベント取得用プローブを挿入する。書換え対象のメソッドがない場合(S1304:No)、S1301に戻る。
そして、S1301で読込むクラスがない場合(S1301:No)、S1306で、書換えたプログラムを拡張プログラム114としてメモリ103に出力し、プログラム書換処理を終了する。
methodEntry 1502は、メソッドの開始イベントを取得するためのプローブである。methodEntry 1502を用いることで、メソッド固有のIDを取得し、どのメソッドが開始したかを把握することができる。なお、methodEntry 1502はメソッドの処理の先頭に挿入する。
ifEntry 1503は、条件分岐の開始イベントを取得するためのプローブである。ifEntry 1503を用いることで、条件分岐固有のIDと条件分岐が保持する条件とを取得し、どの条件分岐が開始したかを把握することができる。なお、ifEntry 1503は条件分岐の処理の先頭に挿入する。
recursiveExit 1505は、再帰の終了イベントを取得するためのプローブである。recursiveExit 1505を用いることで、再帰固有のIDを取得し、どの再帰が実行終了したかを把握することができる。なお、recursiveExit 1505は、再帰処理終了直後に挿入する。
forLoopExit 1507は、forループの終了イベントを取得するためのプローブである。forLoopExit 1507を用いることで、ループ固有のIDを取得し、どのループが実行終了したかを把握することができる。なお、forLoopExit 1507は、ループ処理終了直後に挿入する。
ifExit 1509は、条件分岐の終了イベントを取得するためのプローブである。ifExit 1509を用いることで、条件分岐固有のIDを取得し、どの条件分岐が終了したかを把握することができる。なお、ifExit 1509は条件分岐の最後に挿入する。
そして、本実施形態では、各プローブの取得項目に関しても、取得項目を限定した記載となっているが、イベントの発生時間などの付加情報を取得してもよい。また、取得するイベントについても、上記した「メソッドの開始・終了」、「再帰の開始・終了」、「ループの開始・終了」及び「条件分岐の開始・終了」の8つのイベントに限定しているが、引数・返り値などの変数の取得・変更イベントなどのイベントを対象としても良い。
はじめに、S1601で、プローブを埋め込んだ拡張プログラム114を実行し、トレース情報117を取得する。
つぎに、S1602で、取得したトレース情報117が、ループの開始あるいは再帰の開始であるか否かを確認する。トレース情報117がループの開始あるいは再帰の開始である場合(S1602:Yes)、S1603で、ループあるいは再帰による繰り返し処理を初期化するために、ループあるいは再帰開始以降のトレース情報117をバッファ116から削除する。なお、初期化オーバヘッドが大きい場合、次のトレース情報117の格納位置を示すポインタを、ループノードもしくは再帰ノードの位置に戻してデータを上書きするようにしてもよい。
次に、S1604で、ループあるいは再帰による繰り返し処理を行った回数を記録する繰り返しカウンタの値を1増加させる。
そして、S1605で、トレース情報117を繰り返しカウンタの値とともにバッファ116に格納し、トレース情報117の取得処理を終了する。繰り返しカウンタは、ループ開始及び再帰開始の各イベントに対応するトレース情報117とともにバッファ116に格納する。
また、S1601で取得したトレース情報117が、ループあるいは再帰開始でない場合(S1602:No)、S1606で、取得したトレース情報117をバッファ116に格納する。
図17Bにおいて、「C」はメソッドの開始イベント、「Le」はループの開始イベント、「R」はメソッドの終了イベント又「Lx」はループの終了イベントをそれぞれ示す。矢印1723〜1727は、トレース情報117の次の格納先を指すポインタを示す。1707〜1712は、バッファ116上に格納されるトレース情報の第1状態から第6状態までの状態遷移図を示す。なお、1707〜1712で示す各状態遷移図は、バッファ116条にトレース情報117を格納する様の一部を模式的に示したものである。
次に、methodA1703内のループ1704が1回実行されると、第2状態1708のように、ループの開始イベント1715、methodB1705の開始イベント1716、methodB1705の終了イベント1717、methodC1706の開始イベント1718、methodC1706の終了イベント1719を示すトレース情報117が格納される。
次に、ループ処理が終了するとき、第5状態1711のように、バッファ116の最後にループ終了イベント1720を示すトレース情報117を格納する。
最後に、第6状態1712のように、methodAメソッドの終了イベント1721及びmainメソッドの終了イベント1722を示すトレース情報117を格納する。
トレース情報1801は、mainメソッドの開始を表している。method_entry 1805はメソッドの開始イベント、main 1806はmethod_entry 1805の対象メソッドをそれぞれ表している。
トレース情報1802は、ループIDが1のループが開始されたこと及びそのループが100回繰り返し実行されたことを表している。for_loop_entry 1807はループの開始イベント、1808はループID、1809は繰り返しカウンタをそれぞれ表している。
トレース情報1803は、methodBが終了したことを表しており、method_exit 1810はメソッドの終了イベント、methodB 1811はmethod_exit 1810の対象メソッドをそれぞれ表している。
トレース情報1804は、ループIDが1のループが終了したことを表している。for_loop_exit 1812はループの終了イベント、1813はループIDをそれぞれ表している。
トレース情報1903より、forループの10回目の繰り返しを実施していたことがわかる。また、トレース情報1904より、methodCが開始されたことがわかる。従って、トレース情報1902の出力例から、forループの10回目の繰り返し中のmethodCで、何らかの障害が発生したことがわかる。
なお、図19Aはループが含まれるプログラム1901を実行した場合のトレース情報117の出力例を示しているが、再帰の場合も同様のトレース情報117の出力が可能である。従って、本実施形態では、ループ・再帰に対してトレース情報117の格納の省略を行っても、障害解析に十分なトレース情報117を残すことが可能である。
次に、本発明を適用した計算機の第2の実施形態について説明する。第2の実施形態は、ユーザの実行頻度が高いプログラム実行経路を構成するプログラム構成要素を選択し、それを基にバッファサイズを算出する実施形態である。
図20に、第2の実施形態における計算機の全体構成を示す。第1の実施形態の全体構成図を示す図1と異なる構成について、以降では説明する。
拡張バッファサイズ計算部2001は、プログラム構成要素ツリーから、実行確率の高いプログラム実行経路を抽出し、抽出されたプログラム実行経路に属するノード数からバッファサイズを計算する
バッファ再割当部2002は、割当てたバッファサイズのバッファが不足する場合に、バッファの再割当をする。
ユーザ実行データ集計部2003は、プログラムの実行履歴データ2004をユーザ毎に集計し、ユーザ実行データ2005を生成する。
実行履歴データ2004は、全ユーザのプログラム構成要素ツリーの各ノード(プログラム構成要素)の実行履歴を示すデータである。
ユーザ実行データ2005は、実行履歴データ2004をユーザ毎にプログラム構成要素の各ノードを実行した回数を集計したデータである。
なお、実行履歴データ2004及びユーザ実行データ2005は、メモリ103上ではなく、外部記憶装置118に格納されることもある。
図22は、図21Bの実行履歴データ2004から生成したユーザ実行データ2005の一例である。図22は、ユーザIDが「1」及び「2」であるユーザのユーザ実行データ2005を示しており、ユーザ実行データ2005は、ノード名2201と各ノードの実行回数の集計値を示す実行回数2202とから構成される。
まず、S2305で、拡張バッファサイズ計算部2001が、メモリ103上の実行履歴データ2004を読込み、読込んだ実行履歴データ2004と静的解析データ115からバッファサイズを算出する。そして、算出したサイズのバッファ116をメモリ103上に確保する(拡張バッファサイズ計算処理)。
次に、S2306で、プログラム書換部109が、プログラム書換処理を実行する(プログラム書換処理)。
次に、S2307で、プログラム書換部109が、プログラム実行処理を実行する(プログラム実行処理)。なお、このとき取得したトレース情報に障害が発生しているか否かを確認する。
次に、S2308で、プログラム書換部109が、トレース取得処理を実行する(トレース情報取得処理)。なお、S2306〜S2308は、第1の実施形態と同様の処理である。
次に、S2309で、バッファ再割当部2002が、割り当てたバッファ116が不足しているかを確認する。割り当てたバッファ116が不足している場合(S2309:Yes)、S2310で、バッファ再割当部2002が、バッファ再割当処理を行う(バッファ再割当処理)。バッファ再割当処理は、バッファ再割当部2002が、メモリ103上にあるバッファ116を、プログラム構成要素ツリーのノード数に基づいて計算したバッファサイズのバッファ116に置き換える処理である。そして、バッファ再割当処理の実行後、S2307に戻る。
また、割り当てたバッファ116が不足していない場合(S2309:No)、S2311でトレース情報117を出力し、一連の処理を終了する(トレース情報出力処理)。
はじめに、S2401で、実行履歴データ2004をメモリ103から読込む。
次に、S2402で、静的解析データ115から総ノード数を取得する。
そして、S2403で、総ノード数に基づいて最大バッファサイズを算出する。
次に、S2405で、算出したバッファサイズのバッファ領域をメモリ103上に確保し、処理を終了する。
このように、本実施形態では、プログラムの実行経路について実行確率を評価することで、ユーザ毎に最適なバッファサイズを決定することができる。従って、各ユーザが、実行するプログラムに応じてメモリを使用することができる。
はじめに、S2501で、静的解析データ115中のプログラム構成要素ツリーの各ノードに実行回数データを付与する。なお、ここで付与される実行回数データは、ユーザ実行データ2005の付与対象のノードに対する実行回数である。
次に、S2502で、プログラム構成要素ツリーの始点ノードをカレントノードに設定する。
そして、S2503で、未評価の条件分岐ノードがあるかを確認する。未評価の条件分岐ノードとは、実行確率を評価していない子ノードを持つ条件分岐ノードのことをいう。未評価の条件分岐ノードがある場合(S2503:Yes)、S2504で、カレントノードからたどれる最近傍の条件分岐ノードをカレントノードに設定する。また、未評価の条件分岐ノードがない場合(S2503:No)、S2506に進む。ただし、評価対象のノードはカレントノードから見てプログラム構成要素ツリーの末端方向にあるノードとする。
次に、S2506で、条件分岐ノードの子ノード間で実行確率を比較し、実行確率が低いノードをバッファサイズの算出対象から除外する。ただし、子ノード間で実行確率を比較するとき、実行確率の差が閾値以下の場合、子ノードを除外対象としなくても良い。なお、この閾値は予め所定の値に設定するのでも、ユーザが指定するのでもよい。そして、S2506終了後、S2503に戻る。ただし、S2506で除外されたノードは、S2503の評価対象とはならないものとする。
最後に、S2507で、プログラム構成要素ツリー中の除外されなかったノードの数を求め、そのノード数からバッファサイズを算出して処理を終了する。なお、プログラム実行経路が複数存在する場合は、ノード数が最大となるプログラム実行経路を元にバッファサイズを算出する。また、バッファサイズの算出方法は、第1の実施形態と同様の方法で行う。
はじめに、プログラム構成要素ツリーの最初の条件分岐ノードであるif_1 2606について、子ノードの実行確率を評価する。図26Aの各ノードの実行確率表より、子ノードであるmethodB 2607の実行確率は30%、if_2 2609の条件分岐ノードの実行確率は70%であることがわかる。従って、実行確率の差は、70%−30%=40%であるため、methodB 2607以下のノードである、methodB 2607及びmethodC 2608がバッファサイズの算出対象から除外される。なお、図26Aでは、除外されたノードを点線で描いている。
はじめに、S2701で、拡張バッファサイズ計算部2001で算出した最大バッファサイズのバッファ116をメモリ103上に確保する。
次に、S2702で、既存のバッファ116(実行履歴データ2004に基づいて計算したバッファサイズのバッファ)内に格納してあるトレース情報117を確保したバッファ116にコピーする。
そして、S2703で、既存のバッファ116の領域を解放し、バッファ再割当処理を終了する。本処理により、プログラム中の実行確率の低い経路を実行したことで、トレース取得量がバッファサイズよりも多くなったとしても、トレース情報117の取得漏れを生じさせることなく、トレースを行うことができる。
108バッファサイズ計算部、109プログラム書換部、110プログラム実行部、111トレース情報取得部、112トレース情報出力部、113プログラム、114拡張プログラム、115静的解析データ、116バッファ、117トレース情報、118外部記憶装置、2001拡張バッファサイズ計算部、2002バッファ再割当部、2003ユーザ実行データ集計部、2004実行履歴データ、2005ユーザ実行データ
Claims (19)
- トレーサによって取得するトレース情報の数を算出する計算機であって、
前記計算機は、プログラムの流れを制御する要素を特定する制御部を有し、前記制御部は、前記プログラムの実行前に前記要素の数を特定し、前記特定した要素の数を基に、取得するトレース情報の数を算出することを特徴とする計算機。 - 請求項1に記載の計算機であって、
前記制御部は、前記取得するトレース情報の数に基づいて、トレース情報を格納するメモリ領域のサイズを決定することを特徴とする計算機。 - 請求項2に記載の計算機であって、
前記制御部は、前記特定した要素の数と、前記要素の一つ分のトレース情報を格納するために必要なメモリ領域のサイズとによって、前記実行するプログラムのトレース情報を格納するメモリ領域のサイズを決定することを特徴とする計算機。 - 請求項3に記載の計算機であって、
前記特定した要素が、処理の繰り返しを指示する要素である場合、前記制御部は、前記処理の繰り返しを指示する要素から取得するトレース情報を削除あるいは上書きしてメモリ領域に格納することを特徴とする計算機。 - 請求項1に記載の計算機であって、
前記制御部は、前記プログラムの流れを制御する要素で構成されたツリーを生成して前記要素の数を特定することを特徴とする計算機。 - 請求項5に記載の計算機であって、
前記制御部は、さらに前記ツリーを構成するノードを実行した記録である実行頻度をノード毎に管理し、前記実行頻度に応じて所定のプログラム実行経路を特定し、前記特定したプログラム実行経路に含まれるノードの数に基づいて取得するトレース情報の数を算出することを特徴とする計算機。 - 請求項5に記載の計算機であって、
前記制御部は、さらに前記ツリーを構成する各ノードを実行した記録である実行頻度をノード毎に管理し、前記実行頻度から実行頻度の高いプログラム実行経路を特定し、前記特定したプログラム実行経路に含まれるノードの数に基づいて取得するトレース情報の数を算出することを特徴とする計算機。 - 請求項6又は7に記載の計算機であって、
前記制御部は、前記取得するトレース情報の数に基づいて、トレース情報を格納するメモリ領域のサイズを決定することを特徴とする計算機。 - 請求項8に記載の計算機であって、
前記制御部は、前記プログラムを実行し、実行して取得したトレース情報を格納するためのメモリ領域のサイズが、前記決定したメモリ領域のサイズでは不足する場合、前記決定したメモリ領域のサイズから、前記ツリーに含まれる全てのノードの数に基づいて算出されるトレース情報を格納するメモリ領域のサイズまでの大きさのメモリ領域のサイズに変更することを特徴とする計算機。 - 計算機がトレーサによって取得するトレース情報の数を算出する方法であって、
前記計算機は、プログラムの流れを制御する要素を前記プログラムの実行前に特定し、前記特定した要素の数を基に、取得するトレース情報の数を算出することを特徴とする方法。 - 請求項10に記載の方法であって、
前記計算機は、前記取得した要素の数に基づいて、トレース情報を格納するメモリ領域のサイズを決定することを特徴とする方法。 - 請求項11に記載の方法であって、
前記計算機は、前記特定した要素の数と、前記要素の一つ分のトレース情報を格納するために必要なメモリ領域のサイズとによって、前記実行するプログラムのトレース情報を格納するメモリ領域のサイズを決定することを特徴とする方法。 - 請求項12に記載の方法であって、
前記特定した要素が、処理の繰り返しを指示する要素である場合、前記計算機は、前記繰り返しを指示する要素から取得するトレース情報を削除あるいは上書きしてメモリ領域に格納することを特徴とする方法。 - 請求項10に記載の方法であって、
前記計算機は、前記プログラムの流れを制御する要素で構成されたツリーを生成して前記要素の数を特定することを特徴とする方法。 - 計算機にトレーサによって取得するトレース情報の数を算出させるプログラムであって、
前記計算機に、プログラムの流れを制御する要素を前記プログラムの実行前に特定させ、前記特定された要素の数を基に、取得するトレース情報の数を算出させることを特徴とするプログラム。 - 請求項15に記載のプログラムであって、
前記計算機に、前記取得したトレース情報の数に基づいて、トレース情報を格納するメモリ領域のサイズを決定させることを特徴とするプログラム。 - 請求項16に記載のプログラムであって、
前記計算機に、前記特定された要素の数と、前記要素の一つ分のトレース情報を格納するために必要なメモリ領域のサイズとによって、前記実行するプログラムのトレース情報を格納するメモリ領域のサイズを決定させることを特徴とするプログラム。 - 請求項17に記載のプログラムであって、
前記特定された要素が、処理の繰り返しを指示する要素である場合、前記計算機に、前記繰り返しを指示する要素から取得するトレース情報を削除あるいは上書きしてメモリ領域に格納させることを特徴とするプログラム。 - 請求項15に記載のプログラムであって、
前記計算機に、前記プログラムの流れを制御する要素で構成されたツリーを生成させて前記要素の数を特定させることを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011264227A JP5572619B2 (ja) | 2011-12-02 | 2011-12-02 | トレース情報の数を算出する計算機、トレース情報の数を算出する方法及びトレース情報の数を算出させるプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011264227A JP5572619B2 (ja) | 2011-12-02 | 2011-12-02 | トレース情報の数を算出する計算機、トレース情報の数を算出する方法及びトレース情報の数を算出させるプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013117803A true JP2013117803A (ja) | 2013-06-13 |
JP5572619B2 JP5572619B2 (ja) | 2014-08-13 |
Family
ID=48712344
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011264227A Expired - Fee Related JP5572619B2 (ja) | 2011-12-02 | 2011-12-02 | トレース情報の数を算出する計算機、トレース情報の数を算出する方法及びトレース情報の数を算出させるプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5572619B2 (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017058733A (ja) * | 2015-09-14 | 2017-03-23 | 株式会社エクサ | Cobolソースコード変換プログラム |
JP2017111785A (ja) * | 2015-12-16 | 2017-06-22 | タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited | メモリー被疑部検出のための方法およびシステム |
JPWO2020070817A1 (ja) * | 2018-10-03 | 2021-05-13 | 三菱電機株式会社 | ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09282173A (ja) * | 1996-04-10 | 1997-10-31 | Hitachi Ltd | プログラムの静的解析方法 |
JP2007179488A (ja) * | 2005-12-28 | 2007-07-12 | Fujitsu Ltd | ソースコード問題予測プログラム |
JP2008131278A (ja) * | 2006-11-20 | 2008-06-05 | Oki Electric Ind Co Ltd | トレース装置 |
-
2011
- 2011-12-02 JP JP2011264227A patent/JP5572619B2/ja not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09282173A (ja) * | 1996-04-10 | 1997-10-31 | Hitachi Ltd | プログラムの静的解析方法 |
JP2007179488A (ja) * | 2005-12-28 | 2007-07-12 | Fujitsu Ltd | ソースコード問題予測プログラム |
JP2008131278A (ja) * | 2006-11-20 | 2008-06-05 | Oki Electric Ind Co Ltd | トレース装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017058733A (ja) * | 2015-09-14 | 2017-03-23 | 株式会社エクサ | Cobolソースコード変換プログラム |
JP2017111785A (ja) * | 2015-12-16 | 2017-06-22 | タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited | メモリー被疑部検出のための方法およびシステム |
JPWO2020070817A1 (ja) * | 2018-10-03 | 2021-05-13 | 三菱電機株式会社 | ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム |
JP7046217B2 (ja) | 2018-10-03 | 2022-04-01 | 三菱電機株式会社 | ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム |
US11630662B2 (en) | 2018-10-03 | 2023-04-18 | Mitsubishi Electric Corporation | Software analysis device, software analysis method, and software analysis program |
Also Published As
Publication number | Publication date |
---|---|
JP5572619B2 (ja) | 2014-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230094191A1 (en) | Scalable execution tracing for large program codebases | |
Sambasivan et al. | Principled workflow-centric tracing of distributed systems | |
CN101894065B (zh) | 证明并发处理环境内的执行跟踪的正确性的系统和方法 | |
US7213175B2 (en) | Methods and systems for managing an application's relationship to its run-time environment | |
CN104391787B (zh) | 一种针对目标方法的监控、热切入方法及装置 | |
US9355003B2 (en) | Capturing trace information using annotated trace output | |
Sambasivan et al. | So, you want to trace your distributed system? Key design insights from years of practical experience | |
CN107015841B (zh) | 一种程序编译的预处理方法及程序编译设备 | |
CN112597064B (zh) | 对程序进行仿真的方法、电子设备及存储介质 | |
JP5572619B2 (ja) | トレース情報の数を算出する計算機、トレース情報の数を算出する方法及びトレース情報の数を算出させるプログラム | |
Sato et al. | Whole program data dependence profiling to unveil parallel regions in the dynamic execution | |
CN111913878A (zh) | 基于程序分析结果的字节码插桩方法、装置及存储介质 | |
CN113778890B (zh) | 代码测试方法、装置、电子设备及存储介质 | |
EP3921734B1 (en) | Using historic execution data to visualize tracepoints | |
CN107451038B (zh) | 硬件事件采集方法、处理器和计算系统 | |
JP2016514326A (ja) | コンピューターシステムアクティビティのトレースタイムラインを解析するための方法およびシステム | |
JP7116562B2 (ja) | 追跡データ表現 | |
CN110609703A (zh) | 性能检测工具实现方法、装置、可读存储介质及终端设备 | |
US10496524B2 (en) | Separating test coverage in software processes using shared memory | |
Singh et al. | MG++: Memory graphs for analyzing dynamic data structures | |
US20170123959A1 (en) | Optimized instrumentation based on functional coverage | |
JP2016081126A (ja) | ジョブ制御言語自動生成プログラム | |
JP5937530B2 (ja) | ソフトエラー解析装置、エラー情報作成装置 | |
Upp et al. | Using reservoir sampling and parallelization to improve dynamic binary instrumentation | |
CN104572424B (zh) | 测试方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130913 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20140328 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20140408 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20140424 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20140603 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140630 |
|
LAPS | Cancellation because of no payment of annual fees |