(57)【要約】【課題】複数のアプリケーションが同じ名前である状況で、アプリケーションとＯＳのトレースを同時に行った際にも、トレースされたアプリケーションを特定できるようにする。【解決手段】プロセス情報生成部６が、アプリケーション２、３の実行時に、アプリケーション２、３に対して指定されたプロセスＩＤと、アプリケーション２、３のオブジェクトファイルのパスとが対応付けられているプロセス情報５を生成する。トレースログ生成部１７は、アプリケーション２、３のトレースログとして、プロセス情報５のプロセスＩＤが記述され、ＯＳのトレースログと同じ形式のトレースログを生成する。トレース解析部１８は、トレースログ生成部１７により生成されたトレースログからプロセス情報５のプロセスＩＤが記述されるトレースログを抽出し、プロセス情報５のオブジェクトファイルのパスに基づき、アプリケーション２、３のオブジェクトファイルを特定する。【選択図】図１
2015114786.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムの実行時に、前記アプリケーションプログラムに対して指定されたプロセスＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）と、前記アプリケーションプログラムのオブジェクトファイルのパスとが対応付けられて示されるプロセス情報を生成するプロセス情報生成部と、
プロセスＩＤが記述されるＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のトレースログを生成するとともに、前記アプリケーションプログラムのトレースログとして、前記プロセス情報に示されるプロセスＩＤが記述され、前記ＯＳのトレースログと同じ形式のトレースログを生成するトレースログ生成部と、
前記トレースログ生成部により生成されたトレースログから前記プロセス情報に示されるプロセスＩＤが記述されるトレースログを抽出し、前記プロセス情報において前記プロセスＩＤと対応付けられているオブジェクトファイルのパスに基づき、前記アプリケーションプログラムのオブジェクトファイルを特定するオブジェクトファイル特定部とを有することを特徴とする情報処理システム。
【請求項２】
前記トレースログ生成部は、
前記アプリケーションプログラムのトレースログとして、前記プロセスＩＤと、前記アプリケーションプログラムの実行時に実行された関数のアドレスとが記述される、前記ＯＳのトレースログと同じ形式のトレースログを生成し、
前記オブジェクトファイル特定部は、
抽出したトレースログに記述されている関数のアドレスに対応する関数名を、特定したオブジェクトファイルから取得することを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記情報処理システムは、更に、
特定したオブジェクトファイルを解析して、前記オブジェクトファイル特定部により取得された関数名が記述されているオブジェクトファイル内の箇所を特定し、前記関数名が記述されている箇所のプログラムソースを取得し、取得したプログラムソースを表示するプログラム表示部を有することを特徴とする請求項２に記載の情報処理システム。
【請求項４】
前記プログラム表示部は、
特定したオブジェクトファイルに含まれるデバッグ情報を解析して、前記関数名が記述されている箇所を特定し、前記デバッグ情報から、前記関数名が記述されている箇所のプログラムソースを取得することを特徴とする請求項３に記載の情報処理システム。
【請求項５】
アプリケーションプログラムの実行時に、前記アプリケーションプログラムに対して指定されたプロセスＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）と、前記アプリケーションプログラムのオブジェクトファイルのパスとが対応付けられて示されるプロセス情報を生成するプロセス情報生成処理と、
プロセスＩＤが記述されるＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のトレースログを生成するとともに、前記アプリケーションプログラムのトレースログとして、前記プロセス情報に示されるプロセスＩＤが記述され、前記ＯＳのトレースログと同じ形式のトレースログを生成するトレースログ生成処理と、
前記トレースログ生成処理により生成されたトレースログから前記プロセス情報に示されるプロセスＩＤが記述されるトレースログを抽出し、前記プロセス情報において前記プロセスＩＤと対応付けられているオブジェクトファイルのパスに基づき、前記アプリケーションプログラムのオブジェクトファイルを特定するオブジェクトファイル特定処理とをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムトレースに関する。
【背景技術】
【０００２】
プログラムの動作を解析するためのプログラムトレース（以下、単にトレースともいう）という手法がある。
トレースは、プログラム実行時に特定関数が呼び出されたこと、特定の値が変更されたこと、特定の処理経路を通過したことなどをトレースログとして残し、ソフトウェアの動作を外部より把握するための仕組みである。
トレースに関する技術として、以下の技術がある。
例えば、末尾呼び出しの最適化が行われた場合のコールスタックを正しく表示するために、プログラムコードのオペラントと関数名と関数のアドレス情報を保持する方式が示されている技術（例えば、特許文献１）がある。
また、関数呼び出しの順番とその内容を把握するために、関数呼び出しの呼び出し側と呼び出された側の関数名を実行順に保持する方式が示されている技術（例えば、特許文献２）がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２８７１０１号公報
【特許文献２】特開２００１−２８２５７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
アプリケーションプログラム（以下、単にアプリケーションともいう）とＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のトレースを同時に行う際、同じ名前（ファイル名）であるが異なるアプリケーションが複数あったときに、トレースされたアプリケーションが判別できないという課題がある。
【０００５】
本発明は、このような課題を解決することを主な目的の一つとしており、複数の異なるアプリケーションプログラムが同じ名前である状況で、アプリケーションプログラムとＯＳのトレースを同時に行った際にも、トレースされたアプリケーションプログラムを特定できるようにすることを主な目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る情報処理システムは、
アプリケーションプログラムの実行時に、前記アプリケーションプログラムに対して指定されたプロセスＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）と、前記アプリケーションプログラムのオブジェクトファイルのパスとが対応付けられて示されるプロセス情報を生成するプロセス情報生成部と、
プロセスＩＤが記述されるＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のトレースログを生成するとともに、前記アプリケーションプログラムのトレースログとして、前記プロセス情報に示されるプロセスＩＤが記述され、前記ＯＳのトレースログと同じ形式のトレースログを生成するトレースログ生成部と、
前記トレースログ生成部により生成されたトレースログから前記プロセス情報に示されるプロセスＩＤが記述されるトレースログを抽出し、前記プロセス情報において前記プロセスＩＤと対応付けられているオブジェクトファイルのパスに基づき、前記アプリケーションプログラムのオブジェクトファイルを特定するオブジェクトファイル特定部とを有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、プロセス情報においてプロセスＩＤとアプリケーションプログラムのオブジェクトファイルのパスとが対応付けられているので、プロセス情報に示されるプロセスＩＤが記述されたトレースログを抽出することで、アプリケーションプログラムのトレースログを抽出することができる。
また、プロセス情報に示されるパスに基づいて、アプリケーションプログラムのオブジェクトファイルを特定することできる。
このため、複数の異なるアプリケーションプログラムが同じ名前である場合でも、アプリケーションプログラムのトレースログを取得することができ、トレースされたアプリケーションプログラムを特定することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係る情報処理システムの構成例を示す図。
【図２】実施の形態１に係るプロセス情報の例を示す図。
【図３】実施の形態１に係る情報処理システムの動作例を示すフローチャート図。
【図４】実施の形態１に係るプログラム表示部の動作例を示す図。
【図５】実施の形態１に係るプログラム表示部の動作例を示すフローチャート図。
【図６】実施の形態１に係る情報処理システムのハードウェア構成例を示す図。
【発明を実施するための形態】
【０００９】
実施の形態１．
本実施の形態では、実行するアプリケーションのＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）とオブジェクトファイルのパスの対応表を作成することにより、実行されたアプリケーションを一意に特定する構成を説明する。
【００１０】
図１は、本実施の形態に係る情報処理システム１００の構成例を示す。
【００１１】
アプリケーション実行プログラム１は、アプリケーションを実行し、実行したアプリケーションのプロセスＩＤとオブジェクトファイルの対応表を作成するプログラムである。
アプリケーション実行プログラム１は、プログラム実行部４とプロセス情報生成部６で構成されている。
プログラム実行部４は、アプリケーションを実行する。
プロセス情報生成部６はアプリケーションのプロセスＩＤとオブジェクトファイルの対応表（プロセス情報５）を生成する。
図２は、プロセス情報５を示す。
図２に示すように、プロセス情報５では、プロセスＩＤと、アプリケーション２、３のオブジェクトファイルのパスとが対応付けられている。
【００１２】
情報処理システム１００で実行されるアプリケーションは複数あるものとする。
本実施の形態では、アプリケーション２とアプリケーション３を用いて説明を行う。
アプリケーション２とアプリケーション３は、異なるアプリケーションである。
このため、オブジェクトファイルは異なっており、また、オブジェクトファイルのパスも異なっている。
しかしながら、アプリケーション２とアプリケーション３には同じ名称が設定されているものとする。
【００１３】
アプリケーション２とアプリケーション３の各々には、コンパイル時のオプションにてアプリケーション内の各関数から呼び出される関数フック手段がある。
アプリケーション２内では関数フック手段９が存在し、アプリケーション３内では関数フック手段１０が存在している。
関数フック手段９、１０は、ｇｃｃ（ＧＮＵ  Ｃｏｍｐｉｌｅｒ）の−ｐｇオプションのように、コンパイラによって、全関数の先頭で、特定の関数を呼び出すコードが埋め込まれており、共有ライブラリ７を呼び出す。
関数フック手段９、１０は、トレース機能にのみ存在するのではなく、プロファイラなどの性能解析など一般的に使用されている機能である。
【００１４】
共有ライブラリ７は、ＯＳ８のサービスをシステムコールという形式で呼び出す。
共有ライブラリ７には、関数フック機能処理部１１、開始・終了部１２、関数アドレス・引数取得部１３、システムコール発行部１４がある。
【００１５】
関数フック機能処理部１１は、アプリケーション２、３との動的リンク時に呼び出される関数フック機能の処理を行う。
開始・終了部１２は、関数フック手段９、１０から呼び出されトレースを実施すべきか否かを決定する。
関数アドレス・引数取得部１３は、関数フック手段９、１０を呼び出した関数のアドレスおよび関数の引数を取得する。
システムコール発行部１４は、システムコールを発行し、ＯＳ８のサービスを呼び出す。
【００１６】
ＯＳ８には、システムコール処理部１５とトレースログ生成部１７がある。
【００１７】
システムコール処理部１５は、共有ライブラリ７からのシステムコールを処理する。
トレースログ生成部１７は、ＯＳ８をトレースし、ＯＳトレースログ情報１６にトレースログを記録する。
また、トレースログ生成部１７は、アプリケーション２、３のトレースログを、ＯＳ８のトレースログと同じ形式にてＯＳトレースログ情報１６に記録する。
トレースログ生成部１７が生成するトレースログには、プロセスＩＤと、実行された関数のアドレスが含まれる。
【００１８】
トレース解析部１８は、ＯＳトレースログ情報１６を解析し、ＯＳトレースログ情報１６からプロセス情報５に示されるプロセスＩＤが記述されているトレースログを抽出し、プロセス情報５において当該プロセスＩＤと対応付けられているオブジェクトファイルのパスに基づき、アプリケーション２、３のオブジェクトファイルを特定する。
また、トレース解析部１８は、特定したアプリケーション２、３のオブジェクトファイルから、アプリケーション２、３のトレースログに記述されている関数のアドレスに対応する関数名を取得する。
そして、トレース解析部１８は、アプリケーションとカーネルのトレースログであるアプリケーション／カーネルトレースログ情報２３を作成する。
なお、トレース解析部１８は、オブジェクトファイル特定部の例に相当する。
【００１９】
トレース解析部１８は、関数名抽出部１９とプロセス情報参照部２０とトレースログ収集部２１と関数／引数変換部２２で構成されている。
【００２０】
関数名抽出部１９は、アプリケーション２、３を参照して関数名を取得する。
プロセス情報参照部２０は、プロセス情報５を参照してプロセスＩＤからオブジェクトファイルのパスを取得する。
トレースログ収集部２１は、ＯＳトレースログ情報１６を取得する。
関数／引数変換部２２は、ＯＳトレースログ情報１６をアプリケーション／カーネルトレースログ情報２３に変換する。
【００２１】
トレース結果表示ツール２４は、アプリケーション／カーネルトレースログ情報２３を表示するツールである。
トレース結果表示ツール２４には、アプリケーション／カーネルトレースログ情報２３から実行された関数のプログラムソースを描画するプログラム表示部２５が存在する。
プログラム表示部２５は、より具体的には、アプリケーション２、３のオブジェクトファイルに含まれるデバッグ情報を解析して、関数名抽出部１９により抽出された関数名が記述されている箇所を特定し、デバッグ情報から、当該関数名が記述されている箇所のプログラムソースを取得し、描画する。
【００２２】
次に動作について説明する。
図３は、本実施の形態に係る情報処理システム１００の動作例を示すフローチャートである。
【００２３】
まず、ステップ１００において、プログラム実行部４はアプリケーション２、３を実行する。
アプリケーション２、３を実行する際、ユーザがオブジェクトファイルを指定する。
【００２４】
次に、ステップ１０１において、プロセス情報生成部６が、実行したアプリケーション２、３のプロセスＩＤとオブジェクトファイルのパスからプロセス情報５を作成する。
Ｕｎｉｘ（登録商標）の場合は、プロセスＩＤは、ｇｅｔｐｉｄ（）関数で得ることができる。
また、ｅｘｅｃｖｅ（）関数でオブジェクトファイルのパスを指定することにより、プログラムが実行できる。
【００２５】
次に、ステップ１０２において、ステップ１００で実行されたアプリケーション２、３において、共有ライブラリ７とアプリケーション２、３の動的リンクが実施される。
この動的リンクの際、共有ライブラリ７の関数フック機能処理部１１は、関数フック手段９、１０が、共有ライブラリ７の開始・終了部１２を呼び出すように関数フック手段９、１０のコードを書き換える。
【００２６】
次に、ステップ１０３において、共有ライブラリ７との動的リンクがなされると、アプリケーション２、３は動作を開始し、ｍａｉｎ（  ）関数が呼び出され、それに伴い、各関数が実行される。
各関数が実行されると、各関数の先頭で関数フック手段９、１０が呼び出される。
【００２７】
次に、ステップ１０４において、共有ライブラリ７の開始・終了部１２が呼び出され、関数アドレス・引数取得部１３が、関数フック手段９、１０を呼び出した関数のアドレスと関数の引数を取得する。
更に、システムコール発行部１４が、明示的にエラーとなるシステムコールを実行する。
この時、システムコールの引数に、関数アドレス・引数取得部１３にて取得した関数のアドレスと関数の引数が設定される。
【００２８】
次にステップ１０５において、システムコール処理部１５により、トレースログ生成部１７が呼び出されることにより関数トレースが記録される。
トレースログ生成部１７は、ＯＳ８内の他のイベント（ファイル書き込み、割込み発生、コンテキストスイッチ等）の記録とともにシステムコールトレース情報として関数トレース情報をＯＳトレースログ情報１６に記録する。
また、動作するシステムコール処理部１５は、アプリケーション２、３から動作したものであり、プロセスＩＤはアプリケーション２、３と同じであるため、関数トレース情報をＯＳトレースログ情報１６に記録する際、システムコール処理部１５のプロセスＩＤを記録する。
【００２９】
次に、ステップ１０６において、アプリケーション２、３の動作が終了する。
【００３０】
次に、ステップ１０７において、トレースログ収集部２１が、トレースログ生成部１７が記録したＯＳトレースログ情報１６を取得し、関数／引数変換部２２に渡す。
この時、ＯＳトレースログ情報１６には、アプリケーション２、３の関数トレース情報はシステムコールトレース情報としてしか記録されていない。
つまり、アプリケーション２、３のトレースログは、ＯＳ８のトレースログと同じ形式で生成される。
【００３１】
次に、ステップ１０８において、関数／引数変換部２２は、ステップ１０７で得たＯＳトレースログ情報１６の時刻毎のトレース情報を解析し、解析結果から得たプロセスＩＤをプロセス情報参照部２０に送る。
つまり、関数／引数変換部２２は、ＯＳトレースログ情報１６の中からプロセス情報５に含まれるプロセスＩＤが記述されているトレースログを抽出し、抽出したトレースログのプロセスＩＤをプロセス情報参照部２０に送る。
【００３２】
次に、ステップ１０９において、プロセス情報参照部２０は、プロセス情報５を参照し、ステップ１０８で得たプロセスＩＤからオブジェクトファイルのパスを得て、関数／引数変換部２２に送る。
【００３３】
次に、ステップ１１０において、関数／引数変換部２２は、ステップ１０８の解析結果から得た関数情報（関数のアドレスと引数）とステップ１０９で得たオブジェクトファイルのパスを関数名抽出部１９に送る。
【００３４】
次に、ステップ１１１において、関数名抽出部１９は、ステップ１１０で得たオブジェクトファイルのパスから参照するアプリケーション２又はアプリケーション３を特定し、特定したアプリケーション２又はアプリケーション３からステップ１１０で得た関数情報のうちの関数アドレスをもとに関数名を得て、関数／引数変換部２２に送る。
【００３５】
次に、ステップ１１２において、関数／引数変換部２２は、ステップ１０８で解析した時刻毎のトレース情報の時刻情報、プロセスＩＤ、関数の引数情報、カーネルトレースログ、ステップ１１１で得た関数名をアプリケーション／カーネルトレースログ情報２３に出力する。
【００３６】
次に、ステップ１１３にて、アプリケーション／カーネルトレースログ情報２３を表示する際に、プログラム表示部２５により、アプリケーションのトレース情報から、どのアプリケーションのどの関数を実行したものなのか表示する。
【００３７】
プログラム表示部２５について説明する。
図４は、プログラム表示部２５の動作例を示している。
アプリケーション２、３、プロセス情報５、アプリケーション／カーネルトレースログ情報２３、トレース結果表示ツール２４、プログラム表示部２５に関しては図１と同じものとする。
アプリケーション２、３のオブジェクトファイルにはそれぞれデバッグ情報２６、２７があり、デバッグ情報２６、２７には、実行された関数がどのプログラムソースの何行目にあるかと、プログラムソースがあるものとする。
【００３８】
図５は、プログラム表示部２５の動作例を示すフローチャートである。
【００３９】
まず、ステップ２００において、プログラム表示部２５は、アプリケーション／カーネルトレースログ情報２３を時刻ごとに１行ずつ表示する。
【００４０】
次に、ステップ２０１において、プログラム表示部２５は、ステップ２００で表示したログから、１行選択する。
【００４１】
次に、ステップ２０２において、プログラム表示部２５は、ステップ２０１で選択したトレースログの行の情報を読み込む。
【００４２】
次に、ステップ２０３において、プログラム表示部２５は、ステップ２０２で読み込んだトレースログ情報に記録されているプロセスＩＤからプロセス情報を参照して、オブジェクトファイルのパスを得る。
【００４３】
次に、ステップ２０４において、プログラム表示部２５は、ステップ２０３にて特定したオブジェクトファイル内にあるデバッグ情報から、ステップ２０２で読み込んだトレースログ情報の関数と一致するものを探し、関数がどのプログラムソースの何行目の関数かの情報を取得する。
【００４４】
次に、ステップ２０５において、プログラム表示部２５は、ステップ２０４で特定したプログラムソースをデバッグ情報から読み込む。
【００４５】
最後に、ステップ２０６において、プログラム表示部２５は、ステップ２０５で取得したプログラムソースと、ステップ２０４で取得した関数の行数から、関数部分のプログラムソースを表示する。
【００４６】
また、プロセス情報５を作成する別の手段として、以下の方法がある。
アプリケーション実行プログラム１で、プログラム実行部４によりアプリケーション２、３を実行し、プロセス情報生成部６によりプロセス情報５を作成するのではなく、システムコール発行部１４にて、システムコールを発行するときに、ｅｘｅｃｖｅ（）関数にてオブジェクトファイルのパスが得られる。
また、カレントプロセスＩＤがアプリケーションのＰＩＤとなるため、プロセスＩＤも得ることができ、ＯＳ８内でプロセス情報５を作成することができる。
【００４７】
最後に、本実施の形態に示した情報処理システム１００のハードウェア構成例を図６を参照して説明する。
情報処理システム１００はコンピュータであり、情報処理システム１００の各要素をプログラムで実現することができる。
情報処理システム１００のハードウェア構成としては、バスに、演算装置９０１、外部記憶装置９０２、主記憶装置９０３、通信装置９０４、入出力装置９０５が接続されている。
【００４８】
演算装置９０１は、図１に示すＯＳ、共有ライブラリ、アプリケーションを含む各種プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
外部記憶装置９０２は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ、ハードディスク装置である。
主記憶装置９０３は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
通信装置９０４は、例えば、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。
入出力装置９０５は、例えばマウス、キーボード、ディスプレイ装置等である。
【００４９】
プログラムは、通常は外部記憶装置９０２に記憶されており、主記憶装置９０３にロードされた状態で、順次演算装置９０１に読み込まれ、実行される。
プログラムには、図１に示す「〜部」として説明している機能を実現するプログラムも含まれる。
また、本実施の形態の説明において、「〜の判断」、「〜の判定」、「〜の抽出」、「〜の生成」、「〜の取得」、「〜の特定」等として説明している処理の結果を示す情報やデータや信号値や変数値が主記憶装置９０３にファイルとして記憶されている。
【００５０】
なお、図６の構成は、あくまでも情報処理システム１００のハードウェア構成の一例を示すものであり、情報処理システム１００のハードウェア構成は図６に記載の構成に限らず、他の構成であってもよい。
【符号の説明】
【００５１】
１  アプリケーション実行プログラム、２  アプリケーション、３  アプリケーション、４  プログラム実行部、５  プロセス情報、６  プロセス情報生成部、７  共有ライブラリ、８  ＯＳ、９  関数フック手段、１０  関数フック手段、１１  関数フック機能処理部、１２  開始・終了部、１３  関数アドレス・引数取得部、１４  システムコール発行部、１５  システムコール処理部、１６  ＯＳトレースログ情報、１７  トレースログ生成部、１８  トレース解析部、１９  関数名抽出部、２０  プロセス情報参照部、２１  トレースログ収集部、２２  関数／引数変換部、２３  アプリケーション／カーネルトレースログ情報、２４  トレース結果表示ツール、２５  プログラム表示部、１００  情報処理システム。
【図１】
2015114786.tif 000003
【図２】
2015114786.tif 000004
【図３】
2015114786.tif 000005
【図４】
2015114786.tif 000006
【図５】
2015114786.tif 000007
【図６】
2015114786.tif 000008