JP2017162026A - 情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラム - Google Patents

情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラム Download PDF

Info

Publication number
JP2017162026A
JP2017162026A JP2016043899A JP2016043899A JP2017162026A JP 2017162026 A JP2017162026 A JP 2017162026A JP 2016043899 A JP2016043899 A JP 2016043899A JP 2016043899 A JP2016043899 A JP 2016043899A JP 2017162026 A JP2017162026 A JP 2017162026A
Authority
JP
Japan
Prior art keywords
function
program
information
execution
depth
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.)
Pending
Application number
JP2016043899A
Other languages
English (en)
Inventor
河場 基行
Motoyuki Kawaba
基行 河場
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016043899A priority Critical patent/JP2017162026A/ja
Priority to US15/418,894 priority patent/US20170255453A1/en
Publication of JP2017162026A publication Critical patent/JP2017162026A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】第1の関数と対に実行されている可能性が高い関数を特定可能にすること。【解決手段】情報処理装置100は、プログラムP内の第1の関数の指定を受け付ける。情報処理装置100は、実行情報110に基づいて、指定された第1の関数と同じ呼び出しの深さの他の関数を抽出する。実行情報110は、プログラムPの実行時に呼び出される各関数について、プログラムPの実行開始点(エントリーポイント)となる関数からの呼び出しの深さを示す情報である。情報処理装置100は、抽出した他の関数の情報を出力する。【選択図】図1

Description

本発明は、情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラムに関する。
従来、アプリケーションのボトルネック箇所の特定に用いるプロファイル情報を採取する方式として、例えば、サンプリング方式や関数呼び出し履歴記録方式がある。サンプリング方式は、プログラムに割り込みをあげ、そのときのプログラムカウンタを記録し、スタック上の関数呼び出し元、呼び出し元スタックの情報を用いて関数の呼び出し関係を記録する方式である。関数呼び出し履歴記録方式は、コンパイル時に情報採取用コードを埋め込む方式であり、例えば、コンパイル時にプロファイルオプションを指定して、特別なオブジェクトを生成する。
先行技術としては、例えば、アプリケーションプログラムの実行中に割り込みが発生した場合に、メイン関数からその時点において実行中であった関数までの経路を示す呼び出し情報を取得し、アプリケーションプログラムの実行が終了した場合に、取得した呼び出し情報を集計してCRT(Cathode Ray Tube)モニタに表示させるものがある。
特開2000−250780号公報
しかしながら、従来技術では、ある機能を実現するいくつかの処理がまとまった処理フェーズ単位での実行時間の内訳解析を行うことが難しく、アプリケーションのボトルネック箇所を特定するための分析作業が困難なものとなる場合がある。例えば、サンプリング方式では、現在実行している関数と呼び出し元の関数しか特定することができず、処理フェーズごとの処理時間の見積もりを行うことが難しい。また、関数呼び出し履歴記録方式では、オブジェクトコードを変更することになる。
一つの側面では、本発明は、第1の関数と対に実行されている可能性が高い関数を特定可能にする情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラムを提供することを目的とする。
本発明の一態様によれば、プログラム内の第1の関数の指定を受け付け、前記プログラムの実行時に呼び出される各関数について、前記プログラムの実行開始点となる関数からの呼び出しの深さを示す実行情報に基づいて、指定された前記第1の関数と同じ呼び出しの深さの他の関数を抽出し、抽出した前記他の関数の情報を出力する情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラムが提案される。
本発明の一側面によれば、第1の関数と対に実行されている可能性が高い関数を特定可能にすることができるという効果を奏する。
図1は、実施の形態にかかるプログラム実行状態表示方法の一実施例を示す説明図である。 図2は、情報処理装置100のハードウェア構成例を示すブロック図である。 図3は、プロファイル情報DB300のデータ構造例を示す説明図である。 図4は、情報処理装置100の機能的構成例を示すブロック図である。 図5は、プログラムPを実行中のスタックエリアsaの記憶内容の一例を示す説明図である。 図6は、プロファイル情報DB300の記憶内容の一例を示す説明図である。 図7は、実行状態情報EDの具体例を示す説明図である。 図8は、情報処理装置100のプロファイル情報生成処理手順の一例を示すフローチャートである。 図9は、COUNT処理の具体的処理手順の一例を示すフローチャート(その1)である。 図10は、COUNT処理の具体的処理手順の一例を示すフローチャート(その2)である。 図11は、プログラム実行状態表示処理手順の一例を示すフローチャートである。
以下に図面を参照して、本発明にかかる情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラムの実施の形態を詳細に説明する。
(プログラム実行状態表示方法の一実施例)
図1は、実施の形態にかかるプログラム実行状態表示方法の一実施例を示す説明図である。図1において、情報処理装置100は、プログラムPの分析を支援するコンピュータである。プログラムPは、分析対象となるコンピュータプログラムであり、例えば、アプリケーションである。情報処理装置100は、例えば、サーバであってもよく、また、プログラムPの開発者Mが使用するPC(Personal Computer)などの汎用演算装置であってもよい。
ここで、プログラムPのボトルネック箇所を特定するには、処理フェーズ単位の実行時間を把握することが有効である。処理フェーズとは、ある機能を実現するいくつかの処理をまとめたものである。例えば、処理フェーズ単位の実行時間を比較することで、プログラムP内での処理フェーズがどういう配分になっているのかを把握可能となり、ボトルネック箇所の特定を特定しやすくすることができる。
しかしながら、プログラムP内の全ての処理フェーズを人手で把握するには、解説書などを参照しながらプログラムPを網羅することになり手間がかかる。例えば、データベースであれば、パージング、プランニング、実行という処理フェーズがある。ところが、データベースによっては、最適化フェーズ、動的コンパイルフェーズといった処理フェーズを持つものもあり、プログラム内部の知識がなければ処理フェーズのリストを作成することは困難である。
一方で、プログラムP内のある一つの処理フェーズに相当する関数名はわかることが多い。また、同じ呼び出しの深さの関数は、それぞれ処理フェーズを担当している関数であることが多い。呼び出しの深さとは、プログラムPの実行開始点(エントリーポイント)となる関数(例えば、main関数)からの呼び出しの深さである。すなわち、ある処理フェーズを担当する関数と同じ呼び出しの深さの他の関数は、他の処理フェーズを担当している可能性が高い。
そこで、本実施の形態では、プログラムPを実行して得られる実行情報に基づいて、ユーザ(例えば、開発者M)から指定された関数と同じ呼び出しの深さの他の関数を抽出して、抽出した他の関数の情報を出力するプログラム実行状態表示方法について説明する。以下、情報処理装置100の処理例について説明する。
(1)情報処理装置100は、プログラムP内の第1の関数の指定を受け付ける。ここで、関数は、引数と呼ばれるデータを受け取ると、決められた処理を実行して結果を出力する命令群である。関数は、プログラムPの構成要素の一つであり、例えば、サブルーチン、メソッドなどである。
図1の例では、プログラムPのソースコードの一例が示されている。ただし、図面では、ソースコードの一部を抜粋して表示している。第1の関数の指定は、例えば、関数名を指定することにより行われる。ここでは、開発者Mにより、プログラムPのある処理フェーズを担当するC()が、第1の関数として指定された場合を想定する。
(2)情報処理装置100は、実行情報110に基づいて、指定された第1の関数と同じ呼び出しの深さの他の関数を抽出する。ここで、実行情報110は、プログラムPの実行時に呼び出される各関数について、プログラムPの実行開始点(エントリーポイント)となる関数からの呼び出しの深さを示す情報である。実行情報110は、例えば、プログラムPの実行時に生成される。
図1の例では、プログラムPの実行開始点となる関数は、main()である。また、第1の関数として指定されたC()の呼び出しの深さは「4」である。このため、情報処理装置100は、実行情報110に基づいて、第1の関数であるC()と同じ呼び出しの深さ「4」の他の関数を抽出する。ここでは、プログラムP内のD()が他の関数として抽出される。
(3)情報処理装置100は、抽出した他の関数の情報を出力する。ここで、他の関数の情報は、第1の関数と同じ呼び出しの深さの関数を識別可能な情報であり、例えば、他の関数の関数名を含む。図1の例では、情報処理装置100は、例えば、他の関数として抽出したD()の関数名「D」を含む実行状態情報120をディスプレイ130に表示する。
なお、ディスプレイ130は、情報処理装置100が有していてもよく、また、情報処理装置100に接続された他の装置が有していてもよい。
このように、情報処理装置100によれば、プログラムP内の第1の関数の指定を受け付けたことに応じて、第1の関数と同じ呼び出しの深さで呼び出されている他の関数を抽出して、抽出した他の関数の情報を出力することができる。これにより、第1の関数と対に実行されている可能性が高い他の関数の情報を提供することができる。
図1の例では、開発者Mは、第1の関数として指定したC()と対に実行されている可能性が高いD()を把握することができる。換言すれば、C()が担当する処理フェーズだけでなく、D()が担当する他の処理フェーズを把握することができる。これにより、C()、D()の各関数が担当する処理フェーズ単位での内訳計算を行うことが可能となり、例えば、プログラムP内で各処理フェーズがどういう配分で実行されているのかを判断可能にして、ボトルネック箇所の特定を支援することができる。
(情報処理装置100のハードウェア構成例)
つぎに、情報処理装置100のハードウェア構成例について説明する。
図2は、情報処理装置100のハードウェア構成例を示すブロック図である。図2において、情報処理装置100は、CPU(Central Processing Unit)201と、メモリ202と、ディスクドライブ203と、ディスク204と、I/F(Interface)205と、ディスプレイ206と、入力装置207と、を有する。また、各構成部はバス200によってそれぞれ接続される。
ここで、CPU201は、情報処理装置100の全体の制御を司る。メモリ202は、例えば、ROM(Read‐Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU201のワークエリアとして使用される。メモリ202に記憶されるプログラムは、CPU201にロードされることで、コーディングされている処理をCPU201に実行させる。
ディスクドライブ203は、CPU201の制御に従ってディスク204に対するデータのリード/ライトを制御する。ディスク204は、ディスクドライブ203の制御で書き込まれたデータを記憶する。ディスク204としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
I/F205は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク210に接続され、ネットワーク210を介して他の装置に接続される。そして、I/F205は、ネットワーク210と自装置内部とのインターフェースを司り、他の装置からのデータの入出力を制御する。
ディスプレイ206は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ206は、例えば、液晶ディスプレイ、CRTなどを採用することができる。図1に示したディスプレイ130は、例えば、ディスプレイ206に相当する。
入力装置207は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う。入力装置207は、キーボードやマウスなどであってもよく、また、タッチパネル式の入力パッドやテンキーなどであってもよい。
なお、情報処理装置100は、上述した構成部のほかに、例えば、SSD(Solid State Drive)やプリンタなどを有することにしてもよい。また、情報処理装置100は、例えば、ディスプレイ206や入力装置207を有さないことにしてもよい。
(プロファイル情報DB300のデータ構造例)
つぎに、情報処理装置100が有するプロファイル情報DB(DataBase)300のデータ構造例について説明する。プロファイル情報DB300は、例えば、図2に示したメモリ202、ディスク204などの記憶装置により実現される。
図3は、プロファイル情報DB300のデータ構造例を示す説明図である。図3において、プロファイル情報DB300は、呼び出しの深さ、サブルーチン名およびカウントのフィールドを有し、各フィールドに情報を設定することで、プロファイル情報をレコードとして記憶する。
ここで、呼び出しの深さは、プログラムP内の関数の呼び出しの深さであり、プログラムPの実行開始点(エントリーポイント)となる関数からの呼び出しの深さを示す。呼び出しの深さは、最も呼び出し元側に位置する関数、すなわち、プログラムPの実行開始点となる関数が最も小さい値となり、当該関数から呼び出し先側にいくにつれて大きい値となる。
サブルーチン名は、プログラムP内の関数の関数名に相当する。カウントは、プログラムP内の関数について、それぞれ対応する呼び出しの深さでの処理時間の長さを示す指標値である。カウントは、初期状態では「0」である。なお、プロファイル情報の具体例については、図6を用いて後述する。
(情報処理装置100の機能的構成例)
図4は、情報処理装置100の機能的構成例を示すブロック図である。図4において、情報処理装置100は、受付部401と、実行制御部402と、分析部403と、抽出部404と、算出部405と、出力部406と、を含む構成である。受付部401〜出力部406は制御部となる機能であり、具体的には、例えば、図2に示したメモリ202、ディスク204などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F205により、その機能を実現する。各機能部の処理結果は、例えば、メモリ202、ディスク204などの記憶装置に記憶される。
受付部401は、分析対象となるプログラムP(ソースコード)の入力を受け付ける。具体的には、例えば、受付部401は、図2に示した入力装置207を用いたユーザの操作入力により、プログラムPの入力を受け付ける。また、例えば、受付部401は、ネットワーク210を介して、他の装置からプログラムPを受信することにより、プログラムPの入力を受け付けることにしてもよい。
実行制御部402は、プログラムPの実行を制御する。具体的には、例えば、実行制御部402は、プログラムPの実行開始指示を受け付けたことに応じて、プログラムPの実行を開始する。プログラムPの実行開始指示は、例えば、入力装置207を用いたユーザの操作入力により入力される。
分析部403は、プログラムPを実行時のプログラムカウンタpcの情報とスタックエリアsaの情報とに基づいて、プログラムPのプロファイル情報を生成する。ここで、プロファイル情報は、プログラムPの実行状態を表す情報であり、例えば、図1に示した実行情報110に相当する。
プログラムカウンタpcは、次に実行する命令のメモリ番地(例えば、図2に示したメモリ202上のアドレス)を記憶するレジスタである。スタックエリアsaは、最後に格納したデータを最初に取り出せるようにしたデータ構造を有するメモリ上の領域である。スタックエリアsaには、プログラムP内の関数が呼び出される度に生成されるスタックフレームが記憶される。また、関数から復帰すると、当該関数を呼び出したときに生成されたスタックフレームが削除される。
スタックフレームには、例えば、戻り番地(呼び出しが発生した場所)、関数への引数(関数呼び出しの引数)、関数のローカル変数(呼び出された関数内部のローカル変数)などが含まれる。したがって、スタックエリアsa内のスタックフレームを参照することで、次々と関数を呼び出したとしても、呼び出し元に順番に戻ることができる。
具体的には、例えば、分析部403は、プログラムPを実行中の所定のタイミングで、プログラムPのプロファイル情報を生成する、あるいは、生成したプロファイル情報を更新する。所定のタイミングは、例えば、予め決められた一定時間ごとのタイミングであってもよく、また、新たに関数が呼び出されたタイミングであってもよい。
なお、一定時間ごとのタイミングは、例えば、一定時間ごとにシグナルを発生させることで特定することができる。また、関数呼び出しのタイミングは、例えば、関数呼び出しに応じて割り込みをあげることで特定することができる。
ここで、図5を用いて、分析部403の具体的な処理内容について説明する。ここでは、図1に示したプログラムPの実行中に、main()⇒A()⇒B()⇒C()⇒B()という順番で各関数が呼び出されていた場合を想定する。以下の説明では、プログラムP内の関数を「サブルーチン」と表記する場合がある。
図5は、プログラムPを実行中のスタックエリアsaの記憶内容の一例を示す説明図である。図5において、メモリ202内のスタックエリアsaとコードエリアcaとが示されている。スタックエリアsaには、スタックフレーム501〜505が記憶されている。コードエリアcaは、命令を記憶するメモリ上の領域である。
まず、分析部403は、プログラムカウンタpcの値を参照して、現在のサブルーチンのサブルーチン名を特定する。具体的には、例えば、分析部403は、プログラムカウンタpcの値から現在のサブルーチンのメモリ番地(次に実行する命令の一つ前のメモリ番地)を計算する。そして、分析部403は、例えば、シンボルテーブルを参照して、計算したメモリ番地に対応する現在のサブルーチンのサブルーチン名を特定する。
図5の例では、プログラムカウンタpcの値から、現在のサブルーチンのサブルーチン名として、サブルーチンBのサブルーチン名「B」が特定された場合を想定する。
また、分析部403は、スタックポインタspの値を参照して、現在のスタック位置を特定する。スタックポインタspは、スタックエリアsaの最上段のアドレス、すなわち、スタックエリアsa内で最後に参照された位置のアドレスを保持するレジスタである。スタックポインタspの値は、スタックエリアsaに新たなデータが格納されると、そのデータ量分増え、スタックエリアsaからデータが取り出されると、そのデータ量分減る。
図5の例では、スタックポインタspの値から、現在のスタック位置として、スタックフレーム505が記憶されたスタック位置が特定される。
つぎに、分析部403は、現在のスタック位置からスタックフレームを順次辿っていくことで、現在のサブルーチンから実行開始点となるサブルーチンに至るまでの呼び出しの深さごとのサブルーチンを特定する。図5の例では、以下のような呼び出しの深さごとのサブルーチンが特定される(呼び出しの深さ:サブルーチン名)。
1:main,2:A,3:B,4:C,5:B
そして、分析部403は、例えば、特定した各サブルーチンのサブルーチン名と呼び出しの深さとを対応付けて、図3に示したプロファイル情報DB300に登録する。また、分析部403は、登録したサブルーチン名と呼び出しの深さとのペアに対応するカウントを1カウントアップする。なお、分析部403は、特定した関数のサブルーチン名と呼び出しの深さとのペアがプロファイル情報DB300に登録済みの場合には、当該ペアに対応するカウントを1カウントアップする。
図5の例では、サブルーチン名と呼び出しの深さとのペア「1:main,2:A,3:B,4:C,5:B」それぞれについてのカウントが1カウントアップされる。
ここで、図6を用いて、プログラムPの実行終了時のプロファイル情報DB300の記憶内容について説明する。
図6は、プロファイル情報DB300の記憶内容の一例を示す説明図である。図6において、プロファイル情報DB300には、プロファイル情報600−1〜600−6が記憶されている。例えば、プロファイル情報600−1は、呼び出しの深さ「1」のサブルーチン名「main」のサブルーチンのカウント「2813」を示す。
呼び出しの深さとサブルーチン名とのペアに対応するカウントは、その値が大きいほど該当のサブルーチンの処理時間が長いことを示している。上述したように、関数(サブルーチン)が呼び出された際に生成されたスタックフレームは、当該関数から復帰、すなわち、当該関数の処理が終了するまでの間はスタックエリアsaに残る。したがって、新たに関数が呼び出される度に、スタックエリアsa内の各スタックフレームから特定される各呼び出しの深さの関数のカウントをカウントアップしていくことで、当該関数の処理時間の長さを示す情報を得ることができる。
図4の説明に戻り、受付部401は、プログラムP内の第1の関数の指定を受け付ける。ここで、第1の関数は、例えば、プログラムPの開発者M(図1参照)などにより任意に指定される関数である。具体的には、例えば、受付部401は、入力装置207を用いたユーザの操作入力により、実行状態表示コマンドを受け付けることにしてもよい。また、受付部401は、ネットワーク210を介して、他の装置から実行状態表示コマンドを受信することにより、実行状態表示コマンドを受け付けることにしてもよい。
実行状態表示コマンドは、プログラムPの実行状態の表示要求に相当する。実行状態表示コマンドには、例えば、分析対象のプログラムPのプログラム名、参照先のプロファイル情報を特定する情報(例えば、ファイル名)、および第1の関数の関数名(例えば、サブルーチン名)が含まれる。
抽出部404は、生成されたプロファイル情報を参照して、指定された第1の関数と同じ呼び出しの深さの他の関数を抽出する。具体的には、例えば、抽出部404は、図6に示したプロファイル情報DB300を参照して、指定された第1の関数と同じ呼び出しの深さの他のサブルーチンを抽出する。
一例として、第1の関数の関数名として、サブルーチン名「D」が指定された場合を想定する。この場合、抽出部404は、プロファイル情報DB300(図6参照)を参照して、指定されたサブルーチンDと同じ呼び出しの深さ「4」のサブルーチンCを抽出する。
ここで、プログラムPの中では、ある関数の中で同じ関数を呼び出して処理する再帰呼び出しが行われることがある。この場合、呼び出しの深さが最も浅いところで呼び出された関数が、最も重要な関数、すなわち、処理フェーズを表す関数であるといえる。例えば、fact関数を用いて階乗「n!」を再帰的に計算する場合、fact(n)が呼ばれてから、fact(n−1)、fact(n−2)、…と処理し、fact(n)が終了するまでの時間が、fact(n)にかかる処理時間となる。
したがって、抽出部404は、第1の関数が複数の異なる深さで呼び出される関数である場合には、第1の関数の最小の呼び出しの深さと同じ呼び出しの深さの関数を抽出することにしてもよい。一例として、第1の関数の関数名として、サブルーチン名「B」が指定された場合を想定する。サブルーチンBは、呼び出しの深さ「3」と「5」で呼び出される関数である(図6参照)。
この場合、抽出部404は、プロファイル情報DB300(図6参照)を参照して、指定されたサブルーチンBの最小の呼び出しの深さ「3」と同じ呼び出しの深さのサブルーチンを抽出する。ただし、図6の例では、呼び出しの深さ「3」の他のサブルーチンは存在しないため、いずれの関数も抽出されない。
算出部405は、第1の関数と同じ呼び出しの深さの各関数(第1の関数を含む)の処理時間の長さを示す値に基づいて、各関数の処理時間の長さを示す値の比率を算出する。ここで、同じ呼び出しの深さの各関数の処理時間の長さを示す値の比率は、プログラムP内でそれらの関数、すなわち、当該各関数が担当する処理フェーズがどういう割合で実行されているかの実行割合を判断するための指標となる。
一例として、第1の関数の関数名として、サブルーチン名「D」が指定され、同じ呼び出しの深さ「4」のサブルーチンCが抽出された場合を想定する。この場合、算出部405は、例えば、プロファイル情報DB300(図6参照)を参照して、呼び出しの深さ「4」のサブルーチンCのカウント「2300」とサブルーチンDのカウント「500」を特定する。
つぎに、算出部405は、特定した各サブルーチンC,Dのカウントの合計値T「2800」を算出する。そして、算出部405は、各サブルーチンC,Dのカウント「2300,500」を合計値T「2800」で割ることにより、各サブルーチンC,Dの処理時間の長さを示す値の比率「0.821,0.179」を算出する。この際、算出部405は、例えば、各比率に「100」を掛け合わせて、各サブルーチンC,Dの実行割合(単位:%)を求めることにしてもよい。
出力部406は、抽出された他の関数の情報を出力する。他の関数の情報は、第1の関数と同じ呼び出しの深さの関数を識別可能な情報である。出力部406の出力形式としては、例えば、ディスプレイ206への表示、I/F205による外部装置への送信、メモリ202、ディスク204などの記憶装置への記憶、不図示のプリンタへの印刷出力などがある。
具体的には、例えば、出力部406は、プロファイル情報DB300を参照して、第1の関数と同じ呼び出しの深さの各関数の関数名を示す実行状態情報EDを出力することにしてもよい。実行状態情報EDは、例えば、図1に示した実行状態情報120に相当する。これにより、第1の関数と対に実行されている可能性が高い関数を把握することが可能となる。
また、出力部406は、例えば、プロファイル情報DB300を参照して、第1の関数と同じ呼び出しの深さの各関数の処理時間の長さを示す値を含む実行状態情報EDを出力することにしてもよい。これにより、プログラムP内で各関数が担当する処理フェーズがそれぞれどのような割合で実行されているかを判断することが可能となる。
また、出力部406は、例えば、プロファイル情報DB300を参照して、第1の関数と同じ呼び出しの深さの各関数の処理時間の長さを示す値の比率(あるいは、実行割合)を含む実行状態情報EDを出力することにしてもよい。これにより、プログラムP内で各関数が担当する処理フェーズがそれぞれどのような割合で実行されているかをより直感的に判断することが可能となる。
実行状態情報EDの具体例については、図7を用いて後述する。
なお、第1の関数と同じ呼び出しの深さの他の関数が抽出されなかった場合には、出力部406は、例えば、第1の関数と同じ呼び出しの深さの他の関数が存在しないことを示す情報を出力することにしてもよい。これにより、第1の関数と対に実行されている他の関数が存在しない可能性が高いことを把握することができる。
(実行状態情報EDの具体例)
つぎに、図7を用いて、実行状態情報EDの具体例について説明する。ここでは、第1の関数として、サブルーチンDが指定された結果、同じ呼び出しの深さ「4」のサブルーチンCが抽出された場合を例に挙げて説明する。
図7は、実行状態情報EDの具体例を示す説明図である。図7において、実行状態情報EDは、呼び出しの深さと、サブルーチン名と、実行割合と、サンプリング数とを対応付けて示す情報である。実行状態情報EDは、例えば、ディスプレイ206に表示される。
呼び出しの深さは、プログラムP内の関数(サブルーチン)の呼び出しの深さであり、指定された第1の関数の呼び出しの深さに相当する。サブルーチン名は、各関数の関数名に相当する。実行割合は、各関数の処理時間の長さを示す値の比率に基づく実行割合を示す。
実行状態情報EDによれば、例えば、開発者Mは、指定したサブルーチンDと対に実行されている可能性が高いサブルーチンCを把握することができる。また、開発者Mは、プログラムP内で各サブルーチンC,Dが担当する各処理フェーズがそれぞれどのような割合で実行されているかを判断することができる。
ここでは、サブルーチンCの実行割合「82.1%」が、サブルーチンDの実行割合「17.9%」を大きく上回っている。このため、開発者Mは、プログラムPの中でサブルーチンCが担当する処理フェーズがより支配的となっており、当該処理フェーズがボトルネックとなっている可能性が高いことがわかる。
(情報処理装置100の各種処理手順)
つぎに、情報処理装置100の各種処理手順について説明する。まず、図8を用いて、情報処理装置100のプロファイル情報生成処理手順について説明する。
<プロファイル情報生成処理手順>
図8は、情報処理装置100のプロファイル情報生成処理手順の一例を示すフローチャートである。図8のフローチャートにおいて、まず、情報処理装置100は、プログラムPの実行を開始する(ステップS801)。つぎに、情報処理装置100は、シグナルハンドラをCOUNTルーチンに設定し(ステップS802)、一定時間ごとにシグナルを発生させるコードを実行する(ステップS803)。
そして、情報処理装置100は、プログラムPを実行する(ステップS804)。つぎに、情報処理装置100は、シグナルを受理すると(ステップS805)、プログラムカウンタpc、レジスタの値を退避する(ステップS806)。そして、情報処理装置100は、COUNT処理を実行する(ステップS807)。なお、COUNT処理の具体的な処理手順については、図9および図10を用いて後述する。
つぎに、情報処理装置100は、プログラムカウンタpc、レジスタを復帰させて(ステップS808)、プログラムPの実行が終了したか否かを判断する(ステップS809)。ここで、プログラムPの実行が終了していない場合(ステップS809:No)、情報処理装置100は、ステップS804に戻る。
一方、プログラムPの実行が終了した場合(ステップS809:Yes)、情報処理装置100は、本フローチャートによる一連の処理を終了する。これにより、一定時間ごとに生じるシグナルを受理する度に、プログラムPの実行状態を表すプロファイル情報を生成あるいは更新することができる。
つぎに、図9および図10を用いて、図8に示したステップS807のCOUNT処理の具体的な処理手順について説明する。
図9および図10は、COUNT処理の具体的処理手順の一例を示すフローチャートである。図9のフローチャートにおいて、まず、情報処理装置100は、Lを「L=()」、Dを「D=0」とし(ステップS901)、プログラムカウンタpcの値から、現在のサブルーチンのサブルーチン名を特定する(ステップS902)。
つぎに、情報処理装置100は、スタックポインタspの値から、現在のスタック位置を特定する(ステップS903)。そして、情報処理装置100は、Lに[D、サブルーチン名]を追加する(ステップS904)。つぎに、情報処理装置100は、Dを「D=D+1」として(ステップS905)、Lに追加したサブルーチン名のサブルーチンがmain()であるか否かを判断する(ステップS906)。
ここで、サブルーチンがmain()ではない場合(ステップS906:No)、情報処理装置100は、現在のスタック位置から呼び出し元のサブルーチン、呼び出し元のスタック位置を特定して(ステップS907)、ステップS904に戻る。なお、ステップS907において、呼び出し元のスタック位置が特定されると、当該スタック位置が現在のスタック位置となる。
また、ステップS906において、サブルーチンがmain()の場合(ステップS906:Yes)、情報処理装置100は、図10に示すステップS1001に移行する。
図10のフローチャートにおいて、まず、情報処理装置100は、Lの先頭要素があるか否かを判断する(ステップS1001)。ここで、先頭要素がある場合(ステップS1001:Yes)、情報処理装置100は、Lの先頭要素を取り出す(ステップS1002)。
つぎに、情報処理装置100は、F(呼び出しの深さ)を、取り出した先頭要素の「1番目の要素」とし(ステップS1003)、S(サブルーチン名)を、取り出した先頭要素の「2番目の要素」とする(ステップS1004)。そして、情報処理装置100は、Fを「F=D−F」とする(ステップS1005)。
つぎに、情報処理装置100は、プロファイル情報DB300にF、Sに関するエントリがあるか否かを判断する(ステップS1006)。ここで、F、Sに関するエントリがある場合(ステップS1006:Yes)、情報処理装置100は、ステップS1009に移行する。
一方、F、Sに関するエントリがない場合(ステップS1006:No)、情報処理装置100は、F、Sに関するエントリをプロファイル情報DB300に登録し(ステップS1007)、当該エントリのカウントに「0」をセットする(ステップS1008)。そして、情報処理装置100は、F、Sに関するエントリのカウントを1カウントアップして(ステップS1009)、ステップS1001に戻る。
また、ステップS1001において、Lの先頭要素がない場合(ステップS1001:No)、情報処理装置100は、COUNT処理を呼び出したステップに戻る。これにより、プログラムPを実行時に呼び出されたサブルーチンのサブルーチン名、呼び出しの深さ、およびカウント(処理時間の長さを示す値)を示すプロファイル情報を生成あるいは更新することができる。
<プログラム実行状態表示処理手順>
つぎに、図11を用いて、情報処理装置100のプログラム実行状態表示処理手順について説明する。
図11は、プログラム実行状態表示処理手順の一例を示すフローチャートである。図11のフローチャートにおいて、まず、情報処理装置100は、実行状態表示コマンドを受け付けたか否かを判断する(ステップS1101)。ここで、情報処理装置100は、実行状態表示コマンドを受け付けるのを待つ(ステップS1101:No)。
そして、情報処理装置100は、実行状態表示コマンドを受け付けた場合(ステップS1101:Yes)、実行状態表示コマンドを参照して、第1の関数の関数名(サブルーチン名)を特定する(ステップS1102)。つぎに、情報処理装置100は、プロファイル情報DB300を参照して、特定した関数名に対応する最小の呼び出しの深さFを特定する(ステップS1103)。
そして、情報処理装置100は、プロファイル情報DB300を参照して、特定した呼び出しの深さFの関数を抽出する(ステップS1104)。つぎに、情報処理装置100は、プロファイル情報DB300を参照して、抽出した呼び出しの深さFの関数の処理時間の長さを示すカウントの合計値Tを算出する(ステップS1105)。
そして、情報処理装置100は、抽出した呼び出しの深さFの関数のうちの未選択の関数を選択する(ステップS1106)。つぎに、情報処理装置100は、選択した関数の処理時間の長さを示すカウントを合計値Tで割って、当該関数の実行割合を算出する(ステップS1107)。
そして、情報処理装置100は、実行状態情報EDに、選択した関数の呼び出しの深さF、関数名、実行割合およびカウントを登録する(ステップS1108)。つぎに、情報処理装置100は、抽出した呼び出しの深さFの関数のうちの未選択の関数があるか否かを判断する(ステップS1109)。
ここで、未選択の関数がある場合(ステップS1109:Yes)、情報処理装置100は、ステップS1106に戻る。一方、未選択の関数がない場合(ステップS1109:No)、情報処理装置100は、実行状態情報EDを出力して(ステップS1110)、本フローチャートによる一連の処理を終了する。
これにより、開発者Mなどにより指定された第1の関数と同じ呼び出しの深さの各関数についての実行状態を表す実行状態情報EDを出力することができる。
以上説明したように、実施の形態にかかる情報処理装置100によれば、プログラムP内の第1の関数の指定を受け付けたことに応じて、プロファイル情報DB300を参照して、指定された第1の関数と同じ呼び出しの深さの他の関数を抽出し、抽出した他の関数の情報(例えば、関数名)を含む実行状態情報EDを出力することができる。
これにより、第1の関数と対に実行されている可能性が高い他の関数の情報を提供することができる。したがって、例えば、開発者Mは、プログラムP内で第1の関数が担当する処理フェーズだけでなく、他の関数が担当する他の処理フェーズを把握することができる。
また、情報処理装置100によれば、第1の関数が複数の異なる深さで呼び出される関数である場合には、第1の関数の最小の呼び出しの深さと同じ呼び出しの深さの他の関数を抽出することができる。これにより、再帰呼び出しされる関数が指定された場合であっても、処理フェーズを表す上で最も重要であるといえる、最も浅いところで呼び出される関数に着目して、当該関数と対に実行されている可能性が高い関数を抽出することができる。
また、情報処理装置100によれば、プログラムPを実行中の所定のタイミングで、スタックエリアsaの情報に基づいて、プログラムカウンタpcの情報から特定される現在の関数から実行開始点となる関数に至るまでの関数の呼び出しの深さをそれぞれ特定することができる。これにより、スタックエリアsaのデータ構造(LIFO:Last In First Out)を利用して、プログラムP内の各関数の呼び出しの深さを特定することができる。
また、情報処理装置100によれば、プログラムPを実行中の所定のタイミングで、関数の呼び出しの深さを特定したことに応じて、当該呼び出しの深さに対応する当該関数の処理時間の長さを示す値をカウントアップしていくことができる。これにより、プログラムP内の各関数の処理時間の長さを示す値を算出することができる。
また、情報処理装置100によれば、同じ呼び出しの深さに対応する、第1の関数の処理時間の長さを示す値と、他の関数の処理時間の長さを示す値とを出力することができる。これにより、プログラムP内で各関数が担当する処理フェーズがそれぞれどのような割合で実行されているかを判断することが可能となる。
また、情報処理装置100によれば、同じ呼び出しの深さの各関数の処理時間の長さを示す値に基づいて、当該各関数の処理時間の長さを示す値の比率を算出して、算出した各関数の処理時間の長さを示す値の比率を出力することができる。これにより、プログラムP内で各関数が担当する処理フェーズがそれぞれどのような割合で実行されているかをより直感的に判断することが可能となる。
これらのことから、情報処理装置100によれば、オブジェクトコードへの変更なしに、いくつかの処理がまとまった処理フェーズの実行時間の内訳解析を容易にすることができる。これにより、プログラムP内部に熟知していない者であっても、ボトルネック箇所の判別が可能となる。
なお、本実施の形態で説明したプログラム実行状態表示方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本プログラム実行状態表示プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO(Magneto−Optical disk)、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本プログラム実行状態表示プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)プログラム内の第1の関数の指定を受け付け、
前記プログラムの実行時に呼び出される各関数について、前記プログラムの実行開始点となる関数からの呼び出しの深さを示す実行情報に基づいて、指定された前記第1の関数と同じ呼び出しの深さの他の関数を抽出し、
抽出した前記他の関数の情報を出力する、
制御部を有することを特徴とする情報処理装置。
(付記2)前記制御部は、
前記第1の関数が複数の異なる深さで呼び出される関数である場合には、前記第1の関数の最小の呼び出しの深さと同じ呼び出しの深さの他の関数を抽出する、ことを特徴とする付記1に記載の情報処理装置。
(付記3)前記制御部は、
前記プログラムを実行中の所定のタイミングで、スタックエリアの情報に基づいて、プログラムカウンタの情報から特定される現在の関数から前記実行開始点となる関数に至るまでの関数の呼び出しの深さをそれぞれ特定し、
特定した前記関数の呼び出しの深さに基づいて、前記実行情報を生成する、ことを特徴とする付記1または2に記載の情報処理装置。
(付記4)前記制御部は、
前記関数の呼び出しの深さを特定したことに応じて、当該呼び出しの深さに対応する前記関数の処理時間の長さを示す値をカウントアップしていくことにより、前記プログラムの実行終了時における前記値を含む前記実行情報を生成し、
生成した前記実行情報を参照して、前記同じ呼び出しの深さに対応する、前記第1の関数の処理時間の長さを示す値と、前記他の関数の処理時間の長さを示す値とを出力する、ことを特徴とする付記3に記載の情報処理装置。
(付記5)前記制御部は、
生成した前記実行情報を参照して、前記同じ呼び出しの深さの各関数の処理時間の長さを示す値に基づいて、当該各関数の処理時間の長さを示す値の比率を算出し、
算出した前記各関数の処理時間の長さを示す値の比率を出力する、ことを特徴とする付記4に記載の情報処理装置。
(付記6)前記所定のタイミングは、予め決められた一定時間ごとのタイミング、または、前記プログラム内のいずれかの関数が呼び出されたタイミングである、ことを特徴とする付記3に記載の情報処理装置。
(付記7)コンピュータが、
プログラム内の第1の関数の指定を受け付け、
前記プログラムの実行時に呼び出される各関数について、前記プログラムの実行開始点となる関数からの呼び出しの深さを示す実行情報に基づいて、指定された前記第1の関数と同じ呼び出しの深さの他の関数を抽出し、
抽出した前記他の関数の情報を出力する、
処理を実行することを特徴とするプログラム実行状態表示方法。
(付記8)コンピュータに、
プログラム内の第1の関数の指定を受け付け、
前記プログラムの実行時に呼び出される各関数について、前記プログラムの実行開始点となる関数からの呼び出しの深さを示す実行情報に基づいて、指定された前記第1の関数と同じ呼び出しの深さの他の関数を抽出し、
抽出した前記他の関数の情報を出力する、
処理を実行させることを特徴とするプログラム実行状態表示プログラム。
100 情報処理装置
110 実行情報
120,ED 実行状態情報
130,206 ディスプレイ
200 バス
201 CPU
202 メモリ
203 ディスクドライブ
204 ディスク
205 I/F
207 入力装置
300 プロファイル情報DB
401 受付部
402 実行制御部
403 分析部
404 抽出部
405 算出部
406 出力部
600−1〜600−6 プロファイル情報
P プログラム

Claims (7)

  1. プログラム内の第1の関数の指定を受け付け、
    前記プログラムの実行時に呼び出される各関数について、前記プログラムの実行開始点となる関数からの呼び出しの深さを示す実行情報に基づいて、指定された前記第1の関数と同じ呼び出しの深さの他の関数を抽出し、
    抽出した前記他の関数の情報を出力する、
    制御部を有することを特徴とする情報処理装置。
  2. 前記制御部は、
    前記第1の関数が複数の異なる深さで呼び出される関数である場合には、前記第1の関数の最小の呼び出しの深さと同じ呼び出しの深さの他の関数を抽出する、ことを特徴とする請求項1に記載の情報処理装置。
  3. 前記制御部は、
    前記プログラムを実行中の所定のタイミングで、スタックエリアの情報に基づいて、プログラムカウンタの情報から特定される現在の関数から前記実行開始点となる関数に至るまでの関数の呼び出しの深さをそれぞれ特定し、
    特定した前記関数の呼び出しの深さに基づいて、前記実行情報を生成する、ことを特徴とする請求項1または2に記載の情報処理装置。
  4. 前記制御部は、
    前記関数の呼び出しの深さを特定したことに応じて、当該呼び出しの深さに対応する前記関数の処理時間の長さを示す値をカウントアップしていくことにより、前記プログラムの実行終了時における前記値を含む前記実行情報を生成し、
    生成した前記実行情報を参照して、前記同じ呼び出しの深さに対応する、前記第1の関数の処理時間の長さを示す値と、前記他の関数の処理時間の長さを示す値とを出力する、ことを特徴とする請求項3に記載の情報処理装置。
  5. 前記制御部は、
    生成した前記実行情報を参照して、前記同じ呼び出しの深さの各関数の処理時間の長さを示す値に基づいて、当該各関数の処理時間の長さを示す値の比率を算出し、
    算出した前記各関数の処理時間の長さを示す値の比率を出力する、ことを特徴とする請求項4に記載の情報処理装置。
  6. コンピュータが、
    プログラム内の第1の関数の指定を受け付け、
    前記プログラムの実行時に呼び出される各関数について、前記プログラムの実行開始点となる関数からの呼び出しの深さを示す実行情報に基づいて、指定された前記第1の関数と同じ呼び出しの深さの他の関数を抽出し、
    抽出した前記他の関数の情報を出力する、
    処理を実行することを特徴とするプログラム実行状態表示方法。
  7. コンピュータに、
    プログラム内の第1の関数の指定を受け付け、
    前記プログラムの実行時に呼び出される各関数について、前記プログラムの実行開始点となる関数からの呼び出しの深さを示す実行情報に基づいて、指定された前記第1の関数と同じ呼び出しの深さの他の関数を抽出し、
    抽出した前記他の関数の情報を出力する、
    処理を実行させることを特徴とするプログラム実行状態表示プログラム。
JP2016043899A 2016-03-07 2016-03-07 情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラム Pending JP2017162026A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016043899A JP2017162026A (ja) 2016-03-07 2016-03-07 情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラム
US15/418,894 US20170255453A1 (en) 2016-03-07 2017-01-30 Information processing device and method of displaying program execution state

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016043899A JP2017162026A (ja) 2016-03-07 2016-03-07 情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラム

Publications (1)

Publication Number Publication Date
JP2017162026A true JP2017162026A (ja) 2017-09-14

Family

ID=59722763

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016043899A Pending JP2017162026A (ja) 2016-03-07 2016-03-07 情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラム

Country Status (2)

Country Link
US (1) US20170255453A1 (ja)
JP (1) JP2017162026A (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10108406B2 (en) * 2016-10-24 2018-10-23 International Business Machines Corporation Linking optimized entry points for local-use-only function pointers
US10108404B2 (en) * 2016-10-24 2018-10-23 International Business Machines Corporation Compiling optimized entry points for local-use-only function pointers
KR102435347B1 (ko) * 2017-12-14 2022-08-23 현대자동차주식회사 전자 제어 장치용 메모리 감시 및 사용 표시 방법 및 장치

Also Published As

Publication number Publication date
US20170255453A1 (en) 2017-09-07

Similar Documents

Publication Publication Date Title
US9519401B2 (en) Providing context menu based on predicted commands
JP4935658B2 (ja) ブラウザプログラムおよび情報処理装置
JP2017162026A (ja) 情報処理装置、プログラム実行状態表示方法、およびプログラム実行状態表示プログラム
CN112199261B (zh) 应用程序性能分析方法及装置、电子设备
JP2011145996A (ja) レビューワ評価装置、レビューワ評価方法、及びプログラム
US20230153126A1 (en) Screen recognition apparatus, screen recognition method and program thereof
US11048503B2 (en) Code reading supporting device, code reading supporting method, and storage medium
JP5971399B2 (ja) 実行フロー作成支援プログラム
JP7294348B2 (ja) 業務効率化装置、業務効率化方法、及びプログラム
JPH10301809A (ja) Gui操作手順の自動生成方法
JP4698943B2 (ja) プログラム生産方法、プログラム生産装置、プログラム自動変換方法、およびプログラム
WO2012111167A1 (ja) トレース情報取得方法、コンピュータシステム及びプログラム
JP2019008455A (ja) 情報処理装置、及び、工数見積システム
JP4354514B2 (ja) プログラム自動変換方法、プログラム自動変換装置、およびプログラム
JP7452553B2 (ja) 入力表示システム、補助情報表示方法、及びプログラム
JP4472768B2 (ja) プログラム解析装置、プログラム解析方法、およびプログラム
JP6025955B1 (ja) プログラム解析装置及びプログラム解析方法
JP2014532223A (ja) 第1のコンピュータ・プログラムが第2のコンピュータ・プログラムのアプリケーション・ロジックを実行することを可能にするための方法および装置、第1のコンピュータ・プログラムと第2のコンピュータ・プログラムとのインターフェースをとるためのコンピュータ・プログラム・コードを生成するための方法および装置、コンピュータ・プログラム、ならびに第1のコンピュータ・プログラムが第2のコンピュータ・プログラムのアプリケーション・ロジックを実行することを可能にするためのソフトウェア・インターフェースを提供するための方法(コンピュータ・プログラム・インターフェース)
JP2008052387A (ja) プログラム生成装置およびプログラム生成方法およびプログラムおよび記録媒体
JP2008107990A (ja) 情報処理装置、カバレッジ計測方法及びカバレッジ計測プログラム
JP2016218743A (ja) 操作候補提供プログラム、操作候補提供装置、および操作候補提供方法
JP2017091134A (ja) ソースコード生成装置、ソースコード生成方法、及びソースコード生成プログラム
JP4249038B2 (ja) 文書表示装置、文書表示方法、および文書表示プログラム
JP5124660B2 (ja) プログラムの生産方法および生産装置
JP2021192201A (ja) 修正支援プログラム、修正支援方法、および修正支援装置