(57)【要約】【課題】コンパイラが出力する実バイナリとデバッグ情報のターゲットシステムへのロード時間を短縮する。【解決手段】原始プログラム１がコンパイラ２でコンパイルされ、実行バイナリ３とデバッグ情報４とが得られる。これら実行バイナリ３，デバッグ情報４は図示しないターゲットシステムにロードされ、デバッグが行なわれる。このデバッグの結果に基づいて、デバッグ情報を必要としない原始プログラム１のステートメントが利用者によって指定され、デバッグが終わると、指定されたステートメントを示すデバッグ情報削除表２５が作成されてコンパイラ２に提供される。次に、デバッグ結果に応じて修正などの処理がなされた原始プログラム１をコンパイラ２でコンパイルするときには、このデバッグ情報削除表のステートメントに対しては、デバッグ情報４が出力されず、デバッグ情報のサイズが縮小される。【選択図】図５
2005276092.tif 000002
【特許請求の範囲】
【請求項１】
原始プログラムをコンパイラでコンパイルして得られる実行バイナリとデバッグ情報とをターゲットシステムにロードし、該実行バイナリのデバッグを行なうプログラムのデバッグシステムにおいて、
該デバッグの結果に基づいてデバッグ情報を不要とする該原始プログラムのステートメントを選択するための選択手段を設け、
該コンパイラは、該原始プログラムの再度のコンパイル時、該選択手段で選択されたステートメント以外のステートメントのデバッグ情報を出力することを特徴とするプログラムのデバッグシステム。
【請求項２】
請求項１において、
前記選択手段は、前記原始プログラムの順次のステートメントを行番号とともに表示し、かつ該ステートメント毎にデバッグ情報の要不要を選択するための第１のデバッグ情報削除指定手段を表示したデバッグ情報選択画面を表示し、該第１のデバッグ情報削除指定手段の操作により、これに該当する該ステートメントに対してデバッグ情報を不要とすることを特徴とするプログラムのデバッグシステム。
【請求項３】
請求項２において、
前記デバッグ情報選択画面では、デバッグ情報不要として選択された前記ステートメントの前記デバッグ削除指定手段が、前記原始プログラムのデバッグ終了まで、デバッグ情報不要として選択されたことを示す表示状態を維持することを特徴とするプログラムのデバッグシステム。
【請求項４】
請求項２または３において、
前記原始プログラムから直接見ることができない関数の先頭・末尾・実行時ルーチン呼出の関数に関するステートメントを表示するデバッグ情報選択画面では、さらに、該関数に関するステートメントに対して第２のデバッグ情報削除指定手段が表示され、
該第２のデバッグ情報削除指定手段の選択操作により、該当する該関数に関するステートメントが設定されているコードに展開され、展開された該コード毎にデバッグ情報の要不要を選択するための前記第１のデバッグ情報削除指定手段が表示されることを特徴とするプログラムのデバッグシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、原始プログラムをコンパイルした実行バイナリのデバッグに係り、特に、デバッグを実行しつつデバッガで実行内容を検証できるプログラムのデバッグシステムに関する。
【背景技術】
【０００２】
プログラムの作成に際しては、まず、原始プログラム（ソースプログラム）を作成し、これをコンパイルしてターゲットシステムで使用可能な実行バイナリを取得し、この実行バイナリを実行しつつデバッガでデバッグが行なわれてバグの検出や修正などが行なわれる。そして、デバッグの結果に基づいて原始プログラムが修正，変更され、修正，変更された原始プログラムをコンパイルして実行バイナリを形成する。この実行バイナリについても、デバッガを用いてデバッグが行なわれる。このような工程が複数回繰り返されて、その度に原始プログラムの修正などが行なわれ、最終的に、ターゲットシステムで使用可能なプログラムが得られることになる。
【０００３】
このようなデバッグ工程は、その実行に非常に長い時間を要するものであり、このために、従来では、かかる処理時間を短縮するための種々の手法が提案されている。
【０００４】
その一例として、コンパイラで命令の入替えなどのコードの最適化を行なって最適化ありコードとかかる最適化を行なわない最適化なしコードとを生成し、これら最適化ありコードと最適化なしコードとは関数単位で関数サイズ情報が同じになるように調整されたオブジェクトプログラムが生成され、これがデバッガに出力されるものである。デバッガでは、最適化ありコードがターゲットメモリと最適化ありコード格納テーブルに格納され、最適化なしコードは最適化なしコード格納テーブルに格納され、ターゲットメモリのコードに対してデバッグのプログラムが実行されるが、デバッグ中断点（ブレイクポイント：各種の変数などの内容を調べてデバッグを効率良く行なうためにソースプログラムの実行を中断させる位置）が設定されている場合には、該当する関数に対応する最適化なしコードが最適化なしコード格納テーブルからターゲットメモリに再ロードされてデバッグが行なわれる。最適化なしコードよりも最適化ありコードの方がプログラムが高速に実行されるものであり、このため、デバッグ中断点が設定された関数のみ最適化なしコードを使用することにより、全オブジェクトコードが最適化なしコードのみからなる場合に比べ、プログラム実行時間を短縮できるようにしたものである（例えば、特許文献１参照）。
【０００５】
また、他の例として、自動的にインライン展開などの展開が可能な言語で記述されたオリジナルソースプログラム（原始プログラム）をコンパイルしてデバッグする場合、コンパイラでは、このオリジナルソースプログラムがコンパイルされてオブジョクトプログラムが生成されるとともに、オリジナルソースプログラムに含まれる展開指示に従って展開ソースプログラムが生成され、この展開ソースプログラムがデバッグ情報として、オブジェクトソースプログラムとともに、デバッガに供給されてブレイクポイントの設定などのデバッグ処理が行なわれるのであるが、さらに、オリジナルソースプログラムでの展開された行に関し、展開される前の行番号と展開された後の行番号との対応関係を表わすテーブルも作成され、かかるテーブルを用いることにより、デバッガにおいて、展開ソースプログラムに対しても、きめ細かくブレイクポイントを設定できるようにした技術が提案されている（特許文献２参照）。
【０００６】
さらに、他の例として、ソースプログラムをベクトルコンパイラでコンパイルする際に、デバッグ情報としてベクトル化情報や論理ベクトル長情報，中断点情報を求め、かかるデバッグ情報とコンパイラでコンパイルされたプログラムとで実行プログラムを形成してデバッガに供給し、デバッガでは、デバッグ情報をソースプログラムとともに表示手段で表示可能とすることにより、デバッグ情報をデバッガで把握できるようにして、デバッグの状況把握やプログラムの性能改善が円滑に行なわれるようにした技術も提案されている。（例えば、特許文献３参照）。
【特許文献１】特開２００１ー１４１８５号公報
【特許文献１】特開平５−２１６７１９号公報
【特許文献１】特開平９−２５９００３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、作成された原始プログラムをコンパイラでコンパイルしてシステムで使用するプログラム（以下、実行バイナリという）を作成し、これをこのシステム（以下、ターゲットシステムという）で使用する前に、この実行バイナリがターゲットシステムで正しく動作するかどうか、即ち、この実行バイナリの命令文毎に間違いがないかどうかを確認するためにデバッガでデバッグが行なわれるが、このデバッグのためには、デバッグに必要なシンボル情報と命令に対応する原始プログラムの行との対応、即ち、デバッグ情報が必要である。例えば、ａ＋ｂ＝ｃの演算の命令に対しては、変数ａ，ｂ，ｃとａ＋ｂ＝ｃの演算命令に対応する原始プログラムの行との対応がこの場合のデバッグ情報である。かかるデバッグ情報は、原始プログラムの行（ステートメント（命令文など））毎に対応して設定されるものである。
【０００８】
このように、実行バイナリをデバッグする際には、この実行バイナリを、そのデバッグ情報とともに、ターゲットシステムのメモリにロードし、この実行バイナリをターゲットシステムが実行しながら、このデバッグ情報をもとにデバッガがデバッグを行なう。この場合、デバッグ情報は非常にサイズが大きく、これを実行バイナリとともにターゲットシステムにロードするには、非常に長い時間を要することになる。特に、このようなデバッグの処理は、繰り返し行なわれるものであって、１回のデバッグ処理が終了すると、その結果に基づいて原始プログラムの修正などが行なわれ、このように処理された原始プログラムについて、再びコンパイルし、デバッグ情報を用いてデバッグが行なわれ、これが繰り返されることにより、ターゲットシステムで使用可能なプログラムが得られることになる。このため、原始プログラムからターゲットシステムで使用可能な実行バイナリを得るためには、非常に長い時間が掛かることになる。
【０００９】
しかしながら、上記各特許文献に記載の技術は、かかる問題を解決するものではない。即ち、上記特許文献１に記載の技術は、最適化ありコードと最適化なしコードとを組み合わせてデバッグすることにより、最適化なしコードのみでデバッグを行なう場合に比べ、デバッグ処理時間を短縮するものであるが、これでも、かかるコードに比べて非常に大きなサイズのデバッグ情報が用いられるものであるから、デバッグ情報をターゲットシステムのメモリにロードするのに長い時間を必要となり、デバッグに要する時間を効果的に短縮することができるものではない。また、上記特許文献２に記載の発明は、オリジナルソースファイルに対して展開されたソースファイルでの中断点（ブレイクポイント）の設定が可能となり、速やかにきめ細かい中断点の設定が可能となるものの、やはり大きなサイズのデバッグ情報を用いてデバッグが行なわれるものであるから、効果的なデバッグ処理時間の短縮はできないし、上記特許文献３に記載の発明も、デバッグ情報を表示可能とすることにより、デバッグの状況把握やプログラムの性能改善が可能となるが、同様にして、効果的なデバッグ処理時間の短縮はできない。
【００１０】
本発明は、かかる問題を解消し、デバッグ情報のターゲットシステムにおけるメモリへのロード時間を短縮し、デバッグに要する時間を効果的に短縮することができるようにしたプログラムのデバッグ方法を提供することにある。
【課題を解決するための手段】
【００１１】
本出願人は、デバッグ情報のサイズがデバッグ処理に要する時間に大きく影響しており、このサイズを縮小することにより、この所要時間を効果的に短縮することができることに着目した。このようにデバッグ情報のサイズを縮小するためには、プログラムの使用者がデバッグ情報の取捨選択をすればよく、デバッグ操作中にデバッグの不要な部分を指定することができれば、煩雑さを伴うことなく、デバッグ情報のサイズを低減できる。
【００１２】
一般に、デバッグを行なうときには、バグの所在が不明であるために、どのようなデバッグ情報が必要で、どのようなデバッグ情報が不要かを予め判断ができない。しかし、必要以上にブレイクポイントの情報が詳細にわたっている場合には、これを調整することができるようにしたほうが遥かに好ましい。また、デバッグの大きな部分を示すデータに対するデバッグ情報は、これに関係する部分のデバッグが済んでもはやバグが検出されない場合には、不要なものであり、かかるデバッグ情報をコンパイルのたびに出力し、ターゲットシステムのメモリにロードすることは無駄でしかない。このようなデバッグ情報は削除した方がよいのである。本発明は、このような点に基づいて、なされたものである。
【００１３】
そこで、上記目的を達成するために、本発明は、原始プログラムをコンパイラでコンパイルして得られる実行バイナリとデバッグ情報とをターゲットシステムにロードし、該実行バイナリのデバッグを行なうプログラムのデバッグシステムであって、デバッグの結果に基づいてデバッグ情報を不要とする原始プログラムのステートメントを選択するための選択手段を設け、コンパイラは、原始プログラムの再度のコンパイル時、選択手段で選択されたステートメント以外のステートメントのデバッグ情報を出力するものである。
【００１４】
また、選択手段は、原始プログラムの順次のステートメントを行番号とともに表示し、かつステートメント毎にデバッグ情報の要不要を選択するための第１のデバッグ情報削除指定手段を表示したデバッグ情報選択画面を表示し、第１のデバッグ情報削除指定手段の操作により、これに該当するステートメントに対してデバッグ情報を不要とするものである。
【００１５】
さらに、デバッグ情報選択画面では、デバッグ情報不要として選択されたステートメントのデバッグ削除指定手段は、原始プログラムがデバッグ終了まで、デバッグ情報不要として選択されたことを示す表示状態を維持するものである。
【００１６】
さらに、原始プログラムから直接見ることができない関数の先頭・末尾・実行時ルーチン呼出の関数に関するステートメントを表示するデバッグ情報選択画面では、さらに、関数に関するステートメントに対して第２のデバッグ情報削除指定手段が表示され、第２のデバッグ情報削除指定手段の選択操作により、該当する関数に関するステートメントが設定されているコードに展開され、展開されたコード毎にデバッグ情報の要不要を選択するための第１のデバッグ情報削除指定手段が表示されるものである。
【発明の効果】
【００１７】
本発明によると、原始プログラムをデバッグする際に、使用者は実行バイナリに含まれるデバッグ情報を必要最小限の詳細さに選択することができて、デバッグ情報の極小化が可能となり、ひいてはデバッグを実行するための情報（実行バイナリとデバッグ情報）のサイズが縮小して、かかる情報のターゲットシステムへのロード時間を効率的に短縮でき、デバッグ効率が大幅に向上する。
【００１８】
また、デバッグの進行とともにデバッグ情報を限定することにより、デバッグ情報そのものを順次小さくすることができる。即ち、デバッグの進行とともに、ロード時間を順次縮小することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施形態を図面を用いて説明する。
【００２０】
図１は本発明によるプログラムのデバッグシステムの一実施形態を示すブロック図であって、１は原始プログラム（ソースプログラム）、２はコンパイラ、３は実行バイナリ、４はデバッグ情報、５はデバッガソフトウェア、６はホストシステム、７はＣＰＵ（中央処理ユニッド）、８はメモリ、９はデバッガ本体、１０はターゲットシステムである。
【００２１】
同図において、ホストシステム６では、コンパイラ２やデバッガソフトウェア５が設けられたおり、ターゲットシステム１０のために開発された原始プログラム１がコンパイラ２でコンパイルされ、このターゲットシステム１０で使用するための実行バイナリ３が生成される。
【００２２】
また、ターゲットシステム１０では、これで使用されるプログラムを格納するためのメモリ８やこのプログラムを実行してターゲットシステム内の各部の制御や処理を行なうＣＰＵ７などを備えており、デバッガ本体９がＣＰＵ７で実行される実行バイナリ３のデバッグを行なう。
【００２３】
ホストシステム６では、原始プログラム１をコンパイラ２でコンパイルするとき、生成された実行バイナリ３とともに、オプションで原始プログラム１の夫々のステートメント（命令文など）行に対応してデバッグ情報４も生成される。この実行バイナリ３をデバッグする場合には、この実行バイナリ３がターゲットシステム１０のメモリ８にロードされるが、これとともに、デバッグ情報４もメモリ８にロードされる。そして、実行バイナリ３はＣＰＵ７によって実行され、これとともに、デバッグ本体９がメモリ８に格納されたデバッグ情報を用いて実行バイナリ３のデバッグを実行する。
【００２４】
ここで、原始プログラム１をコンパイルする際には、この原始プログラム１の各ステートメント毎にデバッグ情報４が得られることになり、実行バイナリ３に比べても非常に大きなサイズの情報である。このために、かかるデバッグ情報４をターゲットシステム１０のメモリ８にロードするには、非常に長い時間を要することになる。原始プログラム１は、１回のデバッグで全くバグがないことが確認されることはほとんどなく、修正とデバッグとが複数回繰り返されることにより、バグのない実行バイナリ３が得られるのであるから、デバッグ毎に最初のデバッグに用いたデバッグ情報を用いたのでは、ターゲットシステム１０のメモリ８へのロードに常に長時間を要することになり、デバッグ効率を劣化させることになる。
【００２５】
この実施形態では、デバッグの結果、原始プログラムの間違いがないと確認されたステートメントに対しては、次のデバッグでその確認が不要である場合、従って、該当するデバッグ情報も不要である、という認識のもとに、このようなデバッグ情報は、次のデバッグの処理を行なう際には、削除するものである。これにより、次のデバッグの処理では、その１つ前の段階のデバッグ処理でのデバッグ情報よりもサイズが小さくなり、従って、デバッグを繰り返す毎に、順次デバッグ情報量のサイズを小さくすることができるようになる。
【００２６】
このために、この実施形態では、デバッガ本体９によるデバッグ中、もしくは１回のデバッグが終了すると、ホストシステム６において、デバッガソフトウェア５を稼動させることにより、使用者が原始プログラム１のステートメント毎にデバッグ情報の取捨選択をすることができるようにした選択画面が、使用者に対するユーザインターフェイスとして、表示される。デバッグの結果に基づいて、この選択画面で選択操作し、デバッグ情報を不要とするステートメントを指定することにより、次のデバッグのために修正した原始プログラム１をコンパイラ２でコンパイルする際、この指定されたステートメントに対しては、コンパイラ２からデバッグ情報は出力されない。このために、前回のデバッグ時よりもデバッグ情報のサイズが小さくなり、その分ターゲットシステム１０のメモリ８にロードされるデータ量が縮小され、そのロード時間を短縮することができる。
【００２７】
なお、デバッガ９は、デバッグ情報が削除されたステートメントに対してもデバッグ処理を行なうが、そのデバッグの処理結果を用いることはなく、このステートメントをデバッグの確認対象とはしない。
【００２８】
図２は上記のデバッグ情報選択画面の一具体例を示す図であって、２０ａはデバッグ情報選択画面、２１ａは行番号、２２ａは原始プログラムの行（ステートメント）、２３ａはデバッグ情報削除指定ボタンである。
【００２９】
同図において、このデバッグ情報選択画面２０ａは、原始プログラム１でのファイル「ｘ.ｃ」のデータ構造をステートメント毎の行配列として示すものであり、ステートメント２２ｂ毎に行番号２１ａとデバッグ情報削除指定ボタン２３ａとが表示される。コンパイラ２（図２）では、原始プログラム１の各行のステートメント２２ｂ毎にデバッグ情報を作成して出力するが、デバッグ情報削除指定ボタン２３ａは、これをマウスなどによって指定（選択）操作することにより、該当する行番号２２ａのステートメント２２ｂが、そのデバッグ情報がコンパイラ２から出力されないように、指定されることになる。
【００３０】
ここでは、行番号２１ａが「２」（第２行目という。以下同様）のステートメント“Ａ”と第１０行目のステートメント“objＡ１；”とが指定されている場合を示している。このステートメント“Ａ”が指定されることにより、構造体Ａの全てのデバッグ情報がコンパイラ２から出力されないようにする。ステートメント“objＡ１；”が指定されることにより、構造体Ａ１に対するオブジェクトのデバッグ情報がコンパイラ２から出力されないようにする。
【００３１】
なお、このファイル「ｘ．ｃ」において、第１行目の大域の構造体であることを表わす“struct”のステートメント２２ａのデバッグ情報削除指定ボタン２３ａのみが選択されると、大域の構造体宣言・定義の全てのデバッグ情報がコンパイラ２が出力されないように指定される。
【００３２】
このように、行に記述されているキーワードやシンボルの属性（即ち、ステートメント）によってデバッグ情報の削除範囲を定義することにより、使用者が容易に削除範囲を指定することができる。
【００３３】
図３は上記のデバッグ情報選択画面の他の具体例を示す図であって、図２に対応する部分には対応する符号での「ａ」の代わりに「ｂ」を付けている。
【００３４】
同図において、このデバッグ情報選択画面２０ｂは、原始プログラム１でのファイル「ｙ.ｃ」とした関数１の実行文をステートメント単位で行配列して示すものであり、各ステートメント２２ｂ行毎に行番号２１ｂとデバッグ情報削除指定ボタン２３ｂが表示されている。このデバッグ情報削除指定ボタン２３ｂも、図２におけるデバッグ情報削除指定ボタン２３ａと同様の機能を備えている。
【００３５】
ここでは、第１行目のステートメント“void  Func1”と第２行目のステートメント“（  int  pa，”とが指定されている場合を示している。このステートメント“void  Func1”が指定されることにより、関数１を実行するときのデバッグ情報がコンパイラ２から出力されないようにし、ステートメント“（  int  pa，”が指定されることにより、関数１での整数ｐａの定義のデバッグ情報がコンパイラ２から出力されないようにする。
【００３６】
なお、このデバッグ情報選択画面２０ｂでのデバッグ情報削除指定ボタン２３ｂを選択した例を示すと、デバッグ情報削除指定ボタン２３により、第１行目のステートメント”void  Func1“を指定すると、この関数２の全てのデバッグ情報がコンパイラ２から出力されないようになるし、第２行目のステートメント”（  int pa,”を指定すると、シンボル”pa”に対するデバッグ情報がコンパイラ２から出力されないようになる。また、第６行目のステートメント“for ( int  i＝0;”を指定すると、デバッグ情報は出力されず、このステートメントに対するブレイクポイント（中断点）を設定することはできない。
【００３７】
図４は上記のデバッグ選択画面のさらに他の具体例を示す図であって、２４はデバッグ情報削除指定ボタンであり、図２に対応する部分には対応する符号での「ａ」の代わりに「ｃ」を付けている。
【００３８】
同図において、このデバッグ情報選択画面２０ｃは、原始プログラム１でのファイル「ｚ.ｃ」とした関数２の実行文をステートメントを単位とする行の配列として示すものであるが、特に、かかる関数２の先頭，末尾、実行ルーチンに原始プログラム１からは直接見ることができないコード展開があり、かかるコード展開に対しても、デバッグ情報がコンパイラ２から出力されないようにすることができるようにしたものである。このようにコード展開がなされているステートメント２２ｃには、さらに、デバッグ情報削除指定ボタン２４が表示されている。第２行目のステートメント“（  int  a  ）”と第３行目のステートメント“｛ ”と第９行目のステートメント“ｊ＝proc(ｉ)”と第１１行目のステートメント“return j/a;”と第１２行目のステートメント“ ｝”とにデバッグ情報削除指定ボタン２４が設けられており、これらがコード展開されていることを示している。これらデバッグ情報削除指定ボタン２４のいずれかを選択すると、該当するステートメントを展開したコード（パラメータのレジスタ設定コード）が表示され、これら毎にデバッグ情報削除指定ボタン２３ｃと同様のデバッグ情報削除指定ボタンが表示されて、いずれかのコードを、そのデバッグ情報がコンパイラ２から出力されないように、指定することができる。
【００３９】
このデバッグ情報選択画面２０ｃでのデバッグ情報削除指定ボタン２４を選択した場合の例を示すと、第２行目のステートメント“(  int  a  )”でデバッグ情報削除指定ボタン２４を選択すると、これを展開したパラメータのレジスタ設定コードが、デバッグ情報削除指定ボタン２３ｃと同様のデバッグ情報削除指定ボタンとともに、表示され、これにより、いずれかのパラメータのレジスタ設定コードに対し、そのデバッグ情報をコンパイラ２から出力しないように指定することができる。
【００４０】
また、第３行目のステートメント“｛ ”のデバッグ情報削除指定ボタン２４を選択すると、関数２のフレーム形成コードに展開され、同様にして、かかるコードに対し、デバッグ情報をコンパイラ２から出力しないように指定することができる。なお、関数のフレームとは、およそ以下のことを行なう過程である。  
（１）戻り値用の領域をスタック上に確保
（２）局所変数領域をスタック上に確保
（３）関数内で使用するレジスタの元の値をスタックにセーブ
（４）もしあればコンストラクタの呼出。
【００４１】
さらに、第９行目のステートメント“ｊ＝proc(ｉ)”は、関数呼出に関して同じことができる。関数呼出の前には、パラメータの受け渡しが、呼出後には、戻り値のコピーなどがある。他の可能性としては、関数そのものが当該呼出位置に展開されているかもしれない。その際のユーザインタフェースは、元の関数のソースを示すことになる。
【００４２】
第１１行目のステートメント“return j/a;”は、除算が実行時ルーチン呼出になる場合を示しており、その際には、通常の関数呼出のようなコード展開になるため、各コード毎にデバッグ情報削除指定ボタン２３ｃと同様のデバッグ情報削除指定ボタンが表示される。
【００４３】
第１２行目のステートメント“  ｝”は関数の収束である。フレームを消去しなければならないので、上記の生成と逆のコード展開となる。
【００４４】
なお、図４に示すデバッグ情報選択画面２０ｃでは、第１行目のステートメント“void  Func２”と第２行目のステートメント“（  int  a  ）”と第４行目のステートメント“int i,j;”と第６行目のステートメント“（for(int  i＝０；)）”と第１１行目のステートメント“return j/a;”とが指定されている場合を示している。第２行目のステートメント“（  int  a  ）”と第１１行目のステートメント“return j/a；”とは、また、デバッグ情報削除指定ボタン２４が表示されていることから、コード展開されていることになるが、デバッグ情報削除指定ボタン２３ｃが指定されていることから、このステートメント“return j/a；”を展開したコードの全てが、デバッグ情報がコンパイラ２から出力されないように、指定されていることになる。
【００４５】
図１において、上記のように、ターゲットシステム１０でのＣＰＵ７によってメモリ８にロードされた実行バイナリ３が実行されながら、メモリ８にロードされたデバッグ情報４を用いてデバッガ本体９がこの実行バイナリ３のデバッグを行ない、このデバッグの処理が終了すると、図２〜図４で説明したようにデバッグ情報をコンパイラ２から出力させないようにした指定結果から、デバッガソフトウェア５により、図５に示すようなデバッグ情報削除表２５が作成され、コンパイラ２に転送される。このデバッグ情報削除表２５は、図２〜図４で説明したように指定した原始プログラム１の諸要素（ステートメント）について表形式でコンパイラ２に供給される。ここでは、デバッグ情報削除表２５は、図２〜図４で示される指定結果に応じたものとしている。
【００４６】
コンパイラ２では、デバッガ本体９（図１）によってなされたデバッグ処理の結果に基づいて修正などの処理がなされた原始プログラム１を再度コンパイルする際、このデバッグ情報削除表２５も参照して、得られる実行バイナリ３とともにデバッグ情報４を作成して出力する。
【００４７】
ここで、コンパイラ２は、原始プログラム１のステートメントのうち、デバッグ情報削除表２５に記載されてステートメントに対しては、デバッグ情報を出力しない。そして、コンパイラ２から出力されるデバッグ情報４が、実行バイナリ３とともに、ターゲットシステム１０のメモリ８にロードされ、次のデバッグがデバッグ本体９によって行なわれるが、このメモリ８にロードされるデバッグ情報４は、前回のデバッグでこのメモリ８にロードされたデバッグ情報よりも、サイズが縮小されているので、メモリ８へのロード時間も短縮できる。そして、このようなデバッグが繰り返される毎に、このメモリ８にロードされるデバッグ情報のサイズは順次縮小していくから、メモリ８へのロード時間も短縮されていくことになり、従来のデバッグ情報のサイズを一定としてデバッグを繰り返す技術に比べ、デバッグ効率が大幅に向上することになる。
【００４８】
図６は図１におけるコンパイラ２のデバッグ情報に関する処理動作の一具体例を示すフローチャートである。
【００４９】
同図において、まず、デバッガソフトウェア５（図１）からのデバッグ情報削除表２５（図５）があるか否かを判定する（ステップ１００）。原始プログラム１（図１）の最初のデバッグでは、デバッガソフトウェア５でデバッグ情報削除表が作成されていないので、コンパイラ２中にテーブルとして確保されているデバッグ情報削除表を初期化し（ステップ１０２）、実行バイナリとなる機械語の前段階の中間語を１単位入力する（ステップ１０３）。また、２回目以降のデバッグでは、デバッガソフトウェア５でデバッグ情報削除表２５が作成されて存在しているので（ステップ１００）、これを入力し（ステップ１０１）、中間語を１単位入力する（ステップ１０３）。
【００５０】
中間語を入力すると、この中間語が本来デバッグ情報を出力するべき原始プログラム１の諸要素（ステートメント）に対応し、デバッグ情報の出力タイミングか否かを判定する（ステップ１０４）。対応する場合には、この中間語がデバッグ情報削除表２５にあるか否かを、この中間語に対応する原始プログラム１のステートメントを用いて、判定する（ステップ１０６）。また、ほとんどの場合、関数の先頭・末尾・実行時ルーチン呼出などは、原始プログラム１からは直接見ることができないコード展開がなされて、このときの中間語は対応していない。このため、ステップ１０４で対応していないとの判定があった場合には、関数の先頭・末尾・実行ルーチンの呼出しのいずれかであるか否かを判定し（ステップ１０５）、判定結果がいずれかである場合には、その中間語がデバッグ情報削除表２５にあるか否かを判定する（ステップ１０６）。また、ステップ１０５の判定結果が関数の先頭・末尾・実行時ルーチン呼出のいずれでもない場合には、次の中間語があるか否かを判定し（ステップ１０８）、あれば、次の中間語を１単位入力し（ステップ１０９）、この中間語に対してステップ１０４からの動作を繰り返すが、なければ、処理を終了する。
【００５１】
また、上記のステップ１０６での判定結果、デバッグ情報削除表２５にないということであれば（原始プログラム１の最初のコンパイルでは、１つもない）、デバッグ情報削除表２５にある中間語に対してのみ、デバッグ情報を出力しないようにするものであることから、デバッグ情報を出力するが（ステップ１０７）、デバッグ情報削除表２５にあれば、デバッグ情報をせず、次の中間語があるか否かを判定し（ステップ１０８）、あれば、次の中間語を１単位入力して（ステップ１０９）、この中間語に対してステップ１０４からの動作を繰り返すが、なければ、処理を終了する。
【００５２】
このようにして、最初のデバッグでは、デバッグ情報削除表２５が初期化されてデバッグ情報の出力をしない中間語は１つもないので、全ての中間語に対してデバッグ情報がコンパイラ２から出力されることになるが、デバッグの回数が増えるとともに、デバッグ情報削除表２５に含まれる中間語が増加していき、デバッグ１回当りのコンパイラ２から出力されるデバッグ情報のサイズも減少していく（デバッグ情報の縮小化）。そして、全ての中間語がデバッグ情報削除表２５に含まれると、実行バイナリ３がターゲットシステム１０で使用可能となるが、このようにして、デバッグの回数が進むにつれて、デバッグのための情報のターゲットシステム１０のメモリ８へのロード時間が短縮していき、デバッグ効率が向上することになる。
【図面の簡単な説明】
【００５３】
【図１】本発明によるプログラムのデバッグシステムの一実施形態を示すブロック図である。
【図２】図１に示す実施形態で表示されるデバッグ情報選択画面の一具体例を示す図である。
【図３】図１に示す実施形態で表示されるデバッグ情報選択画面の他の具体例を示す図である。
【図４】図１に示す実施形態で表示されるデバッグ情報選択画面のさらに他の具体例を示す図である。
【図５】図１におけるコンパイラにデバッグ情報を出力しない中間語を指定するデバッグ情報削除表の一具体例を示す図である。
【図６】図１におけるコンパイラのデバッグ情報に関する処理動作の一具体例を示すフローチャートである。
【符号の説明】
【００５４】
１  原始プログラム
２  コンパイラ
３  実行バイナリ
４  デバッグ情報
５  デバッガソフトウェア
６  ホストシステム
７  ＣＰＵ
８  メモリ
９  デバッガ本体
１０  ターゲットシステム
２０ａ，２０ｂ，２０ｃ  デバッグ情報選択画面
２１ａ，２１ｂ，２１ｃ  行番号
２２ａ，２２ｂ，２２ｃ  原始プログラムのステートメント
２３ａ，２３ｂ，２３ｃ，２４  デバッグ情報削除指定ボタン
２５  デバッグ情報削除表
【図１】
2005276092.tif 000003
【図２】
2005276092.tif 000004
【図３】
2005276092.tif 000005
【図４】
2005276092.tif 000006
【図５】
2005276092.tif 000007
【図６】
2005276092.tif 000008