(57)【特許請求の範囲】
【請求項１】
特定のプログラム及び前記特定のプログラムの実行を中断してデバッグを行うためのデバッガプログラムを記憶する記憶部と、
前記記憶部における前記特定のプログラム内の特定の領域に記憶された第１プログラムコードに対応するプログラム言語の指定を受け付けるインタフェース部と、
前記インタフェース部が前記プログラム言語の指定を受け付けると、前記プログラム言語に対応する前記第１プログラムコードと前記記憶部に記憶されたデータとを比較することにより、前記記憶部において、前記プログラム言語に対応する前記第１プログラムコードが格納されている領域を探索し、検出した領域を前記特定の領域として特定し、前記特定の領域に記憶された第１プログラムコードを前記デバッガプログラムを実行するための第２プログラムコードに置換する置換部と、
を有することを特徴とするデバッグ対象装置。
【請求項２】
前記置換部は、前記第１プログラムコードを前記第２プログラムコードに置換する前に、前記第１プログラムコードを前記記憶部の他の領域に記憶する、請求項１に記載のデバッグ対象装置。
【請求項３】
前記第２プログラムコードにより、前記デバッガプログラムが実行される前に、前記他の領域に記憶された前記第１プログラムコードに対応する処理が実行される、請求項２に記載のデバッグ対象装置。
【請求項４】
前記第２プログラムコードにより、前記デバッガプログラムの実行が終了した後に、前記他の領域に記憶された前記第１プログラムコードを前記特定の領域に書き戻す処理が実行される、請求項２または３に記載のデバッグ対象装置。
【請求項５】
前記インタフェース部は、前記特定の領域の復元指示をさらに受け付け、
前記インタフェース部が前記復元指示を受け付けると、前記他の領域に記憶された前記第１プログラムコードを前記特定の領域に書き戻す復元部をさらに有する、請求項２または３に記載のデバッグ対象装置。
【請求項６】
前記置換部は、前記第１プログラムコードを前記他の領域に記憶する際に、前記プログラム言語を前記第１プログラムコードと関連付けて記憶し、
前記インタフェース部を用いた前記復元指示において、前記プログラム言語が指定され、
前記復元部は、前記復元指示において指定されたプログラム言語に基づいて、書き戻す第１プログラムコードを特定する、請求項５に記載のデバッグ対象装置。
【請求項７】
前記置換部は、前記第１プログラムコードを前記他の領域に記憶する際に、前記特定の領域のアドレスを前記第１プログラムコードと関連付けて記憶し、
前記復元部は、前記特定の領域のアドレスに前記第１プログラムコードを書き戻す、請求項５または６に記載のデバッグ対象装置。
【請求項８】
特定のプログラム及び前記特定のプログラムの実行を中断してデバッグを行うためのデバッガプログラムを記憶する記憶部を有するデバッグ対象装置の制御方法であって、
前記記憶部における前記特定のプログラム内の特定の領域に記憶された第１プログラムコードに対応するプログラム言語の指定を受け付け、
前記プログラム言語の指定を受け付けると、前記プログラム言語に対応する前記第１プログラムコードと前記記憶部に記憶されたデータとを比較することにより、前記記憶部において、前記プログラム言語に対応する前記第１プログラムコードが格納されている領域を探索し、検出した領域を前記特定の領域として特定し、前記特定の領域に記憶された第１プログラムコードを前記デバッガプログラムを実行するための第２プログラムコードに置換する、
ことを含むことを特徴とする制御方法。
【請求項９】
特定のプログラム及び前記特定のプログラムの実行を中断してデバッグを行うためのデバッガプログラムを記憶する記憶部を有するデバッグ対象装置に実行させる制御プログラムであって、
前記記憶部における前記特定のプログラム内の特定の領域に記憶された第１プログラムコードに対応するプログラム言語の指定を受け付け、
前記プログラム言語の指定を受け付けると、前記プログラム言語に対応する前記第１プログラムコードと前記記憶部に記憶されたデータとを比較することにより、前記記憶部において、前記プログラム言語に対応する前記第１プログラムコードが格納されている領域を探索し、検出した領域を前記特定の領域として特定し、前記特定の領域に記憶された第１プログラムコードを前記デバッガプログラムを実行するための第２プログラムコードに置換する、
ことを前記デバッグ対象装置に実行させることを特徴とする制御プログラム。
【請求項１０】
特定のプログラム及び前記特定のプログラムの実行を中断してデバッグを行うためのデバッガプログラムを記憶する記憶部を有するデバッグ対象装置と、情報処理装置とを有するデバッグシステムであって、
前記情報処理装置は、
前記記憶部における前記特定のプログラム内の特定の領域に記憶された第１プログラムコードに対応するプログラム言語の指定を受け付ける操作部と、
前記プログラム言語を前記デバッグ対象装置に送信する第１インタフェース部と、を有し、
前記デバッグ対象装置は、
前記第１インタフェース部から前記プログラム言語を受信する第２インタフェース部と、
前記第２インタフェース部が前記プログラム言語を受信すると、前記プログラム言語に対応する前記第１プログラムコードと前記記憶部に記憶されたデータとを比較することにより、前記記憶部において、前記プログラム言語に対応する前記第１プログラムコードが格納されている領域を探索し、検出した領域を前記特定の領域として特定し、前記特定の領域に記憶された第１プログラムコードを前記デバッガプログラムを実行するための第２プログラムコードに置換する置換部と、
を有することを特徴とするデバッグシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグ対象装置、制御方法及び制御プログラムに関し、特に、特定のプログラムを実行するデバッグ対象装置、制御方法及び制御プログラムに関する。
【背景技術】
【０００２】
一般に、コンピュータ起動時に実行されるいわゆるブートファームウェアは、汎用的に利用可能なように処理を単純化する必要があるため、十分なデバッグ機能を有していない。なお、ブートファームウェアは、例えばＢＩＯＳ（Basic Input / Output System）、ＵＥＦＩ（Unified Extensible Firmware Interface）等である。したがって、製品開発時にブートファームウェアをデバッグする場合、又は、製品出荷後にブートファームウェアに問題が発生した場合、効率良く調査を行うことが困難であった。
【０００３】
例えばＪＴＡＧ（Joint Test Action Group）等の規格に従って接続される外部装置を利用することにより、ブートファームウェアのデバッグを十分に行うことができる。しかしながら、ＪＴＡＧを利用するためにはＪＴＡＧ用の特殊な外部インタフェースが実装されている必要があり、そのような外部インタフェースを実装していない装置ではＪＴＡＧを利用することはできない。
【０００４】
したがって、ブートファームウェアのデバッグを行えるように、シリアルインタフェース、ＬＡＮ（Local Area Network）等の汎用的なインタフェースを利用するデバッガプログラムをブートファームウェアに組み込んでおく手法が一般に利用されている。デバッガプログラムは、例えば問題が発生した時にブートファームウェアの実行を中断し、シリアルインタフェース、ＬＡＮ等を介してユーザに指定された機能（例えば、メモリ空間又はＩ／Ｏ空間への書込み又は読出し等）を実行するコンソール型デバッガである。しかしながら、問題が発生し得ると想定していた箇所以外で問題が発生した場合、デバッガプログラムは実行されない。この場合にデバッガプログラムを実行させるためには、問題が発生した箇所でデバッガプログラムを実行するようにブートファームウェアのソースコードを修正し、コンパイルし、更にコンピュータ上のメモリに書き込む必要がある。これらの手順には多大な時間及び労力を要するため、デバッグ効率が著しく低くなり、問題の原因究明及び解決までに要する時間が極めて大きくなっていた。
【０００５】
また、問題が発生した場合だけでなく、調査等のために、特定のデバイスの初期化処理が完了した直後にその特定のデバイスが有する各レジスタの値を取得する必要が生じた場合も、上記の手順が必要となり作業効率は著しく低くなっていた。
【０００６】
外部にある更新データファイルを参照し、所定のプログラムの内容を更新する処理装置が開示されている。この処理装置は、更新対象の格納場所と現在格納されている現データとを更新データファイルより読出して現データ格納部へ格納し、更新対象の格納場所と新たに格納されるべき更新データとを更新データファイルより読出して更新データ格納部へ格納する。そして、処理装置は、指定部から更新が指定された時、現データ格納部中の格納場所にアクセスし、更新データ格納部にある更新データを該格納場所へ格納する（特許文献１を参照）。
【０００７】
また、すでに作られた機械語形態のプログラムの一部に追加する機械語命令が入力されると、入力された機械語命令をその機械語形態のプログラムの最後に付加する機械語命令追加方式が開示されている。この機械語命令追加方式では、追加前プログラムの命令Ａと命令Ｅとの間に追加命令Ｃを追加する場合、まず命令Ａの領域に機械語形態のプログラムの最後に実行順序を変更する命令Ｂを埋め込む。さらに、機械語形態のプログラムの最後に命令Ａを置き、この後に命令Ｃを置き、さらに、命令Ｅに実行順序を戻す命令Ｄを置く（特許文献２を参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開昭５７−１１１７４０号公報
【特許文献２】特開昭６２−２５１９２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
デバッグ対象装置において、特定のプログラム内の特定の領域でその特定のプログラムの実行を中断し、記憶部に予め記憶されているデバッガプログラムを実行することを簡易に実施できることが望まれている。
【００１０】
本発明の目的は、特定のプログラム内の特定の領域でその特定のプログラムの実行を中断し、記憶部に予め記憶されているデバッガプログラムを実行することを簡易に実施することが可能なデバッグ対象装置、制御方法及び制御プログラムを提供することにある。
【課題を解決するための手段】
【００１１】
本発明に係るデバッグ対象装置は、特定のプログラム及び特定のプログラムの実行を中断してデバッグを行うためのデバッガプログラムを記憶する記憶部と、記憶部における特定のプログラム内の特定の領域に関する領域情報の指定を受け付けるインタフェース部と、インタフェース部が領域情報の指定を受け付けると、特定の領域に記憶された第１プログラムコードをデバッガプログラムを実行するための第２プログラムコードに置換する置換部と、を有する。
【００１２】
また、本発明に係る制御方法は、特定のプログラム及び特定のプログラムの実行を中断してデバッグを行うためのデバッガプログラムを記憶する記憶部を有するデバッグ対象装置の制御方法であって、記憶部における特定のプログラム内の特定の領域に関する領域情報の指定を受け付け、領域情報の指定を受け付けると、特定の領域に記憶された第１プログラムコードをデバッガプログラムを実行するための第２プログラムコードに置換することを含む。
【００１３】
また、本発明に係る制御プログラムは、特定のプログラム及び特定のプログラムの実行を中断してデバッグを行うためのデバッガプログラムを記憶する記憶部を有するデバッグ対象装置に実行させる制御プログラムであって、記憶部における特定のプログラム内の特定の領域に関する領域情報の指定を受け付け、領域情報の指定を受け付けると、特定の領域に記憶された第１プログラムコードをデバッガプログラムを実行するための第２プログラムコードに置換する、ことをデバッグ対象装置に実行させる。
【００１４】
また、本発明に係るデバッグシステムは、特定のプログラム及び特定のプログラムの実行を中断してデバッグを行うためのデバッガプログラムを記憶する記憶部を有するデバッグ対象装置と、情報処理装置とを有するデバッグシステムであって、情報処理装置は、記憶部における特定のプログラム内の特定の領域に関する領域情報の指定を受け付ける操作部と、領域情報をデバッグ対象装置に送信する第１インタフェース部と、を有し、デバッグ対象装置は、第１インタフェース部から領域情報を受信する第２インタフェース部と、第２インタフェース部が領域情報を受信すると、特定の領域に記憶された第１プログラムコードをデバッガプログラムを実行するための第２プログラムコードに置換する置換部と、を有する。
【発明の効果】
【００１５】
本発明によれば、特定の領域の指定を受け付けると、特定の領域に記憶されたプログラムコードを、記憶部に記憶された、特定のプログラムの実行を中断してデバッグを行うためのデバッガプログラムを実行するための第２プログラムコードに置換する。したがって、特定のプログラム内の特定の領域でその特定のプログラムの実行を中断し、記憶部に予め記憶されているデバッガプログラムを実行することを簡易に実施することが可能なデバッグ対象装置、制御方法及び制御プログラムを提供することができる。
【図面の簡単な説明】
【００１６】
【図１】実施形態に従ったデバッグシステム１の概略構成を示す図である。
【図２】ＣＰＵ１３０の概略構成を示す図である。
【図３】プログラム変更処理の動作の一例を示すフローチャートである。
【図４】置換処理の動作の例を示すフローチャートである。
【図５】置換管理テーブルのデータ構造の一例を示す図である。
【図６】復元処理の動作の例を示すフローチャートである。
【図７】置換プログラムのデータ構造の一例を示す図である。
【図８】置換プログラムに従った処理の動作の一例を示すフローチャートである。
【図９】他の実施形態に従ったデバッグシステム２の概略構成を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明に係るデバッグ対象装置、制御方法及び制御プログラムについて図を参照しつつ説明する。但し、本発明の技術的範囲はそれらの実施の形態に限定されず、特許請求の範囲に記載された発明とその均等物に及ぶ点に留意されたい。
【００１８】
図１は、実施形態に従ったデバッグシステム１の概略構成を示す図である。
【００１９】
図１に示すように、デバッグシステム１は、デバッグ対象装置１００と、入力装置２００と、出力装置２１０とを有する。
【００２０】
入力装置２００は、キーボード、マウス等の入力デバイスであり、ユーザの操作に応じた信号をデバッグ対象装置１００に対して出力する。
【００２１】
出力装置２１０は、液晶、有機ＥＬ（Electro-Luminescence）等から構成されるディスプレイであり、デバッグ対象装置１００から出力された画像データを表示する。
【００２２】
デバッグ対象装置１００は、デバッグされる装置であり、任意の組み込みシステムを有する。デバッグ対象装置１００は、インタフェース部１１０と、記憶装置１２０と、ＣＰＵ（Central Processing Unit）１３０とを有する。以下、デバッグ対象装置１００の各部について詳細に説明する。
【００２３】
インタフェース部１１０は、入力インタフェース１１１と、出力インタフェース１１２とを有する。
【００２４】
入力インタフェース１１１は、入力装置２００から信号を取得するインタフェース回路を有し、入力装置２００から取得した信号をＣＰＵ１３０に対して出力する。
【００２５】
出力インタフェース１１２は、出力装置２１０に対して画像データを出力するインタフェース回路を有し、ＣＰＵ１３０から出力された画像データを出力装置２１０に対して出力する。
【００２６】
記憶装置１２０は、ＲＯＭ（Read Only Memory）１２１と、ＲＡＭ（Random Access Memory）１２２とを有する。なお、記憶装置１２０は、ＲＯＭ１２１及びＲＡＭ１２２の代わりに、又は、ＲＯＭ１２１及びＲＡＭ１２２に加えて、ハードディスク等の固定ディスク装置、又はフレキシブルディスク、光ディスク等の可搬用の記憶装置等を有してもよい。
【００２７】
ＲＯＭ１２１には、デバッグ対象装置１００の各種処理に用いられるコンピュータプログラム、データベース、テーブル等が格納される。コンピュータプログラムには、コンピュータ起動時に実行されるいわゆるブートファームウェア及びブートファームウェアの実行を中断してデバッグを行うためのデバッガプログラム、デバッガプログラムを実行するための置換プログラム等が含まれる。コンピュータプログラムは、コンピュータ読み取り可能な可搬型記録媒体からインストールされてもよい。可搬型記録媒体は、例えばＣＤ−ＲＯＭ（compact disk read only memory）、ＤＶＤ−ＲＯＭ（digital versatile disk read only memory）等である。コンピュータプログラムは、公知のセットアッププログラム等を用いてＲＯＭ１２１にインストールされる。さらに、ＲＯＭ１２１には、デバッガプログラムが格納されたアドレス、置換プログラムが格納されたアドレス等が記憶される。
【００２８】
ＲＡＭ１２２には、デバッグ対象装置１００が起動した後、所定のタイミングで、ＲＯＭ１２１に記憶されたコンピュータプログラムの内の一部がロードされる。さらに、ＲＡＭ１２２には、置換管理テーブルが記憶される。置換管理テーブルの詳細については後述する。
【００２９】
ＣＰＵ１３０は、インタフェース部１１０及び記憶装置１２０と接続され、これらの各部を制御する。ＣＰＵ１３０は、インタフェース部１１０の入出力制御、記憶装置１２０の制御等を行う。
【００３０】
図２は、ＣＰＵ１３０の概略構成を示す図である。図２に示すように、ＣＰＵ１３０は、置換部１３１及び復元部１３５等を有する。置換部１３１は、検索部１３２、テーブル変更部１３３及びプログラム変更部１３４等を有する。これらの各部は、プロセッサ上で動作するソフトウェアにより実装される機能モジュールである。なお、これらの各部は、それぞれ独立した集積回路、マイクロプロセッサ、ファームウェア等で構成されてもよい。
【００３１】
図３は、デバッグ対象装置１００によるプログラム変更処理の動作の一例を示すフローチャートである。以下、図３に示したフローチャートを参照しつつ、プログラム変更処理の動作を説明する。なお、以下に説明する動作のフローは、予め記憶装置１２０に記憶されているプログラムに基づき主にＣＰＵ１３０によりデバッグ対象装置１００の各要素と協働して実行される。
【００３２】
なお、デバッグ対象装置１００の起動直後、ＣＰＵ１３０は、ＲＯＭ１２１に記憶されたプログラムの内のブートファームウェアを読み出して実行する。そして、ＣＰＵ１３０は、ＲＯＭ１２１に記憶されたブートファームウェアに従って、ＲＯＭ１２１に記憶されたコンピュータプログラムの内の一部（ブートファームウェアを含む）をＲＡＭ１２２にロードする。以後、ＣＰＵ１３０は、ＲＡＭ１２２にロードしたプログラムを読み出して実行する。図３のフローチャートは、少なくともインタフェース部１１０の初期化処理が完了し、インタフェース部１１０を介して入力装置２００及び出力装置２１０を使用可能になってから実行される。また、図３のフローチャートは、例えばＲＡＭ１２２にロードされたブートファームウェアによる処理の実行中に、ユーザにより入力装置２００を用いてプログラム書換え機能の実行開始を指示する入力操作が行われた場合に実行される。
【００３３】
最初に、ＣＰＵ１３０は、ユーザによるコマンドを入力するための所定のプロンプトを出力インタフェース１１２を介して出力装置２１０に表示する（ステップＳ１０１）。
【００３４】
次に、ＣＰＵ１３０は、ユーザにより入力装置２００を用いてコマンドが入力され、入力インタフェース１１１が、入力されたコマンドを受け付けるまで待機する（ステップＳ１０２）。
【００３５】
次に、ＣＰＵ１３０は、入力インタフェース１１１がコマンドを受け付けると、受け付けたコマンドが、ＲＡＭ１２２におけるブートファームウェア内の特定の領域の置換指示であるか否かを判定する（ステップＳ１０３）。
【００３６】
置換指示には、特定の領域に関する領域情報が含まれる。領域情報は、その特定の領域のアドレス、その特定の領域に記憶されたプログラムコード、又はそのプログラムコードに対応するプログラム言語等である。なお、プログラムコードとはプログラム言語をコンパイルした機械語を意味する。置換指示は、例えば”add xxxxxxxx”と指定される。この置換指示のうち、”add”が特定の領域の置換を指示するコマンドであり、”xxxxxxxx”が領域情報である。
【００３７】
後述するように、置換指示を受け付けると、置換部１３１は、領域情報により指定された特定の領域に記憶されたプログラムコードをデバッガプログラムを実行するためのプログラムコードに置換する。例えば、ブートファームウェアに含まれる自己診断プログラムがＩ／Ｏ空間の８０番地にデータ６０を出力した時に、特定のメモリ空間又はＩ／Ｏ空間を確認するためにデバッガプログラムを実行したい場合、領域情報は”out 80 60”と指定することができる。
【００３８】
受け付けたコマンドが置換指示である場合、置換部１３１は、置換処理を実行し（ステップＳ１０４）、処理をステップＳ１０１に戻す。置換部１３１は、置換処理において、ブートファームウェア内の特定の領域に記憶されたプログラムコードをデバッガプログラムを実行するためのプログラムコードに置換する。置換処理の詳細については後述する。
【００３９】
一方、受け付けたコマンドが置換指示でなかった場合、ＣＰＵ１３０は、受け付けたコマンドが、ＲＡＭ１２２におけるブートファームウェア内の特定の領域の復元指示であるか否かを判定する（ステップＳ１０５）。復元指示には、置換指示において指定された領域情報が含まれる。例えば、復元指示は、”del xxxxxxxx”と指定される。この復元指示のうち、”del”が特定の領域の復元を指示するコマンドであり、”xxxxxxxx”が領域情報である。
【００４０】
受け付けたコマンドが復元指示である場合、復元部１３５は、復元処理を実行し（ステップＳ１０６）、処理をステップＳ１０１に戻す。復元部１３５は、復元処理において、デバッガプログラムを実行するためのプログラムコードに置換され、他の領域に記憶されていたプログラムコードを特定の領域に書き戻す。復元処理の詳細については後述する。
【００４１】
一方、受け付けたコマンドが復元指示でなかった場合、ＣＰＵ１３０は、受け付けたコマンドが終了指示であるか否かを判定する（ステップＳ１０７）。受け付けたコマンドが終了指示でない場合、ＣＰＵ１３０は、処理をステップＳ１０１に戻し、ステップＳ１０１〜Ｓ１０７の処理を繰り返す。一方、受け付けたコマンドが終了指示であった場合、ＣＰＵ１３０は、一連のステップを終了する。
【００４２】
図４は、置換処理の動作の例を示すフローチャートである。図４に示す動作のフローは、図３に示すフローチャートのステップＳ１０４において実行される。
【００４３】
最初に、検索部１３２は、置換指示に含まれる領域情報が示す特定の領域を特定する（ステップＳ２０１）。
【００４４】
検索部１３２は、領域情報が特定の領域のアドレスである場合、そのアドレスが示す領域を特定の領域として特定する。
【００４５】
一方、検索部１３２は、領域情報が特定の領域に記憶されたプログラムコードである場合、ＲＡＭ１２２においてそのプログラムコードを探索し、そのプログラムコードを検出した領域を特定の領域として特定する。
【００４６】
一方、検索部１３２は、領域情報が特定の領域に記憶されたプログラムコードに対応するプログラム言語である場合、そのプログラム言語をコンパイルしてそのプログラム言語に対応するプログラムコードに変換する。そして、検索部１３２は、ＲＡＭ１２２において、変換したプログラムコードを探索することにより、特定の領域を特定する。なお、プログラム言語とプログラムコードの変換テーブルを予め記憶しておき、検索部１３２は、変換テーブルを用いてプログラム言語をプログラムコードに変換してもよい。また、検索部１３２は、ＲＡＭ１２２に記憶された各プログラムコードを順次逆アセンブル又は逆コンパイルしていき、領域情報が示すプログラム言語に相当するプログラム言語に変換された領域を特定の領域としてもよい。
【００４７】
なお、置換部１３１は、ＲＡＭ１２２において特定の領域が検出されなかった場合、その旨を出力インタフェース１１２を介して出力装置２１０に表示し、置換処理を終了する。
【００４８】
次に、テーブル変更部１３３は、ＲＡＭ１２２に記憶された置換管理テーブルを更新する（ステップＳ２０２）。
【００４９】
図５は、置換管理テーブルのデータ構造の一例を示す図である。図５に示すように、置換管理テーブルには、置換される特定の領域のアドレスと、置換されるプログラムコード（群）と、置換指示に含まれる領域情報とが関連付けて記憶される。
【００５０】
テーブル変更部１３３は、特定の領域のアドレスと、特定の領域に記憶されたプログラムコードと、置換指示に含まれる領域情報とを関連付けて置換管理テーブルに記憶する。これにより、テーブル変更部１３３は、特定の領域に記憶されたプログラムコードをデバッガプログラムを実行するためのプログラムコードに置換する前に、ＲＡＭ１２２の他の領域に記憶する。
【００５１】
次に、プログラム変更部１３４は、特定の領域に記憶されたプログラムコードをデバッガプログラムを実行するためのプログラムコードに置換し（ステップＳ２０３）、一連のステップを終了する。
【００５２】
例えば、デバッガプログラムを実行するためのプログラムコードは、デバッガプログラムを実行するための置換プログラムを実行する命令（ｃａｌｌ命令又はｊｍｐ命令）である。プログラム変更部１３４は、ＲＯＭ１２１に記憶された置換プログラムの格納アドレスから置換プログラムがロードされるＲＡＭ１２２のアドレスを特定し、特定したアドレスに格納されている置換プログラムを実行する命令をその特定の領域に書き込む。なお、置換対象である特定の領域に記憶されたプログラムコードが、デバッガプログラムを実行するためのプログラムコードより大きい場合、プログラム変更部１３４は、余った領域にＮＯＰ命令を書き込む。置換プログラムの詳細については後述する。
【００５３】
図６は、復元処理の動作の例を示すフローチャートである。図６に示す動作のフローは、図３に示すフローチャートのステップＳ１０６において実行される。
【００５４】
最初に、復元部１３５は、復元指示において指定された領域情報に基づいて、書き戻すプログラムコード及びアドレスを特定する（ステップＳ３０１）。
【００５５】
復元部１３５は、置換管理テーブルにおいて、復元指示で指定された領域情報を探索し、検出した領域情報と関連付けて記憶されたプログラムコード及びアドレスを、書き戻すプログラムコード及びアドレスとして特定する。なお、復元部１３５は、復元指示で指定された領域情報を検出しなかった場合、その旨を出力インタフェース１１２を介して出力装置２１０に表示し、復元処理を終了する。
【００５６】
次に、復元部１３５は、特定したアドレスに、特定したプログラムコードを書き戻す（ステップＳ３０２）。
【００５７】
次に、復元部１３５は、置換管理テーブルから、復元指示で指定された領域情報、その領域情報と関連付けて記憶されたプログラムコード及びアドレスを削除し（ステップＳ３０３）、一連のステップを終了する。
【００５８】
このように、ユーザは置換指示で指定した領域情報を用いて、復元する領域を指定することができる。ユーザにとって、置換指示で自ら指定していた情報は記憶しておきやすく、これにより、ユーザの利便性を向上させることが可能となる。
【００５９】
また、デバッグ対象装置１００は、ユーザからの置換管理テーブルの表示指示に従って、置換管理テーブルに記憶された各情報を出力装置２１０に表示してもよい。その場合、領域情報をプログラム言語としておくことにより、ユーザは、表示されたプログラム言語の一覧から、復元すべき領域を容易に特定することができる。これにより、ユーザは、復元すべき領域のアドレス、又は復元すべき命令に対応するプログラムコードを認識する必要がなくなる。したがって、領域情報をプログラム言語とすることにより、復元する領域を領域情報を用いずに特定する場合、又は領域情報がアドレスもしくはプログラムコードである場合と比較して、ユーザの利便性を向上させることが可能となる。
【００６０】
また、置換管理テーブルに領域情報を記憶しておくことにより、復元部１３５は、領域情報としてプログラム言語が指定された場合に、プログラム言語のコンパイル、又はプログラムコードの逆アセンブルもしくは逆コンパイルを行うことなく、対応する領域を特定することができる。したがって、復元部１３５は、指定されたプログラム言語に対応する領域を短時間に特定することができ、処理の高速化が可能となる。
【００６１】
図７は、置換プログラムのデータ構造の一例を示す図である。図７に示すように、置換プログラム１４０には、アドレス取得プログラム１４１と、元プログラム実行プログラム１４２と、デバッガプログラム実行プログラム１４３とが含まれる。
【００６２】
アドレス取得プログラム１４１は、現在のインストラクションポインタ（プログラムカウンタ）を取得し、呼出し元のアドレス、即ち置換された特定の領域のアドレスを特定するプログラムである。インストラクションポインタは、例えば、置換プログラム１４０が呼び出されたときのコールスタックから取得することができる。なお、インストラクションポインタのサイズはＣＰＵが扱うビット数に応じて異なり、１６ｂｉｔ、３２ｂｉｔ、６４ｂｉｔ等、何れのサイズでもよい。
【００６３】
元プログラム実行プログラム１４２は、置換管理テーブルにおいて、アドレス取得プログラム１４１が特定したアドレスを探索し、検出したアドレスと関連付けて記憶されたプログラムコードを読み出して実行するプログラムである。
【００６４】
デバッガプログラム実行プログラム１４３は、ＲＯＭ１２１に記憶されたデバッガプログラムの格納アドレスからデバッガプログラムがロードされるＲＡＭ１２２のアドレスを特定し、特定したアドレスに格納されているデバッガプログラムを実行するプログラムである。
【００６５】
図８は、デバッグ対象装置１００による置換プログラム１４０に従った処理の動作の一例を示すフローチャートである。以下、図８に示したフローチャートを参照しつつ、置換プログラム１４０に従った処理の動作を説明する。なお、以下に説明する動作のフローは、予め記憶装置１２０に記憶されているプログラムに基づき主にＣＰＵ１３０によりデバッグ対象装置１００の各要素と協働して実行される。
【００６６】
なお、図８のフローチャートは、図４のステップＳ２０３で置換されたプログラムコードにより置換プログラム１４０が実行されたときに実行される。
【００６７】
最初に、ＣＰＵ１３０は、アドレス取得プログラム１４１に従って、現在のインストラクションポインタを取得し、呼出し元のアドレス、即ち置換された特定の領域のアドレスを特定する（ステップＳ４０１）。
【００６８】
次に、ＣＰＵ１３０は、元プログラム実行プログラム１４２に従って、置換管理テーブルにおいて、アドレス取得プログラム１４１が特定したアドレスを探索する（ステップＳ４０２）。
【００６９】
次に、ＣＰＵ１３０は、元プログラム実行プログラム１４２に従って、置換管理テーブルにおいて、検出したアドレスと関連付けて記憶されたプログラムコードを読み出して実行する（ステップＳ４０３）。
【００７０】
次に、ＣＰＵ１３０は、デバッガプログラム実行プログラム１４３に従って、ＲＯＭ１２１に記憶されたデバッガプログラムの格納アドレスからデバッガプログラムがロードされるＲＡＭ１２２のアドレスを特定する。そして、ＣＰＵ１３０は、特定したアドレスに格納されているデバッガプログラムを実行し（ステップＳ４０４）、一連のステップを終了する。
【００７１】
このように、デバッガプログラムを実行するためのプログラムコードにより、デバッガプログラムが実行される前に、置換管理テーブルに記憶された元のプログラムコードに対応する処理が実行される。これにより、デバッグ対象装置１００は、ユーザが指定した特定のアドレスにおけるプログラムを実行した直後に、デバッガプログラムを実行することができる。
【００７２】
なお、デバッガプログラムを実行するためのプログラムコードにより、デバッガプログラムの実行が終了した後に、置換管理テーブルに記憶された元のプログラムコードを、置換された元の領域に書き戻す処理が実行されてもよい。その場合、置換プログラム１４０に、置換された元の領域に、元のプログラムコードを書き戻す復元プログラムをさらに含ませておく。ＣＰＵ１３０は、ステップＳ４０４においてデバッガプログラムを実行し、デバッガプログラムの実行が終了した後、復元プログラムに従って、ステップＳ４０２で検出したアドレスにそのアドレスと関連付けて記憶されたプログラムコードを書き戻す。さらに、ＣＰＵ１３０は、置換管理テーブルから、そのアドレス、そのプログラムコード及びそのアドレスと関連付けて記憶された領域情報を削除する。これにより、デバッグ対象装置１００は、ユーザがデバッグを完了した直後に、プログラムを元の状態に自動的に復元させることができ、ユーザの利便性を向上させることができる。
【００７３】
以上詳述したように、図３、４、６、８に示したフローチャートに従って動作することによって、デバッグ対象装置１００は、特定のプログラムの実行を特定の領域で中断し、デバッガプログラムを実行することを簡易に実施することが可能となった。したがって、ユーザは、特定の箇所でデバッガプログラムを実行したい場合に、ブートファームウェアのソースコードを修正し、コンパイルし、メモリに書き込む必要がなくなり、デバッグ効率を向上させ、開発期間を短縮させることが可能となった。
【００７４】
図９は、他の実施形態に従ったデバッグシステム２の概略構成を示す図である。図９に示すデバッグシステム２と、図１に示すデバッグシステム１との差異は、デバッグシステム２が、デバッグ対象装置１００の代わりにデバッグ対象装置３００を有し、入力装置２００及び出力装置２１０の代わりに情報処理装置４００を有する点である。
【００７５】
デバッグ対象装置３００は、デバッグ対象装置１００が有する各部を有する。但し、デバッグ対象装置３００は、インタフェース部１１０の代わりにインタフェース部３１０を有する。インタフェース部３１０は通信インタフェース３１１を有する。
【００７６】
通信インタフェース３１１は、ＲＳ（Recommended Standard）−２３２Ｃ等のシリアル通信インタフェース規格に従って、通信ケーブルを介して情報処理装置４００と信号の送受信を行うためのインタフェース回路を有する。なお、通信インタフェース３１１は、ＵＳＢ（Universal Serial Bus）等のシリアルバス規格に従って、通信ケーブルを介して情報処理装置４００と信号の送受信を行うためのインタフェース回路を有してもよい。また、通信インタフェース３１１は、イーサネット（登録商標）等の通信規格に従って、有線ＬＡＮ等の有線通信ネットワークを介して情報処理装置４００と信号の送受信を行うためのインタフェース回路を有してもよい。通信インタフェース３１１は、情報処理装置４００と接続して各種の情報を送受信する。
【００７７】
情報処理装置４００は、操作装置４１０と、表示装置４２０と、通信装置４３０と、第２記憶装置４４０と、第２ＣＰＵ４５０とを有する。以下、情報処理装置４００の各部について詳細に説明する。
【００７８】
操作装置４１０は、操作部の一例であり、タッチパネル式の入力装置、マウス、キーボード等の入力デバイス及び入力デバイスから信号を取得するインタフェース回路を有し、ユーザの操作に応じた信号を第２ＣＰＵ４５０に対して出力する。
【００７９】
表示装置４２０は、液晶、有機ＥＬ等から構成されるディスプレイ及びディスプレイに画像データ又は各種の情報を出力するインタフェース回路を有する。表示装置４２０は、第２ＣＰＵ４５０と接続されて、第２ＣＰＵ４５０から出力された画像データをディスプレイに表示する。
【００８０】
通信装置４３０は、情報処理装置４００が有するインタフェース部の一例であり、デバッグ対象装置３００の通信インタフェース３１１と同様のインタフェース回路を有し、情報処理装置４００とデバッグ対象装置３００とを接続する。
【００８１】
第２記憶装置４４０は、ＲＡＭ、ＲＯＭ等のメモリ装置、ハードディスク等の固定ディスク装置、又はフレキシブルディスク、光ディスク等の可搬用の記憶装置等を有する。第２記憶装置４４０には、情報処理装置４００の各種処理に用いられるコンピュータプログラム、データベース、テーブル等が格納される。コンピュータプログラムは、例えばＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等のコンピュータ読み取り可能な可搬型記録媒体から、公知のセットアッププログラム等を用いて第２記憶装置４４０にインストールされてもよい。
【００８２】
第２ＣＰＵ４５０は、操作装置４１０、表示装置４２０、通信装置４３０及び第２記憶装置４４０と接続され、これらの各部を制御する。第２ＣＰＵ４５０は、操作装置４１０の入力制御、表示装置４２０の表示制御、通信装置４３０を介したデバッグ対象装置３００とのデータ送受信制御、第２記憶装置４４０の制御等を行う。
【００８３】
図９に示すデバッグシステム２では、前述した図３、４、６及び８に示す処理とほぼ同様の処理を実行することができる。図４、６及び８に示す各処理の動作は、デバッグシステム１によって実行される場合と同様である。以下、デバッグシステム２において、図３のフローチャートに示される各処理がどのように適応されるかを説明する。デバッグシステム２では、図３の各処理は、予め記憶装置１２０に記憶されているプログラムに基づき主にＣＰＵ１３０によりデバッグ対象装置３００の各要素と協働して実行される。さらに、図３の各処理は、予め第２記憶装置４４０に記憶されているプログラムに基づき主に第２ＣＰＵ４５０により情報処理装置４００の各要素と協働して実行される。
【００８４】
デバッグシステム２において、図３のフローチャートは、ユーザにより情報処理装置４００の操作装置４１０を用いてプログラム書換え機能の実行開始を指示する入力操作が行われた場合に実行される。この入力操作は、情報処理装置４００の通信装置４３０及びデバッグ対象装置３００の通信インタフェース３１１を介してＣＰＵ１３０に通知される。
【００８５】
図３のステップＳ１０１において、ＣＰＵ１３０は、ユーザによるコマンドを入力するための所定のプロンプトを通信インタフェース３１１及び通信装置４３０を介して第２ＣＰＵ４５０に通知する。第２ＣＰＵ４５０は、通知された所定のプロンプトを表示装置４２０に表示する。
【００８６】
図３のステップＳ１０２において、ＣＰＵ１３０は、ユーザにより操作装置４１０を用いてコマンドが入力され、通信装置４３０を介して通信インタフェース３１１が入力されたコマンドを受け付けるまで待機する。
【００８７】
すなわち、デバッグシステム２では、操作装置４１０が置換指示、復元指示、終了指示及び各指示に含まれる領域情報の指定等を受け付け、通信装置４３０が、操作装置４１０が受け付けた各情報をデバッグ対象装置３００に送信する。また、通信インタフェース３１１が、通信装置４３０から各情報を受信し、ＣＰＵ１３０は、通信インタフェース３１１が各情報を受信すると、置換処理、復元処理又は終了指示を実行する。
【００８８】
このように、情報処理装置４００を用いてユーザの指示を受け付ける場合も、入力装置２００を用いてユーザの指示を受け付ける場合と同様の効果を得ることができる。
【００８９】
以上、本発明の好適な実施形態について説明してきたが、本発明はこれらの実施形態に限定されるものではない。例えば、置換部１３１は、ＲＡＭ１２２にロードされたプログラムコードでなく、ＲＯＭ１２１に格納されたプログラムコードをデバッガプログラムを実行するためのプログラムコードに置換してもよい。その場合、検索部１３２は、ＲＯＭ１２１において、置換するプログラムコードを探索し、特定の領域を特定する。また、置換管理テーブルは、ＲＯＭ１２１に記憶しておき、テーブル変更部１３３は、ＲＯＭ１２１に記憶された置換管理テーブルを更新する。そして、プログラム変更部１３４は、ＲＯＭ１２１に記憶されたプログラムコードをデバッガプログラムを実行するためのプログラムコードに置換する。同様に、復元部１３５は、ＲＯＭ１２１において置換されたプログラムコードを復元する。
【００９０】
なお、ＲＯＭ１２１において置換されたプログラムコードは、その後ＲＡＭ１２２にロードされず、デバッグ対象装置１００の再起動後にＲＡＭ１２２にロードされる。したがって、図８のフローチャートは、デバッグ対象装置１００の再起動後に実行される。この場合、デバッグ対象装置１００の電源が切断された後も変更した状態が保持されるため、ユーザは、デバッグ中にデバッグ対象装置１００の電源の再起動が必要になった場合でも、再度プログラムを置換する必要がなくなる。
【００９１】
また、本実施形態では、ブートファームウェア内の特定の領域でプログラムの実行を中断し、記憶部に予め記憶されているデバッガプログラムを実行する例について説明した。しかしながら、実行するプログラム、即ち置換するプログラムは、デバッガプログラムに限定されず、デバッグ以外の処理を実行するプログラムでもよい。また、中断されてデバッグが行われるプログラム、即ち置換されるプログラムは、ブートファームウェアに限定されず、どのようなプログラムでもよい。
【符号の説明】
【００９２】
１、２    デバッグシステム
１００、３００    デバッグ対象装置
４００    情報処理装置
１１０、３１０    インタフェース部
１２０    記憶装置
１３１    置換部
１３５    復元部
４１０    操作装置
４３０    通信装置
【図１】
0005893063.tif 000002
【図２】
0005893063.tif 000003
【図３】
0005893063.tif 000004
【図４】
0005893063.tif 000005
【図５】
0005893063.tif 000006
【図６】
0005893063.tif 000007
【図７】
0005893063.tif 000008
【図８】
0005893063.tif 000009
【図９】
0005893063.tif 000010