(57)【特許請求の範囲】
【請求項１】
ソースファイルからオブジェクトファイルを生成し、該生成に際しマクロ呼出しができる生成手段と、
前記オブジェクトファイルをリンクして生成された実行形式プログラムを実行する実行手段と、
デバッグに必要な情報を表示する表示手段と、
を備えたプログラム開発支援システムであって、
前記生成手段は、前記マクロ呼出しを行なう際、前記マクロ呼出しの部分をマクロ定義の内容に従って前記オブジェクトファイル内にコード展開し、前記マクロ呼出し毎に前記マクロ定義部分の引数のみを置換したソースコードであるマクロ展開ソースコード情報を生成して前記オブジェクトファイルと共に記憶し、
前記実行手段は、前記マクロ呼出し部分の展開内容のステップ実行を行う際、前記マクロ展開ソースコード情報を前記表示手段に表示する
ことを特徴とするプログラム開発支援システム。
【請求項２】
前記生成手段は、前記マクロ定義内にさらにマクロ呼出しがあるときは、当該マクロ呼出しについても前記マクロ展開ソースコード情報を生成して前記オブジェクトファイルと共に記憶する
ことを特徴とする請求項１に記載のプログラム開発支援システム。
【請求項３】
前記生成手段は、アセンブラまたはコンパイラであることを特徴とする請求項１または２のいずれかに記載のプログラム開発支援システム。
【請求項４】
前記実行手段は、シミュレータまたはエミュレータであることを特徴とする請求項１から３までのいずれかに記載のプログラム開発支援システム。
【請求項５】
ソースファイルからオブジェクトファイルを生成し、該生成に際しマクロ呼出しができる生成手段と、
前記オブジェクトファイルをリンクして生成された実行形式プログラムを実行する実行手段と、
デバッグに必要な情報を表示する表示手段と、
を備えたコンピュータに、
前記マクロ呼出しを行なうときは前記マクロ呼出しの部分をマクロ定義の内容に従って前記オブジェクトファイル内にコード展開し、前記マクロ呼出し毎に前記マクロ定義部分の引数のみを置換したソースコードであるマクロ展開ソースコード情報を生成して前記オブジェクトファイル内と共に記憶させる処理と、
前記マクロ呼出し部分の展開内容のステップ実行を行う際、前記マクロ展開ソースコード情報を前記表示手段に表示させる処理と、を実行させる
ことを特徴とするプログラム。
【請求項６】
請求項５に記載のプログラムを実行可能に記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばマイコン組み込み機器等のソフトウェア開発に用いるプログラム開発支援システム、プログラム、そのプログラムを記憶している記憶媒体に関する。
【背景技術】
【０００２】
従来、プログラム開発は、図１５に示すように、ホストコンピュータ上でソースファイル１をコンパイラＣ１又はアセンブラＡ１でコンパイル又はアセンブルしてオブジェクトファイル２を生成し、そのオブジェクトファイル２からリンカＬ１により実行形式プログラムＰ３を生成することによりなされていた。
【０００３】
通常、コンパイル言語やアセンブリ言語でプログラミングする場合、マクロ定義及びマクロ呼出し機能を用いて、共通な処理部をまとめることはよく行なわれていることである。
このマクロを使用したプログラムのシミュレータやエミュレータによるデバッグにおいて、マクロ呼出し部分をステップ実行する場合、そのままマクロ呼出し行として実行するか、あるいは、その展開されたコードを実行することになる。
そして、単純な短いマクロの場合はそのような処理でもよいが、マクロ定義が長い場合や、あるいは、マクロが入れ子になっていた場合、そのマクロの引数がどのように置換されているのか、あるいは、入れ子マクロがどのように呼び出されたのかを確認するには、別途ソースコードを解析する必要があり、デバッグ効率を落とす要因にもなっていた。
【０００４】
このマクロ部分のデバッグを行う技術として特許文献１が知られている。この技術は、マクロ定義部分のソース行デバッグを可能とする。
【特許文献１】特許第２８２７７２４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１の技術では、マクロ定義部分のソース行デバッグが可能になるものの、それは引数の置換がなされない元マクロ定義部分か、あるいは、展開された後の表示であり、前者の場合は引数の置換状況が不明であるという問題があり、後者の場合は入れ子があったときのマクロの呼び出し状況が不明である、元のソースプログラムのコメント文が見えない等の問題がある。
【０００６】
本発明の目的は、マクロの呼び出し状況が置換された引数やコメント文と共に表示されて、デバッグが可能となるようにすることである。
【課題を解決するための手段】
【０００７】
請求項１に記載のプログラム開発支援システムは、ソースファイルからオブジェクトファイルを生成し、該生成に際しマクロ呼出しができる生成手段と、前記オブジェクトファイルをリンクして生成された実行形式プログラムを実行する実行手段と、デバッグに必要な情報を表示する表示手段と、備えたプログラム開発支援システムであって、前記生成手段は、前記マクロ呼出しを行なう際、前記マクロ呼出しの部分をマクロ定義の内容に従って前記オブジェクトファイル内にコード展開し、前記マクロ呼出し毎に前記マクロ定義部分の引数のみを置換したソースコードであるマクロ展開ソースコード情報を生成して前記オブジェクトファイルと共に記憶し、前記実行手段は、前記マクロ呼出し部分の展開内容のステップ実行を行う際、前記マクロ展開ソースコード情報を前記表示手段に表示するものである。
【０００８】
請求項２に記載の発明は、請求項１に記載のプログラム開発支援システムにおいて、前記生成手段は、前記マクロ定義内にさらにマクロ呼出しがあるときは、当該マクロ呼出しについても前記マクロ展開ソースコード情報を生成して前記オブジェクトファイルと共に記憶するものである。
【０００９】
請求項３に記載の発明は、請求項１または２のいずれかに記載のプログラム開発支援システムにおいて、前記生成手段は、アセンブラまたはコンパイラであるものである。
【００１０】
請求項４に記載の発明は、請求項１から３までのいずれかに記載のプログラム開発支援システムにおいて、前記実行手段は、シミュレータまたはエミュレータであるものである。
【００１１】
請求項５に記載のプログラムは、ソースファイルからオブジェクトファイルを生成し、該生成に際しマクロ呼出しができる生成手段と、前記オブジェクトファイルをリンクして生成された実行形式プログラムを実行する実行手段と、デバッグに必要な情報を表示する表示手段と、を備えたコンピュータに、前記マクロ呼出しを行なうときは前記マクロ呼出しの部分をマクロ定義の内容に従って前記オブジェクトファイル内にコード展開し、前記マクロ呼出し毎に前記マクロ定義部分の引数のみを置換したソースコードであるマクロ展開ソースコード情報を生成して前記オブジェクトファイル内と共に記憶させる処理と、前記マクロ呼出し部分の展開内容のステップ実行を行う際、前記マクロ展開ソースコード情報を前記表示手段に表示させる処理と、を実行させるものである。
【００１２】
請求項６に記載の記録媒体は、請求項５に記載のプログラムを実行可能に記録したものである。
【発明の効果】
【００１６】
本発明によれば、アセンブル又はコンパイルの際にはマクロ呼出し毎にマクロ定義部分の引数のみを置換したソースコードであるマクロ展開ソースコード情報を生成してオブジェクトファイル内に埋め込み、シミュレータ又はエミュレータでは当該引数の置換された状態を表示することができる。よって、引数の置換状況を明らかにすることができる。
【発明を実施するための最良の形態】
【００１７】
本発明を実施するための最良の一形態について説明する。
図１は、コンパイラ装置、アセンブラ装置、シミュレータ装置、エミュレータ装置を実施するホストコンピュータＨ１の電気的な接続のブロック図である。
このホストコンピュータＨ１は、各種演算を行い、コンピュータの各部を集中的に制御するＣＰＵ１２と、各種のＲＯＭ、ＲＡＭからなるメモリ１３とが、バス１４で接続されている。
【００１８】
バス１４には、所定のインターフェイスを介して、ハードディスクなどの磁気記憶装置１５と、キーボード、マウスなどの入力装置１６と、出力装置となる表示装置１７と、光ディスクなどの記憶媒体１８を読み取る読取装置１９とが接続され、また、インターネットなどのネットワーク２０と通信を行う通信インターフェイス１１が接続されている。
記憶媒体１８としては、光ディスク、光磁気ディスク、フレキシブルディスクなどの各種メディアを用いることができる。また、読取装置１９は、記憶媒体１８の種類に応じて光ディスクドライブ装置、光磁気ディスクドライブ装置、フレキシブルディスクドライブ装置などが用いられる。
ホストコンピュータＨ１は、記憶媒体１８から、プログラムをそれぞれ読み取って、磁気記憶装置１５にインストールする。また、このプログラムはインターネットなどのネットワークを介してダウンロードしてインストールするようにしてもよい。このインストールにより、ホストコンピュータＨ１は、後述の所定の処理の実行が可能な状態となる。
このホストコンピュータＨ１で用いるプログラムには、アセンブラＡ１（又はコンパイラＣ１）、リンカＬ１、シミュレータＳ１、エミュレータＥ１などが含まれ、ホストコンピュータＨ１は、プログラム開発支援システムとして用いられる。
【００１９】
次に、これら各プログラムに基づいてホストコンピュータＨ１が実行する処理について説明する。
図２は、ホストコンピュータＨ１が前述のプログラムに基づいて実行する処理の説明図である。これは、アセンブラＡ１により処理を実施する例である。まず、ホストコンピュータＨ１で作成されたソースファイル群１は、アセンブラＡ１により処理されて、各ソースファイルからそれぞれデバッグ情報付きでオブジェクトファイル２が生成される。
このとき、アセンブラＡ１はマクロ定義及びマクロ呼出しが選択的に実行可能であって、ソースコード内にマクロ定義及びマクロ呼出しが含まれる場合には、アセンブラＡ１は、マクロ呼出し部分をマクロ定義の内容に従ってオブジェクトファイル２内にコード展開するのみならず、マクロ呼出し毎に、そのマクロ定義部分の引数のみを置換したソースコード（マクロ展開ソースコード情報３）を生成し、オブジェクトファイル２内に埋め込む。
また、そのマクロ定義内にさらにマクロ呼出しがある入れ子構造の場合は、元のマクロ呼出しの展開の際に、その入れ子になっているマクロ（子マクロ）においても、マクロ定義部分の引数のみを置換したソースコード（マクロ展開ソースコード情報３）を生成して、オブジェクトファイル２内に埋め込む。
【００２０】
例えば、図３に示すようなマクロ定義及びマクロ呼び出しのあるアセンブリ言語ソースがあった場合には、従来は、図４に示すように、単純に展開されるだけであるが、本実施形態ではこれに加えて、図３の（１）のマクロ呼び出しに対しては図５に示すようなソース行であるマクロ展開ソースコード情報３を生成し、また、入れ子である（２）のマクロ呼び出しについては、図６に示すようなマクロ展開ソースコード情報３を生成し、オブジェクトファイル２内に埋め込む。このようなマクロ展開ソースコード情報３の例を図６に示す。
【００２１】
図２に戻り、これらのオブジェクトファイル２をリンカＬ１により結合処理を行い、実行形式プログラムＰ１を生成する。この実行形式プログラムＰ１内には、前述のように生成されたマクロ展開ソースコード情報３が含まれる。
シミュレータＳ１は、この実行形式プログラムＰ１に基づいてソース行デバッグを行う。シミュレータＳ１においてマクロ呼出しの１行毎のステップ実行が行われるとき、前述のように埋め込まれた情報（マクロ展開ソースコード情報３）に基づいて、そのマクロ呼出部に対応するマクロ引数置換されたマクロ定義を表示する。
これにより、このマクロ引数置換されたマクロ定義をステップ実行することができる。さらに、マクロ定義内に入れ子でマクロ呼び出しがあった場合は、そのマクロ呼び出し部からステップ動作する時に、さらにその子マクロでの引数置換された定義部を表示する。
【００２２】
具体的に説明すると、従来は、図３に示すような元のソース行表示又は展開された図４の表示がなされていたが、本実施形態では前述のようにマクロ引数置換されたソース行（マクロ展開ソースコード情報３）が埋め込まれているため、例えば、図７に示すような元のマクロ定義内に書かれたコメント文と共に、マクロの呼び出し状況及びその入れ子の状態がわかるようなソース行を表示し、その表示上でステップ実行することが可能になる。
あるいは、図３の（１）の行からステップ実行する場合は、図５の表示に切り替えてステップ実行することも可能になる。このとき、さらに（２）の行からステップ実行する場合は、図８の表示に切り替わることになる。同様に、展開部分にブレークポイントを置くことも可能になる。
【００２３】
このようにして、マクロ展開ソースコード情報３をオブジェクトファイル２内に備えることにより、オブジェクトファイル２をリンクして生成された実行形式プログラムＰ１を実行するシミュレータＳ１において、マクロ呼び出し部分の展開内容のステップ実行を行うときに、マクロ展開されてしまったコードではなく、マクロ定義部分の引数が置換された状態を表示してステップ実行するので、マクロ内デバッグを効率よく行うことができるようになる。
【００２４】
さらに、同様に、オブジェクトファイル２をリンクして生成された実行形式プログラムＰ１を実行するエミュレータＥ１においても、マクロ呼び出し部分の展開内容のステップ実行を行うときに、マクロ展開されてしまったコードではなく、マクロ定義部分の引数が置換された状態を表示してステップ実行するので、マクロ内デバッグを効率よく行うことができる。
【００２５】
次に、他の処理例について説明する。図９は、ホストコンピュータＨ１が実行する他の処理例の説明図である。この処理は、コンパイラＣ１により処理を実施する例である。
図９において、ホストコンピュータＨ１にて作成されたソースファイル群１をコンパイラＣ１で処理して、各ソースファイルからそれぞれデバッグ情報付きでオブジェクトファイルが生成される。
【００２６】
このとき、コンパイラＣ１はマクロ定義及びマクロ呼出しが選択的に実行可能であって、ソースコード内にマクロ定義及びマクロ呼出しが含まれる場合には、コンパイラＣ１は、マクロ呼出し部分をマクロ定義の内容に従ってオブジェクトファイル２内にコード展開するのみならず、マクロ呼出し毎に、そのマクロ定義部分の引数のみを置換したソースコード（マクロ展開ソースコード情報３）を生成し、オブジェクトファイル２内に埋め込む。
また、そのマクロ定義内にさらにマクロ呼出しがある入れ子構造の場合は、元のマクロ呼出しの展開の際に、その入れ子になっているマクロ（子マクロ）においても、マクロ定義部分の引数のみを置換したソースコード（マクロ展開ソースコード情報３）を生成して、オブジェクトファイル２内に埋め込む。
【００２７】
例えば、図１０に示すようなマクロ定義及びマクロ呼出しのあるＣ言語ソースがあった場合には、従来は、図１１に示すように、単純に展開されるだけであるが、本実施形態ではこれに加えて、図１０の（３）のマクロ呼び出しに対しては図１２に示すようなソース行であるマクロ展開ソースコード情報３を生成し、また、入れ子である（４）のマクロ呼び出しについては、図１３に示すようなマクロ展開ソースコード情報３を生成し、オブジェクトファイル２内に埋め込む。
【００２８】
図９に戻り、これらのオブジェクトファイル２をリンカＬ１により結合処理を行い、実行形式プログラムＰ２を生成する。この実行形式プログラムＰ１内には、前述のように生成されたマクロ展開ソースコード情報３が含まれる。
シミュレータＳ１は、この実行形式プログラムＰ２に基づいてソース行デバッグを行う。シミュレータＳ１においてマクロ呼出しの１行毎のステップ実行が行われるとき、前述のように埋め込まれた情報（マクロ展開ソースコード情報３）に基づいて、そのマクロ呼出部に対応するマクロ引数置換されたマクロ定義を表示する。
これにより、このマクロ引数置換されたマクロ定義をステップ実行することができる。さらに、マクロ定義内に入れ子でマクロ呼び出しがあった場合は、そのマクロ呼び出し部からステップ動作する時に、さらにその子マクロでの引数置換された定義部を表示する。
【００２９】
具体的に説明すると、従来は、図１０に示すような元のソース行表示か、あるいは展開された図１１の表示がなされていたが、上記マクロ引数置換されたソース行が埋め込まれているため、例えば、図１４に示すような元のマクロ定義内に書かれたコメント文と共にマクロの呼び出し状況、及びその入れ子の状態がわかるようなソース行を表示し、その表示上でステップ実行することが可能になる。あるいは、図１０の（３）の行からステップ実行する場合、図１２の表示に切り替えてステップ実行することも可能になる。このとき、さらに（４）の行からステップ実行する場合は、図１３の表示に切り替わることになる。同様に、展開部分にブレークポイントを置くことも可能になる。
【００３０】
このようにして、マクロ展開ソースコード情報３をオブジェクトファイル２内に備えることにより、オブジェクトファイル２をリンクして生成された実行形式プログラムＰ２を実行するシミュレータＳ１において、マクロ呼び出し部分の展開内容のステップ実行を行うときに、マクロ展開されてしまったコードではなく、マクロ定義部分の引数が置換された状態を表示してステップ実行するので、マクロ内デバッグを効率よく行うことができるようになる。
【００３１】
さらに、同様に、オブジェクトファイル２をリンクして生成された実行形式プログラムＰ１を実行するエミュレータＥ１においても、マクロ呼び出し部分の展開内容のステップ実行を行うときに、マクロ展開されてしまったコードではなく、マクロ定義部分の引数が置換された状態を表示してステップ実行するので、マクロ内デバッグを効率よく行うことができる。
【図面の簡単な説明】
【００３２】
【図１】本発明の一実施の形態であるホストコンピュータの電気的な接続のブロック図である。
【図２】ホストコンピュータが実行する一連の処理の説明図である。
【図３】マクロ定義及びマクロ呼び出しのあるアセンブリ言語ソースの一例を示す説明図である。
【図４】図３のアセンブリ言語ソースの従来における展開例の説明図である。
【図５】図３の（１）のマクロ呼び出しに対して生成されるマクロ展開ソースコード情報の説明図である。
【図６】図３の（２）のマクロ呼び出しに対して生成されるマクロ展開ソースコード情報の説明図である。
【図７】シミュレータが実行する処理の説明図である。
【図８】シミュレータが実行する処理の説明図である。
【図９】ホストコンピュータが実行する一連の処理の他例の説明図である。
【図１０】マクロ定義及びマクロ呼び出しのあるアセンブリ言語ソースの一例を示す説明図である。
【図１１】図１０のＣ言語ソースの従来における展開例の説明図である。
【図１２】図１０の（３）のマクロ呼び出しに対して生成されるマクロ展開ソースコード情報の説明図である。
【図１３】エミュレータが実行する処理の説明図である。
【図１４】エミュレータが実行する処理の説明図である。
【図１５】従来のホストコンピュータが実行する一連の処理の説明図である。
【符号の説明】
【００３３】
１  ソースファイル
２  オブジェクトファイル
３  マクロ展開ソースコード情報
１８  記憶媒体
Ａ１  アセンブラ
Ｅ１  エミュレータ
Ｈ１  ホストコンピュータ
Ｌ１  リンカ
Ｐ１  実行形式プログラム
Ｓ１  シミュレータ
【図１】
0004594704.tif 000002
【図２】
0004594704.tif 000003
【図３】
0004594704.tif 000004
【図４】
0004594704.tif 000005
【図５】
0004594704.tif 000006
【図６】
0004594704.tif 000007
【図７】
0004594704.tif 000008
【図８】
0004594704.tif 000009
【図９】
0004594704.tif 000010
【図１０】
0004594704.tif 000011
【図１１】
0004594704.tif 000012
【図１２】
0004594704.tif 000013
【図１３】
0004594704.tif 000014
【図１４】
0004594704.tif 000015
【図１５】
0004594704.tif 000016