説明

デバッグシステムおよびプログラム開発システム

【課題】ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるコンパイルシステムを提供する。
【解決手段】高級言語で記述されたソースプログラムを機械語プログラムに翻訳するコンパイルシステムであって、オリジナルソースプログラム101に対してソースプログラムレベルの最適化を施すことにより、オリジナルソースプログラム101を最適化ソースプログラム102に変換するソースレベルオプティマイザ3と、最適化ソースプログラム102を機械語プログラム104に変換するコンパイラ5と、オリジナルソースプログラム101と機械語プログラム104との対応関係を示す最終デバッグ情報112を生成する最終デバッグ情報選択生成部52とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、C言語等の高級言語で記述されたソースプログラムをコンパイルシステムにより変換した機械語プログラムの検証を行うデバッグシステム、ならびにコンパイルシステムおよびデバッグシステムを含むプログラム開発システムに関する。
【背景技術】
【0002】
従来、コンピュータ上で実行される機械語プログラムのプログラム開発システムとして、コンパイルシステムおよびデバッグシステムを含むシステムが提案されている。コンパイルシステムは、C言語等の高級言語で記述されたソースプログラムを機械語命令列に変換するプログラムをコンピュータ上実行することにより実現されるシステムである。デバッグシステムは、機械語プログラムを受け、当該機械語プログラムの実行時における動作の制御やデータの参照等を行って機械語プログラムの妥当性の検証を行うプログラムをコンピュータ上で実行することにより実現されるシステムである。
【0003】
このようなプログラム開発システムでは、コンパイルシステムにてソースプログラムの行番号と機械語命令との対応関係や、ソースプログラム中のシンボル名と機械語データとの対応関係等を示すデバッグ情報を生成する。すなわち、デバッグ情報は、ソースプログラムと機械語プログラムとの対応関係を示している。また、デバッグシステムにてそのデバッグ情報を読み込んで活用することにより、ユーザがソースレベルの情報を指定してデバッグを行うことができる機能を実現している。
【0004】
一方、近年、従来のコンパイルシステムにおける中間コードレベルより上位レベルでの最適化機能に対する要望や、秘匿性確保の要望等に応えるために、ソースプログラムを一旦別のソースプログラムに変換するソースプログラム変換・最適化方法が各種提案されている(例えば、特許文献1および2参照)。
【0005】
ソースプログラム変換・最適化方法によって生成されたソースプログラムは、従来と同様のコンパイルシステムに入力されることにより、当該コンパイルシステムで機械語プログラムに変換される。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特公平6−80490号公報
【特許文献2】特開2003−280754号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記ソースプログラム変換・最適化方法を活用した場合に、従来のプログラム開発システムを利用すると、コンパイルシステムで生成するデバッグ情報は、ソースレベル変換後のソースプログラムに基づいたものとなる。このため、ユーザは、元々、自身が記述したソースプログラムに基づいたソースレベルのデバッグを行うことができない。これは、ソースプログラム変換・最適化方法を活用することによって、ソースプログラムの行番号がずれてしまったり、制御構造が変わってしまったり、関数名および変数名が変わってしまったりするためである。
【0008】
このため、ユーザはソースプログラム変換・最適化方法によって自動生成されたソースプログラムに基づいてデバッグを行うか、生成された機械語プログラムの機械語命令レベルでデバッグを行うことを余儀なくされ、デバッグの効率が低下してしまう。
【0009】
そのため、システムソフトウェアのユーザは、データの配置等を手動で試行錯誤する必要があり、多大な開発工数が必要であるという問題がある。
【0010】
本発明は、上述の課題を解決するためになされたもので、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるデバッグシステムおよびプログラム開発システムを提供することを目的とする。
【課題を解決するための手段】
【0011】
本発明のある局面に係るデバッグシステムは、機械語プログラムのデバッグを支援するデバッグシステムであって、高級言語で記述された第1ソースプログラムを最適化した高級言語で記述された第2ソースプログラムをコンパイルすることにより得られる機械語プログラムを実行するプログラム実行手段と、前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を参照することにより第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報、および前記第2ソースプログラムと前記機械語プログラムとの対応関係を示す第2デバッグ情報を受け、前記プログラム実行手段における実行結果、前記第1デバッグ情報および前記第2デバッグ情報に基づいて、前記機械語プログラムのユーザによるデバッグを支援するデバッグ支援手段とを備えることを特徴とする。
【0012】
この構成によると、ユーザは、第1デバッグ情報に基づいて第1ソースプログラムに対するデバッグを行なうことができる。このため、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるデバッグシステムを提供することができる。
【0013】
好ましくは、前記デバッグシステムは、さらに、前記第1ソースプログラムに含まれる変換対象箇所の文と前記第2プログラムに含まれる当該変換対象箇所を最適化した後の変換箇所の文とを表示する変換箇所表示制御手段と、前記変換対象箇所の文または前記変換箇所の文のいずれか一方の選択を受け付ける選択受け付け手段と、前記選択受け付け手段で受け付けられた情報をプロファイル情報として生成するプロファイル情報生成手段とを備えることを特徴とする。また、前記プロファイル情報生成手段は、前記変換対象箇所の文または前記変換箇所の文を前記プログラム実行手段で実行した際の実行サイクル数を、前記プロファイル情報にさらに含めることを特徴とする。
【0014】
この構成によると、コンパイルシステムにおいて、変換対象箇所および変換箇所のうち実行サイクルの小さいものを選択して、コンパイルすることが可能になる。よって、実行サイクル数の小さな機械語プログラムを作成することができる。
【0015】
本発明のさらに他の局面に係るプログラム開発システムは、ソースプログラムから機械語プログラムを開発するプログラム開発システムであって、ソースプログラムを機械語プログラムに翻訳するコンパイルシステムであって、高級言語で記述された第1ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第1ソースプログラムを高級言語で記述された第2ソースプログラムに変換するソースプログラム変換手段と、前記第2ソースプログラムを機械語プログラムに変換するコンパイル手段と、前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を参照することにより前記第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報を生成するデバッグ情報生成手段とを備えることを特徴とするコンパイルシステムと、上述のデバッグシステムとを備え、前記デバッグシステムは、さらに、前記プログラム実行手段にて前記機械語プログラムを実行した際の実行ログを出力する実行ログ出力手段を備え、前記プログラム開発システムは、さらに、前記デバッグシステムから出力された前記実行ログを解析し、前記コンパイルシステムにおける最適化のためのヒントとなる情報であるプロファイル情報を出力するプロファイラ手段を備え、前記コンパイルシステムの前記ソースプログラム変換手段は、前記プロファイル情報に基づいて、前記第1ソースプログラムの最適化を行なうことを特徴とする。
【0016】
この構成によると、プロファイル手段を介して、コンパイルシステムとデバッグシステムとが連結され、これらのシステムを自動的に何度も起動しながら徐々に機械語プログラムを更新していくことができる。このため、機械語プログラムの最適化を自動化することができ、ユーザの機械語プログラムのチューニングに要する工数を最小限に抑えつつ、最適な機械語プログラムを自動的に選択して決定していくことができる。よって、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるプログラム開発システムを提供することができる。
【0017】
なお、本発明は、このような特徴的な手段を備えるデバッグシステムおよびプログラム開発システムとして実現することができるだけでなく、デバッグシステムおよびプログラム開発システムに含まれる特徴的な手段をステップとするデバッグ支援方法およびプログラム開発方法として実現したり、デバッグ支援方法およびプログラム開発方法に含まれる特徴的なステップをコンピュータに実行させるプログラムとして実現したりすることもできる。そして、そのようなプログラムは、CD−ROM(Compact Disc-Read Only Memory)等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
【発明の効果】
【0018】
本発明によると、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるデバッグシステムおよびプログラム開発システムを提供することができる。
【図面の簡単な説明】
【0019】
【図1】本発明の実施の形態に係るプログラム開発システムの構成を示すブロック図である。
【図2】本発明の実施の形態に係るコンパイルシステムの構成を示すブロック図である。
【図3】行番号維持変換部におけるプログラム変換例を示す図である。
【図4】行番号維持変換部における他のプログラム変換例を示す図である。
【図5】行番号維持変換部における他のプログラム変換例を示す図である。
【図6】行番号維持変換部における他のプログラム変換例を示す図である。
【図7】行番号テーブル情報の一例を模式的に示す図である。
【図8】シンボルテーブル情報の一例を示す図である。
【図9】ソース変換デバッグ情報生成出力部が出力するソース変換デバッグ情報の一例を示す図である。
【図10】行調整部が解釈可能なプリプロセッサ指示文の一例を示した図である。
【図11】行調整部が実行する処理のフローチャートである。
【図12】行番号調整部が実行する処理のフローチャートである。
【図13】本発明の実施の形態に係るデバッグシステムの構成を示すブロック図である。
【図14】ソース変換情報表示部が表示したソース変換情報の一例を示す図である。
【図15】デバッグ処理部によりデバッグ処理された結果の表示画面を示す図である。
【図16】プロファイラ部が出力するプロファイル情報の一例を示す図である。
【図17】プロファイル情報活用最適化部の処理内容を示すフローチャートである。
【図18】変更行のみの集合を表現した行番号テーブル情報の一例を示す図である。
【図19】一対一の対応関係の表構造を採用したシンボルテーブル情報の一例を示す図である。
【図20】本発明の実施の形態に係るプログラム開発システムの他の構成を示すブロック図である。
【図21】本発明の実施の形態に係るプログラム開発システムの他の構成を示すブロック図である。
【発明を実施するための形態】
【0020】
以下、図面を参照しながら本発明の実施の形態に係るプログラム開発システムについて説明する。
【0021】
図1は、本発明の実施の形態に係るプログラム開発システムの構成を示すブロック図である。
【0022】
プログラム開発システム11は、入力されたC言語等の高級言語で記述されたソースプログラム(図示せず)から最終的に機械語プログラム104を生成するシステムであり、コンパイルシステム1とデバッグシステム6とを備えている。
【0023】
コンパイルシステム1は、ソースプログラムおよびプロファイル情報131を読み込み、ソースプログラムを機械語プログラム104に変換するシステムである。コンパイルシステム1の詳細な構成については後述する。
【0024】
デバッグシステム6は、機械語プログラム104を読み込み、機械語プログラム104のシミュレーションや情報表示を行って、機械語プログラム104およびソースプログラムの分析・デバッグを支援するシステムである。デバッグシステム6は、機械語プログラム104を実行することによりコンパイルシステム1における最適化のためのヒントとなる情報であるプロファイル情報131を出力する。デバッグシステム6の詳細については後述する。
【0025】
図2は、本発明に係るプログラム開発システムの構成要素であるコンパイルシステム1の構成を示すブロック図である。
【0026】
コンパイルシステム1は、ドライバ2と、ソースレベルオプティマイザ3と、プリプロセッサ4と、コンパイラ5とを備えている。コンパイルシステム1の各構成部は、コンピュータ(図示せず)上で実行されるプログラムとして実現される。
【0027】
ソースレベルオプティマイザ3は、特許請求の範囲に示すソースプログラム変換手段の一例である。プリプロセッサ4は、特許請求の範囲に示すプリプロセッサ手段の一例である。コンパイラ5は、特許請求の範囲に示すコンパイル手段の一例である。
【0028】
ドライバ2は、ユーザが指定したコンパイルオプションに従って、コンパイルシステム1の他の構成要素であるソースレベルオプティマイザ3、プリプロセッサ4およびコンパイラ5を必要に応じて適切なオプションで起動する機能を有する。
【0029】
ソースレベルオプティマイザ3は、プロファイル情報131とユーザが記述したオリジナルソースプログラム101とを入力として受け、ソースレベルでの最適化処理を施し、最適化されたソースプログラムである最適化ソースプログラム102を出力する。ここで実施される最適化は、ベクトル化およびマルチスレッド化などの並列化、プロファイル情報活用最適化、ならびにファイル間最適化などである。ソースレベルオプティマイザ3は、プロファイル情報131を入力として受けることも可能であり、プロファイル情報131が入力された場合には、それを活用した最適化および変換を実施することができる。
【0030】
プリプロセッサ4は、最適化ソースプログラム102を入力として受け、コンパイラ5でのコンパイル処理に先立って、C言語で記述された最適化ソースプログラム102に含まれる“#define”などのプリプロセッサ指示文を解釈し、解釈結果に基づく前処理を行ない、前処理後のソースプログラムであるプリプロセス後ソースプログラム103をコンパイラ5に渡す。
【0031】
コンパイラ5は、入力されたプリプロセス後ソースプログラム103を中間言語で記述された内部中間表現に変換し、最適化を施した後、ターゲットプロセッサ向けの機械語プログラム104を生成する。
【0032】
以下、コンパイルシステム1の各構成要素の詳細な構成とその動作について説明する。
【0033】
ドライバ2は、ユーザ指定オプション処理部21を備える。ユーザ指定オプション処理部21は、コンパイルシステム1で生成される最終デバッグ情報112に関するユーザのオプション指示をコンパイラ5に伝達する。具体的には、ユーザのオプション指示には以下の3通りの指示が存在する。
(1)オリジナルソースプログラム101に基づくデバッグ情報を生成する指示
(2)最適化ソースプログラム102に基づくデバッグ情報を生成する指示
(3)オリジナルソースプログラム101に基づくデバッグ情報と最適化ソースプログラム102に基づくデバッグ情報との両方のデバッグ情報を生成する指示
【0034】
3通りのオプション指示のうち、指示(1)は“−orgsrcdbg”オプション、指示(2)は“−optsrcdbg”オプション、指示(3)は“−bothsrcdbg”オプションにそれぞれ対応する。
【0035】
例えば、オリジナルソースプログラム101のファイル名が「test.c」であり、コンパイルシステム1を起動するためのコマンドが「cc」である場合に、コンパイルシステム1に対して指示(1)を行なう場合には、ユーザは、コマンドラインにおいて「cc −orgsrcdbg test.c」というコマンドを入力する。
【0036】
ソースレベルオプティマイザ3は、行番号維持変換部31と、ソース変換デバッグ情報生成出力部32と、プロファイル情報活用最適化部33とを備えている。
【0037】
行番号維持変換部31は、特許請求の範囲に示す行番号維持変換部の一例である。ソース変換デバッグ情報生成出力部32は、特許請求の範囲に示すソース変換デバッグ情報生成部の一例である。
【0038】
プロファイル情報活用最適化部33は、入力されたプロファイル情報131を考慮した最適化を行う機能を有する。プロファイル情報活用最適化部33の動作については後で述べる。
【0039】
行番号維持変換部31は、ソースレベルの最適化に伴う変換を実施しつつ、デバッグ性を維持するためにオリジナルソースプログラム101の各文の行番号が変換後の最適化ソースプログラム102においても変化しないように維持する機能を有する。
【0040】
図3は、行番号維持変換部31におけるプログラム変換例を示す図である。
【0041】
行番号維持変換部31は、図3(a)に示すようなオリジナルソースプログラム101に対して、図3(b)に示すようにループをキャッシュメモリのライン単位のループに分割してプリフェッチ処理を挿入する最適化を実施する。その後、行番号維持変換部31は、図3(c)のように新たに生成された文の行を詰め、図3(a)のオリジナルソースプログラム101の各文の行番号を維持するような変換処理を行い、最適化ソースプログラム102を生成する。すなわち、行番号維持変換部31は、変数sumへの代入文の行番号が、オリジナルソースプログラム101と最適化ソースプログラム102とで同じ2行目となるような変換処理を行なう。
【0042】
図4は、行番号維持変換部31における他のプログラム変換例を示す図である。
【0043】
行番号維持変換部31は、図4(a)に示すようなオリジナルソースプログラム101に対して、図4(b)に示すように最内ループ処理をベクトル化してベクトル命令vaddで処理するように変換を実施する。その後、行番号維持変換部31は、図4(c)に示すように変換処理において削減された行に対して空行を挿入し、図4(a)のオリジナルソースプログラム101の各文の行番号を維持するような変換処理を行い、最適化ソースプログラム102を生成する。すなわち、行番号維持変換部31は、オリジナルソースプログラム101における2行目と4行目とを空行で埋めることにより、オリジナルソースプログラム101と最適化ソースプログラム102との行番号の維持を行なっている。
【0044】
ソース変換デバッグ情報生成出力部32は、オリジナルソースプログラム101のソースレベル変換に伴って、オリジナルソースプログラム101と最適化ソースプログラム102との間で、行番号に変更が生じた場合や、関数名や変数名などのシンボル名に変更が生じた場合に、それぞれ行番号テーブル情報121およびシンボルテーブル情報122をソース変換デバッグ情報111として出力する機能を有する。
【0045】
図5は、行番号維持変換部31における他のプログラム変換例を示す図である。
【0046】
図5(a)は、ソースレベルオプティマイザ3による最適化前のオリジナルソースプログラム101を示しており、104行目が空行である。ソースレベルオプティマイザ3による最適化が行なわれ、105行目の直前にプラグマ指令「#pragma ***」が挿入されることになった場合には、空行である104行目に当該プラグマ指令が挿入され、図5(b)に示すような最適化ソースプログラム102が生成される。このような処理により、オリジナルソースプログラム101と最適化ソースプログラム102との行番号が維持される。
【0047】
図6は、行番号維持変換部31における他のプログラム変換例を示す図である。
【0048】
図6(a)は、ソースレベルオプティマイザ3による最適化前のオリジナルソースプログラム101を示している。ソースレベルオプティマイザ3による最適化が行なわれ、104行目の直前にプラグマ指令「#pragma ***」が挿入されることになった場合には、行番号維持変換部31は、オリジナルソースプログラム101の103行目の「}」を102行目に移動させ、103行目にプラグマ指令「#pragma ***」を挿入することにより、図6(b)に示すような最適化ソースプログラム102を生成する。このような処理により、オリジナルソースプログラム101と最適化ソースプログラム102との行番号が維持される。
【0049】
図7は、行番号テーブル情報121の一例を模式的に示す図である。図7(a)はソースレベル変換に伴う行番号の変化の一例を示した図である。すなわち、行番号テーブル情報121には、変換前のプログラムであるオリジナルソースプログラム101は7行のプログラムであり、変換後の最適化ソースプログラム102は10行のプログラムであることが示されている。また、行番号テーブル情報121では、ソースレベル変換により、オリジナルソースプログラム101の2行目が削除されていることが示されている。また、オリジナルソースプログラム101の4行目および5行目が最適化ソースプログラム102では3行目から7行目に変更されていることが示されている。さらに、オリジナルソースプログラム101にはなかった文が最適化ソースプログラム102の10行目に追加されていることが示されている。
【0050】
図7(b)は、図7(a)に示した行番号テーブル情報121と同様の内容を示した行番号テーブル情報121である。左欄はオリジナルソースプログラム101の行番号を示し、右欄は最適化ソースプログラム102の行番号を示している。行番号テーブル情報121において、“−”となっている部分は、対応する行が存在しないことを示し、“3−7”の部分は、3行目から7行目という意味で、ソース行の範囲を示している。例えば、オリジナルソースプログラム101における4行目から5行目までが、最適化ソースプログラム102における3行目から7行目に対応することが示されている。
【0051】
このように、ソース変換デバッグ情報生成出力部32では、ソースレベル変換前後で行番号が変更される部分について、それぞれの部分の対応関係を表にまとめる。ただし、後述するプリプロセッサ4およびコンパイラ5にて行番号調整される項目に関しては、ソース変換デバッグ情報111がなくても行番号の調整が実施されるので、ここではそれを考慮した上で必要な情報を生成する。
【0052】
図8は、シンボルテーブル情報122の一例を示す図である。ソース変換デバッグ情報生成出力部32では、ソースレベル変換前後で変数名および関数名が変わるもの、複数の関数および変数に分割されるもの、複数の関数および変数が統合されるものについて、それぞれのシンボルの対応関係を表にまとめる。図8に示されるように、シンボルによっては変換前のシンボルが変換後の複数のシンボルに対応する場合もあり、その場合はそれらすべてを表に保持することになる。図8の行番号テーブル情報121では、オリジナルソースプログラム101におけるシンボル名が変換前シンボル名として示されており、最適化ソースプログラム102におけるシンボル名が変換後シンボル名として示されている。たとえば、シンボルテーブル情報122は、オリジナルソースプログラム101におけるシンボル名aが、最適化ソースプログラム102ではシンボル名a1およびa2に変換されていることが示されている。
【0053】
ソース変換デバッグ情報生成出力部32は、さらに、コンパイラ5における最適化を支援するための最適化支援情報123もソース変換デバッグ情報111として生成する。具体的には、ソースレベルオプティマイザ3でのソースプログラムの各変換部分に対する変換前後または変換候補の対応関係の組み合わせと、各ソースプログラム部分の実行サイクル数を生成する。後者の実行サイクル数については、プロファイル情報131にて指定された場合にのみ値が設定され、それ以外の場合には“0”が設定される。ここで、変換後のソースプログラムの変換部分に関する情報には必ずしも1つに限定される必要はなく、複数の変換候補パターンについてソースプログラムの情報およびサイクル数を出力することができる。
【0054】
図9は、ソース変換デバッグ情報生成出力部32が出力するソース変換デバッグ情報111の一例を示す図である。
【0055】
ソース変換デバッグ情報111は、上記行番号テーブル情報121、シンボルテーブル情報122および最適化支援情報123を示すテキスト情報であり、出力ファイルである最適化ソースプログラム102の末尾にコメントとして出力される。
【0056】
すなわち、main関数の部分が最適化ソースプログラム102に相当する。また、「/*」および「*/」で囲まれたコメント文のうち、タグ<DebugInfo>およびタグ</DebugInfo>で囲まれた部分がソース変換デバッグ情報111を示している。また、タグ<LineInfo>およびタグ</LineInfo>で囲まれた部分が行番号テーブル情報121を示している。さらに、タグ<SymbolInfo>およびタグ</SymbolInfo>で囲まれた部分がシンボルテーブル情報122を示している。さらにまた、タグ<TransInfo>およびタグ</TransInfo>で囲まれた部分が最適化支援情報123を示している。
【0057】
行番号テーブル情報121は、ここでは、タグ<block>およびタグ</block>で囲まれた3行よりなり、1行目は、オリジナルソースプログラム101の7行目が最適化ソースプログラム102では削除されていることを示している。2行目は、オリジナルソースプログラム101の8〜9行目が最適化ソースプログラム102の7〜11行目に変更されていることを示している。3行目は、オリジナルソースプログラム101にはなかった文が最適化ソースプログラム102の12行目に追加されていることを示している。
【0058】
シンボルテーブル情報122は、ここでは、タグ<symbol>およびタグ</symbol>で囲まれた1行よりなり、オリジナルソースプログラム101のシンボルaが最適化ソースプログラム102ではシンボルa1,a2およびa3に対応することが示されている。
【0059】
最適化支援情報123のうち、タグ<File>およびタグ</File>で囲まれた部分に示された文字列「test.c」は、コンパイル対象となっているオリジナルソースプログラム101のファイル名を示している。タグ<Line>およびタグ</Line>囲まれた部分に示されている値「23」は、オリジナルソースプログラム101の変換部分の先頭の行番号を示している。タグ<Pattern>およびタグ</Pattern>で囲まれた部分がソースレベルオプティマイザ3による変換後の変換パターンを示しており、ここでは2種類の変換パターンが示されている。それぞれの変換パターンには識別子が付されており、タグ<ID>およびタグ</ID>でそれぞれ囲まれた部分である。すなわち、識別子として、「1」および「2」という番号が付されている。また、各変換パターンはタグ<Code>およびタグ</Code>で囲まれた部分である。それぞれの変換パターンを機械語命令に置き換えて実行した際のサイクル数がタグ<cycle>およびタグ</cycle>で囲まれた部分に示されており、識別子「1」の変換パターンの実行サイクル数として0が設定されている。これは、上述したように、プロファイル情報131による実行サイクル数の指定がないことを示している。一方、識別子「2」の変換パターンの実行サイクル数として1500が設定されている。これは、識別子「2」の変換パターンの実行サイクル数が1500サイクルであることを示している。また、識別子「2」の変換パターンがユーザによって選択されていることが「<UserSelect>True</UserSelect>」により示されている。
【0060】
次に、図2に示したプリプロセッサ4について説明する。プリプロセッサ4は、行調整部41を備えている。行調整部41は、特許請求の範囲に示す指示分削除手段の一例である。
【0061】
従来のプリプロセッサによる処理では、プリプロセッサ指示文を解釈してそれに応じた処理を行い、当該プリプロセッサ指示行は空行として出力し、オリジナルソースプログラムの各文の行番号は維持される。例えば、従来のプリプロセッサは、“#define A B”というプリプロセッサ指示文を受け付けると、ソースプログラム中のAをすべてBに置換し、当該プリプロセッサ指示文の存在した行は空行として出力する。
【0062】
本発明に係るプリプロセッサ4の行調整部41は、最適化ソースプログラム102を入力して、ソースレベルオプティマイザ3にて挿入された“#pragma”などのプリプロセッサ指示を認識し、当該指示文に対応する処理を施した後、ソースレベルオプティマイザ3にて挿入されたプリプロセッサ指示文についてはその行自体を削除する。これによって、ソースレベルオプティマイザ3によるプリプロセッサ指示行挿入によって生じたオリジナルソースプログラム101と最適化ソースプログラム102との行番号のずれが解消され、当該部分についてはオリジナルソースプログラム101とプリプロセス後ソースプログラム103との行番号の対応が確保される。
【0063】
図10は、行調整部41が解釈可能なプリプロセッサ指示文の一例を示した図である。行調整部41は、本図に示すようなプリプロセッサ指示文の一種であるプラグマ指示をリストとして保持しており、このリストに登録されているプリプロセッサ指示文に対して上述した処理を行なう。
【0064】
図11は、行調整部41が実行する処理のフローチャートである。行調整部41は、最適化ソースプログラム102に含まれるプリプロセッサ指示文に基づいて、当該文で示されている指示による処理を実行する(S12)。次に、行調整部41は、処理を実行したプリプロセッサ指示文が図10に示すようなリストに登録されているか否かを判断する(S14)。プリプロセッサ指示文がリストに登録されている場合には(S14でYES)、行調整部41は、当該プリプロセッサ指示文が記述されている行を最適化ソースプログラム102より削除する(S16)。プリプロセッサ指示文がリストに登録されていない場合には(S14でNO)、行調整部41は、当該プリプロセッサ指示文が記述されている行を空行に変換する(S18)。以上のような処理を行なうことにより、プリプロセッサ4は、最適化ソースプログラム102をプリプロセス後ソースプログラム103に変換する。
【0065】
次に、図2に示したコンパイラ5について説明する。コンパイラ5は、行番号調整部51と、最終デバッグ情報選択生成部52とを備えている。行番号調整部51は、特許請求の範囲に示す行番号情報生成部の一例である。最終デバッグ情報選択生成部52は、特許請求の範囲に示すデバッグ情報生成手段およびデバッグ情報出力手段の一例である。
【0066】
コンパイラ5は、プリプロセス後ソースプログラム103を入力として受け、通常内部の行番号カウンタをインクリメントしながら一行ずつ字句解析および構文解析しながら、各文を解釈し、最終デバッグ情報112の一部である行番号情報を生成するために、各文と行番号との対応付けを行う。
【0067】
行番号調整部51は、プリプロセス後ソースプログラム103の中の、ソースレベルオプティマイザ3にて挿入された“#pragma”などのコンパイル指示を認識し、当該指示に対応する処理を施したあと、ソースレベルオプティマイザ3で挿入されたコンパイル指示に基づく処理した際には、内部の行番号カウンタをデクリメントする。このようにして、行番号調整部51は、ソースレベルオプティマイザ3にて挿入されたコンパイル指示を無視した行番号情報を生成する。これによって、ソースレベルオプティマイザ3によるコンパイル指示行挿入によって生じたオリジナルソースプログラム101とプリプロセス後ソースプログラム103との行番号のずれをコンパイラ5内部で吸収し、当該部分についてはオリジナルソースプログラム101とコンパイラ5内部の文と行番号の対応関係についての整合性が確保される。
【0068】
なお、行番号調整部51が解釈可能なコンパイル指示の一例は、プリプロセッサ4の行調整部41が解釈可能なプリプロセッサ指示と同様である。すなわち、行番号調整部51は、図10に示した行調整部41が解釈可能なプリプロセッサ指示のリストと同様のリストを保持している。
【0069】
図12は、行番号調整部51が実行する処理のフローチャートである。行番号調整部51は、プリプロセス後ソースプログラム103に含まれるコンパイル指示に基づく処理を実行する(S22)。行番号調整部51は、当該コンパイル指示が上述のリストに登録されているか否かを調べる(S24)。コンパイル指示がリストに登録されている場合には(S24でYES)、行番号調整部51は、上述したように内部の行番号カウンタをデクリメントすることにより、行番号の調整処理を行なう(S26)。すなわち、コンパイル指示行を除いて行番号をカウントするような調整処理を行なう。
【0070】
最終デバッグ情報選択生成部52は、ドライバ2から伝達されたユーザが指定したコンパイルオプションの指示にしたがって、以下のいずれかの情報を最終デバッグ情報112として機械語プログラム104中に含めて出力する。
(1)オリジナルソースプログラム101に基づくデバッグ情報
(2)最適化ソースプログラム102に基づくデバッグ情報
(3)オリジナルソースプログラム101に基づくデバッグ情報と最適化ソースプログラム102に基づくデバッグ情報との両方のデバッグ情報
【0071】
特に、オリジナルソースプログラム101に基づくデバッグ情報が必要な場合には((1)および(2)の場合)、最終デバッグ情報選択生成部52は、プリプロセス後ソースプログラム103とソース変換デバッグ情報111から必要な情報(例えば、機械語命令とソースコードとの行およびシンボルの対応関係)を生成する。具体的には、最終デバッグ情報選択生成部52は、行番号テーブル情報121に基づいてオリジナルソースプログラム101の行情報を生成し、シンボルテーブル情報122に基づいてオリジナルソースプログラム101のシンボル情報を生成し、最終デバッグ情報112に含めて出力する。さらに、最終デバッグ情報選択生成部52は、最適化支援情報123についても最終デバッグ情報112に含めて出力する。
【0072】
コンパイルシステム1が以上のような構成をとることにより、ソースレベルオプティマイザ3を採用した場合でも、オリジナルソースプログラム101に基づいたデバッグ情報(最終デバッグ情報112)を生成することができる。これに伴い、ユーザは、オリジナルソースプログラム101に基づいたソースレベルデバッグが可能となる。また、ソースレベルオプティマイザ3による行番号維持変換処理や、プリプロセッサ4やコンパイラ5による行調整処理などの複数の処理を組み合わせて活用することにより、ソース変換デバッグ情報111など、従来のコンパイルシステムにはない追加情報の情報量を極力削減することが可能となる。
【0073】
図13は、本発明に係るプログラム開発システム11の構成要素であるデバッグシステム6の構成を示すブロック図である。
【0074】
デバッグシステム6は、コンパイルシステム1で生成された機械語プログラム104を入力として受け、ユーザとのインタラクティブなインタフェースによってプログラムのシミュレーションや情報表示を行って、プログラムの分析・デバッグを支援する開発ツールであり、シミュレータ部7と、デバッグ処理部8と、GUI(Graphical User Interface)処理部9と、プロファイラ部10とを備える。
【0075】
シミュレータ部7は、特許請求の範囲に示すプログラム実行手段および実行ログ出力手段の一例である。デバッグ処理部8は、特許請求の範囲に示すデバッグ支援手段の一例である。GUI処理部9は、特許請求の範囲に示すプログラム表示制御手段の一例である。プロファイラ部10は、特許請求の範囲に示すプロファイル情報生成手段およびプロファイラ手段の一例である。
【0076】
シミュレータ部7は、機械語プログラム104中の機械語命令を解釈し、ターゲットプロセッサでの動作をシミュレートする機能を有する。さらに、シミュレータ部7は、実行時の制御フローやサイクル数を含めた実行ログ情報132を出力する機能を有する。
【0077】
デバッグ処理部8は、機械語プログラム104内の最終デバッグ情報112を参照して、ユーザからの指示に従ってシミュレータ部7でのシミュレーションを制御したり、GUI処理部9にて必要な情報を表示するような制御をしたりする機能を有しており、デバッグ情報選択部81を備える。
【0078】
デバッグ情報選択部81は、ユーザのオプション指定またはコマンド指示に従って、オリジナルソースプログラム101に基づくソースレベルデバッグ機能を提供するのか、最適化ソースプログラム102に基づくソースレベルデバッグ機能を提供するのかを選択する。具体的には、デバッグシステム6起動時に“−orgsrc”オプションが指定された場合または“orgsrc”コマンド指示が与えられた場合には、機械語プログラム104内の最終デバッグ情報112のうち、オリジナルソースプログラム101に基づくデバッグ情報を選択して参照し、そのデバッグ情報に基づいてデバッグ機能を提供する。また、“−optsrc”オプションが指定された場合または“optsrc”コマンド指示が与えられた場合には、機械語プログラム104内の最終デバッグ情報112のうち、最適化ソースプログラム102に基づくデバッグ情報を選択して参照し、そのデバッグ情報に基づいてデバッグ機能を提供する。
【0079】
例えば、機械語プログラム104のファイル名が「test.out」であり、デバッグシステム6を起動するためのコマンドが「debug」である場合には、“−orgsrc”オプションの指定は、ユーザがコマンドライン上で「debug −orgsrc test.out」と入力することにより行なわれる。
【0080】
GUI処理部9は、グラフィカルなユーザインタフェースを提供する部分であり、ユーザの指示を受け付ける機能や、プログラムに関する情報を表示する機能を有しており、ソース変換情報表示部91を備える。ソース変換情報表示部91は、特許請求の範囲に示す変換箇所表示制御手段および選択受け付け手段の一例である。
【0081】
ソース変換情報表示部91は、ソースレベルオプティマイザ3による最適化前後のソース部分の情報を表示する機能を有する。具体的には、ソース変換情報表示部91は、最終デバッグ情報112を参照し、当該部分に該当するオリジナルソースプログラム101中および最適化ソースプログラム102中のソース部分を検出するかまたは最適化支援情報123から当該ソース部分の情報を抽出し、ユーザ指示に基づいていずれかのソース部分もしくは両方のソース部分を表示する。さらに、ソース変換情報表示部91は、各ソース部分についての実行サイクル数やユーザによる選択状況も表示することが可能である。実行サイクル数については、コンパイルシステム1に後述するプロファイル情報131が入力された場合にのみ、最終デバッグ情報112から有効な値を抽出することが可能である。
【0082】
図14は、ソース変換情報表示部91が表示するソース変換情報の表示画面の一例を示す図である。表示画面200には、ソースプログラムウィンドウ202と、1つめの変換パターンを示すポップアップウィンドウ204と、2つめの変換パターンを示すポップアップウィンドウ206とが表示されている。ソースプログラムウィンドウ202は、オリジナルソースプログラム101を表示するためのウィンドウである。ポップアップウィンドウ204は、オリジナルソースプログラム101のうち、ソースレベルオプティマイザ3による変換前の部分を表示するためのウィンドウである。ポップアップウィンドウ206は、最適化ソースプログラム102のうち、ポップアップウィンドウ204に表示された部分に対応するソースレベルオプティマイザ3による変換後の部分を表示するためのウィンドウである。
【0083】
なお、ポップアップウィンドウ204およびポップアップウィンドウ206に表示されているソースレベルオプティマイザ3による変換前後のプログラムには、それを実行した際の実行サイクル数と、ユーザによりいずれの変換パターンが選択されているかが示されている。すなわち、ポップアップウィンドウ204には、「cycle:−」および「select:false」と記述されていることにより、実行サイクル数が未定であり、かつユーザによる選択がなされていないことが示されている。一方、ポップアップウィンドウ206には、「cycle:1500」および「select:true」と記述されていることより、実行サイクル数が1500サイクルであり、ユーザによりこの変換パターンが選択されていることが示されている。
【0084】
この表示により、ユーザはソースレベルオプティマイザ3による変換の候補を知ることができるとともに、場合によっては実行サイクル数も知ることができ、いずれのソースとするのが望ましいかを選択することが可能となる。
【0085】
ユーザはGUI処理部9を通じて上記変換パターンの候補のうちのいずれを選択するかを指定することができる。すなわち、表示画面200には、ユーザに2通りの変換パターンのうちのいずれかを選択される旨のメッセージ「いずれを選択しますか?」が表示されており、3通りのボタン208〜212が表示されている。ユーザがマウス等を利用してボタン208を押下すると、ポップアップウィンドウ204に示された1番目の変換パターンが選択され、ボタン210を押下すると、ポップアップウィンドウ206に示された2番目の変換パターンが選択される。また、ボタン212を押下すると、ユーザがいずれの変換パターンの選択をも行なわないこととなる。このため、変換パターンの選択が行なわれない場合には、コンパイラ5において、例えば、サイクル数の最も小さい変換パターンが選択され、機械語プログラム104が生成されることとなる。
【0086】
変換パターンの選択結果は、プロファイラ部10に出力される。プロファイラ部10は、最終的にユーザの選択をプロファイル情報131として出力することができる。なお、プロファイル情報131の詳細については後述する。
【0087】
図15は、デバッグ処理部8によりデバッグ処理された結果の表示画面であり、GUI処理部9により表示される。デバッグ表示画面300は、アセンブラプログラム表示ウィンドウ302と、変換前ソースプログラム表示ウィンドウ304と、変換後ソースプログラム表示ウィンドウ306と、コマンド入出力ウィンドウ308とを含む。
【0088】
変換前ソースプログラム表示ウィンドウ304には、オリジナルソースプログラム101が表示される。なお、オリジナルソースプログラム101の行数も同時に表示される。
【0089】
変換後ソースプログラム表示ウィンドウ306には、最適化ソースプログラム102が表示される。なお、最適化ソースプログラム102の行数も同時に表示される。
【0090】
アセンブラプログラム表示ウィンドウ302には、最適化ソースプログラム102をコンパイルした後のアセンブラプログラムが表示される。なお、アセンブラプログラムの行数またはラベルも同時に表示される。
【0091】
コマンド入出力ウィンドウ308は、デバッグ処理部8におけるデバッグの結果を表示したり、デバッグを行なう際のコマンドを入力したりするためのウィンドウである。
【0092】
デバッグ表示画面300は、アセンブラプログラム表示ウィンドウ302に表示されたアセンブラプログラムに対応する機械語プログラムをシミュレータ部7にて実行した際の結果を示している。例えば、コマンド入出力ウィンドウ308に示されるように、オリジナルソースプログラム101の27行目において、本来正の値を取らなければならないループカウンタiの値が「−1」になっており、エラーであることが表示されている。なお、エラーを引き起こした箇所がアセンブラプログラム表示ウィンドウ302、変換前ソースプログラム表示ウィンドウ304および変換後ソースプログラム表示ウィンドウ306において、ハイライト表示されている。ユーザは、コマンド入出力ウィンドウ308にデバッグのための命令を入力したり、各変数に値を代入したりすることにより、アセンブラプログラム、オリジナルソースプログラム101および最適化ソースプログラム102のエラー箇所を対応付けて表示することができる。
【0093】
プロファイラ部10は、シミュレータ部7から受け取った実行ログ情報132を解析し、ソースレベルオプティマイザ3での各ソース変換部分に関するサイクル数を計測して、最終デバッグ情報112に含まれているソース部分に対応づけてサイクル数を設定し、コンパイルシステム1における最適化のヒントとなるプロファイル情報131として出力する。さらに、GUI処理部9を通じてユーザがソース変換候補のいずれかを選択した場合には、その選択情報もプロファイル情報131として出力する。
【0094】
図16は、プロファイラ部10が出力するプロファイル情報131の一例を示す図である。
【0095】
プロファイル情報131は、タグ<ProfileInfo>およびタグ</ProfileInfo>で囲まれた部分である。なお、タグ<TransInfo>およびタグ</TransInfo>で囲まれた部分がコンパイル時における最適化時の支援情報となる最適化支援情報を示している。プロファイル情報131は、ソース変換デバッグ情報111内の最適化支援情報123に対応した各変換パターンに対応して、プロファイラ部10での実行ログ分析に基づく実行サイクル数の値が設定されている。また、GUI処理部9を通してユーザによって変換パターンが選択されているか否かを示す“true”もしくは“false”の選択状態の値が設定されている。図16に示されている最適化支援情報は、図9に示した最適化支援情報123と同様である。このため、その詳細な説明はここでは繰り返さない。
【0096】
プロファイル情報131は、コンパイルシステム1のソースレベルオプティマイザ3に含まれるプロファイル情報活用最適化部33において活用されることになる。
【0097】
図17は、プロファイル情報活用最適化部33の処理内容を示すフローチャートである。
【0098】
プロファイル情報活用最適化部33は、プロファイル情報131を参照し、各ソース変換部分(タグ<TransInfo>およびタグ</TransInfo>で囲まれた部分)について、ユーザによっていずれかの候補パターンを選択する旨の情報が設定されているかどうかを判定する(S1)。すなわち、プロファイル情報活用最適化部33は、タグ<UserSelect>およびタグ</UserSelect>で囲まれた部分がTrueになっている候補パターンがあるか否かを判断する。
【0099】
候補パターンを選択する旨の設定がされていた場合には(S1でYES)、プロファイル情報活用最適化部33は、ユーザによる選択指示に従って、コンパイル対象とする候補パターンを決定する(S2)。
【0100】
候補パターンを選択する旨の設定がされていない場合には(S1でNO)、プロファイル情報活用最適化部33は、すべての変換候補に対してサイクル数が設定済みであるかどうかを判定する(S3)。すなわち、すべての変換候補について、タグ<cycle>およびタグ</cycle>で囲まれた部分に0以外の値が設定されているか否かを判定する。
【0101】
すべての変換候補に対してサイクル数が設定済みであった場合には(S3でYES)、プロファイル情報活用最適化部33は、変換候補パターンの中から最もサイクル数が少ないパターンを、コンパイル対象とする候補パターンとして選択する(S4)。
【0102】
サイクル数が未設定の変換候補パターンがある場合には(S3でNO)、サイクル数を設定するためのシミュレーションをデバッグシステム6のシミュレータ部7で行なわせるために、プロファイル情報活用最適化部33は、サイクル数が未設定の変換候補パターンのうちのいずれかを任意に選択する(S5)。選択された変換候補パターンは、コンパイル対象とされる。
【0103】
図16に示した例では、2番目の変換候補パターン131bがユーザにより選択されている。したがって、変換候補パターン131bがコンパイル対象とされる。
【0104】
本実施の形態によると、プログラム開発システム11では、機械語プログラム104とプロファイル情報131とを介してコンパイルシステム1とデバッグシステム6とを自動的に何度も起動しながら、徐々に機械語プログラム104を更新していくことができる。具体的には、ソースレベルオプティマイザ3で実施するソースレベル変換の複数の変換候補に対して、最もサイクル数が小さくなるパターンを自動的に選択して決定していくことができる。
【0105】
このようにプログラム開発システム11では、ユーザのチューニングに要する工数を最小限に抑えつつ、最適なコードを生成することができる。
【0106】
また、コンパイルシステム1においてソースレベルオプティマイザ3を採用した場合でも、オリジナルソースプログラム101に基づいたデバッグ情報(最終デバッグ情報112)を生成することができる。これに伴い、ユーザは、オリジナルソースプログラム101に基づいたソースレベルデバッグが可能となる。また、ソースレベルオプティマイザ3による行番号維持変換処理や、プリプロセッサ4やコンパイラ5による行調整処理などの複数の処理を組み合わせて活用することにより、ソース変換デバッグ情報111など、従来のコンパイルシステムにはない追加情報の情報量を極力削減することが可能となる。
【0107】
以上、本発明に係るプログラム開発システムおよびその構成要素について、実施の形態に基づいて説明したが、本発明はこれらの実施形態に限られない。即ち、以下のような変形が考えられる。
【0108】
(1)上記実施の形態では、C言語の言語仕様およびプリプロセッサ指示仕様を想定していたが、本発明はC言語のみに限定されるものではなく、他のプログラミング言語を採用した場合でも本発明の有意性は保たれる。
【0109】
(2)上記実施の形態では、行番号テーブル情報121として、変換前後の行番号の対応関係を表構造で表しているが、本発明はこの情報仕様に限定されるものではない。例えば、行番号の変更ポイント(変更行)のみの集合を表現するといった仕様であったとしても本発明の有意性は保たれる。図18は、変更行のみの集合を表現した行番号テーブル情報の一例を示す図である。同図に示す行番号テーブル情報は、図7(a)に示した行番号テーブル情報121と同様の内容を示している。すなわち、変換前のプログラムであるオリジナルソースプログラム101の3行目から始まる行が変換後のプログラムである最適化ソースプログラム102の2行目から始まる行に対応することが示されている。また、オリジナルソースプログラム101の6行目から始まる行が最適化ソースプログラム102の8行目から始まる行に対応することも示されている。
【0110】
(3)上記実施の形態では、シンボルテーブル情報122として、変更したシンボルの一対多の対応関係の表構造を採用しているが、本発明はこの情報仕様に限定されるものではない。例えば、複数シンボルに分割される場合は最終参照を採用する等のデバッグ仕様に基づいた一定のルールにしたがって一対一の対応関係の表構造を採用したとしても本発明の有意性は保たれる。図19は、一対一の対応関係の表構造を採用したシンボルテーブル情報の一例を示す図である。図19に示すシンボルテーブル情報は、図8に示したシンボルテーブル情報122と同様の内容を示す。ただし、図19に示すシンボルテーブル情報では、変換後のシンボル名が複数存在する場合には、最後に参照されるシンボル名のみを示している。例えば、オリジナルソースプログラム101におけるシンボル名bは、最適化ソースプログラム102においては、シンボル名b_1、b_2およびb_3に変換されるが、この3つのシンボル名のうち、最後に参照されるシンボル名がb_1であるため、図19に示すシンボルテーブル情報には、変換前シンボル名「b」と変換後シンボル名「b_1」とが対応付けられた記述されている。
【0111】
(4)上記実施の形態では、図9に示すようにソース変換デバッグ情報111を変換後のソースプログラム(最適化ソースプログラム102)内にコメントとして出力しているが、本発明はこの出力方法に限定されるものではない。例えば、ソース変換デバッグ情報111を最適化ソースプログラム102とは別ファイルとして出力する仕様を採用したとしても本発明の有意性は保たれる。
【0112】
(5)上記実施の形態では、コンパイルシステム1による最適化のためのプロファイル情報を出力するプロファイラ部10をデバッグシステム6内に内蔵していたが、本発明はこの構成に限定されるものではない。例えば、図20に示すようにプロファイラ部10を独立したプログラムであるプロファイラとして切り出したり、図21に示すようにプロファイラ部をコンパイラ内部に内蔵させたりしてプログラム開発システムを構成するようにしても本発明による効果を実現することができる。
【0113】
(6)上記実施の形態では、コンパイルシステム1へのヒント情報をプロファイル情報131として入力していたが、本発明はこの指示方法に限定されるものではない。たとえば、ユーザがコンパイルシステム1に対する指示の一種であるコンパイルオプションとしてヒント情報を与えるという方法を採用してもよい。
【0114】
(7)上記実施の形態では、デバッグシステム6のソース変換情報表示部91は図14のように変換前後の2つのソース部分を表示しているが、本発明はこれに限定されるものではない。ソース部分は2つに限られず、それ以上の変換候補に関する情報をデバッグ情報を介して伝達し、3つを超えるソース部分を同時もしくは選択的に表示するような構成にしてもよい。
【0115】
(8)上記実施の形態では、プリプロセッサ4の行調整部41およびコンパイラ5の行番号調整部51において、ソースレベルオプティマイザ3で挿入された“#pragma”などのプラグマ指示を認識して行の調整を実施していたが、行調整のための指示としては、プラグマ指示には限定せず、特定の組み込み関数を解釈することによりソースレベルオプティマイザで組込み関数が挿入されたことを認識するような構成にしてもよい。
【産業上の利用可能性】
【0116】
本発明は、コンパイルシステムやデバッグシステムを含んだプログラム開発システム等に適用できる。
【符号の説明】
【0117】
1 コンパイルシステム
2 ドライバ
3 ソースレベルオプティマイザ
4 プリプロセッサ
5 コンパイラ
6 デバッグシステム
7 シミュレータ部
8 デバッグ処理部
9 GUI処理部
10 プロファイラ部
11 プログラム開発システム
21 ユーザ指定オプション処理部
31 行番号維持変換部
32 ソース変換デバッグ情報生成出力部
33 プロファイル情報活用最適化部
41 行調整部
51 行番号調整部
52 最終デバッグ情報選択生成部
81 デバッグ情報選択部
91 ソース変換情報表示部
101 オリジナルソースプログラム
102 最適化ソースプログラム
103 プリプロセス後ソースプログラム
104 機械語プログラム
111 ソース変換デバッグ情報
112 最終デバッグ情報
121 行番号テーブル情報
122 シンボルテーブル情報
123 最適化支援情報
131 プロファイル情報
132 実行ログ情報

【特許請求の範囲】
【請求項1】
コンピュータを用いて、機械語プログラムのデバッグを支援するデバッグシステムであって、
高級言語で記述された第1ソースプログラムを最適化した高級言語で記述された第2ソースプログラムをコンパイルすることにより得られる機械語プログラムを実行するプログラム実行手段と、
前記第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報、および前記第2ソースプログラムと前記機械語プログラムとの対応関係を示す第2デバッグ情報を受け、前記プログラム実行手段における実行結果、前記第1デバッグ情報および前記第2デバッグ情報に基づいて、前記機械語プログラムのユーザによるデバッグを支援するデバッグ支援手段とを
コンピュータにより実現することを特徴とするデバッグシステム。
【請求項2】
前記デバッグ支援手段は、前記第1デバッグ情報を選択する指示および前記第2デバッグ情報を選択する指示のいずれかの指示を受け、受け取った指示に基づいて、前記第1デバッグ情報および前記第2デバッグ情報のいずれかと前記プログラム実行手段における実行結果とに基づいて、前記機械語プログラムのユーザによるデバッグを支援する
ことを特徴とする請求項1に記載のデバッグシステム。
【請求項3】
前記指示は、前記デバッグシステム起動時に外部より与えられるオプション指示またはコマンドによる指示である
ことを特徴とする請求項2に記載のデバッグシステム。
【請求項4】
前記デバッグシステムは、さらに、前記第1ソースプログラムおよび前記第2ソースプログラムの両方またはいずれか一方と、前記機械語プログラムとを対応付けて表示させるプログラム表示制御手段を備える
ことを特徴とする請求項1〜3のいずれか1項に記載のデバッグシステム。
【請求項5】
前記プログラム表示制御手段は、前記デバッグシステム起動時に外部より与えられるオプション指示またはコマンドによる指示に基づいて、表示するプログラムを決定する
ことを特徴とする請求項4に記載のデバッグシステム。
【請求項6】
前記デバッグシステムは、さらに、
前記第1ソースプログラムに含まれる変換対象箇所の文と前記第2プログラムに含まれる当該変換対象箇所を最適化した後の変換箇所の文とを表示する変換箇所表示制御手段と、
前記変換対象箇所の文または前記変換箇所の文のいずれか一方の選択を受け付ける選択受け付け手段と、
前記選択受け付け手段で受け付けられた情報をプロファイル情報として生成するプロファイル情報生成手段とを備える
ことを特徴とする請求項1〜5のいずれか1項に記載のデバッグシステム。
【請求項7】
前記プロファイル情報生成手段は、前記変換対象箇所の文または前記変換箇所の文を前記プログラム実行手段で実行した際の実行サイクル数を、前記プロファイル情報にさらに含める
ことを特徴とする請求項6に記載のデバッグシステム。
【請求項8】
コンピュータを用いて、ソースプログラムから機械語プログラムを開発するプログラム開発システムであって、
ソースプログラムを機械語プログラムに翻訳するコンパイルシステムであって、
高級言語で記述された第1ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第1ソースプログラムを高級言語で記述された第2ソースプログラムに変換するソースプログラム変換手段と、
前記第2ソースプログラムを機械語プログラムに変換するコンパイル手段と、
前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を分析することにより前記第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報を生成するデバッグ情報生成手段とを備える
ことを特徴とするコンパイルシステムと、
請求項1に記載のデバッグシステムとをコンピュータにより実現し、
前記デバッグシステムは、さらに、前記プログラム実行手段にて前記機械語プログラムを実行した際の実行ログを出力する実行ログ出力手段を備え、
前記プログラム開発システムは、さらに、前記デバッグシステムから出力された前記実行ログを解析し、前記コンパイルシステムにおける最適化のためのヒントとなる情報であるプロファイル情報を出力するプロファイラ手段を備え、
前記コンパイルシステムの前記ソースプログラム変換手段は、前記プロファイル情報に基づいて、前記第1ソースプログラムの最適化を行なう
ことを特徴とするプログラム開発システム。
【請求項9】
コンピュータが、機械語プログラムのデバッグを支援するデバッグ支援方法であって、
高級言語で記述された第1ソースプログラムを最適化した高級言語で記述された第2ソースプログラムをコンパイルすることにより得られる機械語プログラムを実行するステップと、
前記第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報、および前記第2ソースプログラムと前記機械語プログラムとの対応関係を示す第2デバッグ情報を受け、前記プログラム実行手段における実行結果、前記第1デバッグ情報および前記第2デバッグ情報に基づいて、前記機械語プログラムのユーザによるデバッグを支援するステップとを含む
ことを特徴とするデバッグ支援方法。
【請求項10】
コンピュータにより実現するソースプログラムから機械語プログラムを開発するプログラム開発方法であって、
ソースプログラムを機械語プログラムに翻訳するコンパイル方法であって、
高級言語で記述された第1ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第1ソースプログラムを高級言語で記述された第2ソースプログラムに変換するステップと、
前記第2ソースプログラムを機械語プログラムに変換するステップと、
前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を分析することにより前記第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報を生成するステップとを含む
ことを特徴とするコンパイル方法と、
請求項9に記載のデバッグ支援方法とを含み、
前記デバッグ支援方法は、さらに、前記機械語プログラムを実行した際の実行ログを出力するステップを含み、
前記プログラム開発システムは、さらに、前記実行ログを解析し、前記コンパイル方法における最適化のためのヒントとなる情報であるプロファイル情報を出力するステップを含み、
前記コンパイル方法の前記第1ソースプログラムを第2ソースプログラムに変換するステップは、前記プロファイル情報に基づいて、前記第1ソースプログラムの最適化を行なう
ことを特徴とするプログラム開発方法。
【請求項11】
機械語プログラムのデバッグを支援する、プロセッサおよびメモリを備えるコンピュータが実行可能なプログラムであって、
プロセッサが、メモリに記憶されている高級言語で記述された第1ソースプログラムを最適化した高級言語で記述された第2ソースプログラムをコンパイルすることにより得られる機械語プログラムを実行するステップと、
プロセッサが、前記第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報、および前記第2ソースプログラムと前記機械語プログラムとの対応関係を示す第2デバッグ情報を受け、前記プログラム実行手段における実行結果、前記第1デバッグ情報および前記第2デバッグ情報に基づいて、前記機械語プログラムのユーザによるデバッグを支援するステップとをコンピュータに実行させる
ことを特徴とするプログラム。
【請求項12】
ソースプログラムから機械語プログラムを開発する、プロセッサおよびメモリを備えるコンピュータが実行可能な開発プログラムであって、
プロセッサが、メモリに記憶されているソースプログラムを機械語プログラムに翻訳するプログラムであって、
プロセッサが、メモリに記憶されている高級言語で記述された第1ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第1ソースプログラムを高級言語で記述された第2ソースプログラムに変換するステップと、
プロセッサが、前記第2ソースプログラムを機械語プログラムに変換するステップと、
プロセッサが、前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を分析することにより前記第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報を生成するステップとをコンピュータに実行させる
ことを特徴とするプログラムと、
請求項11に記載のプログラムとをコンピュータに実行させ、
請求項11に記載のプログラムでは、さらに、プロセッサが、前記機械語プログラムを実行した際の実行ログを出力するステップをコンピュータに実行させ、
前記開発プログラムは、さらに、プロセッサが、前記実行ログを解析し、前記ソースプログラムを機械語プログラムに翻訳するプログラムをコンピュータに実行させる際の最適化のためのヒントとなる情報であるプロファイル情報を出力するステップをコンピュータに実行させ、
前記ソースプログラムを機械語プログラムに翻訳するプログラムにおいてコンピュータに実行させる前記第1ソースプログラムを第2ソースプログラムに変換するステップは、前記プロファイル情報に基づいて、前記第1ソースプログラムの最適化を行なう
ことを特徴とする開発プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate


【公開番号】特開2011−175673(P2011−175673A)
【公開日】平成23年9月8日(2011.9.8)
【国際特許分類】
【出願番号】特願2011−106687(P2011−106687)
【出願日】平成23年5月11日(2011.5.11)
【分割の表示】特願2005−337648(P2005−337648)の分割
【原出願日】平成17年11月22日(2005.11.22)
【出願人】(000005821)パナソニック株式会社 (73,050)
【Fターム(参考)】