(57)【特許請求の範囲】
【請求項１】
ソースプログラムに基づいて生成された実行形式プログラムをロードするロード手段と、前記ソースプログラムを構成する各要素と前記実行形式プログラムを構成する各箇所との対応関係を示す情報を記憶している記憶手段と、前記ソースプログラムに対して編集がなされた場合であって、その編集内容が特定のものであるとき、当該特定の編集が前記ソースプログラムを構成する各要素のいずれに対してなされたかを示す位置情報を取得して記憶する取得手段と、前記ロードされた実行形式プログラムにおける、前記取得手段により取得された位置情報が指す要素に対応する箇所にブレイクポイントを設定する設定手段とを備えることを特徴とするブレイクポイント設定装置。
【請求項２】
前記各要素は、前記ソースプログラムを構成する各行であり、前記記憶手段が記憶している前記情報は、当該各行それぞれを識別する行番号と前記各箇所との対応関係を示すものであり、前記取得手段は、前記ソースプログラムにおける特定の編集がなされた行の行番号を前記位置情報として取得して記憶することを特徴とする請求項１記載のブレイクポイント設定装置。
【請求項３】
前記特定の編集には、改行コードの削除が含まれ、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が改行コードの削除であるときには、当該編集箇所の行番号を記憶し、前記取得手段により既に取得され記憶されている行番号のうち当該編集に係る行の行番号より値が大きい行番号それぞれを値が１つ小さい行番号に書き替える更新手段を備えることを特徴とする請求項２記載のブレイクポイント設定装置。
【請求項４】
前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が行頭部分への改行コードの追加であるときには、取得手段により既に取得され記憶されている行番号のうち当該編集箇所と同じ行番号及び当該編集箇所の行番号より値が大きい行番号それぞれを値が１つ大きい行番号に書き替える更新手段を備えることを特徴とする請求項２記載のブレイクポイント設定装置。
【請求項５】
前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が行末部分への改行コードの追加であるときには、前記取得手段により既に取得され記憶されている行番号のうち当該編集箇所よりも値が大きい行番号を値が１つ大きい値に書き替える更新手段を備えることを特徴とする請求項２記載のブレイクポイント設定装置。
【請求項６】
前記特定の編集には、行中への改行コードの追加が含まれ、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が行中への改行コードの追加であるときには、前記取得手段により既に取得され記憶されている行番号のうち当該編集箇所の行番号よりも値が大きい行番号それぞれを値が１つ大きい値に書き替え、また当該編集箇所の行番号と当該編集箇所の行番号より値が１つ大きい行番号とを新たに記憶する更新手段を備えることを特徴とする請求項２記載のブレイクポイント設定装置。
【請求項７】
前記取得手段は、前記ソースプログラムが編集された場合に、当該編集箇所の編集内容が改行コード以外の文字列に対する編集であるか否かを判定する判定手段と、前記判定手段により肯定的に判定された場合に、当該編集箇所の当該編集箇所の行番号を新たに記憶する更新手段とを備えることを特徴とする請求項２記載のブレイクポイント設定装置。
【請求項８】
前記取得手段は、さらに、前記ソースプログラムを構成する各制御ブロックの範囲が前記ソースプログラム上のどこからどこまでであるかを行番号により示す行範囲情報を記憶しており、前記設定手段は、前記行範囲情報が示す各制御ブロックの先頭の行番号に相当する実行形式プログラム上の対応箇所にブレイクポイントを設定することを特徴とする請求項２記載のブレイクポイント設定装置。
【請求項９】
前記設定手段は、前記取得手段が記憶している行番号のうちで、行番号の値が連続する２つの行番号のうちの後の行番号については、対応箇所のブレイクポイントを設定しないことを特徴とする請求項２記載のブレイクポイント設定装置。
【請求項１０】
前記ブレイクポイント設定装置は、前記設定手段が設定する各ブレイクポイント毎にユーザにより入力される当該ブレイクポイントに対応する編集箇所に関する情報を対応させたバグ票を作成し、当該バグ票をユーザインターフェースを介してユーザに提示することを特徴とする請求項１記載のブレイクポイント設定装置。
【請求項１１】
取得手段は、前記特定の編集に対応する位置情報が既に取得され記憶されている場合には、当該位置情報を記憶することを抑止することを特徴とする請求項１記載のブレイクポイント設定装置。
【請求項１２】
前記取得手段は、さらに、前記ソースプログラムを構成する各制御ブロックの範囲が前記ソースプログラム上のどこからどこまでであるかを行番号により示す行範囲情報を記憶しており、前記設定手段は、前記各制御ブロック毎に、当該制御ブロック内にある前記特定の編集がなされた各行のうち先頭のものにブレイクポイントを設定し、その他のものにはブレイクポイントを設定しないよう抑止することを特徴とする請求項２記載のブレイクポイント設定装置。
【請求項１３】
コンピュータに実行させるプログラムであって、当該プログラムはコンピュータに、ソースプログラムに基づいて生成された実行形式プログラムをロードするロードステップと、前記ソースプログラムを構成する各要素と前記実行形式プログラムを構成する各箇所との対応関係を示す情報をメモリに記憶する記憶ステップと、前記ソースプログラムに対して編集がなされた場合であって、その編集内容が特定のものであるとき、当該特定の編集が前記ソースプログラムを構成する各要素のいずれに対してなされたかを示す位置情報を取得してメモリ記憶する取得ステップと、前記ロードされた実行形式プログラムにおける、前記取得ステップにより取得された位置情報が指す要素に対応する箇所にブレイクポイントを設定する設定ステップと、を実行させることを特徴とするブレイクポイント設定プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラム開発に利用されるデバッガツールにおけるブレイクポイント設定機能の改良に関する。
【０００２】
【従来の技術】
プログラムの不具合の発見や修正作業等を支援するソフトウェアとしてデバッガが利用されている。デバッガは、ソースコード上の適当な位置で実行を停止する機能や停止した時点での変数の内容を出力する機能等を持つ（例えば、特許文献１参照。）。この停止位置をブレイクポイントと呼ぶ。
【０００３】
ブレイクポイントは、プログラマによってソースコード上の修正箇所等に設定されるもので、多くのデバッガはプログラマがエディタ上で簡単にブレイクポイントを設定することができるように工夫されている。例えば、ソースコードが表示されたエディタ上で、プログラマがブレイクポイントを設定しようとする位置にマウスポインタを合わせてクリックすると、デバッガがその位置にブレイクポイントを設定する等の方法である。ブレイクポイントが設定された位置は、マーカーや記号等の目印が付されてエディタに表示される。
【０００４】
より具体的には、デバッガは、プログラマにより設定されたブレイクポイントの位置に割込み命令等を挿入し、その割り込み命令等の位置で制御を獲得し、変数の値やスタックの状態を確認することができるようにする。停止した処理を再開する場合には、デバッガがソースコードから割り込み命令等を除去して元の状態に戻し、プログラムの実行を再開する。
【０００５】
【特許文献１】
特開平５−２０４７０８号公報
【０００６】
【発明が解決しようとする課題】
このように従来のデバッガにおいては、プログラマがブレイクポイントを適宜設定する必要があり、これがプログラマの負担となっている。例えば修正箇所にブレイクポイントを設定する場合の手順としては、各箇所を修正する毎に逐一ブレイクポイントを設定するという手順や、各箇所をすべて修正した後でまとめてブレイクポイントを設定するといった手順があるが、前者は、修正とブレイクポイント設定とを交互に繰り返す作業が煩雑なものとなるし、後者は修正箇所を忘れずに憶えておく必要があり、いずれの手順にしてもプログラマの負担となる。
【０００７】
そこで本発明は、プログラマの手を煩わすことなくブレイクポイントを設定するブレイクポイント設定装置を提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記問題を解決するため、本発明のブレイクポイント設定装置は、ソースプログラムに基づいて生成された実行形式プログラムをロードするロード手段と、前記ソースプログラムを構成する各要素と前記実行形式プログラムを構成する各箇所との対応関係を示す情報を記憶している記憶手段と、前記ソースプログラムに対して編集がなされた場合であって、その編集内容が特定のものであるとき、当該特定の編集が前記ソースプログラムを構成する各要素のいずれに対してなされたかを示す位置情報を取得して記憶する取得手段と、前記ロードされた実行形式プログラムにおける、前記取得手段により取得された位置情報が指す要素に対応する箇所にブレイクポイントを設定する設定手段とを備える。
【０００９】
この構成によれば、ブレイクポイント設定装置は、オペレータの編集操作により編集された、ソースプログラム上の編集箇所を管理することによって編集箇所のソースプログラム上の位置を把握し、その位置にブレイクポイントを設定するので、編集箇所に関しては、オペレータによるブレイクポイントの設定指示及び設定位置の指定が不要となる。
【００１０】
また、前記各要素は、前記ソースプログラムを構成する各行であり、前記記憶手段が記憶している前記情報は、当該各行それぞれを識別する行番号と前記各箇所との対応関係を示すものであり、前記取得手段は、前記ソースプログラムにおける特定の編集がなされた行の行番号を前記位置情報として取得して記憶するよう構成してもよい。
【００１１】
また、前記特定の編集には、改行コードの削除が含まれ、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が改行コードの削除であるときには、当該編集箇所の行番号を記憶し、前記取得手段により既に取得され記憶されている行番号のうち当該編集に係る行の行番号より値が大きい行番号それぞれを値が１つ小さい行番号に書き替える更新手段を備えてもよい。
【００１２】
また、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が行頭部分への改行コードの追加であるときには、取得手段により既に取得され記憶されている行番号のうち当該編集箇所と同じ行番号及び当該編集箇所の行番号より値が大きい行番号それぞれを値が１つ大きい行番号に書き替える更新手段を備えてもよい。
【００１３】
また、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が行末部分への改行コードの追加であるときには、前記取得手段により既に取得され記憶されている行番号のうち当該編集箇所よりも値が大きい行番号を値が１つ大きい値に書き替える更新手段を備えてもよい。
【００１４】
また、前記特定の編集には、行中への改行コードの追加が含まれ、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が行中への改行コードの追加であるときには、前記取得手段により既に取得され記憶されている行番号のうち当該編集箇所の行番号よりも値が大きい行番号それぞれを値が１つ大きい値に書き替え、また当該編集箇所の行番号と当該編集箇所の行番号より値が１つ大きい行番号とを新たに記憶する更新手段を備えてもよい。
【００１５】
また、前記取得手段は、前記ソースプログラムが編集された場合に、当該編集箇所の編集内容が改行コード以外の文字列に対する編集であるか否かを判定する判定手段と、前記判定手段により肯定的に判定された場合に、当該編集箇所の当該編集箇所の行番号を新たに記憶する更新手段とを備えてもよい。
また、前記取得手段は、さらに、前記ソースプログラムを構成する各制御ブロックの範囲が前記ソースプログラム上のどこからどこまでであるかを行番号により示す行範囲情報を記憶しており、前記設定手段は、前記行範囲情報が示す各制御ブロックの先頭の行番号に相当する実行形式プログラム上の対応箇所にブレイクポイントを設定してもよい。
【００１６】
また、前記設定手段は、前記取得手段が記憶している行番号のうちで、前後で連続する２つの行番号のうちの後の行番号については、対応箇所のブレイクポイントを設定しないよう構成してもよい。
また、前記ブレイクポイント設定装置は、前記設定手段が設定する各ブレイクポイント毎にユーザにより入力される当該ブレイクポイントに対応する編集箇所に関する情報を対応させたバグ票を作成し、当該バグ票をユーザインターフェースを介してユーザに提示してもよい。
【００１７】
また、前記ブレイクポイント設定装置は、前記バグ票の作成において、前記編集箇所がデバッガにより解読、実行された回数をデバッガより取得し、当該回数を前記編集箇所に関する情報に含めて提示してもよい。
また、取得手段は、前記特定の編集に対応する位置情報が既に取得され記憶されている場合には、当該位置情報を記憶することを抑止してもよい。
【００１８】
また、前記取得手段は、さらに、前記ソースプログラムを構成する各制御ブロックの範囲が前記ソースプログラム上のどこからどこまでであるかを行番号により示す行範囲情報を記憶しており、前記設定手段は、前記各制御ブロック毎に、当該制御ブロック内にある前記特定の編集がなされた各行のうち先頭のものにブレイクポイントを設定し、その他のものにはブレイクポイントを設定しないよう抑止する。
【００１９】
また、ブレイクポイント設定方法は、ソースプログラムに基づいて生成された実行形式プログラムをロードするロードステップと、前記ソースプログラムを構成する各要素と前記実行形式プログラムを構成する各箇所との対応関係を示す情報をメモリに記憶する記憶ステップと、前記ソースプログラムに対して編集がなされた場合であって、その編集内容が特定のものであるとき、当該特定の編集が前記ソースプログラムを構成する各要素のいずれに対してなされたかを示す位置情報を取得してメモリ記憶する取得ステップと、前記ロードされた実行形式プログラムにおける、前記取得ステップにより取得された位置情報が指す要素に対応する箇所にブレイクポイントを設定する設定ステップとを含む。
【００２０】
また、ブレイクポイント設定プログラムは、プログラム、当該プログラムはコンピュータに、ソースプログラムに基づいて生成された実行形式プログラムをロードするロードステップと、前記ソースプログラムを構成する各要素と前記実行形式プログラムを構成する各箇所との対応関係を示す情報をメモリに記憶する記憶ステップと、前記ソースプログラムに対して編集がなされた場合であって、その編集内容が特定のものであるとき、当該特定の編集が前記ソースプログラムを構成する各要素のいずれに対してなされたかを示す位置情報を取得してメモリ記憶する取得ステップと、前記ロードされた実行形式プログラムにおける、前記取得ステップにより取得された位置情報が指す要素に対応する箇所にブレイクポイントを設定する設定ステップとを実行させてもよい。
【００２１】
【発明の実施の形態】
＜実施の形態１＞
以下、本実施の形態のデバッグ装置について図面を用いて説明する。
図１は、実施の形態１のデバッグ装置のブロック図である。
同図においてデバッグ装置１０は、外部からオペレータによるコマンドの入力を受け付けるコマンド入力部１０２、コマンドの解析を行うコマンド解析部１０３、メイク処理を行うメイク部１１、デバッグ処理を行うデバッガ部１２及びエディット処理を行うエディタ部１３から構成される。
【００２２】
メイク部１１は、最新の実行ファイルを作成し保持する実行ファイル管理部１０４を備える。
デバッガ部１２は、最新の実行ファイルを読み込むロード部１０５、ブレイクポイントを設定・解除するブレイクポイント設定・解除部１０６、実行ファイルの実行を制御する実行制御部１０７、ソースコードをディスプレイ等に表示するソースコード表示部１０８、ソースコードのブレイクポイント設定位置に目印等を付けてディスプレイ等に表示するブレイクポイント表示部１０９、ブレイクポイントで停止した際に所定の処理を行うｂｒｅａｋ命令処理部１１０、設定したブレイクポイントに関する情報を保持するブレイクポイント一覧管理部１１１及び変更、追加、削除等の編集した箇所に自動的にブレイクポイントを設定する修正箇所設定部１１６から構成される。以下、変更、追加及び削除等、オペレータの操作によってソースコードが変更されることを編集又は修正と呼ぶこととする。
【００２３】
エディタ部１３は、オペレータからの編集操作に応じてソースコードの編集処理を行うソースコード編集部１１２、ソースコード編集処理に際して編集された箇所のファイル名及び行番号を、当該ファイルのソースコード上の位置として記憶しておく修正行一覧管理部１１５、読み出したソースコードをディスプレイ等に表示するソースコード表示部１１３及びソースコードファイルを保持するソースコードファイル管理部１１４から構成される。
【００２４】
ここでエディタ部１３とデバッガ部１２が持つソースコード表示部１０８及びソースコード表示部１１３は共通のものにしてもよい。
コマンド入力部１０２は、オペレータから「編集ファイルオープンコマンド」、「編集ファイルセーブコマンド」、「編集コマンド」、「デバッグ処理開始コマンド」、「ブレイクポイント設定コマンド」、「ブレイクポイント解除コマンド」、「プログラム実行コマンド」及び「デバッグ処理終了コマンド」等のコマンドを受け付ける。なお、データの表示・設定に関するコマンド処理は、本発明において特に重要な部分ではないので説明を省略する。
【００２５】
コマンド解析部１０３は、コマンド入力部１０２に受け付けられた上記コマンドを解析し、解析結果に応じて各構成部に指示することにより各コマンドの機能を実現する。
以下、まず最初に、従来の技術と同様のコマンドである「編集ファイルオープンコマンド」、「編集ファイルセーブコマンド」、「ブレイクポイント設定コマンド」、「ブレイクポイント解除コマンド」及び「プログラム実行コマンド」について説明する。これらは従来技術であるので、図面を省略して簡単に説明する。次に、本発明の特徴的なコマンドである「編集コマンド」、「デバッグ処理開始コマンド」及び「デバッグ処理終了コマンド」について図面を用いて説明する。
＜編集ファイルオープンコマンド＞
ステップ１１：コマンド入力部１０２は、オペレータから編集対象のファイル名を指定した編集ファイルオープンコマンドを受け付ける。
【００２６】
ステップ１２：ソースコード編集部１１２は、ソースコードファイル管理部１１４に、指定されたファイル名のソースコードを読み出すよう要求する。
ステップ１３：ソースコードファイル管理部１１４は、ソースコードファイルを記録している記録媒体から指定されたファイル名のソースコードを読み出し、ソースコード編集部１１２に渡す。
【００２７】
ステップ１４：ソースコード編集部１１２は、ソースコード表示部１１３に、読み出したソースコードを表示するよう要求する。
ステップ１５：ソースコード表示部１１３は、表示を要求されたソースコードをディスプレイに表示する。
＜編集ファイルセーブコマンド＞
ステップ３１：コマンド入力部１０２は、オペレータよりセーブ対象のファイル名を指定した編集ファイルセーブコマンドを受け付ける。
【００２８】
ステップ３２：ソースコード編集部１１２は、ソースコードファイル管理部１１４に、指定されたファイル名のソースコードをセーブするよう要求する。
ステップ３３：ソースコードファイル管理部１１４は、セーブすることを要求されたソースコードを記録媒体に書き込む。
＜ブレイクポイント設定コマンド＞
ステップ５１：コマンド入力部１０２は、オペレータからブレイクポイントを設定すべきファイル名及び行番号を指定したブレイクポイント設定コマンドを受け付ける。このブレイクポイント設定コマンドは、具体的には、ソースコードがディスプレイに表示された状態で、オペレータがソースコード上の任意の行にマウスポインタを合わせてクリックすると、コマンド入力部１０２が、そのクリックされた位置の行番号と表示中のソースコードのファイル名とを行番号及びファイル名の指定としてブレイクポイント設定コマンドを受け付けるというものである。
【００２９】
ステップ５２：ロード部１０５は、ブレイクポイント設定・解除部１０６にブレイクポイントを設定するよう要求する。
ステップ５３：ブレイクポイント設定・解除部１０６は、ロードされた実行ファイル内のデバッグ情報から、ブレイクポイント設定行に対するアドレスを得る。
【００３０】
ステップ５４：ブレイクポイント設定・解除部１０６は、ブレイクポイント一覧管理部１１１に、ブレイクポイントを設定する箇所のアドレス及びそのアドレス内にある命令をブレイクポイント一覧に登録するよう要求する。
ここでブレイクポイント一覧は、設定するブレイクポイントに対応する実行ファイル内のアドレスを格納するアドレス欄と当該アドレス欄のアドレスにある命令を一時的に格納するための命令欄より構成され、アドレスと命令との組がアドレスの昇順に並んでいる。
【００３１】
ステップ５５：ブレイクポイント設定・解除部１０６は、ソースコード表示部１０８に、ブレイクポイントが設定されたファイルを表示するよう要求する。
ステップ５６：ブレイクポイント一覧管理部１１１は、ブレイクポイント設定・解除部１０６より登録するよう要求されたアドレス及び命令をブレイクポイント一覧に登録し、これらのアドレスが指しているソースコード上の命令をｂｒｅａｋ命令に置き換える。
【００３２】
ステップ５７：ソースコード表示部１０８は、表示を要求されたファイルをソースコードファイル管理部１１４から読み出し、表示する。そしてさらに、ブレイクポイント表示部１０９に指定したファイルのブレイクポイントを表示するよう要求する。
ステップ５８：ブレイクポイント表示部１０９は、ブレイクポイント一覧管理部１１１から指定されたファイルのブレイクポイント一覧を読み出し、ブレイクポイントを表示する。
【００３３】
図２は、ブレイクポイント表示部１０９によって表示されたブレイクポイントの一例を示す。
同図に示すように、修正前のソースコードにおける「ｊ＝５００」を「ｊ＝１０」に修正し、「ｐｒｉｎｔｆ（”ｉ＝％ｄ”，ｉ）；」、「ｐｒｉｎｔｆ（”ｎｅｘｔ＿ｉ＝％ｄ”，ｉ＋１）；」及び「ｐｒｉｎｔｆ（”ｃｏｎｔｉｎｕｅ￥ｎ”）；」を追加した結果、修正後のソースコードにおける「ｊ＝１０」の行と「ｐｒｉｎｔｆ（”ｉ＝％ｄ”，ｉ）；」の行の左端にブレイクポイントを示す黒い丸印が表示される。
＜ブレイクポイント解除コマンド＞
ステップ６１：コマンド入力部１０２は、解除すべきブレイクポイントのファイル名及び行番号を指定したブレイクポイント解除コマンドをオペレータより受け付ける。このブレイクポイント解除コマンドは、具体的には、ソースコードが表示された状態で、オペレータがソースコード上のブレイクポイントが設定された行にマウスポイントを合わせてクリックすると、コマンド入力部１０２がそのクリックされた行のブレイクポイントを解除する指示として受け付けるというものである。
【００３４】
ステップ６２：ロード部１０５は、ブレイクポイント設定・解除部１０６にブレイクポイントを解除するよう要求する。
ステップ６３：ブレイクポイント設定・解除部１０６は、ロードされた実行ファイル内のデバッグ情報から、ブレイクポイント解除行に対するアドレスを得て、ブレイクポイント一覧管理部１１１にブレイクポイントを解除する箇所のアドレス及びそのアドレス内にある命令をブレイクポイント一覧から削除するよう要求し、ソースコード表示部１０８に解除したファイルを表示するよう要求する。
【００３５】
ステップ６４：ブレイクポイント一覧管理部１１１は、元の命令をリストアし、アドレス及び命令をブレイクポイント一覧から削除する。
ステップ６５：ソースコード表示部１０８は、指定されたファイルをソースコードファイル管理部１１４の記録媒体から読み出し、表示する。続いて、ブレイクポイント表示部１０９に、指定したファイルのブレイクポイントを表示するよう要求する。
【００３６】
ステップ６６：ブレイクポイント表示部１０９は、ブレイクポイント一覧管理部１１１から指定されたファイルのブレイクポイント一覧を読み出し、ブレイクポイントを表示する。
＜プログラム実行コマンド＞
ステップ７１：コマンド入力部１０２は、デバッグ装置１０で実行ファイルを実行するに際してオペレータよりプログラム実行コマンドを受け付ける。
【００３７】
ステップ７２：ロード部１０５は、実行制御部１０７に実行ファイルを実行するよう要求する。
ステップ７３：実行制御部１０７は、ロードされた実行ファイル内の命令を１命令ずつ解釈実行し、ｂｒｅａｋ命令があれば命令の実行を一時停止してｂｒｅａｋ命令処理部１１０にｂｒｅａｋ命令を処理するよう要求する。続いてソースコード表示部１０８に、実行が停止した場所のソースコードを表示するよう要求する。
【００３８】
ステップ７４：ｂｒｅａｋ命令処理部１１０は、停止したアドレスにあった本来の命令をブレイクポイント一覧管理部１１１から取り出し、取り出した命令を次のプログラムの実行で最初に実行するように実行制御部１０７に渡す。
ステップ７５：ソースコード表示部１０８は、指定されたファイルをソースコードファイル管理部１１４から読み出して表示し、続いて、ブレイクポイント表示部１０９は指定されたファイルのブレイクポイント一覧を読み出して、ソースコード上のブレイクポイントの位置にブレイクポイントであることを示す目印等を表示する。
【００３９】
次に、本発明の特徴的なコマンドについて説明する前に修正行一覧について説明しておく。
図３は、修正行一覧の一例を示す。
修正行一覧とは、オペレータがソースコードに対して行った編集操作の箇所の行番号を昇順に並べたテーブルである。このテーブルに記録された行番号は、ブレイクポイントを設定する行番号となる。修正行一覧は、行番号の昇順に並んでおり、同じ行番号が２重に登録されることはなく、各ソースコードファイル毎に保持される。
【００４０】
では続いて「編集コマンド」、「デバッグ処理開始コマンド」及び「デバッグ処理終了コマンド」について説明する。
＜編集コマンド＞
図４は、コマンド入力部１０２が編集コマンドを受け付けた場合における処理手順を示すフローチャートである。このコマンドは、編集ファイルオープンコマンドによりファイルが読み出されて表示されている状態において有効である。
【００４１】
ステップＳ３０１：ソースコード編集部１１２は、デバッグ処理が終了しているか否かを判定する。
ステップＳ３０２：ステップＳ３０１の判定の結果、デバッグ処理が終了していない場合には、ソースコード編集部１１２は、「デバッグ処理終了コマンド」をコマンド入力部１０２に送り、その結果、デバッグ処理が終了する。
【００４２】
ステップＳ３０３：編集コマンドによりなされた編集の種類が、改行コードの削除、改行コードの追加、その他の編集処理のいずれであるかを判定する。改行コードの削除は、改行コードの削除のみの編集又は改行コードの削除を含む編集であり、改行コードの追加は、改行コードの追加のみの編集又は改行コードの追加を含む編集であり、その他の編集処理は、改行コードの削除及び追加をいずれもともなわない編集である。
【００４３】
ステップＳ３０４：編集の種類がその他の編集処理である場合には、修正行一覧に当該その他の編集処理がなされた行の行番号を登録する。
ステップＳ３０５：編集の種類が改行コードの削除である場合には、修正行一覧に当該改行削除の行番号を登録し、修正行一覧における当該改行削除行の行番号より大きな行番号から１を引く。
【００４４】
ステップＳ３０６：編集の種類が改行コードの追加であって、その追加の位置が行頭の場合には、修正行一覧における当該改行追加行の行番号以上の行番号に１を足す。
ステップＳ３０７：編集の種類が改行コードの追加であって、その追加の位置が行末の場合には、修正行一覧における改行追加行の行番号より大きな番号に１を足す。
【００４５】
ステップＳ３０８：編集の種類が改行コードの追加であって、その追加の位置が行中、すなわち行頭でも行末でもない位置に改行コードが追加された場合には、修正行一覧における当該改行追加行の行番号より大きな行番号に１を足し、修正行一覧に改行追加行の行番号と改行追加行の行番号＋１を登録する。
ステップＳ３０９：ソースコード編集部１１２は、編集ファイルオープンコマンドにより読み出されて表示されているソースコードに対して編集処理を行い、ソースコード表示部１０８に表示を更新するよう要求する。
【００４６】
ステップＳ３１０：ソースコード表示部１０８は、編集内容を反映して表示を更新する。
このようにしてソースコード編集部１１２は、編集された箇所の行番号を修正行一覧に登録することによって、編集された箇所についてのソースコード上の位置を管理する。
【００４７】
なお、上記ステップＳ３０４、Ｓ３０５及びＳ３０８の行番号の登録において、新たに登録しようとする行番号と同じものが、既に修正行一覧に登録されていえる場合には、登録を行わないことにより二重登録の状態にならないようにする。より具体的には、登録しようとする行番号が修正行一覧内に既に登録されているか否かを判定し、未だ登録されていなければ登録を行い、既に登録されていれば登録を行わない。
【００４８】
本実施の形態においては、編集処理を常に監視し、編集処理がある度に修正行一覧を更新するよう構成しているが、これに限られず、編集処理前の元のソースコードを保持しておき、編集処理が終わった後に編集後のソースコードと元のソースコードとを比較することにより修正行一覧を作成するよう構成してもよい。
＜デバッグ処理開始コマンド＞
図５は、コマンド入力部１０２がデバッグ処理開始コマンドを受け付けた場合における処理手順を示すフローチャートである。なお、図５では省略しているが、ステップＳ４００以降の処理に先立って、以下のステップＳ４１からステップＳ４３の処理が行われる。
【００４９】
ステップＳ４１：ロード部１０５は、編集処理を行っている最中のソースコードがある場合、そのソースコードに対して編集ファイルセーブコマンドを送る。続いて、実行ファイル管理部１０４に最新の実行ファイルを読み出すよう要求する。
ステップＳ４２：実行ファイル管理部１０４は、ソースコードファイル管理部１１４のソースコードの日時をみて、実行ファイルより新しいソースコードファイルがあるか否かを判定する。
【００５０】
ステップＳ４３：ステップＳ４２の判定の結果、新しいソースコードファイルがある場合には、そのソースコードファイルについてコンパイル処理を行い、最新の実行ファイルを作成し、最新の実行ファイルをロード部１０５に渡す。
なお、ステップＳ４２の判定の結果、新しいソースコードファイルがない場合には、実行ファイル管理部１０４は、保持しているうちで最新の実行ファイルをロード部１０５に渡す。
【００５１】
ステップＳ４００：ロード部１０５は最新の実行ファイルをロードし、修正箇所設定部１１６に、修正行一覧が示す行にブレイクポイントを設定するよう要求する。
ステップＳ４０１：修正箇所設定部１１６は、修正行一覧管理部１１５に、まだ読み込んでいない修正行一覧があるか否か判定する。
【００５２】
ステップＳ４０２：判定の結果、まだ読み込んでいない修正行一覧があればそれを読み込む。
ステップＳ４０３：修正箇所設定部１１６は、読み込んだ修正行一覧に修正行番号が１つ以上あるか否かを判定する。
ステップＳ４０４：判定の結果、修正行番号が１つ以上ある場合には、読み込んだ修正行一覧の先頭にある修正行番号を取り出してそれを対象行とし、対象行に対してブレイクポイント設定コマンドを送り、対象行にブレイクポイントを設定する。
【００５３】
ステップＳ４０５：続いて、修正箇所設定部１１６は、修正行一覧の先頭から順に見て、まだ取り出していない修正行番号があるか否かを判定する。
ステップＳ４０６：判定の結果、取り出していない修正行番号があれば、対象行の次の修正行番号を取り出して対象行とする。
ステップＳ４０７：対象行に対してブレイクポイント設定コマンドを送り、対象行にブレイクポイントを設定する。
【００５４】
ステップＳ４０８：全ての修正行についてブレイクポイントが設定し終わったら修正行一覧管理部１１５から修正行一覧を破棄する。
このように修正箇所設定部１１６は、修正行一覧に記載された修正行を指定したブレイクポイント設定コマンドを送ることによって、ブレイクポイント設定・解除部１０６にブレイクポイントを設定させる。
【００５５】
なお、修正行一覧を破棄することとしているが、デバッグ処理終了コマンドの処理で、ブレイクポイント一覧から修正行一覧を作成する直前に、不要な部分を削除することで、修正行一覧を破棄することの代わりとしてもよい。
＜デバッグ処理終了コマンド＞
図６は、コマンド入力部１０２がデバッグ処理終了コマンドを受け付けた場合における処理手順を示すフローチャートである。
【００５６】
ステップＳ５０１：ロード部１０５は、修正行一覧管理部１１５に、ブレイクポイント一覧管理部１１１が管理するブレイクポイント一覧から修正行一覧を作成するよう要求する。次に、修正行一覧管理部１１５は、ブレイクポイント一覧管理部１１１のブレイクポイント一覧のアドレスを、ロードされた実行ファイルのデバッグ情報を用いてファイル名及び行番号に変換し、各ファイルごとに修正行一覧を作成する。
【００５７】
ステップＳ５０２：ロード部１０５は、ブレイクポイント一覧管理部１１１にブレイクポイント一覧を破棄するよう要求を出し、ブレイクポイント一覧管理部１１１は、ブレイクポイント一覧を破棄する。
ステップＳ５０３：ロード部１０５は、実行ファイルをアンロードする。
以上に示す構成により、プログラマは自ら修正箇所にブレイクポイントを設定する必要がなくなり、ブレイクポイント設定時の煩わしさから解放され、デバッグの効率が向上する。またプログラマが設定する場合、プログラマの設定し忘れ等によりすべての修正箇所にもれなく設定することができない場合があるが、デバッグ装置１０が設定する場合であれば設定もれがなく、すべての修正箇所について動作等をテストすることができる。
＜実施の形態２＞
図７は、実施の形態２のデバッグ装置のブロック図である。
【００５８】
同図においてデバッグ装置２０は、実施の形態１における図１のデバッグ装置１０の構成に加えて、分割・最適化部６１７を備える。以下、実施の形態１と同じ点については説明を省略し、異なる点を中心に説明する。
図９は、コマンド入力部１０２がデバッグ処理開始コマンドを受け付けた場合における処理手順を示すフローチャートである。
【００５９】
同図においてステップＳ８００より前の処理については図示していないが、図５にて説明したステップＳ４１からステップＳ４３までと同じであり、ステップＳ８００からステップＳ８０４及びステップＳ８１２の処理についても図５のステップＳ４００からステップＳ４０４及びステップＳ４０８と同じであるので説明を省略し、以下、ステップＳ８０５以降から説明する。
【００６０】
ステップＳ８０５：分割・最適化部６１７は、制御移行先行一覧作成処理を行う。この処理の詳細については後に図１０で説明する。
ここで制御移行先行一覧について説明する。
図８は、実施の形態２のデバッグ装置２０が作成し、使用する制御移行先行一覧の一例を示す。
【００６１】
制御移行先行とは、ソースコード中の各行の実行順序において、真上の行以外の他の行の実行に続いて実行される可能性がある行を指す。例えば、分岐命令の分岐先の命令を含む行は制御移行先行である。ソースコードの先頭から行順において、ある制御移行先行から次の制御移行先行の前行までのひとかたまりを制御ブロックと呼ぶ。すなわち、制御移行先行一覧は、ソースコードを構成する各制御ブロックの先頭行がソースコード上の何行目にあるかを記憶するものであり、これにより各制御ブロックの範囲を示すものである。
【００６２】
図８の制御移行先行一覧は、行番号を格納する行番号の欄と行番号の行が制御移行先行であるか否かを示す制御移行先行フラグとから構成される。制御移行先行フラグは、行番号の行が制御移行先行である場合には１が、そうでない場合には０が設定される。ソースコードの第１行目は、常に、制御移行先行とする。この制御移行先行一覧は、各ソースファイルごとに作成される。
【００６３】
ステップＳ８０６：続いて、修正箇所設定部１１６は、修正行一覧の先頭から順に見て、まだ取り出していない修正行番号があるか否かを判定する。
ステップＳ８０７：判定の結果、取り出していない修正行番号があれば、対象行の次の修正行番号を取り出して次対象行とする。
ステップＳ８０８：制御移行先行一覧において、次対象行の制御移行先行フラグが１であるか否かを判定する。
【００６４】
ステップＳ８０９：ステップＳ８０８の判定において、１ではないと判定した場合、分割・最適化部６１７は、次対象行の行番号と対象行に１を加えた行番号とが一致するか否かを判定する。すなわちこの判定においては、対象行と次対象行とが連続しているか否かを判定している。
ステップＳ８１０：ステップＳ８０８の判定において次対象行の制御移行先行フラグが１である場合、及び、ステップＳ８０９において次対象行の行番号と対象行に１を加えた行番号とが一致しない場合、分割・最適化部６１７は、ブレイクポイント設定コマンドを送り、次対象行にブレイクポイントを設定する。
【００６５】
ステップＳ８１１：次対象行を対象行にしてステップＳ８０６の処理に戻る。
このように、分割・最適化部６１７は、修正行が制御移行先行である場合、及び、修正行が１つ前の修正行の行番号に続く行番号を持たないものである場合には、その修正行にブレイクポイントを設定し、修正行が制御移行先行でなく、かつ、修正行が１つ前の修正行の行番号に続く行番号を持つものである場合には、その修正行にはブレイクポイントを設定しない。
【００６６】
なお、分割・最適化部６１７は、次のようにより簡単な構成にしてもよい。すなわち、分割・最適化部６１７は、修正行一覧に記載されている修正行のうち、制御移行先行一覧に制御移行先行として記載されている行、すなわち制御移行先行フラグが１の行についてブレイクポイントを設定するよう構成してもよい。また、分割・最適化部６１７は、修正行一覧に記載されている修正行のうち、当該修正行の真上の行も修正行である場合には、ブレイクポイントを設定しないよう構成してもよい。
【００６７】
また、分割・最適化部６１７は、制御移行先行一覧が示す各制御ブロックについて、制御ブロック中の修正行のうち先頭の修正行のみにブレイクポイントを設定するよう構成してもよい。
さらに、分割・最適化部６１７は、各制御ブロックについて、制御ブロック中に修正行が存在する場合には、その制御ブロックの先頭行にブレイクポイントを設定し、先頭行以外の修正行のブレイクポイント設定を省略するよう構成してもよい。またこの構成に加えて、制御ブロック中で複数の修正行が連続する場合には、そのうちの先頭の修正行にのみブレイクポイントを設定するよう構成してもよい。
【００６８】
図１０は、ステップＳ８０５の制御移行先行一覧作成処理の詳細な処理手順を示すフローチャートである。
ステップＳ９０１：分割・最適化部６１７は、読み込んだ修正行一覧のソースコードを読み込む。
ステップＳ９０２：後の単語解析処理のために各種変数の初期化処理を行う。すなわち現在行に０、制御移行先行フラグに１、次文先頭フラグに０、中フラグに０、カッコカウントに−１をセットする。
【００６９】
ステップＳ９０３：現在行＋１行目の行があるか否かを判定する。
ステップＳ９０４：ステップＳ９０３の判定の結果、現在行＋１行目の行がある場合には、その行を抽出し、現在行とする。
ステップＳ９０５：現在行を区切りで分割し、単語に分ける。
ここで区切りとは、ソースコードに含まれる所定の文字列を指す。この所定の文字列は、スペース、コントロール文字、／／・・・行末、／＊・・・＊／、“・・・”、（、）、｛、｝、；及び：である。この所定の文字列において「・・・」の部分は任意の文字列である。区切りのうち、（、）、｛、｝、；、：を特に単語区切りという。区切りで分断された１文字以上の文字列及び単語区切りをあわせて単語という。プログラムとプログラムを単語に区切った例を図１９及び図２０に示す。
【００７０】
ステップＳ９０６：現在行の頭から順に単語を検索する。
ステップＳ９０７：単語が検索されたか否かを判定する。
ステップＳ９０８：ステップＳ９０７の判定の結果、単語が検索された場合には、単語解析処理を行う。この処理の詳細については後に図１１で説明する。
ステップＳ９０９：現在行から次の単語を検索してステップＳ９０７に戻る。
【００７１】
ステップＳ９１０：ステップＳ９０７の判定の結果、単語が検索されなかった場合には、制御移行先行一覧の現在行の行番号に対応する制御移行先行フラグ欄に制御移行先行フラグ値を代入した後、制御移行先行フラグに０をセットし、ステップＳ９０３に戻る。
図１１（ａ）は、ステップＳ９０８の単語解析処理の詳細な処理手順を示すフローチャートである。この単語解析処理においては、単語を分類１から６及び「その他」に分類し、分類に応じて異なる処理を行う。図１１（ｂ）に分類１から６の内容を示す。
【００７２】
ステップＳ１００１：カッコカウントが−１より大きいか否かを判定する。
ステップＳ１００８：ステップＳ１００１の判定の結果、カッコカウントが−１より大きくなく、かつ単語が分類１に属する場合、すなわち単語が「：」又は「｝」である場合には、次文先頭フラグに１をセットする。
ステップＳ１００９：ステップＳ１００１の判定の結果、カッコカウントが−１より大きくなく、かつ単語が分類２に属する場合には、カッコカウントに０をセットし、中フラグに１をセットする。
【００７３】
ステップＳ１０１０：ステップＳ１００１の判定の結果、カッコカウントが−１より大きくなく、かつ単語が分類３に属する場合には、次文先頭フラグに１をセットし、中フラグに１をセットする。
ステップＳ１０１１：ステップＳ１００１の判定の結果、カッコカウントが−１より大きくなく、かつ単語が分類５に属する場合には、中フラグに０をセットする。
【００７４】
ステップＳ１０１２：ステップＳ１００１の判定の結果、カッコカウントが−１より大きくなく、かつ単語が分類４に属する場合には、次文先頭フラグが１であるか否かを判定する。
ステップＳ１０１３：ステップＳ１０１２の判定の結果、次文先頭フラグが１である場合には、制御移行先行フラグに１をセットし、次文先頭フラグに０をセットする。
【００７５】
ステップＳ１０１４：続いて、中フラグが１であるか否かを判定する。
ステップＳ１０１５：ステップＳ１０１４の判定の結果、中フラグが１である場合には、次文先頭フラグに１をセットし、中フラグに０をセットする。
なお、ステップＳ１００１の判定の結果、カッコカウントが−１より大きくなく、かつ単語がいずれの分類にも属さない場合には何もしない。
【００７６】
ステップＳ１００２：ステップＳ１００１の判定の結果、カッコカウントが−１より大きい場合には、単語が分類６に属するか否かを判定する。
ステップＳ１００３：ステップＳ１００２の判定の結果、単語が分類６に属する場合には、さらに、その単語が「（」であるか否かを判定する。
ステップＳ１００４：ステップＳ１００３の判定の結果、単語が「（」である場合には、カッコカウントの値を１増やす。
【００７７】
ステップＳ１００５：ステップＳ１００３の判定の結果、単語が「（」でない場合には、カッコカウントの値を１減らす。
ステップＳ１００６：カッコカウントが０であるか否かを判定する。
ステップＳ１００７：ステップＳ１００６の判定の結果、カッコカウントが０である場合には、カッコカウントに−１をセットする。
【００７８】
なお、ここで分類１〜６は、ソースコードがＣ言語で記述されている場合における分類であるが、Java（登録商標）で記述されている場合は分類１の「：」及び「｝」に、さらに「ｃａｔｃｈ」、「ｆｉｎａｌｌｙ」を分類するキーワードとして加えればよい。
図１０及び図１１のフローチャートでは、ソースコードの先頭から単語を順に解析し、次の１、２の方法で見つかった行を制御移行先行としている。
１．ソースコードの先頭から単語を順に見ていき、分類１「：、｝」か分類３「ｅｌｓｅ」の単語を見つけたら、その後初めて現れる分類４「；」の単語のある行を制御移行先行とする。
２．ソースコードの先頭から単語を順に見ていき、中フラグが１である場合に、分類４「；」の単語を見つけたら、その後初めて現れる分類４「；」の単語のある行を制御移行先行とする。
【００７９】
ここで中フラグが１である場合ということは、ソースコードの先頭から単語を順に見ていき、分類２「ｉｆ、ｆｏｒ、ｗｈｉｌｅ」及び分類３「ｅｌｓｅ」を見つけた場合のことを指す。ただし、分類２「ｉｆ、ｆｏｒ、ｗｈｉｌｅ」の条件式中の単語は無視する。
上記１、２の方法では、ｉｆ、ｆｏｒ、ｗｈｉｌｅ、ｅｌｓｅの後でないのに｛又は｝がある場合、｝の次に最初に見つかった分類４「；」の行を制御移行先行とみなすため、制御ブロックが余分にできることとなるが、簡単なアルゴリズムで制御移行先行を見つけることができる利点があり、制御移行先行であるにもかかわらず制御移行先行とみなされないという不具合がないことを保証している。
＜実施の形態３＞
図１２は、実施の形態３のデバッグ装置のブロック図である。
【００８０】
同図においてデバッグ装置３０は、実施の形態２における図７のデバッグ装置２０の構成に加えて、バグ票管理部１１１８を備える。以下、実施の形態２と同じ点については説明を省略し、異なる点を中心に説明する。
図１３は、バグ票一覧の一例を示す。
バグ票一覧は、複数のバグ票からなり、各バグ票は、バグ票を一意に示す番号であるバグ票番号とコメントと通過回数とから構成される。
【００８１】
コメントは１以上の各ブレイクポイント設定行について、そのブレイクポイント設定行があるソースコードのファイル名と設定行番号とオペレータにより入力されたコメントとから構成される。各行のコメントはブレイクポイントが設定される毎に、修正内容等についてオペレータにより入力されるものである。なお、その他に、各行のコメントに、修正日や、時間等の情報が自動的に記述されることとしてもよい。
【００８２】
通過回数は、コメント欄の各ブレイクポイント設定行に対応し、ブレイクポイント設定行にある命令文が実行された回数を示す。
図１４は、コマンド入力部１０２がデバッグ処理終了コマンドを受け付けた場合における処理手順を示すフローチャートである。
ステップＳ１３０１：ロード部１０５は、修正行一覧管理部１１５に、ブレイクポイント一覧管理部１１１が管理するブレイクポイント一覧から修正行一覧を作成するよう要求する。次に、修正行一覧管理部１１５は、ブレイクポイント一覧管理部１１１のブレイクポイント一覧のアドレスをロードされた実行ファイルのデバッグ情報を用いてファイル名及び行番号に変換し、各ファイルごとに修正行一覧を作成する。
【００８３】
ステップＳ１３０２：ロード部１０５は、ブレイクポイント一覧管理部１１１にブレイクポイント一覧を破棄するよう要求を出し、ブレイクポイント一覧管理部１１１はブレイクポイント一覧を破棄する。
ステップＳ１３０３：バグ票一覧のブレイクポイント設定アドレスに０を代入する。
【００８４】
ステップＳ１３０４：ロード部１０５は、実行ファイルをアンロードする。
図１５は、コマンド入力部１０２がデバッグ処理開始コマンドを受け付けた場合における処理手順を示すフローチャートである。
同図においてステップＳ８０１より前の処理、ステップＳ８０１で「Ｙｅｓ」の場合におけるそれ以降の処理、及びステップＳ８１２については、図９のフローチャートと同じであるので、部分的に図示を省略している。これらの部分は図９と同じ処理手順であるので説明を省略し、以下、図９とは異なる部分であるステップＳ１４０１及びステップＳ１４０２について説明する。
【００８５】
ステップＳ１４０１：バグ票一覧から最後のバグ票を除き、ブレイクポイント設定アドレスが０になっているバグ票があるか否かを判定する。
ステップＳ１４０２：判定の結果、ブレイクポイント設定アドレスが０になっているバグ票がある場合には、図１８に示すバグ票のクローズ処理を行う。
図１６は、コマンド入力部１０２がブレイクポイント設定コマンドを受け付けた場合における処理手順を示すフローチャートである。
【００８６】
ステップＳ１５０１：コマンド入力部１０２がブレイクポイント設定コマンドを受け付けると、ロード部１０５は、ブレイクポイント設定・解除部１０６にブレイクポイントを設定するよう要求し、ブレイクポイント設定・解除部１０６は、ロードされた実行ファイル内のデバッグ情報から、ブレイクポイント設定行に対するアドレスを得る。
【００８７】
ステップＳ１５０２：ブレイクポイント設定アドレスを登録しようとしているバグ票が新規であるか、あるいはバグ票一覧に登録済みであるかを判定する。
ステップＳ１５０３：ステップＳ１５０２の判定の結果、バグ票が新規である場合には、バグ票一覧の一番最後にあるバグ票にブレイクポイント設定アドレスを書き込み、コメントの最初にブレイクポイント設定アドレスに対応したファイル名及び行番号を記述する。
【００８８】
ステップＳ１５０４：オペレータより入力されるコメントをファイル名及び行番号に続けて記述する。
ステップＳ１５０５：バグ票一覧の最後にバグ票番号のみを記述したバグ票を作成し登録する。バグ票番号には連続番号を割当てる。
ステップＳ１５０６：ステップＳ１５０２の判定の結果、バグ票がバグ票一覧に登録済みのものである場合、バグ票一覧より目的のバグ票を検索する。
【００８９】
ステップＳ１５０７：バグ票にブレイクポイント設定アドレスを書き込み、コメントの先頭部分にブレイクポイント設定アドレスに対応するファイル名及び行番号を記述する。
ステップＳ１５０８：オペレータより入力されたコメントを記述する。
ステップＳ１５０９：ブレイクポイント設定アドレスを登録すべきバグ票が他にあるか否かを判定する。
【００９０】
ステップＳ１５１０：ブレイクポイント一覧管理部１１１は、アドレス及び命令をブレイクポイント一覧に登録し、アドレス内の命令をｂｒｅａｋ命令に置き換える。
ステップＳ１５１１：ソースコード表示部１０８は、表示を要求されたファイルをソースコードファイル管理部１１４から読み出して表示する。そしてさらに、ブレイクポイント表示部１０９に指定したファイルのブレイクポイントを表示するよう要求する。続いて、ブレイクポイント表示部１０９は、ブレイクポイント一覧管理部１１１から指定されたファイルのブレイクポイント情報を読み出し、ブレイクポイントを表示する。
【００９１】
図１７は、コマンド入力部１０２がブレイクポイント解除コマンドを受け付けた場合における処理手順を示すフローチャートである。
ステップＳ１６０１：ロード部１０５は、ブレイクポイント設定・解除部１０６にブレイクポイントを解除するよう要求する。この要求を受け付けて、ブレイクポイント設定・解除部１０６は、ロードされた実行ファイル内のデバッグ情報から、ブレイクポイント解除行に対するアドレスを得る。そしてバグ票管理部１１１８に解除するブレイクポイントをバグ票から削除するよう要求を出す。続いて、ブレイクポイント一覧管理部１１１に、ブレイクポイントを解除する箇所のアドレス及びそのアドレス内にある命令をブレイクポイント一覧から削除するよう要求し、ソースコード表示部１０８に解除したファイルを表示するよう要求する。
【００９２】
ステップＳ１６０２：バグ票管理部１１１８は、バグ票一覧の最初のバグ票を対象とする。
ステップＳ１６０３：続いて、バグ票管理部１１１８は、対象のバグ票のブレイクポイント設定アドレス一覧から順にブレイクポイント解除アドレスを検索する。
【００９３】
ステップＳ１６０４：次に、ステップＳ１６０３の検索の結果、バグ票管理部１１１８は、ブレイクポイント解除アドレスを持つバグ票を見つけられたか否かを判定する。
ステップＳ１６０５：ステップＳ１６０４の判定の結果、ブレイクポイント解除アドレスを持つバグ票を見つけられた場合には、バグ票管理部１１１８は、そのバグ票を対象とする。
【００９４】
ステップＳ１６０６：バグ票管理部１１１８は、対象のバグ票のブレイクポイント設定アドレス一覧からブレイクポイント解除アドレスを削除する。
ステップＳ１６０７：続いて、バグ票管理部１１１８は、対象のバグ票のブレイクポイント設定行一覧に何もないか否かを判定する。
ステップＳ１６０８：ステップＳ１６０７の判定の結果、あると判定した場合には、さらに、バグ票一覧より対象のバグ票の次にバグ票があるか否かを判定する。
【００９５】
ステップＳ１６０９：ステップＳ１６０８の判定の結果、バグ票があると判定した場合には、次のバグ票を対象とする。
ステップＳ１６１０：ステップＳ１６０７の判定の結果、対象のバグ票のブレイクポイント設定行一覧に何もないと判定した場合には、図１８に示すバグ票クローズ処理を行う。
【００９６】
ステップＳ１６１１：ブレイクポイント一覧管理部１１１は、元の命令をリストアした後、アドレス及び命令をブレイクポイント一覧から削除する。
ステップＳ１６１２：ソースコード表示部１０８は、指定されたファイルをソースコードファイル管理部１１４から読み出し表示する。続いてブレイクポイント表示部１０９に、指定したファイルのブレイクポイントを表示するよう要求する。ブレイクポイント表示部１０９は、ブレイクポイント一覧管理部１１１から指定されたファイルのブレイクポイント情報を読み出し、ブレイクポイントを表示する。
【００９７】
図１８は、バグ票クローズ処理の詳細な処理手順を示すフローチャートである。
ステップＳ１７０１：バグ票管理部１１１８は、テスト結果を付加し、バグ票をクローズする。
ステップＳ１７０２：続いてバグ票管理部１１１８は、バグ票一覧からクローズするバグ票を削除する。
【００９８】
以上の構成により、デバッグ装置３０は、ブレイクポイント毎にバグ票を管理するので、プログラマは効率的に修正内容のコメントを記述することができる。
【００９９】
【発明の効果】
本発明のブレイクポイント設定装置は、ソースプログラムに基づいて生成された実行形式プログラムをロードするロード手段と、前記ソースプログラムを構成する各要素と前記実行形式プログラムを構成する各箇所との対応関係を示す情報を記憶している記憶手段と、前記ソースプログラムに対して編集がなされた場合であって、その編集内容が特定のものであるとき、当該特定の編集が前記ソースプログラムを構成する各要素のいずれに対してなされたかを示す位置情報を取得して記憶する取得手段と、前記ロードされた実行形式プログラムにおける、前記取得手段により取得された位置情報が指す要素に対応する箇所にブレイクポイントを設定する設定手段とを備える。
【０１００】
この構成によれば、ブレイクポイント設定装置は、オペレータの編集操作により編集された、ソースプログラム上の編集箇所を管理することによって編集箇所のソースプログラム上の位置を把握し、その位置にブレイクポイントを設定するので、編集箇所に関しては、オペレータによるブレイクポイントの設定指示及び設定位置の指定が不要となる。
【０１０１】
また、前記各要素は、前記ソースプログラムを構成する各行であり、前記記憶手段が記憶している前記情報は、当該各行それぞれを識別する行番号と前記各箇所との対応関係を示すものであり、前記取得手段は、前記ソースプログラムにおける特定の編集がなされた行の行番号を前記位置情報として取得して記憶するよう構成してもよい。
【０１０２】
また、前記特定の編集には、改行コードの削除が含まれ、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が改行コードの削除であるときには、当該編集箇所の行番号を記憶し、前記取得手段により既に取得され記憶されている行番号のうち当該編集に係る行の行番号より値が大きい行番号それぞれを値が１つ小さい行番号に書き替える更新手段を備えてもよい。
【０１０３】
また、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が行頭部分への改行コードの追加であるときには、取得手段により既に取得され記憶されている行番号のうち当該編集箇所と同じ行番号及び当該編集箇所の行番号より値が大きい行番号それぞれを値が１つ大きい行番号に書き替える更新手段を備えてもよい。
【０１０４】
また、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が行末部分への改行コードの追加であるときには、前記取得手段により既に取得され記憶されている行番号のうち当該編集箇所よりも値が大きい行番号を値が１つ大きい値に書き替える更新手段を備えてもよい。
【０１０５】
また、前記特定の編集には、行中への改行コードの追加が含まれ、前記ブレイクポイント設定装置は、さらに、前記ソースプログラムが編集された場合において、当該編集箇所の編集内容が行中への改行コードの追加であるときには、前記取得手段により既に取得され記憶されている行番号のうち当該編集箇所の行番号よりも値が大きい行番号それぞれを値が１つ大きい値に書き替え、また当該編集箇所の行番号と当該編集箇所の行番号より値が１つ大きい行番号とを新たに記憶する更新手段を備えてもよい。
【０１０６】
また、前記取得手段は、前記ソースプログラムが編集された場合に、当該編集箇所の編集内容が改行コード以外の文字列に対する編集であるか否かを判定する判定手段と、前記判定手段により肯定的に判定された場合に、当該編集箇所の当該編集箇所の行番号を新たに記憶する更新手段とを備えてもよい。
この構成によれば、ブレイクポイント設定装置は、編集が改行コードの削除又は追加を含むか否か、改行コードの追加を含む場合には追加位置が行頭、行中、行末のいずれであるかに応じて移動するソースプログラム上の編集位置を把握することができるので、常に正確な位置に、オペレータによる設定指示及び設定位置の指定なしに、ブレイクポイントを設定することができる。
【０１０７】
また、前記取得手段は、さらに、前記ソースプログラムを構成する各制御ブロックの範囲が前記ソースプログラム上のどこからどこまでであるかを行番号により示す行範囲情報を記憶しており、前記設定手段は、前記行範囲情報が示す各制御ブロックの先頭の行番号に相当する実行形式プログラム上の対応箇所にブレイクポイントを設定してもよい。
【０１０８】
この構成によれば制御ブロック単位に、制御ブロック中の修正行のうちの先頭のものについてブレイクポイントを設定することができる。
また、前記設定手段は、前記取得手段が記憶している行番号のうちで、前後で連続する２つの行番号のうちの後の行番号については、対応箇所のブレイクポイントを設定しないよう構成してもよい。
【０１０９】
この構成によればソースプログラム上の連続する２行両方に編集位置が存在する場合には、後行の編集位置へのブレイクポイント設定を省略して前行の編集位置にのみブレイクポイントを設定することができる。
また、前記ブレイクポイント設定装置は、前記設定手段が設定する各ブレイクポイント毎にユーザにより入力される当該ブレイクポイントに対応する編集箇所に関する情報を対応させたバグ票を作成し、当該バグ票をユーザインターフェースを介してユーザに提示してもよい。
【０１１０】
この構成によれば、ブレイクポイント設定装置は、オペレータの編集操作により編集された、ソースプログラム上の編集箇所を管理することによって編集箇所のソースプログラム上の位置を把握し、その位置にブレイクポイントを設定するとともにバグ票を作成することができるので、オペレータのバグ票作成の負担が軽減される。
【図面の簡単な説明】
【図１】実施の形態１のデバッグ装置のブロック図である。
【図２】ブレイクポイント表示部１０９によって表示されたブレイクポイントの一例を示す。
【図３】修正行一覧の一例をす。
【図４】コマンド入力部１０２が編集コマンドを受け付けた場合における処理手順を示すフローチャートである。
【図５】コマンド入力部１０２がデバッグ処理開始コマンドを受け付けた場合における処理手順を示すフローチャートである。
【図６】コマンド入力部１０２がデバッグ処理終了コマンドを受け付けた場合における処理手順を示すフローチャートである。
【図７】実施の形態２のデバッグ装置のブロック図である。
【図８】実施の形態２のデバッグ装置２０が作成し、使用する制御移行先行一覧の一例を示す。
【図９】コマンド入力部１０２がデバッグ処理開始コマンドを受け付けた場合における処理手順を示すフローチャートである。
【図１０】ステップＳ８０５の制御移行先行一覧作成処理の詳細な処理手順を示すフローチャートである。
【図１１】（ａ）は、ステップＳ９０８の単語解析処理の詳細な処理手順を示すフローチャートである。（ｂ）は、分類１から６の内容を示す。
【図１２】実施の形態３のデバッグ装置のブロック図である。
【図１３】バグ票一覧の一例を示す。
【図１４】コマンド入力部１０２がデバッグ処理終了コマンドを受け付けた場合における処理手順を示すフローチャートである。
【図１５】コマンド入力部１０２がデバッグ処理開始コマンドを受け付けた場合における処理手順を示すフローチャートである。
【図１６】コマンド入力部１０２がブレイクポイント設定コマンドを受け付けた場合における処理手順を示すフローチャートである。
【図１７】コマンド入力部１０２がブレイクポイント解除コマンドを受け付けた場合における処理手順を示すフローチャートである。
【図１８】バグ票クローズ処理の詳細な処理手順を示すフローチャートである。
【図１９】プログラムの一例を示す
【図２０】図１９のプログラムを単語に区切った例を示す。
【符号の説明】
１０    デバッグ装置
１１    メイク部
１２    デバッガ部
１３    エディタ部
２０    デバッグ装置
３０    デバッグ装置
１０２    コマンド入力部
１０３    コマンド解析部
１０４    実行ファイル管理部
１０５    ロード部
１０６    解除部
１０７    実行制御部
１０８    ソースコード表示部
１０９    ブレイクポイント表示部
１１０    命令処理部
１１１    ブレイクポイント一覧管理部
１１２    ソースコード編集部
１１３    ソースコード表示部
１１４    ソースコードファイル管理部
１１５    修正行一覧管理部
１１６    修正箇所設定部
６１７    最適化部
１１１８    バグ票管理部
【図１】
0004208591.tif 000002
【図２】
0004208591.tif 000003
【図３】
0004208591.tif 000004
【図４】
0004208591.tif 000005
【図５】
0004208591.tif 000006
【図６】
0004208591.tif 000007
【図７】
0004208591.tif 000008
【図８】
0004208591.tif 000009
【図９】
0004208591.tif 000010
【図１０】
0004208591.tif 000011
【図１１】
0004208591.tif 000012
【図１２】
0004208591.tif 000013
【図１３】
0004208591.tif 000014
【図１４】
0004208591.tif 000015
【図１５】
0004208591.tif 000016
【図１６】
0004208591.tif 000017
【図１７】
0004208591.tif 000018
【図１８】
0004208591.tif 000019
【図１９】
0004208591.tif 000020
【図２０】
0004208591.tif 000021