説明

デバッグ方法

【目的】プログラムの一部を修正した修正モジュールを生成する処理時における未変更モジュールと上記修正モジュールとのリンク時間の短縮およびターゲットシステムへのロード時間の短縮を図る。
【構成】メモリ7に格納したオブジェクトプログラム5のモジュール51〜54の各々の格納アドレスの範囲対応するメモリ領域71〜75の格納範囲を示す格納情報ファイル8を検索するステップS5と、上記格納範囲をはみだしたモジュール53を分割して空メモリ領域75に格納するステップS7〜S9を含む。

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はデバッグ方法に関し、特に高級言語によるマイクロコンピュータのプログラム等のソフトウェアの開発時におけるデバッグ方法に関する。
【0002】
【従来の技術】一般に、マイクロコンピュータのプログラム言語であるアセンブラやコンパイラ等の言語処理プログラムにより開発されるソフトウェアは、ソースプログラム全体を複数のサブモジュールに分割し、それぞれのサブモジュール毎にアセンブルまたはコンパイルし、全体をリンクして一つのオブジェクトプログラムとして生成する。
【0003】従来、この種のデバッグ方法は、そのプログラムが走行するターゲットマシンのRAMで構成されたプログラムメモリに、開発されたプログラムを所定の方法によりロードしてデバッグを行う。あるサブモジュールに誤りが発見されたときに、そのサブモジュールのソースプログラムを修正し、これを言語処理プログラムより再処理し、その他の修正不用のサブモジュールと再リンクしてデバッグ後オブジェクトプログラムを生成し、上記ターゲットマシンにこのデバッグ後オブジェクトプログラム全体をロードする。
【0004】上述の方法においては、プログラムの再リンクと再ロードを必要とするため、プログラム規模が大きくなるにしたがい、処理時間が増大しデバッグ効率が低下する。
【0005】上述の欠点を改善するための第2の従来の方法の例である特開昭62−290945号公報記載のシステムでは、デバッグ修正したサブモジュールに他のデバッグ修正不用のサブモジュールとのリンク関係を示すマップ情報を付加し、前回のロードにおけるデバッグ前のプログラムの格納領域以外の空メモリ領域に格納するためのリンクを行い、上記デバッグ修正サブモジュールだけをロードするというデバッグ方法が行われている。
【0006】しかし、上記システムでは、プログラムメモリのメモリ領域のうち前回ロードされたデバッグ前のプログラムの格納領域はデバッグ後のプログラムの格納領域としては使用不可能であるので、ターゲットマシンに上記デバッグ前のプログラムの格納領域に加えて上記デバッグ後のプログラムの格納領域が十分確保されるような大容量のメモリ領域を有するものでなければ使用できない。上記ターゲットマシンがメモリ領域が小さい組込システムのマイクロコンピュータの場合では、上記条件を満足する空メモリ領域の確保が困難であり、この第2の従来技術は使えず結局第1の従来技術によりデバッグ後のプログラム全体の再ロードを実行することになる。
【0007】
【発明が解決しようとする課題】上述した従来のデバッグ方法の第1の技術は、プログラムの再リンクと再ロードを必要とするため、プログラム規模が大きくなるにしたがい処理時間が増大しデバッグ効率が低下するという欠点がある。
【0008】この欠点の改善を目的とした第2の従来の技術は、プログラムメモリのデバッグ前のプログラムの格納領域はデバッグ後のプログラムの格納領域としては使用不可能であるので、メモリ領域が小さい組込システムのマイクロコンピュータがターゲットマシンである場合には、上記デバッグ前のプログラムの格納領域に加えて上記デバッグ後のプログラムの格納領域を十分確保することが困難であり、この第2の技術が使用できないという欠点がある。
【0009】
【課題を解決するための手段】本発明のデバッグ方法は、ソースプログラムを分割した第1のサブモジュール毎に処理し対応する第2のサブモジュールから成るオブジェクトプログラムを生成する言語処理手段と、前記オブジェクトプログラムをロードするプログラムメモリを有するターゲットマシンとを含むデバッグ方法において、前記プログラムメモリに格納した前記第2のサブモジュールの各々の格納アドレスの範囲対応の前記プログラムメモリの領域である格納範囲を示す格納情報を出力する第1の工程と、前記格納範囲をはみだした前記第2のサブモジュールを分割して前記プログラムメモリの空領域に格納する第2の工程とを含んでいる。
【0010】
【実施例】次に、本発明の一実施例を実行するデバッグ装置の構成をブロックで示す図2を参照すると、この図に示すデバッグ装置は、4つのサブモジュールに分割されたソースプログラム1と、供給されたソースプログラムを機械語に変換してそれぞれのサブモジュール毎の相対アドレスに割付けるためのコンパイラ2と、コンパイラ2の処理結果出力される上記サブモジュール対応のモジュールから成るオブジェクトプログラム3と、オブジェクトプログラム3をターゲットマシン6のメモリ7に格納するための絶対アドレスを付与する処理を行なうリンカ4と、リンカ4から出力されたメモリ7のアドレス付与済みの4つのモジュール51〜54から成るオブジェクトプログラム5と、ターゲットマシン6と、オブジェクトプログラム5が格納されるメモリ7と、リンカ4が付与したオブジェクトプログラム3の各々のモジュールのメモリ7の格納アドレスを示す格納情報ファイル8とを備える。
【0011】メモリ7のメモリ領域の一例を示す図3を参照すると、このメモリ7はオブジェクトプログラム5の4つのモジュール51〜54の各々を格納するメモリ領域71〜74と、空領域であるメモリ領域75とを有する。
【0012】格納情報ファイル8の内容の一例を示す図4R>4を参照すると、この格納情報ファイル8は、各モジュール名を示すコラム81と、各モジュール51〜54をそれぞれ格納するメモリ領域71〜74の開始アドレスおよび終了アドレスをそれぞれ示すコラム82,83と、各モジュール51〜54のプログラムサイズを示すコラム84とから成る。
【0013】次に、本実施例を示すフローチャートである図1を併せ参照して本実施例の動作について説明すると、ステップS1でデバッグ方法を起動する。ステップS2でソースプログラム1を構成する4つのサブモジュールのモジュール名をそれぞれ入力する。ステップS3でコンパイラ2により各々のサブモジュール毎にコンパイル処理が実行され、ステップS4でそれぞれプログラムサイズnが付加された4つのモジュールから成るオブジェクトプログラム3が出力される。
【0014】次に、リンカ4の処理に移り、ステップS5で格納情報ファイル8の有無の検索を行なう。格納情報ファイル8が存在しなければステップS10に進み、各々のモジュールのリンク処理を行なう。格納情報ファイル8が存在すればステップS6に進み、デバッグ修正済のモジュールの格納情報の供給を受け修正前のモジュールのサイズmと修正後のモジュールのサイズnとの比較を行う。修正前のサイズmの方が大きい場合には、ステップS11に進み、修正後のモジュールをそのまま修正前のモジュールが格納されていたメモリ領域にもとの開始番地から順に格納するよう割付ける。修正後のサイズnの方が大きい場合には、ステップS7に進み、修正後のモジュールのうち、m−1番目までの分を修正前のモジュール格納メモリ領域にもとの開始番地から順に格納するよう割付け、ステップS8でもとの最終番地に空メモリ領域への分岐命令を生成格納し、ステップS9で上記空メモリ領域に残りのm〜n番目の分を順に格納するよう割付ける。
【0015】ここで、一例として、モジュール53のデバッグ修正により、修正後のプログラムサイズnが修正前のサイズm(=150)より大きくなったとする。このとき、ステップS7〜S9により、修正したモジュール53をコンパイラ2でコンパイルしてオブジェクトプログラム3を生成し、リンカ4でこのモジュール53対応のオブジェクトを前のモジュール53の格納メモリ領域73のアドレス231番地〜379番地に割付け、残りをメモリ領域75の621以降の番地に割付ける。379番地までと621番地以降のプログラムが連続しているので、メモリ領域73の380番地には621番地への分岐命令が生成され格納される。
【0016】次に、ステップS12により、修正したモジュールのみのオブジェクトプログラムと、元の格納情報ファイル8にこのデバッグ修正による格納情報の修正分を追加した新規の格納情報ファイル8を出力する。これにより、次回のデバッグからは、この新規の格納情報ファイル8が使用できる。
【0017】以上、本発明の実施例を説明したが、本発明は上述の実施例に限られることがなく種々の変形が可能である。例えば、リンカの処理の過程で実施例により生成した修正済モジュールのオブジェクトプログラムとそのモジュールの修正前のオブジェクトプログラムとを比較し、その差分だけから成るオブジェクトプログラムを生成することも、本発明の主旨を逸脱しない限り適用できることは勿論である。
【0018】
【発明の効果】以上説明したように、本発明のデバッグ方法は、デバッグによる修正済モジュールを修正前の元のメモリの格納領域に再度格納できるので、ターゲットマシンが小さいメモリ領域しか得られない組込システムのマイクロコンピュータのような場合でも十分使用することが可能であり、デバッグ効率を向上できるという効果がある。
【図面の簡単な説明】
【図1】本実施例のデバッグ方法の一実施例を示すフローチャートである。
【図2】本実施例のデバッグ方法を実行するデバッグ装置の一例を示すブロック図である。
【図3】メモリのメモリ領域の一例を示す図である。
【図4】格納情報ファイルの内容の一例を示す図である。
【符号の説明】
1 ソースプログラム
2 コンパイラ
3,5 オブジェクトプログラム
4 リンカ
6 ターゲットマシン
7 メモリ
8 格納情報ファイル
51〜54 モジュール
71〜75 メモリ領域
81〜84 コラム

【特許請求の範囲】
【請求項1】 ソースプログラムを分割した第1のサブモジュール毎に処理し対応する第2のサブモジュールから成るオブジェクトプログラムを生成する言語処理手段と、前記オブジェクトプログラムをロードするプログラムメモリを有するターゲットマシンとを含むデバッグ方法において、前記プログラムメモリに格納した前記第2のサブモジュールの各々の格納アドレスの範囲対応の前記プログラムメモリの領域である格納範囲を示す格納情報を出力する第1の工程と、前記格納範囲をはみだした前記第2のサブモジュールを分割して前記プログラムメモリの空領域に格納する第2の工程とを含むことを特徴とするデバッグ方法。
【請求項2】 前記格納情報が前記第2のサブモジュールの各々の名称を配列した第1の欄と、前記第1の欄に対応して前記第2のサブモジュールの各々を格納する前記領域の開始アドレスおよび終了アドレスをそれぞれ示す第2および第3の欄と、前記第2のサブモジュールの各々のプログラムサイズを示す第4の欄とを含むことを特徴とする請求項1記載のデバッグ方法。
【請求項3】 前記第2の工程が前記第2のモジュールのデバッグによる修正前のプログラムサイズである第1のサイズと前記修正後のプログラムサイズである第2のサイズとを比較し、前記第2のサイズの方が大きい場合に前記修正後の第2のモジュールを構成するプログラム要素を前記修正前の第2のモジュールの前記格納範囲に前記第1のサイズ対応の最終番地より1番地少ない番地まで格納し、残りの前記プログラム要素を前記空領域に格納し、前記最終番地に前記空領域の最初の番地に分岐する分岐命令を格納することをを特徴とする請求項1記載のデバッグ方法。

【図2】
image rotate


【図3】
image rotate


【図4】
image rotate


【図1】
image rotate