(57)【要約】【課題】インライン展開の確認が容易なデータ処理装置、データ処理方法、及びプログラムを提供すること【解決手段】コンパイラ１０は、ソースプログラムをコンパイルしてアセンブリプログラムを生成すると共に、アセンブリプログラムの生成の際にインライン展開を行った関数呼び出し命令の位置情報を記載したデバッグ情報を生成する。ソースプログラム表示編集部２０は、デバッグ情報に基づいて、インライン展開を行った関数呼び出し命令を特定した表示画面を生成する。【選択図】図１
2012234267.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムをコンパイルしてアセンブリプログラムを生成すると共に、前記アセンブリプログラムの生成の際にインライン展開を行った関数呼び出し命令の位置情報を記載したデバッグ情報を生成するコンパイラと、
前記デバッグ情報に基づいて、インライン展開を行った関数呼び出し命令を特定した表示画面を生成する表示編集部と、
を備えるデータ処理装置。
【請求項２】
前記表示編集部は、インライン展開を行った関数呼び出し命令の記述位置に、呼び出し先の関数の記述を表示するインライン展開表示を実行することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記表示編集部は、ユーザが指定した関数の呼び出し命令の記述位置に、前記インライン展開表示を実行することを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記表示編集部は、ユーザの前記ソースプログラムの編集処理に応じて、インライン展開に関する呼び出し先の関数の記述と、前記インライン展開表示の記述と、を同期させることを特徴とする請求項２または請求項３に記載のデータ処理装置。
【請求項５】
前記表示編集部は、前記ソースプログラムに含まれる関数の各々についてインライン展開を実行するかを指定する関数一覧画面を生成し、
前記コンパイラは、ユーザによる前記関数一覧画面からの操作に応じて、前記アセンブリプログラムを生成する際にインライン展開を行う関数を決定することを特徴とする請求項１乃至請求項４のいずれかに記載のデータ処理装置。
【請求項６】
ソースプログラムをコンパイルしてアセンブリプログラムを生成すると共に、前記アセンブリプログラムの生成の際にインライン展開を行った関数呼び出し命令の位置情報を記載したデバッグ情報を生成し、
前記デバッグ情報に基づいて、インライン展開を行った関数呼び出し命令を特定した表示画面を生成する、
データ処理方法。
【請求項７】
コンピュータに、
ソースプログラムをコンパイルしてアセンブリプログラムを生成すると共に、前記アセンブリプログラムの生成の際にインライン展開を行った関数呼び出し命令の位置情報を記載したデバッグ情報を生成する処理と、
前記デバッグ情報に基づいて、インライン展開を行った関数呼び出し命令を特定した表示画面を生成する処理と、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理装置、データ処理方法、及びプログラムに関する。
【背景技術】
【０００２】
コンパイラは、ソースプログラムをコンパイルし、アセンブリプログラムを生成する。コンパイラによってソースプログラム内の関数がインライン展開されたか否かを確認したい場合、ユーザはソースプログラムとアセンブリプログラムを見比べる必要があった。インライン展開とは、コンパイラによる最適化手法の１つであり、関数を呼び出す側に呼び出される関数のコードを展開し、関数への制御転送をしないようにする手法である。
【０００３】
図２は、一般的なソースプログラム（Ａ）と、当該ソースプログラム（Ａ）をコンパイルすることにより生成されたアセンブラプログラム（Ｂ）と、を示す図である。ソースプログラム（Ａ）には、関数ｆと関数ｇが含まれている。関数ｆ内から関数ｇが呼び出されている。アセンブラプログラム（Ｂ）では、インライン展開が行われている。
【０００４】
ここで、アセンブリプログラム（Ｂ）においてインライン展開が実施されたか否かを判定する場合、ユーザは、はじめにソースプログラム（Ａ）において関数の呼び出し関係（関数ｆ内から関数ｇを呼び出す等）を把握する。ユーザは、アセンブラプログラム（Ｂ）において関数ｆの宣言を探す（１行目）。そして、ユーザは、関数ｆ内にて関数ｇの処理内容と同様の処理内容（３行目と８行目が同じ）が記載されているため、インライン展開が行われたことを認識する。
【０００５】
このように、コンパイルによって関数がインライン展開されたか否かを確認したい場合、ユーザは、目視確認によりインライン展開の実施を確認していた。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述のように、関数がアセンブリプログラム内でインライン展開されたか否かを確認したい場合、ユーザは、目視確認によりインライン展開の実施を確認する必要があった。アセンブリプログラムは、一般にソースプログラムを作成するプログラムエディタ上で確認することができない。そのため、ユーザは、テキスト表示機能のみを持つ通常のエディタ上でアセンブリプログラムの確認を行う必要があり、デバッグの効率が良くないという問題があった。さらに、特定の関数のインライン展開を抑止してコードサイズを削減したい場合、ユーザはその調整が困難であった。
【０００７】
すなわち、上記した技術では、アセンブリプログラムの生成の際にインライン展開が行われたか否かの確認が非常に煩雑であるという問題があった。
【課題を解決するための手段】
【０００８】
本発明にかかるデータ処理装置の一態様は、
ソースプログラムをコンパイルしてアセンブリプログラムを生成すると共に、前記アセンブリプログラムの生成の際にインライン展開を行った関数呼び出し命令の位置情報を記載したデバッグ情報を生成するコンパイラと、
前記デバッグ情報に基づいて、インライン展開を行った関数呼び出し命令を特定した表示画面を生成する表示編集部（例えば、本発明の実施の形態１におけるソースプログラム表示編集部２０）と、を備える、ものである。
【０００９】
本発明にかかるデータ処理方法の一態様は、
ソースプログラムをコンパイルしてアセンブリプログラムを生成すると共に、前記アセンブリプログラムの生成の際にインライン展開を行った関数呼び出し命令の位置情報を記載したデバッグ情報を生成し、
前記デバッグ情報に基づいて、インライン展開を行った関数呼び出し命令を特定した表示画面を生成する、ものである。
【００１０】
本発明にかかるプログラムの一態様は、
コンピュータに、
ソースプログラムをコンパイルしてアセンブリプログラムを生成すると共に、前記アセンブリプログラムの生成の際にインライン展開を行った関数呼び出し命令の位置情報を記載したデバッグ情報を生成する処理と、
前記デバッグ情報に基づいて、インライン展開を行った関数呼び出し命令を特定した表示画面を生成する処理と、を実行させるためのものである。
【００１１】
本発明では、コンパイラは、アセンブリプログラムの生成の際にインライン展開を行った関数呼び出し命令の記述位置を記載したデバッグ情報を生成する。表示編集部は、このデバッグ情報を参照して、インライン展開が行われた関数呼び出し命令を特定した表示画面を生成する。この表示画面を参照することにより、ユーザは、インライン展開の実行個所を容易に把握することができる。これにより、デバッグ作業の効率化を図ることができる。
【発明の効果】
【００１２】
本発明によれば、インライン展開の確認が容易なデータ処理装置、データ処理方法、及びプログラムを提供することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１にかかるデータ処理装置の構成を示すブロック図である。
【図２】実施の形態１にかかるデータ処理装置が処理対象とするソースプログラム、及びデータ処理装置が生成するアセンブリプログラムを示す図である。
【図３】実施の形態１にかかるコンパイラが生成する情報を示す図である。
【図４】実施の形態１にかかるソースプログラム表示編集部が生成したソースプログラムの表示画面を示す図である。
【図５】実施の形態１にかかるソースプログラム表示編集部が生成したソースプログラムの表示画面を示す図である。
【図６】実施の形態１にかかるソースプログラム表示編集部が生成したソースプログラムの表示画面を示す図である。
【図７】実施の形態１にかかるソースプログラム表示編集部が生成した関数一覧画面である。
【図８】実施の形態１にかかるデータ処理装置の動作を示すフローチャートである。
【図９】実施の形態１にかかるソースプログラム表示編集部が生成したソースプログラムの表示画面を示す図である。
【発明を実施するための形態】
【００１４】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。図１は、本実施の形態にかかるデータ処理装置の構成を示すブロック図である。データ処理装置１は、コンパイラ１０と、ソースプログラム表示編集部２０と、を備える。データ処理装置１は、好適には一般的に用いられるコンピュータである。なお、データ処理装置１は、ＣＰＵ（図示せず）、入出力装置（図示せず）、メモリ（図示せず）等を適宜備える。
【００１５】
コンパイラ１０は、ユーザによるコマンドライン指定等により、ソースプログラムを読み出してコンパイルを行い、コンパイル結果としてアセンブリプログラムを作成する処理部である。さらに、コンパイラ１０は、アセンブリプログラム内にてインライン展開がなされている関数呼び出し命令の位置情報を記載したデバッグ情報を生成する。以下に、コンパイラ１０の動作詳細について説明する。
【００１６】
コンパイラ１０は、指定されたソースプログラムをファイルシステム等から読み出す。コンパイラ１０は、読み出したソースプログラムをコンパイルし、アセンブリプログラムを生成する。コンパイラ１０は、生成したアセンブリプログラムを任意のファイルシステム等に書き込む。ユーザ等は、コンパイルオプションを指定することにより、適宜コンパイル方法を指定することができる。
【００１７】
以下の説明では、図２（Ａ）に示すソースプログラムをコンパイルの対象とする。コンパイラ１０が生成したアセンブリプログラムを図２（Ｂ）とする。コンパイラ１０は、コンパイルの際にデバッグ情報を生成する。デバッグ情報は、デバッグに必要となる各種情報を含む。ここで、コンパイラ１０は、デバッグ情報内にアセンブリプログラム内にてインライン展開がなされている関数呼び出し命令の記述位置を示す情報（以下、インライン展開位置情報と呼称する）を含める。以下、この処理の詳細を説明する。
【００１８】
コンパイラ１０は、コンパイルの際に行情報を抽出する。行情報とは、ソースプログラム内での行番号を、実際の処理順序に応じて並び変えた情報である。さらに、コンパイラ１０は、アセンブリプログラムを生成する際に、関数呼び出し命令の位置及び当該位置にてインライン展開が行われているか否かを抽出する。例えば、コンパイラ１０は、「ソースプログラム内での行番号３の関数呼び出し命令でインライン展開を行った」、「ソースプログラム内での行番号Ｘの関数呼び出し命令ではインライン展開を行わなかった」ことを抽出する。
【００１９】
コンパイラ１０は、抽出した行番号情報と、インライン展開を行った関数の呼び出し命令の位置と、からデバッグ情報に挿入するインライン展開位置情報を生成する。図３は、図２（Ａ）のソースプログラムをコンパイルした際に、デバッグ情報内に挿入するインライン展開位置情報を示す図である。関数呼び出し命令の行であり、かつインライン展開の対象となった行には、インライン展開「有り」と記載される。関数呼び出し命令の行であり、かつインライン展開の対象とならなかった行には、インライン展開「無し」と記載される。関数呼び出し命令の行ではない場合、当該行には「−（関数呼び出し行ではない）」が記載される。なお、行番号情報に換えてアドレス情報が記載されうるが、説明の便宜のため詳細は省略する。コンパイラ１０は、図３に示すインライン展開位置情報を任意の形式でデバッグ情報に書き出せばよい。例えば、コンパイラ１０は、図３に示すインライン展開位置情報をテキストとしてデバッグ情報に書き出しても良く、ＸＭＬ（Extensible Markup Language）等の任意のマークアップ言語を用いてデバッグ情報に書き出してもよい。
【００２０】
コンパイラ１０は、生成したアセンブリプログラム及びデバッグ情報をソースプログラム表示編集部２０に供給する。
【００２１】
ソースプログラム表示編集部２０は、ソースプログラムの表示編集画面を生成する処理部である。なお、ソースプログラム表示編集部２０は、ソースプログラムの参照用の表示画面を生成すればよく、必ずしも編集機能を持つ表示画面を生成しなくても良い。ソースプログラム表示編集部２０は、いわゆるソースプログラムのエディタ機能を持つ処理部である。以下、ソースプログラム表示編集部２０の処理概要について説明する。
【００２２】
ソースプログラム表示編集部２０には、デバッグ情報及びソースプログラムがコンパイラ１０から入力される。ソースプログラム表示編集部２０は、供給されたソースプログラムを表示する表示画面を生成する。この際に、ソースプログラム表示編集部２０は、デバッグ情報に含まれるインライン展開位置情報（図３）を参照し、アセンブリプログラムにおいてインライン展開を行った関数呼び出し行を特定する情報を表示画面上に記載する。
【００２３】
図４は、ソースプログラム表示編集部２０が図２（Ａ）に示すソースプログラム、及び図３に示すインライン展開位置情報から生成した表示画面を示す図である。図示するように、アセンブリプログラムにおいてインライン展開を行った関数呼び出しには、"＋"のマークが付与されている。
【００２４】
更に、ソースプログラム表示編集部２０は、インライン展開表示を反映した表示画面を生成する。例えば、ユーザは、図４に示す表示画面上の"＋"マークをクリックする等してインライン展開表示の対象となる関数呼び出し命令を指定する。
【００２５】
ソースプログラム表示編集部２０は、ユーザから指定されたインライン展開表示の対象となる関数呼び出し命令の記述位置に対して、呼び出し先のコードを埋め込んだ表示画面を生成する。このように、インライン展開にかかる関数呼び出し命令の記述位置に対して、呼び出し先のコードを埋め込んで表示することを以下の説明ではインライン展開表示と呼称する。図５は、図４に示す表示画面において、関数ｇのインライン展開表示が指定された場合の表示画面である。以下、呼び出し先のコードの埋め込み処理の方法を説明する。
【００２６】
ソースプログラム表示編集部２０は、ユーザから指定されたインライン展開表示の対象となる関数呼び出し命令の記述（図６では、ｇ（）；）から呼び出し先の関数（関数ｇ）を特定する。そして、ソースプログラム表示編集部２０は、特定した呼び出し先の関数（関数ｇ）の記載をコピーする（図６では、７行目から９行目までの記載をコピーする）。ソースプログラム表示編集部２０は、コピーした文字列を呼び出し命令の記述位置に挿入する。
【００２７】
なお、ソースプログラム表示編集部２０は、アセンブリプログラムにおいてインライン展開がなされた全ての関数呼び出し命令に対し、インライン展開表示を行った表示画面を生成しても良い。
【００２８】
ソースプログラム表示編集部２０は、さらにソースプログラムに含まれる全ての関数を抽出（例えば"ｖｏｉｄ"等の予約語の後に続く文字列を関数名として抽出）し、抽出した関数を一覧する関数一覧画面を生成する。図７は、この関数一覧画面の一例を示す図である。
【００２９】
ユーザは、図７（Ｂ）に示す関数一覧画面から、コンパイル時にインライン展開を行う関数をマウス操作等により指定する。図７（Ｂ）では、各関数に対応するチェックボックスが配置されている。ソースプログラム表示編集部２０は、指定された関数をコンパイルオプションとしてコンパイラ１０に通知するとともに、コンパイルの実行開始を指示する。当該通知に応じて、コンパイラ１０は、インライン展開を適宜行ったアセンブリプログラムを生成する。
【００３０】
続いて、本実施の形態にかかるデータ処理装置１の動作を図８のフローチャートを参照して説明する。図８のフローチャートは、本実施の形態にかかるデータ処理装置１においてソースプログラムの編集、コンパイルを行う際の処理の流れを示すフローチャートである。
【００３１】
ユーザは、任意のプログラムエディタ等を用いてソースプログラムを作成する（Ｓ１１）。ユーザは、作成したソースプログラムをコンパイラ１０に入力する。コンパイラ１０は、ソースプログラムをコンパイルする（Ｓ１２）。例えば、ユーザは、コンピュータのコマンドラインからソースプログラムの格納場所を指定した上でコンパイラ１０を実行する。そして、ユーザは、コンパイラ１０によるコンパイル処理により生成されたアセンブリプログラムを実行する（Ｓ１２）。この際、ユーザは、生成したアセンブリプログラムを任意のデバッガ等を用いて実行しても良い。
【００３２】
ユーザは、アセンブリプログラムの実行結果を参照し、明示的にインライン展開を行う関数を指定するか否かを判断する（Ｓ１４）。関数を指定する場合（Ｓ１４：Ｙｅｓ）、ユーザは、ソースプログラム表示編集部２０により生成された関数一覧画面（図７（Ｂ））からインライン展開を行う関数を指定する（Ｓ１５）。指定の後に、再度コンパイル（Ｓ１２）及びデバッグ（Ｓ１３）を行う。
【００３３】
インライン展開を行う関数を指定しない場合（Ｓ１４：Ｎｏ）、ユーザは、どの関数がインライン展開されたかを表示画面（図４）から確認する（Ｓ１６）。この表示画面は、前述の方法によりソースプログラム表示編集部２０が生成する。
【００３４】
ユーザは、表示画面（図４）からインライン展開表示を行うかを適宜指定する（Ｓ１８）。この指定は、前述したように表示画面に記述されている"＋"マークをクリックすること等により行う。
【００３５】
インライン展開表示を指定しなかった場合（Ｓ１７：Ｎｏ）、ユーザは、図２（Ａ）に示す通常のソースプログラムに"＋"マークが記載された表示画面（図４）をそのまま参照する（Ｓ１８）。一方、インライン展開表示が指定した場合（Ｓ１７：Ｙｅｓ）、ソースプログラム表示編集部２０は、インライン展開表示を実行した表示画面（図５）を生成する。ユーザは、図５に示すインライン展開表示がなされた表示画面を参照する（Ｓ１９）。
【００３６】
ユーザは、図４または図５に示す表示画面やアセンブリプログラムの実行結果を参照し、ソースプログラムの修正が必要であるか否かを判断する（Ｓ２０）。ソースプログラムの修正が必要と判断した場合（Ｓ２０：Ｙｅｓ）、ユーザはソースプログラムを修正する（Ｓ２１）。そして、コンパイラ１０によるコンパイル（Ｓ１２）から処理を再実行する。ソースプログラムの修正が不要と判断した場合（Ｓ２０：Ｎｏ）、全ての処理を終了する。
【００３７】
続いて、本実施の形態にかかるデータ処理装置の効果について説明する。上述のように、コンパイラ１０は、コンパイルの際にどの関数呼び出し命令に関してインライン展開を行ったかを記述したデバッグ情報を生成する。ソースプログラム表示編集部２０は、このデバッグ情報を参照して、インライン展開が行われた関数呼び出し命令を特定したソースプログラムの表示画面（例えば図４）を生成する。この表示画面を参照することにより、ユーザは、インライン展開の実行個所を容易に把握することができる。これにより、デバッグ作業の効率化を図ることができる。
【００３８】
さらに、図５に示すように、ソースプログラム表示編集部２０は、インライン展開を行った関数呼び出し命令の記述位置に、インライン展開の呼び出し先の関数の記述を表示（インライン展開表示）する表示画面を生成し得る。これにより、ユーザは、インライン展開がなされた位置と、呼び出し先の関数記述を共に把握することができる。
【００３９】
さらにまた、図７に示すように、ユーザは、関数一覧表示からインライン展開を行うべき関数を選択することができる。選択した関数の情報は、コンパイルの際のオプションとしてコンパイラ１０に通知可能である。ユーザは、インライン展開を行うべき関数を指定することにより、実行速度等のチューニングを行うことができる。
【００４０】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、インライン展開表示の際の表示画面（図５）において、インライン展開表示にかかる記述と、インライン展開の呼び出し先の関数の記述と、を同期させて表示しても良い。以下、表示画面例及びソースプログラム表示編集部２０の処理概略について図９を参照して説明する。
【００４１】
ソースプログラム表示編集部２０は、インライン展開表示を行っている関数の情報（例えば関数ｆ内の関数ｇについてインライン展開表示を行っている等）を内部に記憶する。ユーザは、表示画面を参照して、インライン展開表示内の記述（図９（Ａ）３行目〜４行目）または関数記述（図９（Ａ）６行目〜９行目）のいずれかを修正する。ソースプログラム表示編集部２０は、前述のように通常のプログラムエディタの機能を備えている。ソースプログラム表示編集部２０は、ユーザによるソースプログラムの修正を検知し、記憶した情報（例えば関数ｆ内の関数ｇについてインライン展開表示を行っている等）と比較することにより当該修正がインライン展開表示にかかる箇所の修正と判定する。そして、ソースプログラム表示編集部２０は、一方の修正をコピーし、他方の表示箇所に上書きをする。例えば、図９（Ａ）３行目〜４行目が修正された場合、ソースプログラム表示編集部２０は、当該個所の内容をコピーして図９（Ａ）６行目〜９行目に上書きをする（図９（Ｂ）参照）。図９（Ａ）６行目〜９行目が修正された場合、ソースプログラム表示編集部２０は、当該個所の内容をコピーして図９（Ａ）３行目〜４行目に上書きをする。
【００４２】
ソースプログラム表示編集部２０がこのような動作を行うことより、インライン展開にかかる関数の編集がさらに容易となる。
【００４３】
さらに、本発明にかかるコンパイラ１０及びソースプログラム表示編集部２０の各処理を、一般的な統合開発環境（ＩＤＥ，Integrated Development Environment）に組み込むことも可能である。
【００４４】
本発明にかかるコンパイラ１０及びソースプログラム表示編集部２０の各処理は、任意のコンピュータ内で動作するプログラムとして実現できる。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【００４５】
１  データ処理装置
１０  コンパイラ
２０  ソースプログラム表示編集部
【図１】
2012234267.tif 000003
【図２】
2012234267.tif 000004
【図３】
2012234267.tif 000005
【図４】
2012234267.tif 000006
【図５】
2012234267.tif 000007
【図６】
2012234267.tif 000008
【図７】
2012234267.tif 000009
【図８】
2012234267.tif 000010
【図９】
2012234267.tif 000011