周知の通り、半導体試験装置は、ユーザによって作成された試験プログラムに従って、被試験対象である半導体デバイス(以下、DUT(Device Under Test)という)の試験を行う。デバッグ装置は、ユーザによって作成された試験プログラムが、半導体試験装置によって正常に解釈・実行されるように作成(記述)されているか否かを予め確認し、誤りがあればその誤りを修正するために用いられる。近年においては、C言語又はC++言語等の汎用プログラミング言語の文法に則して試験プログラムが記述される傾向にあり、試験プログラム用のデバッグ装置も汎用プログラミング言語のデバッグに用いられるような汎用的なものが用いられている。
図10は、従来のデバッグ装置の要部構成を示すブロック図である。図10に示す通り、従来のデバッグ装置100は、汎用IDE(Integrated Development Environment:統合開発環境)110、汎用デバッガ120、テスト制御モジュール130、及び端末ソフト140を備えており、テスタ(半導体試験装置)200に接続されて、テスタ200で用いられるテストプログラム(試験プログラム)P100のデバッグを行う。
汎用IDE110は、デバッグ操作ツール111及びデバッグ制御モジュール112を備えており、デバッグ対象であるテストプログラムP100に対するエディタ及びコンパイラ(図示省略)並びに汎用デバッガ120等のテストプログラムP100の作成に必要なツールを1つのインターフェイスで統合して扱うことのできる環境を提供する。デバッグ操作ツール111は、デバッグ制御モジュール112との間でイベント制御を行うことにより、ユーザUの指示に応じたデバッグ機能(ブレークポイント機能、ステップ実行機能、及びトレース機能等)を制御する。
デバッグ制御モジュール112は、テストプログラムP100の実行プロセスを生成し、テストプログラムP100と汎用デバッガ120との関連付けを行う。また、ユーザUの指示に応じたデバッグ機能を実現するコマンドを生成して汎用デバッガ120に出力することにより、ユーザUの指示に応じたデバッグ機能を実現する。更に、汎用デバッガ120から得られる各種情報をイベントとしてデバッグ操作ツール111に通知する。
汎用デバッガ120は、デバッグ制御モジュール112の制御の下で、C言語等の汎用プログラミング言語で記述されたプログラムのデバッグを行うものであり、テストプログラムP100が汎用プログラミング言語の文法に則して記述されている場合には、そのデバッグを行うことも可能である。テスト制御モジュール130は、テスタ200でテストプログラムP100を実行させる上で必要となるテスト制御ライブラリL100を備えており、このテスト制御ライブラリL100を用いて、テストプログラムP100に基づいてテスタ200で行われるテスト(試験)の制御を行う。
端末ソフト140は、テスト制御モジュール130に対してユーザUの指示を直接入力するものである。例えば、テスタ200に特有の命令であって、汎用IDE110で扱うことのできない特殊命令(例えば、テスタ200の動作中断(テスタブレーク)を指示する命令)をテスト制御モジュール130に入力する。或いは、テストプログラムP100の特殊な実行制御(例えば、テストプログラムP100を実行させるためのスレッドを別途生成してテストプログラムP100の実行を開始させる制御)を行うために、テストプログラムP100の実行指示をテスト制御モジュール130に入力する。
次に、上記構成における従来のデバッグ装置100の動作について説明する。デバッグ装置100の動作は、(1)通常のデバッグ時の動作、(2)テスタブレークを行う場合の動作、(3)テストプログラムP100の特殊な実行制御を行う場合の動作、に大別される。以下、これらについて順に説明する。
(1)通常のデバッグ時の動作
テストプログラムP100のデバッグを行う場合には、ユーザUがデバッグ操作ツール111を操作してテストプログラムP100のデバッグ開始指示を行う。デバッグ開始指示がなされると、デバッグ操作ツール111からデバッグ制御モジュール112に対して、ユーザUの指示に応じたテストプログラムP100のデバッグを開始する旨の通知がなされる。かかる通知によって、デバッグ制御モジュール112はテストプログラムP100の実行プロセスを生成し、テストプログラムP100と汎用デバッガ120との関連付けを行って、汎用デバッガ120からテストプログラムP100のデバッグを制御可能な状態にする。
以上の処理が終了すると、デバッグ制御モジュール112は汎用デバッガ120に対してコマンドを出力してテストプログラムP100の実行を開始させる。すると、デバッグ制御モジュール112からデバッグ操作ツール111に対し、テストプログラムP100の実行開始を示すプログラム開始イベントが通知され、デバッグ操作ツール111の表示はテストプログラムP100が実行されている状態である旨を示す表示に更新される。ここで、ユーザUがブレークポイント機能、ステップ実行機能、又はトレース機能等を指示した上でデバッグ開始指示を行うことにより、ユーザUの指示に応じたデバッグ機能を実現することができる。
尚、テストプログラムP100の実行が終了すると、汎用デバッガ120がデバッグ制御モジュール112によってなされたテストプログラムP100と汎用デバッガ120との関連付けを自動的に解除し、デバッグ制御モジュール112に対してテストプログラムP100の実行終了を通知する。すると、デバッグ制御モジュール112はデバッグ操作ツール111に対してプログラム終了イベントを通知し、これによりデバッグ操作ツール111の表示はテストプログラムP100が実行が終了した状態である旨を示す表示に更新される。
(2)テスタブレークを行う場合の動作
テスタ200の動作を中断させるテスタブレークを行う場合には、ユーザUは汎用IDE110とは別に端末ソフト140を用いてテスタブレークを実施するための特殊命令を入力する。この特殊命令が入力されると、テスト制御モジュール130はテスタ200の動作を中断させ、動作の再開を示す命令が入力されるまで待ち状態になる。尚、かかる待ち状態のときに、ユーザUが端末ソフト140を操作すれば、動作が中断したテスタ200の状態を得ることもできる。また、ユーザUが端末ソフト140を用いて所定の命令を入力すれば、中断したテスタ200の動作を再開させることもできる。
(3)テストプログラムP100の特殊な実行制御を行う場合の動作
テストプログラムP100の特殊な実行制御を行う場合には、まずユーザUが汎用IDE110を用いてテストプログラムP100を実行させる。次にユーザUはデバッグ操作ツール111に指示を行い、実行状態にあるテストプログラムP100を汎用デバッガ120の管理下に登録(アタッチ)する。尚、かかる登録によってテストプログラムP100は一時停止状態になる。テストプログラムP100が一時停止状態にあるときに、ユーザUがテストプログラムP100の実行指示をテスト制御モジュール130に入力することにより、テストプログラムP100の実行が再開される。
尚、テストプログラムP100の実行が終了した場合には、テストプログラムP100を汎用デバッガ120の管理下から解除(デタッチ)する必要がある。しかしながら、テストプログラムP100の実行が終了しても、テストプログラムP100は解除されずに汎用デバッガ120の管理下に登録された状態のままになる。このため、ユーザUは、端末ソフト140を用いてテストプログラムP100の実行終了を確認し、テストプログラムP100の実行終了が確認された場合にはデバッグ操作ツール111に指示を行い、実行が終了したテストプログラムP100を汎用デバッガ120の管理下から解除する。
尚、半導体試験装置で用いられる試験プログラムのデバッグを行う従来のデバッグ装置の詳細については、例えば以下の非特許文献1を参照されたい。
石川淳也,他8名,「開発のプロが教える標準Eclipse3.1完全解説−インストールからリッチクライアント開発まで」,株式会社アスキー,2005年12月16日,第5章
以下、図面を参照して本発明の実施形態によるデバッグ装置について詳細に説明する。
〔第1実施形態〕
図1は、本発明の第1実施形態によるデバッグ装置の要部構成を示すブロック図である。図1に示す通り、本実施形態のデバッグ装置1は、IDE10(開発環境提供手段)、汎用デバッガ20(デバッグ手段)、及びテスト制御モジュール30(試験制御手段)を備えており、テスタTE(半導体試験装置)に接続されて、テスタTEで用いられるテストプログラムP(試験プログラム)のデバッグを行う。このデバッグ装置1は、ユーザUがIDE10を用いてブレークポイント機能によりテストプログラムPの実行を中断する場合と同様の操作で、テスタTEの動作中断(テスタブレーク)を実現するものである。
IDE10は、デバッグ操作ツール11、デバッグ制御モジュール12(デバッグ制御手段)、及びテスタブレーク制御モジュール13(中断制御手段)を備えており、テスト制御モジュール30及び汎用デバッガ20の制御が可能であるとともに、これらテスト制御モジュール30及び汎用デバッガ20で得られる各種情報の取得が可能である。また、IDE10は、デバッグ対象であるテストプログラムPに対するエディタ及びコンパイラ(図示省略)並びに汎用デバッガ20等のテストプログラムPの作成に必要なツールを1つのインターフェイスで統合して扱うことのできる環境(統合開発環境)を提供する。
尚、IDE10は、C言語等のC++言語等の汎用プログラミング言語で記述されたプログラムの開発に用いられる汎用IDEに対して、テスタTEの制御を行う上で必要となるテスタブレーク制御モジュール13の追加等を行ったものである。汎用IDEを用いなくともIDE10を作成することは可能であるが、既存の汎用IDEに対して新たな機能(テスタブレーク制御モジュール13)を追加し、この機能追加に伴う汎用IDEの改変を行えばIDE10を作成することができるため、汎用IDEを用いずにIDE10を作成する場合に比べてデバッグ装置1の作成コストを低減することができる。
デバッグ操作ツール11は、デバッグ制御モジュール12との間でイベント制御を行うことにより、ユーザUの指示に応じたデバッグ機能を制御する。ここで、ユーザUの指示に応じたデバッグ機能としては、ブレークポイント機能、ステップ実行機能、及びトレース機能等が挙げられる。ブレークポイント機能とは、テストプログラムPの実行をテストプログラムPの特定の位置で中断させる機能である。ステップ実行機能とは、テストプログラムPの実行をユーザUの指示に応じてテストプログラムPの行毎に順次実行させる機能である。トレース機能とは、テストプログラムPの実行中に用いられる各種変数の内容や状態を参照する機能である。
デバッグ制御モジュール12は、テストプログラムPの実行プロセスを生成し、テストプログラムPと汎用デバッガ20との関連付けを行う。また、ユーザUの指示に応じたデバッグ機能を実現するコマンドを生成して汎用デバッガ20に出力することにより、ユーザUの指示に応じたデバッグ機能を実現する。更に、汎用デバッガ20から得られる各種情報をイベントとしてデバッグ操作ツール11に通知する。
また、デバッグ制御モジュール12は、デバッグ操作ツール11との間で行われるイベント制御に応じたデバッグイベントをテスタブレーク制御モジュール13に対して発行する。更に、テスタブレーク制御モジュール13から出力されるテストプログラムPの一時中断指示に基づいて、汎用デバッガ20にテストプログラムPの実行を中断させる。尚、テストプログラムPの実行を中断させた場合には、汎用デバッガ20から得られる各種情報をIDEブレークイベントとしてテスタブレーク制御モジュール13に通知する。
テスタブレーク制御モジュール13は、デバッグ制御モジュール12から発行されるデバッグイベントがテスタTEの動作中断(テスタブレーク)に関するイベントである場合には、テスト制御モジュール30に対してテスタブレークを実施するための制御(設定)を行う。また、テスト制御モジュール30からテスタTEの動作が中断した旨を示すテスタブレークイベントを取得した場合には、汎用デバッガ20の動作を中断させてテストプログラムPの実行を一時的に中断させる指示(テストプログラムPの一時中断指示)をデバッグ制御モジュール12に出力する。尚、テスタブレーク制御モジュール13は、上記のテスタブレークイベントを取得した場合には、動作モードをテスタブレーク制御モードに移行してテスタブレーク制御に係る各種制御を行う。
ここで、テスタブレーク制御モジュール13がテスタブレークイベントを取得した場合にテストプログラムPの実行を中断させるのは、汎用デバッガ20からブレーク情報(テストプログラムPのファイル名や中断した行を示す情報)を得るためである。つまり、テスタTEの動作が中断されてもテストプログラムPは見かけ上実行が中断された状態にあって実際には実行が中断されていない。テストプログラムPの実行が実際に中断されれば汎用デバッガ20からブレーク情報(テストプログラムPのファイル名や中断した行を示す情報)を得ることができるが、実行が中断されていないとデバッグ情報を取得することができない。そこで、テスタブレークイベントを取得した場合にテストプログラムPの実行を中断させて、汎用デバッガ20からブレーク情報の取得を可能としている。
汎用デバッガ20は、デバッグ制御モジュール12の制御の下で、C言語等の汎用プログラミング言語で記述されたプログラムのデバッグを行うものであり、テストプログラムPが汎用プログラミング言語の文法に則して記述されている場合には、そのデバッグを行うことも可能である。テスト制御モジュール30は、テスタTEでテストプログラムPを実行させる上で必要となるテスト制御ライブラリLを備えており、汎用デバッガ20の制御の下でテスト制御ライブラリLを用いてテストプログラムPの内容に応じたテスタTEに対する制御を行う。このテスト制御ライブラリLは、テスタブレークが実施されてテスタTEの動作が中断した場合には、テスタブレーク制御モジュール13に対してテスタTEの動作が中断した旨を示すテスタブレークイベントを出力する。
尚、テスタTEは、テスト制御モジュール30の制御の下でDUT(図示省略)のテスト(試験)を行う。このテスタTEは、半導体メモリのテストを行うメモリテスタ、半導体論理回路をテストするロジックテスタ、LCD(Liquid Crystal Display:液晶表示ディスプレイ)の駆動ドライバをテストするトライバテスタ等の何れのテスタであっても良い。
次に、上記構成におけるデバッグ装置1の動作について説明する。図2は本発明の第1実施形態によるデバッグ装置におけるテスタブレーク設定時の動作を示すフローチャートであり、図3は同デバッグ装置におけるテスタブレーク制御時の動作を示すフローチャートである。ユーザUがデバッグ操作ツール11に対して、テストプログラムPのデバッグ開始の指示を行うと、テストプログラムPの内容が表示されて、図2に示すフローチャートが繰り返し実行される。
テストプログラムPが表示された状態で、ユーザUはデバッグ操作ツール11を操作して、テストプログラムPの編集、従来から用いられているブレークポイントの設定、又はテスタブレークについてのブレークポイント(テスタブレークポイント)の設定等を行う。かかる操作が行われると、デバッグ制御モジュール12からテスタブレーク制御モジュール13及び汎用デバッガ20に対して、その操作に応じたデバッグイベント発行される。
デバッグ制御モジュール12からデバッグイベントが発行されると、テスタブレーク制御モジュール13において、そのデバッグイベントがユーザUによってブレークポイントの設定がされた場合に発行されるイベント(ブレークポイント設定イベント)であるが否かが判断される(ステップS11)。この判断結果が「NO」の場合には図2に示すフローチャートが再度最初から開始される。
これに対し、ステップS11でブレークポイント設定イベントであると判断された場合(判断結果が「YES」の場合)には、テスタブレーク制御モジュール13でブレークポイント設定イベントが解析され、そのブレークポイント設定イベントがテスタブレークポイントの設定によって発生したものであるか否かが判断される(ステップS12)。この判断結果が「NO」の場合には図2に示すフローチャートが再度最初から開始される。
他方、ステップS12の判断結果が「YES」の場合には、テスタブレーク制御モジュール13によって、テスト制御モジュール30に対するテスタブレークポイントの設定が行われる(ステップS13)。このテスタブレークポイントの設定は、ブレークポイント設定イベントに含まれる設定情報に基づいて行われる。テスタブレークポイント設定が終了すると図2に示すフローチャートが再度最初から開始される。
ここで、テスタブレークポイントはユーザUによって新たに設定される場合のみならず、一度設定されたものがユーザUによって取り消される場合もある。テスタブレークポイントが取り消された場合には、ステップS13において先にテスト制御モジュール30に設定したテスタブレークポイントを削除する設定が行われる。以上の動作が繰り返されることにより、IDE10を用いたテスト制御モジュール30に対するテスタブレークポイントの設定が行われる。
以上の操作を終えて、ユーザUがデバッグ操作ツール11に対して、テストプログラムPの実行の指示を行うと、デバッグ制御モジュール12がテストプログラムPの実行プロセスを生成し、テストプログラムPと汎用デバッガ20との関連付けを行って、汎用デバッガ20からテストプログラムPのデバッグを制御可能な状態にしてテストプログラムPの実行を開始させる。また、上記のユーザUによるテストプログラムの実行指示により、図3に示すフローチャートが繰り返し実行される。
図3に示すフローチャートが開始されると、まずテスト制御モジュール30からテスタTEの動作が中断した旨を示すテスタブレークイベントを受信したか否かがテスタブレーク制御モジュール13によって判断される(ステップS21)。この判断結果が「YES」の場合には、テスタブレーク制御モジュール13の動作モードがテスタブレーク制御モードに移行する(ステップS22)。
以上の移行処理が行われると、テスタブレーク制御モジュール13からデバッグ制御モジュール12に対して、テストプログラムPの一時中断指示が出力される。デバッグ制御モジュール12は、テスタブレーク制御モジュール13からの一時中断指示を一時中断コマンドに変換して汎用デバッガ20に出力し、テストプログラムPの実行を中断させる(ステップS23)。この中断処理によってテストプログラムPの実行が中断した位置がテスタブレークのブレーク地点となる。尚、以上の中断処理を行うと、デバッグ制御モジュール12でテストプログラムPの実行が中断された旨を示すIDE一時中断イベントが発行される。以上の処理が終了すると、図3に示すフローチャートが再度最初から開始される。
他方、ステップS21の判断結果が「NO」の場合には、デバッグ制御モジュール12で発行されたIDE一時中断イベントを受信したか否かがテスタブレーク制御モジュール13によって判断される(ステップS24)。この判断結果が「YES」の場合には、テスタブレーク制御モジュール13の動作モードがテスタブレーク制御モードであるか否かが判断される(ステップS25)。この判断結果が「NO」の場合は、図3に示すフローチャートが再度最初から開始される。
これに対し、ステップS25の判断結果が「YES」の場合には、テスタブレーク制御モジュール13によってIDE一時中断イベントからブレーク情報が取得され、IDEブレークイベントが作成される(ステップS26)。IDEブレークイベントが作成されると、テスタブレーク制御モジュール13からデバッグ制御モジュール12に対して、IDEブレークイベントの発行が指示される(ステップS27)。これによりIDE10に設けられた不図示のエディタ及びコンパイラ等にIDEブレークイベントが通知され、ブレーク情報の表示が行われる。以上の処理が終了すると、図3に示すフローチャートが再度最初から開始される。
他方、ステップS24の判断結果が「NO」の場合には、デバッグ制御モジュール12で発行されたIDEブレークイベントを受信したか否かがテスタブレーク制御モジュール13によって判断される(ステップS28)。この判断結果が「NO」の場合は、図3に示すフローチャートが再度最初から開始される。これに対し、ステップS28の判断結果が「YES」の場合には、テスタブレーク制御モジュール13の動作モードがテスタブレーク制御モードであるか否かが判断される(ステップS29)。この判断結果が「NO」の場合は、図3に示すフローチャートが再度最初から開始される。
これに対し、ステップS29の判断結果が「YES」の場合には、テスタブレーク制御モジュール13からテスト制御モジュール30に、テスタブレーク制御が完了した旨が通知され(ステップS30)。かかる通知がなされると、テスタブレーク制御モジュール13のテスタブレーク制御モードが解除される(ステップS31)。以上説明した一連の処理によってテスタブレーク制御が実施される。
以上の通り、本実施形態のデバッグ装置1は、テスト制御モジュール30及び汎用デバッガ20の制御が可能であるとともに、これらテスト制御モジュール30及び汎用デバッガ20で得られる各種情報の取得が可能であるIDE10を備えている。このため、ユーザUがIDE10のデバッグ操作ツール11を操作してテスト制御モジュール30に対するテスタブレークポイントの設定を行うことができる。また、テスト制御モジュール30からのテスタブレークイベントを取得した場合に、汎用デバッガ20の動作を中断させてテストプログラムPの実行を中断させるテスタブレーク制御モジュール13をIDE10に設けているため、テストプログラムPの実行が中断されたときのブレーク情報を得ることもできる。これにより、ユーザUの操作性及び利便性を向上させてデバッグ効率を高めることができる。
〔第2実施形態〕
図4は、本発明の第2実施形態によるデバッグ装置の要部構成を示すブロック図である。図4に示す通り、本実施形態のデバッグ装置2は、図1に示すデバッグ装置1が備えるIDE10に代えてIDE40を設けた構成であり、テスタTEに接続されて、テスタTEで用いられるテストプログラムPのデバッグを行う。このデバッグ装置2は、ユーザUがIDE40を操作している状態で、テストプログラムPの特殊な実行制御を実現するものである。
IDE40は、デバッグ操作ツール41及びデバッグ制御モジュール42(デバッグ制御手段)を備えており、テスト制御モジュール30及び汎用デバッガ20の制御が可能であるとともに、これらテスト制御モジュール30及び汎用デバッガ20で得られる各種情報の取得が可能である。このIDE40は、図1に示すIDE10と同様の統合開発環境を提供するものであり、汎用IDEを用いて作成することができる。
デバッグ操作ツール41は、図1に示すデバッグ操作ツール11と同様に、デバッグ制御モジュール42との間でイベント制御を行うことにより、ユーザUの指示に応じたデバッグ機能を制御する。このデバッグ操作ツール41は、デバッグ制御モジュール42に汎用デバッガ20の動作開始又は動作停止の制御を行わせる実行制御モジュール41a(実行制御手段)を備える。
ここで、実行制御モジュール41aは、デバッグ制御モジュール42に汎用デバッガ20の動作開始の制御を行わせた場合には、テスト制御モジュール30に対してテストプログラムPを実行させる制御を行う。これは、実行状態にあるテストプログラムPを汎用デバッガ20の管理下に登録(アタッチ)するとテストプログラムPは命令待ち状態になって停止し、汎用デバッガ20の動作を開始させただけではテストプログラムPの実行が開始されないからである。
デバッグ制御モジュール42は、図1に示すデバッグ制御モジュール12と同様に、テストプログラムPの実行プロセスを生成し、テストプログラムPと汎用デバッガ20との関連付けを行う。また、ユーザUの指示に応じたデバッグ機能を実現するコマンドを生成して汎用デバッガ20に出力することにより、ユーザUの指示に応じたデバッグ機能を実現する。更に、汎用デバッガ20から得られる各種情報をイベントとしてデバッグ操作ツール41に通知する。
次に、上記構成におけるデバッグ装置2の動作について説明する。図5は、本発明の第2実施形態によるデバッグ装置の動作を示すフローチャートである。まず、ユーザUの操作によって予めテストプログラムPが実行されている状態にあるものとする。かかる状態において、ユーザUがデバッグ操作ツール41に対して、テストプログラムPのデバッグの指示を行うと、図5に示すフローチャートが開始される。
テストプログラムPのデバッグが開始されると、デバッグ操作ツール41に設けられた実行制御モジュール41aからデバッグ制御モジュール42に対してテストプログラムPのアタッチが指示される(ステップS41)。このアタッチ指示によって、デバッグ制御モジュール42から汎用デバッガ20に対してテストプログラムPのアタッチコマンドが出力され、これにより実行状態にあるテストプログラムPが汎用デバッガ20の管理下に登録(アタッチ)される(ステップS42)。尚、テストプログラムPをアタッチすると、テストプログラムPは命令待ち状態になって停止し、汎用デバッガ20は一時停止状態になる。
次に、汎用デバッガ20が一時停止状態であるため、実行制御モジュール41aからデバッグ制御モジュール42に対して汎用デバッガ20の再開が指示される(ステップS43)。この再開指示によって、デバッグ制御モジュール42から汎用デバッガ20に対して再開コマンドが出力され、これにより汎用デバッガ20の動作が再開される(ステップS44)。
以上の処理によって汎用デバッガ20は再開されたものの、テストプログラムPは命令待ち状態になって停止している。このため、実行制御モジュール41aからテスト制御モジュール30に対してテストプログラムPの実行開始が指示される(ステップS45)。この実行開始指示がなされると、テスト制御モジュール30は命令待ち状態になって停止しているテストプログラムPの実行が開始され、汎用デバッガ20によるテストプログラムPのデバッグが行われる。
テストプログラムPのデバッグが開始されると、テスト制御モジュール30からテスタTEの制御状況を示すテスタイベントが通知されて実行制御モジュール41aで受信される(ステップS46)。次に、受信したテスタイベントがテストプログラムPの実行終了時に発行されるテストプログラム終了イベントであるか否かが実行制御モジュール41aで判断される(ステップS47)。テストプログラム終了イベントではないと判断された場合(判断結果が「NO」の場合)にはテスト制御モジュール30から通知されるテスタイベントの受信(ステップS46)が繰り返される。
これに対し、テストプログラム終了イベントであると判断された場合(判断結果が「YES」の場合)には、実行制御モジュール41aからデバッグ制御モジュール42に対してテストプログラムPのデタッチが指示される(ステップS48)。このデタッチ指示によって、デバッグ制御モジュール42から汎用デバッガ20に対してテストプログラムPのデタッチコマンドが出力され、これによりテストプログラムPが汎用デバッガ20の管理下から解除(デタッチ)される(ステップS49)。尚、テストプログラムPがデタッチされると、実行制御モジュール41aはIDE40上でのデバッグを終了する。
以上の通り、本実施形態のデバッグ装置2は、テスト制御モジュール30及び汎用デバッガ20の制御が可能であるとともに、これらテスト制御モジュール30及び汎用デバッガ20で得られる各種情報の取得が可能であるIDE40を備えている。このIDE40には、汎用デバッガ20の動作開始又は動作停止をデバッグ制御モジュール42に制御させるとともにテストプログラムPをテスト制御モジュール30実行させる実行制御モジュール41aが設けられている。このため、ユーザUが煩雑な操作を行わなくともテストプログラムPの特殊な実行制御が自動的に行われ、ユーザUの操作性及び利便性を向上させてデバッグ効率を高めることができる。
〔第3実施形態〕
図6は、本発明の第3実施形態によるデバッグ装置の要部構成を示すブロック図である。図6に示す通り、本実施形態のデバッグ装置3は、図1に示すデバッグ装置1が備えるIDE10に代えてIDE50を設けた構成であり、テスタTEに接続されて、テスタTEで用いられるテストプログラムPのデバッグを行う。このデバッグ装置3は、テストプログラムPを実行して得られる実行結果のうち、ユーザUによって作成された部分のみのステップ実行を実現し、またその部分の実行結果のみの表示を実現するものである。
IDE50は、デバッグ操作ツール51、デバッグ制御モジュール52(デバッグ制御手段)、及びステップ実行制御モジュール53(ステップ実行制御手段)を備えており、汎用デバッガ20の制御が可能であるとともに、汎用デバッガ20で得られる各種情報の取得が可能である。このIDE50は、図1,図4に示すIDE10,40と同様の統合開発環境を提供するものであり、汎用IDEを用いて作成することができる。
尚、図6においては説明を簡単にするために図示を省略しているが、図1に示すテスタブレーク制御モジュール13或いは図4に示す実行制御モジュール41aをIDE50内に設けた構成にすることもできる。かかる構成にすることで、汎用デバッガ20の制御及び汎用デバッガ20で得られる各種情報の取得のみならず、テスト制御モジュール30の制御及びテスト制御モジュール30で得られる各種情報の取得が可能になり、第1実施形態で説明したIDE50を用いたテスタブレーク又は第2実施形態で説明したテストプログラムPの特殊な実行制御も実現できる。
デバッグ操作ツール51は、図1に示すデバッグ操作ツール11と同様に、デバッグ制御モジュール52との間でイベント制御を行うことにより、ユーザUの指示に応じたデバッグ機能を制御する。このデバッグ操作ツール51は、デバッグ制御モジュール52から得られるテストプログラムP1のスレッド情報及びスタック情報(実行履歴情報)の表示制御を行う表示制御モジュール51a(表示制御手段)を備える。
ここで、上記のスレッド情報は実行されたスレッド(プログラムの実行単位)を特定する情報であり、上記のスタック情報はそのスレッドにおける関数(テストプログラムPに記述された関数)の呼び出し履歴を示す情報である。尚、テストプログラムPには、ユーザUによって記述された関数(ユーザ記述関数)とシステム関数(例えば、テスタTEの製造メーカによって予め用意された関数)とが記述されており、スタック情報はこれらユーザ記述関数及びシステム関数を特定する情報が、呼び出された順で時系列的に格納された情報である。
表示制御モジュール51aは、表示すべき対象(表示アイテム)がスレッド情報である場合には、上記のスタック情報にユーザ記述関数が含まれるか否かを判断し、ユーザ記述関数が含まれると判断した場合に表示アイテムの表示を行う。また、表示アイテムがスタック情報である場合には、スタック情報に基づいてユーザ記述関数及びシステム関数の呼び出し状況を判断し、その判断結果から表示アイテムの表示を行う。
具体的には、ユーザ記述関数の呼び出しと他の関数(システム記述関数を含む)の呼び出しとの前後関係を判断し、ユーザ記述関数の呼び出し以降に呼び出された関数についてのスタック情報を表示アイテムとして表示する。これは、システム関数からユーザ記述関数の呼び出しが行われることはあるが、ユーザ記述関数からシステム関数の呼び出しが行われることはないため、ユーザ記述関数の呼び出し以降に呼び出された関数についてのスタック情報のみを表示すれば、ユーザUにとって不要なシステム関数についてのスタック情報の表示がなされることはないためである。
デバッグ制御モジュール52は、図1に示すデバッグ制御モジュール12と同様に、テストプログラムPの実行プロセスを生成し、テストプログラムPと汎用デバッガ20との関連付けを行う。また、ユーザUの指示に応じたデバッグ機能を実現するコマンドを生成して汎用デバッガ20に出力することにより、ユーザUの指示に応じたデバッグ機能を実現する。更に、汎用デバッガ20から得られる各種情報をイベントとしてデバッグ操作ツール51及びステップ実行制御モジュール53に通知する。また更に、ステップ実行制御モジュール53の制御の下で、汎用デバッガ20によるテストプログラムPのステップ実行を制御する。
ステップ実行制御モジュール53は、デバッグ制御モジュール52から得られるテストプログラムP1のスレッド情報及びスタック情報に応じて、汎用デバッガ20によるテストプログラムPのステップ実行を、デバッグ制御モジュール52に制御させる。具体的には、上記のスタック情報にユーザ記述関数が含まれるか否かを判断し、ユーザ記述関数が含まれると判断した場合に上記のステップ実行をデバッグ制御モジュール52に制御させる。
次に、上記構成におけるデバッグ装置3の動作について説明する。図7は、本発明の第3実施形態によるデバッグ装置におけるステップ実行時の動作を示すフローチャートである。ユーザUがデバッグ操作ツール51に対して、テストプログラムPのステップ実行の指示を行うと、デバッグ制御モジュール52がテストプログラムPの実行プロセスを生成し、テストプログラムPと汎用デバッガ20との関連付けを行って、汎用デバッガ20からテストプログラムPのデバッグを制御可能な状態にしてテストプログラムPのステップ実行を開始させる。尚、ステップ実行の開始により、図7に示すフローチャートが繰り返し実行される。
テストプログラムPのステップ実行が行われると、汎用デバッガ20からデバッグ制御モジュール52に対してステップ完了が通知され、これによりデバッグ制御モジュール52からステップイベントが発行される。図7に示す通り、まずデバッグ制御モジュール52から発行されるステップイベントがステップ実行制御モジュール53で受信されたか否かが判断される(ステップS51)。
ステップイベントが受信されたと判断された場合(判断結果が「YES」の場合)には、ステップ実行制御モジュール53において、ステップイベントに含まれるスレッド情報及びスタック情報が取得され、そのスタック情報にユーザ記述関数が含まれているか否かが判断される(ステップS52)。この判断結果が「YES」の場合には図7に示すフローチャートが再度最初から開始される。
これに対し、ステップS52の判断結果が「NO」の場合には、ステップ実行制御モジュール53の動作モードが、ステップ実行終了位置の調整を行うステップ実行制御モードに移行する(ステップS53)。ここで、ステップ実行終了位置を調整するのは、スタック情報にユーザ記述関数が含まれておらず、テストプログラムPのステップ実行がユーザUに対する非公開領域(例えば、システム関数が記述された領域)で終了したと考えられるためである。
以上の移行処理が行われると、ステップ実行制御モジュール53によって、テストプログラムPに記述された全てのユーザ記述関数にブレークポイントが設定される(ステップS54)。ここで、ステップ実行終了位置から次のユーザ記述関数が記述されている位置まで処理を進めれば、上記のステップ実行終了位置の調整を行うことができる。しかしながら、次に実行されるユーザ記述関数を特定することができないため、全てのユーザ記述関数に対してブレークポイントの設定を行っている。
ブレークポイントの設定が終了すると、ステップ実行制御モジュール53からデバッグ制御モジュール52に対して、テストプログラムPの実行再開指示がなされる。デバッグ制御モジュール52は、ステップ実行制御モジュール53からの実行再開指示を再開コマンドに変換して汎用デバッガ20に出力し、テストプログラムPの実行を再開させる(ステップS55)。以上の処理が終了すると図7に示すフローチャートが再度最初から開始される。
他方、ステップS51の判断結果が「NO」の場合には、デバッグ制御モジュール52で発行されたIDEブレークイベントを受信したか否かがステップ実行制御モジュール53によって判断される(ステップS56)。この判断結果が「NO」の場合は、図7に示すフローチャートが再度最初から開始される。これに対し、ステップS56の判断結果が「YES」の場合には、ステップ実行制御モジュール53の動作モードがステップ実行制御モードであるか否かが判断される(ステップS57)。この判断結果が「NO」の場合は、図7に示すフローチャートが再度最初から開始される。
これに対し、ステップS57の判断結果が「YES」の場合には、ステップS54の処理でユーザ記述関数に対して設定されたブレークポイントの全てがステップ実行制御モジュール53によって解除される(ステップS58)。ブレークポイントが解除されると、ステップ実行制御モジュール53のステップ実行制御モードも解除される(ステップS59)。以上説明した一連の処理によってステップ実行制御が実施される。
以上の通り、本実施形態のデバッグ装置3は、デバッグ制御モジュール52から得られるスタック情報にユーザ記述関数が含まれるか否かを判断し、ユーザ記述関数が含まれると判断した場合にテストプログラムPのステップ実行をデバッグ制御モジュール52に制御させるステップ実行制御モジュール53を備えている。このため、ユーザUによって記述された領域(公開領域)とユーザに対する非公開領域とがテストプログラムP内に存在していても、公開領域に記述されたユーザ記述関数のみを対象にステップ実行することができる。これにより、ユーザUの操作性及び利便性を向上させてデバッグ効率を高めることができる。
図8は、本発明の第3実施形態によるデバッグ装置における表示制御時の動作を示すフローチャートである。ユーザUがデバッグ操作ツール51に対して、デバッグの指示を行い、汎用デバッガ20によるテストプログラムPのデバッグが開始されると、図8に示すフローチャートが実行される。テストプログラムPのデバッグ中に、ブレークポイントによるブレーク、ステップ実行の実行終了、又は強制的な一時中断等によって汎用デバッガ20によるテストプログラムPの実行が中断されると、デバッグ制御モジュール52からその旨を示すプログラム中断イベントが発行される。
図8に示す通り、まずデバッグ制御モジュール52から発行されるプログラム中断イベントがデバッグ操作ツール51に設けられた表示制御モジュール51aで受信されたか否かが判断される(ステップS61)。この判断結果が「NO」の場合にはステップS61の処理が繰り返される。これに対し、ステップS61の判断結果が「YES」の場合には、表示制御モジュール51aによって、プログラム中断イベントに含まれるスレッド情報及びスタック情報から表示すべき表示アイテムが取得される(ステップS62)。
次に、取得された表示アイテムがスレッドであるか否かが表示制御モジュール51aによって判断される(ステップS63)。表示アイテムがスレッドであると判断された場合(ステップS63の判断結果が「YES」の場合)には、そのスレッドにおけるスタック情報にユーザ記述関数が含まれているか否かが表示制御モジュール51aによって判断される(ステップS64)。
この判断結果が「YES」の場合には、表示制御モジュール51aによって、ステップS62で取得された表示アイテム(スレッド)の表示が行われ(ステップS65)、他の表示アイテムが有るか否かが判断される(ステップS66)。これに対し、ステップS64の判断結果が「NO」の場合には、表示アイテムの表示が行われずに他の表示アイテムが有るか否かが判断される(ステップS66)。
他方、ステップS63における判断結果が「NO」の場合には、取得された表示アイテムがスタックであるか否かが表示制御モジュール51aによって判断される(ステップS67)。表示アイテムがスタックであると判断された場合(ステップS67の判断結果が「YES」の場合)には、その表示アイテム(スタック情報)に係る関数の呼び出しがユーザ記述関数の呼び出し以降に行われたか否かが判断される(ステップS68)。
この判断結果が「YES」の場合には、表示制御モジュール51aによって、ステップS62で取得された表示アイテム(スタック)の表示が行われ(ステップS65)、他の表示アイテムが有るか否かが判断される(ステップS66)。これに対し、ステップS68の判断結果が「NO」の場合には、表示アイテムの表示が行われずに他の表示アイテムが有るか否かが判断される(ステップS66)。
ステップS66において、他の表示アイテムが有ると判断された場合(判断結果が「YES」の場合)には、プログラム中断イベントに含まれるスレッド情報及びスタック情報から表示すべき表示アイテムが取得され(ステップS62)、上述した処理が繰り返される。これに対し、ステップS66の判断結果が「NO」の場合には、図8に示すフローチャートが再度最初から開始される。
以上の処理が行われると、テストプログラムPの実行結果のうち、ユーザ記述関数が関連する実行結果(スレッド情報及びスタック情報)のみが表示される。図9は、テストプログラムPの実行結果の表示例を示す図である。図9に示す例では、テストプログラムPの実行結果がツリー形式で表示されている。つまり、ツリーの大元の部分にテストプログラムPを示す情報Q1(例えば、テストプログラムの名称やファイル名)が表示され、この情報にぶら下がる形で、デバッグ時に起動されたデバッガプロセスを示す情報Q2が表示される。
また、デバッガプロセスを示す情報Q2にぶら下がる形で、そのデバッガプロセスで生成された複数のスレッドを示す情報Q3が表示され、これらスレッドを示す情報Q3にぶら下がる形で、スタック情報Q4が表示される。尚、スレッドを示す情報Q3及びスタック情報Q4は、テストプログラムPに記述された関数のうちのユーザ記述関数に関連するもののみが表示され、システム関数に関連するものが表示されることはない。
以上の通り、本実施形態のデバッグ装置3は、デバッグ制御モジュール52から得られるプログラム中断イベントに含まれるスレッド情報にユーザ記述関数が含まれるか否かを判断し、ユーザ記述関数が含まれると判断した場合にその表示を行い、また、プログラム中断イベントに含まれるスタック情報に基づいてユーザ記述関数及びシステム関数の呼び出し状況を判断し、その判断結果からその表示を行う表示制御モジュール51aを備えている。このため、ユーザUによって記述された領域(公開領域)とユーザに対する非公開領域とがテストプログラムP内に存在していても、公開領域に記述されたユーザ記述関数の実行結果のみを表示させることができる。これにより、ユーザUの操作性及び利便性を向上させてデバッグ効率を高めることができる。
以上、本発明の実施形態によるデバッグ装置について説明したが、本発明は上述した実施形態に制限されることなく、本発明の範囲内で自由に変更が可能である。例えば、上記実施形態で説明したデバッグ装置1〜3は、ハードウェアにより実現されていても良く、ソフトウェアにより実現されていても良い。ソフトウェアにより実現する場合には、デバッグ装置1〜3に設けられた各ブロックの機能を実現するプログラムをコンピュータに実行させることにより実現される。
上記のプログラムは、ネットワークを介してダウンロードすることにより、コンピュータにインストールすることができる。或いは、例えばCD−ROM又はDVD(登録商標)−ROM等のコンピュータ読み取り可能な記録媒体に記憶されていてもよい。この記録媒体に記録されたプログラムをCD−ROMドライブ又はDVD(登録商標)−ROMドライブ等のドライブ装置を用いて読み取れば、コンピュータにインストールすることができる。