(57)【要約】【課題】開発中のライブラリを呼び出すアプリケーションを一々作成する必要なく、ライブラリのデバッグを行う。【解決手段】本発明に係るデバッグ用コンピュータは、ライブラリのインターフェース内容が記述されたライブラリインターフェース情報ファイル２と、ライブラリインターフェース情報ファイルを読み込むと共に、読み込まれたライブラリインターフェース情報ファイルをもとにテスト用アプリケーションソースを生成するテスト用アプリケーションソース生成部１２と、テスト用アプリケーションソースをコンパイルしてテスト用アプリケーションを生成するコンパイラ４と、コンパイラによって生成されたテスト用アプリケーションをデバッグするデバッガ本体１１とを有することを特徴とする。【選択図】図１
2009080691.tif 000002
【特許請求の範囲】
【請求項１】
単体での実行が不可能なライブラリをデバッグするデバッグ用コンピュータであって、
前記ライブラリのインターフェース内容が記述されたライブラリインターフェース情報ファイルと、
前記ライブラリインターフェース情報ファイルを読み込むと共に、読み込まれた前記ライブラリインターフェース情報ファイルをもとにテスト用アプリケーションソースを生成するテスト用アプリケーションソース生成部と、
前記テスト用アプリケーションソースをコンパイルしてテスト用アプリケーションを生成するコンパイラと、
前記コンパイラによって生成された前記テスト用アプリケーションをデバッグするデバッガ本体と
を有することを特徴とするデバッグ用コンピュータ。
【請求項２】
前記デバッガ本体が、前記インターフェース内容として定義された少なくとも１つの引数に任意の値を代入しながら実行させることを特徴とする、請求項１に記載のデバッグ用コンピュータ。
【請求項３】
前記ライブラリインターフェース情報ファイルは、前記ライブラリに定義されている複数のメソッドについての前記インターフェース内容を含み、
前記デバッガ本体が、前記複数のメソッドの中から実行するメソッドをユーザに選択させ、選択された該メソッドに対して、前記インターフェース内容として定義された前記引数に任意の値を代入しながら実行させることを特徴とする、請求項２に記載のデバッグ用コンピュータ。
【請求項４】
デバッガおよびコンパイラを有するコンピュータで、単体での実行が不可能なライブラリをデバッグする方法であって、
前記デバッガが、前記ライブラリのインターフェース内容が記述されたライブラリインターフェース情報ファイルを読み込むインターフェース情報読み込み工程と、
前記デバッガが、前記ライブラリインターフェース情報ファイルをもとにテスト用アプリケーションソースを生成するアプリケーションソース生成工程と、
前記コンパイラが、前記テスト用アプリケーションソースをコンパイルしてテスト用アプリケーションを生成するコンパイル工程と、
前記デバッガが、前記テスト用アプリケーションソースをデバッグするデバッグ工程と
を有することを特徴とするライブラリのデバッグ方法。
【請求項５】
前記デバッグ工程が、前記インターフェース内容として定義された少なくとも１つの引数に任意の値を代入しながら実行させることを特徴とする、請求項４に記載のライブラリのデバッグ方法。
【請求項６】
前記ライブラリインターフェース情報ファイルは、前記ライブラリに定義されている複数のメソッドについての前記インターフェース内容を含み、
前記デバッグ工程が、前記複数のメソッドの中から実行するメソッドをユーザに選択させる選択工程を含み、該選択工程で選択されたメソッドに対して、前記インターフェース内容として定義された前記引数に任意の値を代入しながら実行させることを特徴とする、請求項５に記載のライブラリのデバッグ方法。
【請求項７】
単体での実行が不可能なライブラリをデバッグするデバッグ用プログラムであって、コンパイラを有するコンピュータに、
前記ライブラリのインターフェース内容が記述されたライブラリインターフェース情報ファイルを読み込む処理と、
前記ライブラリインターフェース情報ファイルをもとにテスト用アプリケーションソースを生成する処理と、
前記コンパイラを起動し、前記テスト用アプリケーションソースをコンパイルしてテスト用アプリケーションを生成させる処理と、
前記テスト用アプリケーションソースをデバッグするデバッグ処理と
を実行させることを特徴とするデバッグ用プログラム。
【請求項８】
前記デバッグ処理が、前記インターフェース内容として定義された少なくとも１つの引数に任意の値を代入しながら実行させることを特徴とする、請求項４に記載のライブラリのデバッグ方法。
【請求項９】
前記ライブラリインターフェース情報ファイルは、前記ライブラリに定義されている複数のメソッドについての前記インターフェース内容を含み、
前記デバッグ処理が、前記複数のメソッドの中から実行するメソッドをユーザに選択させる処理を含み、該処理で選択されたメソッドに対して、前記インターフェース内容として定義された前記引数に任意の値を代入しながら実行させることを特徴とする、請求項５に記載のライブラリのデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータにおいてソフトウェアをデバッグする方法に関し、特にライブラリをデバッグする方法に関する。
【背景技術】
【０００２】
ソフトウェアアプリケーションの開発は、昨今は米国マイクロソフト・コーポレーション社のVisual Studio（登録商標）に代表されるような開発環境を用いて行われることが多い。そのような開発環境においては、コーディング、コンパイル、テストといったソフトウェアを作成する一連の手順を行うことができる。また、作成したソフトウェアをデバッグする際にも、視覚的に行うことができるので作業効率の向上が期待できる。
【０００３】
アプリケーションの種類には大きく分けて、単体で実行することが可能なアプリケーションと、単体では実行できないライブラリといわれる２種類がある。特に米国マイクロソフト・コーポレーション社のウィンドウズ（登録商標）シリーズ用のアプリケーションにおいては、複数のアプリケーションが共通して利用する汎用性の高いプログラムを部品化したライブラリであるＤＬＬ（Dynamic Link Library）ファイルとして保存しておき、必要に応じてメモリに呼び出して利用する手法が一般的に使われている。
【０００４】
アプリケーションの開発者が、自らが頻繁に使う機能をライブラリとして作成してまとめておくことも可能である。ライブラリとして提供されている機能は新規に開発する必要が無いので、開発の効率を向上させることができる。また複数のアプリケーションで同一のライブラリとして共有することにより、ハードディスク（ＨＤＤ）やＲＡＭの容量を節約できるというメリットもある。
【０００５】
なお、ソフトウェアのデバッグを効率化する技術として、たとえば以下のような技術が開示されている。特許文献１には、デバッガの中に変数参照管理テーブルを設けることにより、スタブ作成や外部変数の設定などを一々行う必要のないデバッグ方法が開示されている。特許文献２には、Ｊａｖａ（登録商標）言語をＣ言語に変換したソースコードを生成してネイティブライブラリにアクセスする方法が開示されている。特許文献３には、インターフェース定義ファイルを読み込むことによって、ソースファイルとサーバ共通プログラムを読み込んでデバッグすることのできるプログラム開発支援装置が開示されている。
【０００６】
【特許文献１】特開２００１−２２９０４４号公報
【特許文献２】特開２００４−２８８０７６号公報
【特許文献３】特開平０８−３１４７６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ライブラリを新規に開発する場合にも、アプリケーションを開発する場合と同様に、デバッグが必要である。しかし、ライブラリは単体で実行することができない。そのため、従来のライブラリのデバッグは、そのたびごとに該ライブラリを使用するアプリケーションを作成し、該アプリケーションを起動することによって行う必要がある。
【０００８】
特に初期段階のソフトウェア作成工程では、このようなアプリケーションを作成する手間が開発者にとって大きな負担となっていた。前述の特許文献１〜３は、アプリケーションのデバッグを効率化する技術であるが、ライブラリの開発におけるこのような手間を軽減する構成は備えていない。
【０００９】
本発明の目的は、開発中のライブラリを呼び出すアプリケーションを一々作成する必要なく、ライブラリのデバッグを行うことのできる、デバッグ用コンピュータ、ライブラリのデバッグ方法、およびデバッグ用プログラムを提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明に係るデバッグ用コンピュータは、単体での実行が不可能なライブラリをデバッグするデバッグ用コンピュータであって、ライブラリのインターフェース内容が記述されたライブラリインターフェース情報ファイルと、ライブラリインターフェース情報ファイルを読み込むと共に、読み込まれたライブラリインターフェース情報ファイルをもとにテスト用アプリケーションソースを生成するテスト用アプリケーションソース生成部と、テスト用アプリケーションソースをコンパイルしてテスト用アプリケーションを生成するコンパイラと、コンパイラによって生成されたテスト用アプリケーションをデバッグするデバッガ本体とを有することを特徴とする。
【００１１】
上記目的を達成するため、本発明に係るライブラリのデバッグ方法は、デバッガおよびコンパイラを有するコンピュータで、単体での実行が不可能なライブラリをデバッグする方法であって、デバッガが、ライブラリのインターフェース内容が記述されたライブラリインターフェース情報ファイルを読み込むインターフェース情報読み込み工程と、デバッガが、ライブラリインターフェース情報ファイルをもとにテスト用アプリケーションソースを生成するアプリケーションソース生成工程と、コンパイラが、テスト用アプリケーションソースをコンパイルしてテスト用アプリケーションを生成するコンパイル工程と、デバッガが、テスト用アプリケーションソースをデバッグするデバッグ工程とを有することを特徴とする。
【００１２】
上記目的を達成するため、本発明に係るデバッグ用プログラムは、単体での実行が不可能なライブラリをデバッグするデバッグ用プログラムであって、コンパイラを有するコンピュータに、ライブラリのインターフェース内容が記述されたライブラリインターフェース情報ファイルを読み込む処理と、ライブラリインターフェース情報ファイルをもとにテスト用アプリケーションソースを生成する処理と、コンパイラを起動し、テスト用アプリケーションソースをコンパイルしてテスト用アプリケーションを生成させる処理と、テスト用アプリケーションソースをデバッグするデバッグ処理とを実行させることを特徴とする。
【発明の効果】
【００１３】
本発明は、上記したようにライブラリインターフェース情報ファイルからテスト用アプリケーションソースを生成するように構成したので、ライブラリを呼び出すアプリケーションを作成する手間を省略できる。これによって、ライブラリのデバッグを容易に行うことのできる、従来にない優れたデバッグ用コンピュータ、ライブラリのデバッグ方法、およびデバッグ用プログラムを提供することができる。
【発明を実施するための最良の形態】
【００１４】
図１は、本発明の実施の形態に係るデバッガ１の構成を示すブロック図である。デバッガ１は、開発環境が動作するコンピュータにおいて動作するデバッグ用プログラムである。コンピュータのハードウェア構成、および開発環境（プログラミング言語）については公知のものが使用できるので、説明を省略する。
【００１５】
デバッガ１は、ソフトウェアのデバッグを行うデバッガ本体１１と、デバッグ対象ライブラリ６のインターフェース内容を持つライブラリインターフェース情報２を入力し、テスト用アプリケーションソース３を出力するテスト用アプリケーションソース生成部１２と、テスト用アプリケーションソース３からテスト用アプリケーション５を生成するコンパイラ４を起動するコンパイラ起動部１３とから構成される。
【００１６】
ユーザがデバッガ１を開始して、同時にデバッグ対象ライブラリ６を指定する。これに対してデバッガ本体１１は、まずテスト用アプリケーションソース生成部１２を起動する。なお、ユーザはあらかじめ、デバッグ対象ライブラリ６のインターフェース内容を持つライブラリインターフェース情報２を準備しておく。
【００１７】
図２は、図１で開示されたライブラリインターフェース情報２の例を示す概念図である。ライブラリインターフェース情報２は、デバッグ対象ライブラリ６に含まれるメソッドもしくは関数などの、各々の引数および戻値などの属性が記述されている、テキストファイルである。なお、それらの属性を記述する書式は、特に制限されない。
【００１８】
図２に示す例では、デバッグ対象ライブラリ６には、Libというクラス名の中に、名称「MethodA」である第１のメソッド２１と、名称「MethodB」である第２のメソッド２２という２つのメソッドが定義されている。第１のメソッド２１（MethodA）は、整数型の引数に対して、整数型の戻値を返す。第２のメソッド２２（MethodB）は、整数型の第１引数および文字列型の第２引数に対して、文字列型の戻値を返す。
【００１９】
図３は、図２に示したライブラリインターフェース情報２をもとに生成されたテスト用アプリケーションソース３の例を示す概念図である。テスト用アプリケーションソース生成部１２は、このライブラリインターフェース情報２を読み込み、テスト用アプリケーションソース３を生成する。テスト用アプリケーションソース３は、定義３１とルーチン３２とで構成されている。
【００２０】
ライブラリインターフェース情報２に記述された通りの属性で、各々の引数および戻値などが定義３１において定義されている。第１のメソッド２１（MethodA）に対しては、整数型の引数param11と、整数型の戻値ret1とが定義される。および第２のメソッド２２（MethodB）に対しては、整数型の第１引数param21および文字列型の第２引数param22と、文字列型の戻値ret2とが定義される。ブーリアン型のフラグbEndおよび整数型の変数iSelectについては後述する。
【００２１】
そしてルーチン３２は、第１のメソッド２１（MethodA）に引数param11を代入して戻値ret1を得るステップ、および第２のメソッド２２（MethodB）に第１引数param21および第２引数param22を代入して戻値ret2を得る実行制御イメージを含むように生成されている。
【００２２】
テスト用アプリケーションソース３を手動で作成すると定義の間違いによるエラーが生じることがあるが、これをテスト用アプリケーションソース生成部１２によって生成することにより、そのようなエラーの発生要因を解消することができる。なお、図３に示したテスト用アプリケーションソース３はＣ＃言語で生成されている。
【００２３】
続いてデバッガ本体１１は、コンパイラ起動部１３を起動する。コンパイラ起動部１３は、テスト用アプリケーションソース３を入力ソースとして、コンパイラ４を起動し、テスト用アプリケーション５をコンパイルさせる。さらにデバッガ本体１１は、テスト用アプリケーション５を起動し、デバッグ対象ライブラリ６のデバッグを開始する。
【００２４】
その際デバッガ本体１１は、デバッグの最中に、テスト用アプリケーションソース３に定義されている変数に任意の数値を代入し、またソース上の任意の位置にブレークポイントを設け、該ブレークポイントにおける各々の変数の状態をチェックできる。図３の定義３１に含まれる、ブーリアン型のフラグbEnd、整数型の変数iSelect、および引数param11、param21、param22は、デバッガ本体１１が作業者に対して数値を代入もしくは選択させるようにすることができる。そして戻値ret1およびret2の値は、ブレークポイントにおいてチェックできる。
【００２５】
なおルーチン３２は、フラグbEndの値が偽であればデバッグを継続し、真であればデバッグを終了する。変数iSelect＝０であれば第１のメソッド２１（MethodA）に引数param11を代入して戻値ret1を表示し、iSelect＝１であれば第２のメソッド２２（MethodB）に第１引数param21および第２引数param22を代入して戻値ret2を表示する。iSelectがそれら以外の値である場合は、特に何もしない。これについての詳細は後述する。
【００２６】
図４は、図１で開示されたデバッガ本体１１がデバッグ対象ライブラリ６のデバッグを開始する際に実行する処理を書き表したフローチャートである。デバッグが開始されると（Ｓ１）、そのデバッグの対象が実行形式（アプリケーション）であるか否かを判断する（Ｓ２）。Ｓ２で実行形式であればＳ９に進み、通常のデバッグを開始する。Ｓ２で実行形式でない場合は、そのデバッグの対象がライブラリであるか否かをさらに判断する（Ｓ３）。Ｓ３でライブラリでない場合は、デバッグの対象が実行形式でもライブラリでもないので、デバッグの対象の指定が正しくないと考えられる。従って、エラーを返してデバッガ本体１１の処理は終了する（Ｓ１０）。
【００２７】
Ｓ３でデバッグの対象がライブラリである場合は、デバッガ本体１１は上で説明したようにライブラリインターフェース情報２を読み込み（Ｓ４）、テスト用アプリケーションソース３を生成し（Ｓ５）、コンパイラ４を起動してテスト用アプリケーション５をコンパイルさせ（Ｓ６）、コンパイルされたテスト用アプリケーション５を起動する（Ｓ７）。以上で、テスト用アプリケーション５に対してデバッガ本体１１は通常のデバッグを開始することができる（Ｓ８）。
【００２８】
以上で述べたように、従来はライブラリのデバッグおよびテストを行うたびに手動で行われてきたＳ４〜Ｓ７の各工程が、デバッガ本体１１によって行われていることがわかる。これによって、単純にテスト用アプリケーション生成にかかる手間が省けるだけでなく、従来この工程を手動で行うことによって生じていたヒューマンエラーの発生要因をなくすことができるので、エラーの原因解明と修正にかかる手間を省くことにも貢献する。
【００２９】
図５は、図３に示したテスト用アプリケーションソース３をコンパイルして生成されたテスト用アプリケーション５が実行する処理を書き表したフローチャートである。デバッグが開始されると（Ｓ２１）、デバッガ本体１１はユーザにデバッグを終了するか否かを選択させる（Ｓ２２）。選択された真または偽の値がそのままフラグbEndの値となり、その値が真であればＳ２６に進んでデバッグを終了し、偽であればＳ２３に進んでデバッグを継続する。
【００３０】
続いてデバッガ本体１１は、第１のメソッド２１（MethodA）および第２のメソッド２２（MethodB）のうちどちらを呼び出すかを、ユーザに数字で入力させる（Ｓ２３）。入力された数値がそのまま変数iSelectの値となり、変数iSelect＝０であれば第１のメソッド２１（MethodA）を、iSelect＝１であれば第２のメソッド２２（MethodB）をそれぞれ呼び出す。それら以外の値が入力された場合は、特に何もしないでＳ２２に戻る。
【００３１】
そしてデバッガ本体１１は、入力されたiSelectの値に応じて第１のメソッド２１（MethodA）もしくは第２のメソッド２２（MethodB）を呼び出す（Ｓ２４）。その際デバッガ本体１１は、第１のメソッド２１（MethodA）の場合は引数param11、第２のメソッド２２（MethodB）の場合は第１引数param21および第２引数param22に代入する値をユーザに入力させ、選択されたメソッドに入力された値を代入する。呼び出されたメソッドが終了したら（Ｓ２５）、Ｓ２２に戻り、以後は上記の手順でデバッグが繰り返される。
【００３２】
図３ではＣ＃で作成されたテスト用アプリケーションソース３の例を示したが、本実施の形態で、アプリケーションソースを作成する言語の種類および仕様については特に制限されない。また、図３では１つのライブラリに２つのメソッドを定義した例を示したが、本実施の形態において１つのライブラリに定義できるメソッドの数はそのような少数に限定されるものではない。数十もしくは数百、もしくはそれ以上の多数のメソッドが定義されたライブラリにおいても本実施の形態は容易に適用できる。
【００３３】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることは言うまでもないことである。
【産業上の利用可能性】
【００３４】
ソフトウェア開発におけるデバッグの工程に適用可能である。また、ソフトウェア開発の教育などの用途にも適用可能である。
【図面の簡単な説明】
【００３５】
【図１】本発明の実施の形態に係るデバッガの構成を示すブロック図である。
【図２】図１で開示されたライブラリインターフェース情報の例を示す概念図である。
【図３】図２に示したライブラリインターフェース情報をもとに生成されたテスト用アプリケーションソースの例を示す概念図である。
【図４】図１で開示されたデバッガ本体がデバッグ対象ライブラリのデバッグを開始する際に実行する処理を書き表したフローチャートである。
【図５】図３に示したテスト用アプリケーションソースをコンパイルして生成されたテスト用アプリケーションが実行する処理を書き表したフローチャートである。
【符号の説明】
【００３６】
１  デバッガ
２  ライブラリインターフェース情報
３  テスト用アプリケーションソース
４  コンパイラ
５  テスト用アプリケーション
６  デバッグ対象ライブラリ
１１  デバッガ本体
１２  テスト用アプリケーションソース生成部
１３  コンパイラ起動部
２１  第１のメソッド
２２  第２のメソッド
３１  定義
３２  ルーチン
【図１】
2009080691.tif 000003
【図２】
2009080691.tif 000004
【図３】
2009080691.tif 000005
【図４】
2009080691.tif 000006
【図５】
2009080691.tif 000007