(57)【要約】【課題】ループを含む処理の流れの把握を容易にする。【解決手段】情報処理装置１０は、記憶部１１および表示制御部１２を有する。記憶部１１は、実行された命令に対応するソースコード１３中のテキストの位置を示す位置情報の列であって、命令の実行順序を記憶した位置情報列を含むトレース情報１４を記憶する。表示制御部１２は、トレース情報１４に含まれる位置情報列の中から複数回現れる部分列を検出することで、ループに属する位置情報およびループの実行状況を判定する。表示制御部１２は、判定したループに属する位置情報に基づいて、判定したループの実行状況とソースコード１３とを対応付けて表示させる。【選択図】図１
2017072983.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
実行された命令に対応するソースコード中のテキストの位置を示す位置情報の列であって、命令の実行順序を記憶した位置情報列を含むトレース情報を取得し、
前記トレース情報に含まれる位置情報列の中から複数回現れる部分列を検出することで、ループに属する位置情報および前記ループの実行状況を判定し、
判定した前記ループに属する位置情報に基づいて、判定した前記ループの実行状況と前記ソースコードとを対応付けて表示させる、
処理を実行させる実行結果表示プログラム。
【請求項２】
前記ループの実行状況の表示では、前記ループに属する前記ソースコード中のテキストの範囲を示す情報と、前記ループの繰り返し回数とを表示させる、
請求項１記載の実行結果表示プログラム。
【請求項３】
前記ループを包含する他のループが存在する場合、前記ループに属するテキストの範囲を示す情報および前記ループの繰り返し回数と、前記他のループに属するテキストの範囲を示す情報および前記他のループの繰り返し回数とを階層的に表示させる、
請求項２記載の実行結果表示プログラム。
【請求項４】
実行された命令に対応するソースコード中のテキストの位置を示す位置情報の列であって、命令の実行順序を記憶した位置情報列を含むトレース情報を記憶する記憶部と、
前記トレース情報に含まれる位置情報列の中から複数回現れる部分列を検出することで、ループに属する位置情報および前記ループの実行状況を判定し、判定した前記ループに属する位置情報に基づいて、判定した前記ループの実行状況と前記ソースコードとを対応付けて表示させる表示制御部と、
を有する情報処理装置。
【請求項５】
ソースコードから生成された命令を実行することで、実行された命令に対応する前記ソースコード中のテキストの位置を示す位置情報の列であって、命令の実行順序を記憶した位置情報列を含むトレース情報を生成する第１の情報処理装置と、
生成された前記トレース情報を取得し、前記トレース情報に含まれる位置情報列の中から複数回現れる部分列を検出することで、ループに属する位置情報および前記ループの実行状況を判定し、判定した前記ループに属する位置情報に基づいて、判定した前記ループの実行状況と前記ソースコードとを対応付けて表示させる第２の情報処理装置と、
を有する情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は実行結果表示プログラム、情報処理装置および情報処理システムに関する。
【背景技術】
【０００２】
ソフトウェア開発においては、開発者は、人間が理解容易な高級言語を用いてソースコードを作成することが多い。一纏まりの機能に関するソースコードを作成すると、開発者は、コンパイラやインタープリタなどの変換ツールを用いてソースコードを機械可読な命令に変換して実行させ、ソフトウェアの動作を確認する。ソフトウェアの動作に不具合がある場合、開発者は、不具合が解消するようにソースコードを修正することになる。不具合の原因を特定してソースコードを修正する作業は、デバッグと呼ばれることがある。デバッグにおいては、不具合の原因を特定することが容易でない場合も多い。そこで、開発者は、デバッグを支援するデバッグツールを使用することがある。
【０００３】
例えば、デバッグを支援するプログラムデバッグシステムが提案されている。提案のプログラムデバッグシステムでは、コンパイラが、ソースコードから、実行行番号およびデータ項目値を含むトレース情報を出力する機能が組み込まれたオブジェクトプログラムを生成する。オブジェクトプログラムを実行することでトレース情報が生成されると、トレース情報表示手段が、トレース情報をソースコードと対応付けてディスプレイ装置の画面上に表示する。このとき、トレース情報表示手段は、ユーザからの入力に応じてソースコード中の１つの行を選択し、選択した行について色や下線を付すなどの強調表示を行う。また、トレース情報表示手段は、選択した行に関連するデータ項目値をトレース情報から抽出し、抽出したデータ項目値を画面上に表示する。
【０００４】
また、ソースコードを、トレースデータを高速に採取できるように変換するトレースデータ生成システムが提案されている。提案のトレースデータ生成システムは、ソースコードから、制御の流れに影響を与える制御変数を検出し、制御変数の値の定義と参照の関係を示すＵＳＥ−ＤＥＦチェインを検出する。トレースデータ生成システムは、検出した制御変数とＵＳＥ−ＤＥＦチェインに基づいて、制御フローに影響を与えない文をソースコードから削除する。また、トレースデータ生成システムは、制御フローの実行回数を計数するカウンタとカウンタ値を出力する文とを、ソースコードに挿入する。
【０００５】
また、プログラム中の特定箇所の実行時間を測定するトレース装置が提案されている。提案のトレース装置は、オブジェクトプログラムを実行したときに、ソースコード中の場所を示す行番号と、当該場所の実行回数を示す数値と、実行された時刻を示すタイムスタンプとを対応付けたトレース情報を出力する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平５−４６４３４号公報
【特許文献２】特開平７−１９１８８３号公報
【特許文献３】特開平９−３１９６１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記の特許文献１や特許文献３などに記載されたトレース方法によって、実行された命令に対応するソースコードの行番号を列挙したトレース情報を取得することができる。しかし、ループを含む処理について生成されるトレース情報には、ソースコード中のループ部分の行番号が繰り返し出現することになる。このため、トレース情報に含まれる行番号が示すソースコード行を１ステップずつ確認するデバッグ方法では、ループを含む処理の全体的な流れを把握することが容易でないという問題がある。
【０００８】
１つの側面では、本発明は、ループを含む処理の流れの把握が容易となる実行結果表示プログラム、情報処理装置および情報処理システムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、コンピュータに以下の処理を実行させる実行結果表示プログラムが提供される。実行された命令に対応するソースコード中のテキストの位置を示す位置情報の列であって、命令の実行順序を記憶した位置情報列を含むトレース情報を取得する。トレース情報に含まれる位置情報列の中から複数回現れる部分列を検出することで、ループに属する位置情報およびループの実行状況を判定する。判定したループに属する位置情報に基づいて、判定したループの実行状況とソースコードとを対応付けて表示させる。
【００１０】
また、１つの態様では、記憶部と表示制御部とを有する情報処理装置が提供される。
また、１つの態様では、第１の情報処理装置と第２の情報処理装置とを有する情報処理システムが提供される。第１の情報処理装置は、ソースコードから生成された命令を実行することで、実行された命令に対応するソースコード中のテキストの位置を示す位置情報の列であって、命令の実行順序を記憶した位置情報列を含むトレース情報を生成する。第２の情報処理装置は、生成されたトレース情報を取得し、トレース情報に含まれる位置情報列の中から複数回現れる部分列を検出することで、ループに属する位置情報およびループの実行状況を判定し、判定したループに属する位置情報に基づいて、判定したループの実行状況とソースコードとを対応付けて表示させる。
【発明の効果】
【００１１】
１つの側面では、ループを含む処理の流れの把握が容易となる。
【図面の簡単な説明】
【００１２】
【図１】情報処理システムの例を示す図である。
【図２】デバッグ装置のハードウェア例を示すブロック図である。
【図３】デバッグ装置の機能例を示すブロック図である。
【図４】ソースファイルの例を示す図である。
【図５】トレースファイルと行情報ファイルの例を示す図である。
【図６】ソースコードの表示例を示す図である。
【図７】ソースファイルの他の例を示す図である。
【図８】トレースファイルと行情報ファイルの他の例を示す図である。
【図９】ソースコードの他の表示例を示す図である。
【図１０】デバッグ処理の手順例を示すフローチャートである。
【図１１】ループ検出の手順例を示すフローチャートである。
【図１２】実行パス表示の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１４】
図１は、情報処理システムの例を示す図である。
第１の実施の形態の情報処理システムは、情報処理装置１０，２０を含む。情報処理装置１０，２０は、ユーザが操作するクライアントコンピュータでもよいし、クライアントコンピュータからアクセスされるサーバコンピュータでもよい。情報処理装置１０，２０は、ソフトウェア開発におけるデバッグの支援に用いられる。情報処理装置１０と情報処理装置２０とは、例えば、ネットワークを介して接続されている。
【００１５】
情報処理装置１０は、記憶部１１および表示制御部１２を有する。情報処理装置２０は、生成部２１を有する。記憶部１１は、例えば、ＲＡＭ（Random Access Memory）などの揮発性の記憶装置、または、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性の記憶装置である。表示制御部１２および生成部２１は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、表示制御部１２および生成部２１は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭなどのメモリに記憶されたプログラムを実行する。プログラムには、実行結果表示プログラムが含まれる。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼ぶこともある。
【００１６】
生成部２１は、ソースコード１３から生成された命令を実行し、トレース情報１４を生成する。トレース情報１４は、実行された命令に対応するソースコード１３中のテキストの位置を示す位置情報の列であって、命令の実行順序を記憶した位置情報列を含む。位置情報列は、命令の実行順序を示していると言うことができ、例えば、命令の実行順序に応じた順序で位置情報を列挙したものである。位置情報として、例えば、ソースコード１３の行番号を用いることができる。例えば、ソースコード１３はコンパイラによって、プロセッサが実行可能な命令を含むオブジェクトコードに変換される。コンパイラは、情報処理装置１０，２０の何れが有していてもよい。このとき、実行された命令に対応する位置情報を出力するように、デバッグ用のオブジェクトコードが生成される。デバッグ用のオブジェクトコードは、例えば、その旨のコンパイルオプションが指定されたときにコンパイラが生成する。
【００１７】
ここで、ソースコード１３には、ループを示すテキストが含まれている。よって、生成部２１は、ループを実行することになる。図１の例では、ソースコード１３の行＃１に、ループ外の処理を示すテキストが記載されている。行＃２に、ループの開始を示すテキストが記載されている。行＃３に、ループ内の処理を示すテキストが記載されている。行＃４に、ループの終了を示すテキストが記載されている。行＃５に、ループ外の処理を示すテキストが記載されている。生成部２１は、ソースコード１３の行＃２〜＃４に対応する命令を繰り返し実行する可能性がある。図１の例では、トレース情報１４は、「＃１，＃２，＃３，＃４，＃２，＃３，＃４，＃２，＃３，＃４，＃５」という位置情報列を含む。これは、行＃２〜＃４に対応する命令が３回繰り返し実行されたことを示す。
【００１８】
情報処理装置１０は、情報処理装置２０からトレース情報１４を取得する。トレース情報１４は、例えば、ネットワークを介して伝送される。記憶部１１は、情報処理装置２０から取得されたトレース情報１４を記憶する。ただし、情報処理装置１０と異なる情報処理装置２０がトレース情報１４を生成する代わりに、情報処理装置１０がトレース情報１４を生成してもよい。すなわち、情報処理装置１０のプロセッサが、ソースコード１３から生成された命令を実行してもよい。その場合、表示制御部１２が生成部２１の機能を有し、生成したトレース情報１４を記憶部１１に格納するようにしてもよい。
【００１９】
表示制御部１２は、記憶部１１からトレース情報１４を取得し、トレース情報１４に含まれる位置情報列の中から複数回現れる部分列を検出する。例えば、表示制御部１２は、「＃１，＃２，＃３，＃４，＃２，＃３，＃４，＃２，＃３，＃４，＃５」という位置情報列の中から、３回繰り返して現れる「＃２，＃３，＃４」という部分列を検出する。表示制御部１２は、検出した部分列に基づいて、ループに属する位置情報およびループの実行状況を判定する。ループの実行状況には、例えば、ループの繰り返し回数が含まれる。例えば、表示制御部１２は、ループに属する位置情報を「＃２」，「＃３」，「＃４」と判定し、ループの繰り返し回数を３回と判定する。
【００２０】
そして、表示制御部１２は、判定したループに属する位置情報に基づいて、判定したループの実行状況とソースコード１３とを対応付けて表示させる。例えば、表示制御部１２は、ループの実行状況とソースコード１３とを対応付けた表示画面１５を生成する。表示画面１５では、ソースコード１３に含まれるテキストのうちループに属するテキストの範囲を示す情報が表示され、ループに属するテキストの範囲と対応付けてループの実行状況が表示される。ループに属するテキストの範囲を示す情報は、矢線であってもよい。図１の例では、行＃２〜＃４をカバーする矢線が表示され、当該矢線の近くにループの繰り返し回数「３回」が表示されている。表示画面１５は、例えば、情報処理装置１０が有するディスプレイまたは情報処理装置１０に接続されたディスプレイに表示される。
【００２１】
第１の実施の形態の情報処理システムによれば、ソースコード１３から生成された命令が実行され、位置情報列（例えば、行番号列）を含むトレース情報１４が生成される。トレース情報１４に含まれる位置情報列の中から複数回現れる部分列が検出され、ループに属する位置情報およびループの実行状況が判定される。そして、ループに属する位置情報に基づいて、ループの実行状況とソースコード１３とが対応付けて表示される。これにより、トレース情報１４にループ部分の位置情報が繰り返し出現する場合でも、各位置情報に対応するソースコード１３のテキストを１ステップずつ確認する方法と比べて、ループの実行状況の把握が容易となる。また、ループを含む処理の全体的な流れの把握が容易となる。これにより、ソフトウェア開発時のデバッグを効率的に行うことができる。
【００２２】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、デバッグ装置のハードウェア例を示すブロック図である。
【００２３】
第２の実施の形態のデバッグ装置１００は、ソフトウェア開発において開発者によるデバッグを支援する。デバッグ装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。上記のユニットは、バス１０８に接続されている。
【００２４】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、デバッグ装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００２５】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、デバッグ装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００２６】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、実行結果表示プログラムが含まれる。なお、デバッグ装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００２７】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、デバッグ装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００２８】
入力信号処理部１０５は、デバッグ装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、デバッグ装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００２９】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３０】
通信インタフェース１０７は、ネットワーク１１４に接続され、ネットワーク１１４を介して他のコンピュータと通信を行うことができる。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、アクセスポイントと無線リンクで接続される無線通信インタフェースでもよい。
【００３１】
なお、デバッグ装置１００は、媒体リーダ１０６を備えなくてもよい。また、ユーザが操作する端末装置からネットワーク１１４経由でデバッグ装置１００にアクセスできる場合、デバッグ装置１００は、画像信号処理部１０４や入力信号処理部１０５を備えなくてもよい。また、ディスプレイ１１１や入力デバイス１１２が、デバッグ装置１００の筐体と一体に形成されてもよい。デバッグ装置１００は、第１の実施の形態の情報処理装置１０に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。ＣＰＵ１０１は、第１の実施の形態の表示制御部１２に対応する。
【００３２】
図３は、デバッグ装置の機能例を示すブロック図である。
デバッグ装置１００は、ファイル記憶部１２０、コンパイラ１３１およびデバッガ１３２を有する。ファイル記憶部１２０は、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現できる。コンパイラ１３１およびデバッガ１３２は、ＣＰＵ１０１が実行するプログラムのモジュールとして実現できる。
【００３３】
ファイル記憶部１２０は、ソースファイル１２１、実行ファイル１２２、トレースファイル１２３および行情報ファイル１２４を記憶する。
ソースファイル１２１は、ユーザによって作成されたソースコードを含むファイルである。ソースコードは、ＦｏｒｔｒａｎやＣ言語などの人間が理解容易な高級言語を用いて記述される。実行ファイル１２２は、ソースファイル１２１に対応するオブジェクトコードを含むファイルである。オブジェクトコードは、ＣＰＵ１０１によって実行可能な命令（機械可読な命令）を含む。トレースファイル１２３は、実行ファイル１２２に含まれるオブジェクトコードを実行した結果を示すトレース情報を含む。トレース情報は、実行された命令の列に対応するソースコードの行番号の列を含む。行情報ファイル１２４は、ソースコード上の実行パスを示す行情報を含む。行情報は、トレースファイル１２３に記憶されたトレース情報を纏めたものであり、ソースコードの行番号を用いて表現される。
【００３４】
コンパイラ１３１は、ファイル記憶部１２０からソースファイル１２１を読み出し、ソースファイル１２１に含まれるソースコードをコンパイルする。コンパイラ１３１は、コンパイルによって機械可読なオブジェクトコードを生成し、オブジェクトコードを含む実行ファイル１２２をファイル記憶部１２０に格納する。第２の実施の形態では、コンパイラ１３１を起動するときに、コンパイラ１３１に対してコンパイルオプションとしてデバッグモードが指定される。デバッグモードが指定されると、コンパイラ１３１は、デバッグ用のオブジェクトコードを生成する。デバッグ用のオブジェクトコードは、実行された命令に対応するソースコードの行番号を出力する機能を有する。
【００３５】
デバッガ１３２は、ソースファイル１２１に含まれるソースコードのデバッグを支援する。デバッガ１３２は、トレース部１３３および表示制御部１３４を有する。
トレース部１３３は、ファイル記憶部１２０から実行ファイル１２２を読み出し、実行ファイル１２２に含まれるオブジェクトコードを実行する。このオブジェクトコードは、上記の通りデバッグ用のオブジェクトコードであるため、実行された命令に対応するソースコードの行番号が順次出力される。トレース部１３３は、ファイル記憶部１２０上にトレースファイル１２３を生成し、オブジェクトコードを実行することで出力される行番号をトレースファイル１２３に順次書き込んでいく。これにより、実行された命令の列に対応する行番号の列が、トレースファイル１２３に記載される。
【００３６】
表示制御部１３４は、ファイル記憶部１２０からソースファイル１２１を読み出し、ソースファイル１２１に含まれるソースコードをディスプレイ１１１に表示させる。また、表示制御部１３４は、ファイル記憶部１２０からトレースファイル１２３を読み出し、トレースファイル１２３に含まれるトレース情報を分析して行情報を生成し、行情報を含む行情報ファイル１２４をファイル記憶部１２０に格納する。そして、表示制御部１３４は、ソースコードと重ねて、行情報が示す実行パスをディスプレイ１１１に表示させる。
【００３７】
行情報の生成では、表示制御部１３４は、トレース情報が示す行番号の列の中から繰り返し現れる部分列を検出する。表示制御部１３４は、連続して同じ部分列が複数回現れる場合は当該部分列をループに属する行番号の列であると推定し、１回の部分列とその出現回数（すなわち、ループの繰り返し回数）との組に変換する。実行パスの表示では、表示制御部１３４は、ループ以外については連続する行番号を１つ矢線として表現する。また、表示制御部１３４は、ループについては連続する行番号を１つ矢線として表現すると共に、その矢線の近くに繰り返し回数を示す数値を記載する。これにより、ループおよびループ以外の両方について、ソースコード上の実行パスを簡潔に表現できる。
【００３８】
なお、第２の実施の形態では、ソースコードのコンパイルとオブジェクトコードの実行とトレース結果の可視化の全てを、デバッグ装置１００が行うこととした。これに対し、上記の処理を異なるコンピュータによって実行することも可能である。例えば、オブジェクトコードの実行とトレース結果の可視化とを異なるコンピュータで行ってもよい。その場合、トレース部１３３と表示制御部１３４とが異なるコンピュータに配置される。コンパイラ１３１は、トレース部１３３と同じコンピュータに配置されてもよいし、表示制御部１３４と同じコンピュータに配置されてもよい。複数のコンピュータを使用する場合、ソースファイル１２１、実行ファイル１２２およびトレースファイル１２３の少なくとも１つは、複数のコンピュータからアクセス可能なストレージ装置に保存されてもよい。
【００３９】
図４は、ソースファイルの例を示す図である。
ファイル記憶部１２０に記憶されたソースファイル１２１は、例えば、００００１〜００００５の５個の行を含む。一例として、行００００１には、メイン関数の開始を示すテキストが記載されている。行００００２には、ループの開始であること、および、ループ変数ｉが１〜５の範囲で変化することを示すテキストが記載されている。行００００３には、文字列「Ｈｅｌｌｏ，Ｗｏｒｌｄ！」を表示する処理を示すテキストが記載されている。行００００４には、ループの終了を示すテキストが記載されている。行００００５には、メイン関数の終了を示すテキストが記載されている。なお、ソースコードの中に行番号が記載されていてもよいし、記載されていなくてもよい。後者の場合、ソースファイル１２１の先頭から順に行番号をカウントしていけばよい。
【００４０】
ソースファイル１２１に記載されたメイン関数が実行される場合、まず行００００１に対応する命令が実行される。次に、行００００２に対応する命令、行００００３に対応する命令、行００００４に対応する命令が順に実行される。行００００２〜００００４に対応する命令はループを形成するため、行００００４に対応する命令の次に、行００００２に対応する命令が再び実行される。このようにして、行００００２〜００００４に対応する命令が５回繰り返し実行されることになる。行００００２〜００００４に対応する命令が５回実行された後、最後に行００００５に対応する命令が実行される。
【００４１】
図５は、トレースファイルと行情報ファイルの例を示す図である。
上記のソースファイル１２１から生成された実行ファイル１２２に含まれるオブジェクトコードが実行されると、図５に示すようなトレースファイル１２３が生成される。トレースファイル１２３は、ファイル記憶部１２０に格納される。トレースファイル１２３は、例えば、１７個の行番号を含む。トレースファイル１２３に含まれる複数の行番号は、オブジェクトコードを実行したときの命令の実行順序に対応する順序で並んでいる。
【００４２】
一例として、トレースファイル１２３には、先頭に「００００１」が記載されている。トレースファイル１２３には、「００００１」の次に、「００００２」，「００００３」，「００００４」が５回繰り返して記載されている。これは、ソースコードの行００００２〜００００４のテキストがループを示しており、行００００２〜００００４に対応する命令が５回繰り返して実行されたことを意味している。そして、トレースファイル１２３には、最後に「００００５」が記載されている。
【００４３】
上記のトレースファイル１２３に基づいて、行情報ファイル１２４が生成される。行情報ファイル１２４は、ファイル記憶部１２０に格納される。行情報ファイル１２４は、トレースファイル１２３に記載された行番号の列を纏めた１または２以上のエントリを含む。行情報ファイル１２４に含まれる１つのエントリは、連続する行番号の列を示す。トレース結果を可視化するとき、行情報ファイル１２４の１つのエントリが、ソースコード上の実行パスを示す１つの矢線として表現される。
【００４４】
一例として、行情報ファイル１２４には、先頭に「００００１」が記載されている。行情報ファイル１２４には、「００００１」の次に、「００００２−００００４＊５」が記載されている。これは、行００００２に対応する命令から行００００４に対応する命令まで連続で実行されたことを示している。また、この範囲の命令が５回繰り返して実行されたことを示している。この「００００２−００００４＊５」は、トレースファイル１２３に含まれる「００００２」，「００００３」，「００００４」，「００００２」，…，「００００４」という連続する１５個の行番号を纏めることで生成されたものである。そして、行情報ファイル１２４には、最後に「００００５」が記載されている。
【００４５】
図６は、ソースコードの表示例を示す図である。
トレース結果を可視化するにあたり、表示制御部１３４は、上位レイヤ１４１と下位レイヤ１４２とを重ねてディスプレイ１１１に表示させる。上位レイヤ１４１には、行情報ファイル１２４に基づいて、実行パスを示す矢線とループの実行回数が表示される。下位レイヤ１４２には、ソースファイル１２１に含まれるソースコードが表示される。
【００４６】
具体的には、上位レイヤ１４１には、行情報ファイル１２４に含まれるエントリ１つにつき、当該エントリが示す行番号の範囲を示す縦方向の矢線が１つ表示される。エントリに繰り返し回数が含まれている場合、当該矢線の近くに繰り返し回数を示す数値が表示される。行情報ファイル１２４に含まれる複数のエントリに対応する複数の矢線は、左から右に向かって並べられる。例えば、上位レイヤ１４１には、３個の矢線が表示される。左から１番目の矢線は、行００００１をカバーする。左から２番目の矢線は、行００００２〜００００４をカバーする。左から２番目の矢線の近くには、繰り返し回数「５」が表示される。左から３番目の矢線は、行００００５をカバーする。
【００４７】
上位レイヤ１４１の矢線と下位レイヤ１４２のソースコードとは、行番号によって紐付けられている。ソースコードが長い場合、ディスプレイ１１１にはソースコード中の一部の行のテキストのみが表示されることがある。この場合、ユーザは入力デバイス１１２を用いて、下位レイヤ１４２を上下方向にスクロールする操作を行うことがある。すると、下位レイヤ１４２のソースコードと連動して、上位レイヤ１４１の矢線も上下方向に移動する。一方、ソースコードが長い場合、ディスプレイ１１１には複数の矢線の一部のみが表示されることがある。この場合、ユーザは入力デバイス１１２を用いて、上位レイヤ１４１を左右方向にスクロールする操作を行うことがある。すると、下位レイヤ１４２とは独立して、上位レイヤ１４１の矢線が左右方向に移動する。
【００４８】
すなわち、上下方向のスクロールについては、上位レイヤ１４１と下位レイヤ１４２とが連動する。下位レイヤ１４２のソースコードが上下方向に移動すると、上位レイヤ１４１の矢線も上下方向に移動する。一方、左右方向のスクロールについては、上位レイヤ１４１と下位レイヤ１４２とは連動しない。下位レイヤ１４２のソースコードは左右方向に移動せず、上位レイヤ１４１の矢線のみ左右方向に移動する。左右方向に多数の矢線が並んだ場合でも、ソースコードとの関係を確認することが容易となる。
【００４９】
上記では、ソースコードに単階層のループが記載されている場合のトレース結果の可視化について説明した。一方、ソースコードに多重ループが記載されている場合についても、トレース結果を簡潔に可視化することが可能である。
【００５０】
図７は、ソースファイルの他の例を示す図である。
ここでは、ファイル記憶部１２０に、ソースファイル１２１に代えてソースファイル１２１ａが記憶されている場合を考える。ファイル記憶部１２０に記憶されたソースファイル１２１ａは、００００１〜００００８の８個の行を含む。一例として、行００００１には、メイン関数の開始を示すテキストが記載されている。行００００２には、外側ループの開始であること、および、ループ変数ｉが１〜５の範囲で変化することを示すテキストが記載されている。行００００３には、内側ループの開始であること、および、ループ変数ｊが１〜３の範囲で変化することを示すテキストが記載されている。
【００５１】
行００００４には、文字列「Ｈｅｌｌｏ，Ｗｏｒｌｄ！」を表示する処理を示すテキストが記載されている。行００００４のテキストが示す処理は、内側ループに属している。行００００５には、内側ループの終了を示すテキストが記載されている。行００００６には、変数ｋに１０００を代入する処理を示すテキストが記載されている。行００００６のテキストが示す処理は、内側ループには属していないが外側ループに属している。行００００７には、外側ループの終了を示すテキストが記載されている。行００００８には、メイン関数の終了を示すテキストが記載されている。
【００５２】
ソースファイル１２１ａに記載されたメイン関数が実行される場合、まず行００００１に対応する命令が実行される。次に、行００００２に対応する命令、行００００３に対応する命令、行００００４に対応する命令、行００００５に対応する命令が順に実行される。行００００３〜００００５に対応する命令は内側ループを形成するため、行００００５に対応する命令の次に、行００００３に対応する命令が再び実行される。このようにして、行００００３〜００００５に対応する命令が３回繰り返し実行されることになる。
【００５３】
行００００３〜００００５に対応する命令が３回実行された後、行００００６に対応する命令、行００００７に対応する命令が順に実行される。行００００２〜００００７に対応する命令は外側ループを形成するため、行００００７に対応する命令の次に、行００００２に対応する命令が再び実行される。そして、行００００３〜００００５に対応する命令が再び３回繰り返し実行される。このようにして、行００００２，００００６，００００７に対応する命令が５回繰り返し実行され、その１回の実行につき行００００３〜００００５に対応する命令が３回ずつ実行されることになる。外側ループの処理が５回実行された後、最後に行００００８に対応する命令が実行される。
【００５４】
図８は、トレースファイルと行情報ファイルの他の例を示す図である。
上記のソースファイル１２１ａから生成された実行ファイルに含まれるオブジェクトコードが実行されると、図８に示すようなトレースファイル１２３ａが生成される。トレースファイル１２３ａは、例えば、６２個の行番号を含む。
【００５５】
一例として、トレースファイル１２３ａには、先頭に「００００１」が記載されている。トレースファイル１２３ａには、「００００１」の次に「００００２」が記載され、その次に「００００３」，「００００４」，「００００５」が３回繰り返して記載されている。これは、行００００３〜００００５が内側ループを形成し、その繰り返しが３回であることを示している。トレースファイル１２３ａには、「００００５」の次に「００００６」，「００００７」が記載されている。トレースファイル１２３ａには、上記の「００００２」から「００００７」までの１２個の行番号が、５回繰り返し現れる。これは、行００００２〜００００７が外側ループを形成し、その繰り返しが５回であることを示している。トレースファイル１２３ａには、最後に「００００８」が記載されている。
【００５６】
上記のトレースファイル１２３ａに基づいて、行情報ファイル１２４ａが生成される。行情報ファイル１２４ａは、トレースファイル１２３ａに記載された行番号の列を纏めた１または２以上のエントリを含む。行情報ファイル１２４ａに含まれる１つのエントリは、連続する行番号の列を示す。多重ループが存在する場合、行情報ファイル１２４ａの１つのエントリは、１つの外側ループに対応する。行情報ファイル１２４ａの１つのエントリの中に、内側ループの範囲を示す情報が包含されていることがある。
【００５７】
一例として、行情報ファイル１２４ａには、先頭に「００００１」が記載されている。行情報ファイル１２４ａには、「００００１」の次に、「００００２−００００７（００００３−００００５＊３）＊５」が記載されている。このエントリの外側の「００００２−００００７＊５」は、行００００２に対応する命令から行００００７に対応する命令まで５回繰り返して実行されたことを示している。また、このエントリの内側の「００００３−００００５＊３」は、行００００３〜００００５の範囲の命令が、外側の繰り返し１回につき３回ずつ繰り返して実行されたことを示している。そして、行情報ファイル１２４ａには、最後に「００００８」が記載されている。
【００５８】
ここで、内側ループの「００００３−００００５＊３」は、トレースファイル１２３ａに含まれる「００００３」，「００００４」，「００００５」，「００００３」，…，「００００５」という連続する９個の行番号を纏めることで生成されたものである。また、外側ループの「００００２−００００７＊５」は、内側ループの検出結果を受けて、「００００２」，「００００３−００００５＊３」，「０００６」，「００００７」，「００００２」，…，「００００７」という列を更に纏めることで生成されたものである。すなわち、多重ループを示す行情報ファイル１２４ａのエントリは、内側ループから順に、連続する行番号の範囲と繰り返し回数を纏めていくことで生成することができる。
【００５９】
図９は、ソースコードの他の表示例を示す図である。
表示制御部１３４は、上位レイヤ１４１ａと下位レイヤ１４２ａとを重ねてディスプレイ１１１に表示させる。上位レイヤ１４１ａには、行情報ファイル１２４ａに基づいて、実行パスを示す矢線とループの実行回数が表示される。下位レイヤ１４２ａには、ソースファイル１２１ａに含まれるソースコードが表示される。
【００６０】
行情報ファイル１２４ａに階層的な行番号の範囲を示すエントリが含まれている場合、上位レイヤ１４１ａには、階層的な矢線が表示される。すなわち、上位レイヤ１４１ａには、内側ループに対応する矢線が表示され、内側ループの矢線を包含するように、外側ループに対応する矢線が表示される。内側ループの矢線の近くには内側ループの繰り返し回数が表示され、外側ループの矢線の近くには外側ループの繰り返し回数が表示される。内側ループの繰り返し回数は、外側ループの矢線の内部に表示されてもよい。
【００６１】
例えば、上位レイヤ１４１ａには、３個の矢線が表示される。左から１番目の矢線は、行００００１をカバーする。左から２番目の矢線は、行００００２〜００００７をカバーする。左から２番目の矢線の近くには、繰り返し回数「５」が表示される。また、左から２番目の矢線の内部には、行００００３〜００００５をカバーする矢線が含まれる。内部の矢線の近くには、繰り返し回数「３」が表示される。すなわち、行００００２〜００００７の矢線は外側ループを示し、行００００３〜００００５の矢線は内側ループを示す。左から３番目の矢線は、行００００８をカバーする。上位レイヤ１４１ａの矢線と下位レイヤ１４２ａのソースコードとは、行番号によって紐付けられている。
【００６２】
次に、デバッグ装置１００が行う処理の手順について説明する。なお、以下ではソースファイル１２１、トレースファイル１２３および行情報ファイル１２４を使用するものとして説明するが、これらのファイルに代えてソースファイル１２１ａ、トレースファイル１２３ａおよび行情報ファイル１２４ａを使用してもよい。
【００６３】
図１０は、デバッグ処理の手順例を示すフローチャートである。
（Ｓ１０）コンパイラ１３１は、デバッグモードのコンパイルオプションが指定されたコンパイルコマンドを受け付ける。コンパイルコマンドは、ユーザから入力されてもよいし、デバッガ１３２から入力されてもよい。コンパイラ１３１は、ファイル記憶部１２０からソースファイル１２１を読み出し、ソースファイル１２１に含まれるソースコードをコンパイルする。コンパイルにおいては、実行された命令に対応するソースコードの行番号が出力されるように、デバッグ用の機能が実装される。
【００６４】
（Ｓ１１）コンパイラ１３１は、コンパイルの結果としてソースコードに対応するオブジェクトコードを生成する。コンパイラ１３１は、オブジェクトコードを含む実行ファイル１２２を生成し、ファイル記憶部１２０に保存する。
【００６５】
（Ｓ１２）トレース部１３３は、ファイル記憶部１２０から実行ファイル１２２を読み出し、実行ファイル１２２に含まれるオブジェクトコードを実行する。このオブジェクトコードにはデバッグ用の機能が実装されている。このため、トレース部１３３は、機械可読な命令に対応するソースコードの行番号を順次取得する。
【００６６】
（Ｓ１３）トレース部１３３は、トレース情報を含むトレースファイル１２３を生成し、ファイル記憶部１２０に保存する。トレース情報には、オブジェクトコードを実行することで取得された複数の行番号が、取得された順に列挙されている。
【００６７】
（Ｓ１４）表示制御部１３４は、ファイル記憶部１２０からトレースファイル１２３を読み出す。表示制御部１３４は、トレースファイル１２３に含まれるトレース情報からループを検出する。具体的には、表示制御部１３４は、トレース情報が示す行番号の列から、ループに属する行番号およびループの繰り返し回数を算出する。ループは多重ループである可能性もある。ループ検出の詳細は後述する。
【００６８】
（Ｓ１５）表示制御部１３４は、検出したループに関する行番号の列を纏めて簡潔な表現に置換することで、トレース情報から行情報を生成する。表示制御部１３４は、行情報を含む行情報ファイル１２４を生成し、ファイル記憶部１２０に保存する。
【００６９】
（Ｓ１６）表示制御部１３４は、ファイル記憶部１２０からソースファイル１２１と行情報ファイル１２４を読み出し、行情報ファイル１２４に含まれる行情報を可視化する。具体的には、表示制御部１３４は、ソースファイル１２１に含まれるソースコードをディスプレイ１１１に表示する。また、表示制御部１３４は、ソースコードと重ねて、行情報が示す実行パスの情報をディスプレイ１１１に表示する。実行パスの情報には、命令の実行列に対応するソースコードの行番号の範囲を示す矢線や、ループの繰り返し回数を示す数値が含まれる。実行パス表示の詳細は後述する。
【００７０】
図１１は、ループ検出の手順例を示すフローチャートである。
このループ検出は、上記のステップＳ１４において実行される。
（Ｓ２０）表示制御部１３４は、トレース情報の先頭（出力された順序が早い方）から、未選択の行番号を１つ選択する。ここで選択した行番号を行番号ａとする。
【００７１】
（Ｓ２１）表示制御部１３４は、トレース情報の中から行番号ａの１つ後ろの行番号を参照する。ここで参照される行番号を行番号ｂとする。
（Ｓ２２）表示制御部１３４は、行番号ａ，ｂの両方を取得できたか判断する。ステップＳ２０において未選択の行番号が存在しない場合、表示制御部１３４は、行番号ａの取得に失敗する。また、ステップＳ２１において行番号ａの１つ後ろの行番号が存在しない場合（行番号ａの取得に失敗した場合または行番号ａがトレース情報の末尾である場合）、表示制御部１３４は、行番号ｂの取得に失敗する。行番号ａ，ｂの両方を取得できた場合はステップＳ２３に処理が進み、それ以外の場合はステップＳ２８に処理が進む。
【００７２】
（Ｓ２３）表示制御部１３４は、行番号ａと行番号ｂを比較し、行番号ａが行番号ｂより大きいか判断する。行番号ａが行番号ｂより大きい場合はステップＳ２４に処理が進み、行番号ａが行番号ｂ以下である場合はステップＳ２０に処理が進む。
【００７３】
（Ｓ２４）表示制御部１３４は、ソースコードのｂ行からａ行までの範囲のテキストを、１つのループを記載したテキストであると判定する。
（Ｓ２５）表示制御部１３４は、トレース情報が示す行番号の列の中から、ｂ行からａ行までの範囲の行番号が連続している部分列を検索する。
【００７４】
（Ｓ２６）表示制御部１３４は、検索した部分列に含まれる行番号を、ステップＳ２０において選択済の行番号であるとみなす。また、表示制御部１３４は、検索した部分列それぞれを、ループに属する行番号を列挙した表現から、開始行を示す行番号ｂと終了行を示す行番号ａとを用いた範囲表現に置換する。ここで、部分列の中に既に範囲表現に置換されているものが含まれる場合、内部の範囲表現は内側ループを示し、今回生成する範囲表現は外側ループを示す。この場合、内部の範囲表現も付記しておく。
【００７５】
（Ｓ２７）表示制御部１３４は、同じ範囲表現が連続して現れる回数をカウントし、連続する複数の範囲表現を、１個の範囲表現とループの繰り返し回数の組に纏める。そして、ステップＳ２０に処理が進む。
【００７６】
（Ｓ２８）表示制御部１３４は、トレース情報に含まれる行番号のうち、ステップＳ２６，Ｓ２７で範囲表現に置換されていない行番号、すなわち、ループに属さない行番号について、連続している行番号を範囲表現に置換する。ステップＳ２６，Ｓ２７，Ｓ２８の置換によって、行情報ファイル１２４のエントリが生成される。
【００７７】
例えば、図５に示したトレースファイル１２３の場合、まず行番号ａとして「００００１」が選択され、行番号ｂとして「００００２」が参照される。ａ＜ｂであるため、ループは検出されない。次に、行番号ａとして「００００２」が選択され、行番号ｂとして「００００３」が参照される。次に、行番号ａとして「００００３」が選択され、行番号ｂとして「００００４」が参照される。ここまではａ＜ｂであるため、ループは検出されない。次に、行番号ａとして「００００４」が選択され、行番号ｂとして「００００２」が参照される。ａ＞ｂであるため、行００００２〜００００４がループと判定される。
【００７８】
すると、トレースファイル１２３から、「００００２」から「００００４」までの部分列が検出され、各部分列が「００００２−００００４」の範囲表現に置換される。これにより、「００００２−００００４」が５回連続して現れる。よって、連続する５個の「００００２−００００４」が「００００２−００００４＊５」に置換される。次に、「００００２」から「００００４」までの部分列が除外されたため、行番号ａとして「００００５」が選択される。一方、行番号ａがトレースファイル１２３の末尾であるため、行番号ｂとして何も参照されない。よって、ループの検出が終了する。これにより、「００００１」，「００００２−００００４＊５」，「００００５」が生成される。
【００７９】
また、図８に示したトレースファイル１２３ａの場合、行番号ａとして「００００１」が選択され、行番号ｂとして「００００２」が参照される。ａ＜ｂであるため、ループは検出されない。次に、行番号ａとして「００００２」が選択され、行番号ｂとして「００００３」が参照される。次に、行番号ａとして「００００３」が選択され、行番号ｂとして「００００４」が参照される。次に、行番号ａとして「００００４」が選択され、行番号ｂとして「００００５」が参照される。ここまではａ＜ｂであるため、ループは検出されない。次に、行番号ａとして「００００５」が選択され、行番号ｂとして「００００３」が参照される。ａ＞ｂであるため、行００００３〜００００５がループと判定される。
【００８０】
すると、トレースファイル１２３ａから、「００００３」から「００００５」までの部分列が検出され、各部分列が「００００３−００００５」の範囲表現に置換される。これにより、「００００３−００００５」が３回ずつ連続して現れる。よって、連続する３個の「００００３−００００５」が「００００３−００００５＊３」に置換される。この時点で、トレースファイル１２３ａは、「００００１」，「００００２」，「００００３−００００５＊３」，「００００６」，「００００７」，「００００２」，「００００３−００００５＊３」，…，「００００７」，「００００８」という記載になる。
【００８１】
次に、「００００３」から「００００５」までの部分列が除外されたため、行番号ａとして「００００６」が選択され、行番号ｂとして「００００７」が参照される。ａ＜ｂであるため、ループは検出されない。次に、行番号ａとして「００００７」が選択され、行番号ｂとして「００００２」が参照される。ａ＞ｂであるため、行００００２〜００００７がループと判定される。すると、トレースファイル１２３ａから、「００００２」から「００００７」までの部分列が検出される。検出された部分列には、既に範囲表現に置換されている「００００３−００００５＊３」が含まれる。そこで、各部分列が「００００２−００００７（００００３−００００５＊３）」の階層的な範囲表現に置換される。
【００８２】
これにより、「００００２−００００７（００００３−００００５＊３）」が５回連続して現れることになる。よって、連続する５個の「００００２−００００７（００００３−００００５＊３）」が「００００２−００００７（００００３−００００５＊３）＊５」に置換される。次に、「００００２」から「００００７」までの部分列が除外されたため、行番号ａとして「００００８」が選択される。一方、行番号ａがトレースファイル１２３ａの末尾であるため、行番号ｂとして何も参照されない。よって、ループの検出が終了する。これにより、「００００１」，「００００２−００００７（００００３−００００５＊３）＊５」，「００００８」が生成される。
【００８３】
図１２は、実行パス表示の手順例を示すフローチャートである。
この実行パス表示は、上記のステップＳ１６において実行される。
（Ｓ３０）表示制御部１３４は、行情報の先頭からエントリを１つ読み込む。
【００８４】
（Ｓ３１）表示制御部１３４は、ステップＳ３０で読み込んだエントリに含まれる行範囲の包含関係を判定する。すなわち、表示制御部１３４は、エントリが単一の行を示しているか複数行の行範囲を示しているか判定する。エントリが複数行の行範囲を示している場合、表示制御部１３４は、その行範囲に繰り返し回数が付加されているか判定する。行範囲に繰り返し回数が付加されている場合、表示制御部１３４は、その行範囲に包含される下位の行範囲がエントリに含まれているか判定する。表示制御部１３４は、各階層の行範囲と繰り返し回数をエントリから抽出し、その包含関係を把握する。
【００８５】
（Ｓ３２）表示制御部１３４は、抽出した行範囲を下位から優先的に１つ選択する。なお、ここで言う「行範囲」には単一の行の場合も含まれるものとする。
（Ｓ３３）表示制御部１３４は、選択した行範囲をカバーする縦方向の矢線を上位レイヤ１４１に表示する。表示する矢線の縦方向の座標は、下位レイヤ１４２に表示されるソースコードの行番号に対応するように算出される。表示する矢線の横方向の座標は、左端または１つ前に表示した矢線の右側になるように算出される。ステップＳ３０で読み込んだエントリについて、下位の行範囲に対応する下位の矢線が既に存在する場合、表示制御部１３４は、当該下位の矢線を包含するように今回の矢線を表示する。
【００８６】
（Ｓ３４）表示制御部１３４は、ステップＳ３２で選択した行範囲に繰り返し回数が付加されているか判断する。繰り返し回数が付加されている場合はステップＳ３５に処理が進み、繰り返し回数が付加されていない場合はステップＳ３６に処理が進む。
【００８７】
（Ｓ３５）表示制御部１３４は、上位レイヤ１４１においてステップＳ３３で表示した矢線の近くに繰り返し回数を表示する。例えば、表示制御部１３４は、矢線から所定の方向に所定の座標だけ離れた位置に、繰り返し回数を表示する。
【００８８】
（Ｓ３６）表示制御部１３４は、ステップＳ３１で判定した包含関係に基づいて、ステップＳ３２で選択した行範囲を包含する上位の行範囲が存在するか判断する。上位の行範囲が存在する場合はステップＳ３２に処理が進み、１つ上位の行範囲が選択される。上位の行範囲が存在しない場合はステップＳ３７に処理が進む。
【００８９】
（Ｓ３７）表示制御部１３４は、ステップＳ３０において行情報から全てのエントリを読み込んだか判断する。全てのエントリを読み込んだ場合は実行パス表示が終了し、読み込んでいないエントリが存在する場合はステップＳ３０に処理が進む。
【００９０】
例えば、図５に示した行情報ファイル１２４が生成された場合、まず「００００１」が読み込まれ、上位レイヤ１４１の左端に行００００１をカバーする矢線が表示される。次に、「００００２−００００４＊５」が読み込まれ、上位レイヤ１４１の左から２列目に行００００２〜００００４をカバーする矢線が表示される。また、この矢線の近くに繰り返し回数「５」が表示される。次に、「００００５」が読み込まれ、上位レイヤ１４１の左から３列目に行００００５をカバーする矢線が表示される。
【００９１】
また、図８に示した行情報ファイル１２４ａが生成された場合、まず「００００１」が読み込まれ、上位レイヤ１４１ａの左端に行００００１をカバーする矢線が表示される。次に、「００００２−００００７（００００３−００００５＊３）＊５」が読み込まれ、上位レイヤ１４１ａの左から２列目に行００００３〜００００５をカバーする矢線が表示される。また、この矢線の近くに繰り返し回数「３」が表示される。更に、この矢線を包含するように、行００００２〜００００７をカバーする矢線が表示される。また、この矢線の近くに繰り返し回数「５」が表示される。次に、「００００８」が読み込まれ、上位レイヤ１４１ａの左から３列目に行００００８をカバーする矢線が表示される。
【００９２】
第２の実施の形態のデバッグ装置１００によれば、実行された命令に対応するソースコードの行番号を出力するデバッグ用のオブジェクトコードが生成される。当該オブジェクトコードを実行することで、行番号をトレースしたトレース情報が生成される。トレース情報が示す行番号の列の中からループが検出される。そして、ループについては実行された行範囲をカバーする１つの矢線と繰り返し回数とが表示される。これにより、トレース情報にループに属する行番号が繰り返し出現する場合でも、トレースした行番号に対応するソースコード中のテキストを１ステップずつ確認する方法と比べて、ループの実行状況の把握が容易となる。また、実行パス全体の把握が容易となる。
【００９３】
これにより、ソフトウェア開発時のデバッグを効率的に行うことができる。また、多重ループについては、内側ループに対応する矢線を包含するように外側ループに対応する矢線が表示される。これにより、多重ループの実行状況が簡潔に表現され、その把握が容易となる。また、実行パスとソースコードとが異なるレイヤで表示される。上下方向については２つのレイヤが連動して移動し、左右方向についてはソースコードのレイヤとは独立して実行パスのレイヤが移動する。これにより、実行パスのレイヤに多数の矢線が表示された場合にも、矢線と行番号との対応関係を把握することが容易となる。
【００９４】
なお、第１の実施の形態の情報処理は、情報処理装置１０，２０にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、デバッグ装置１００にプログラムを実行させることで実現できる。
【００９５】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムをコピーして実行してもよい。
【符号の説明】
【００９６】
１０，２０  情報処理装置
１１  記憶部
１２  表示制御部
１３  ソースコード
１４  トレース情報
２１  生成部
【図１】
2017072983.tif 000003
【図２】
2017072983.tif 000004
【図３】
2017072983.tif 000005
【図４】
2017072983.tif 000006
【図５】
2017072983.tif 000007
【図６】
2017072983.tif 000008
【図７】
2017072983.tif 000009
【図８】
2017072983.tif 000010
【図９】
2017072983.tif 000011
【図１０】
2017072983.tif 000012
【図１１】
2017072983.tif 000013
【図１２】
2017072983.tif 000014