(57)【要約】【課題】本発明は、複数のデバッグモードでデバッグ可能な、デバッグ方法とその装置を提供する。【解決手段】モニタ管理プログラムで、複数のデバッグモードのモニタプログラムを管理する。ユーザが任意の時点で、システムデバッグ、および、タスクデバッグなどのデバッグモードを切替え、デバッグモード切替え時に、システムデバッグ用のモニタプログラムとタスクレベルデバッグ用のモニタプログラムなどの各デバッグモード用モニタプログラムを動的に切替える。また、各デバッグモードのブレークポイントの情報を保持しておき、デバッグモード切替え時には、各モードのブレークポイントを再設定する。【選択図】図７
2006079261.tif 000002
【特許請求の範囲】
【請求項１】
デバッガとターゲットシステムを接続して、前記デバッガからターゲットシステム内のプログラムをデバッグするデバッグ方法であって、
前記ターゲットシステムは、デバッグ対象プログラムと、少なくとも２つのモニタプログラムと、モニタ管理プログラムとを含み、
前記モニタ管理プログラムは、
前記デバッガからデバッグモードを切り替えるデバッグコマンドを受信したときに、前記少なくとも２つのモニタプログラムのいずれか１つを選択してデバッグモードを切り替えるステップを含むことを特徴とするデバッグ方法。
【請求項２】
前記モニタ管理プログラムは、前記デバッグモードを切り替えるときに、前記デバッグ対象プログラムが停止している場合、
前記デバッグモードの切り替え前の前記モニタプログラムを起動して前記デバッグ対象プログラムを再開させるステップを含むことを特徴とする請求項１記載のデバッグ方法。
【請求項３】
前記デバッガは、
各々のデバッグモードのブレークポイント情報を管理するブレークポイント管理情報を保持し、
前記デバッグモードの切り替え前の前記デバッグモードのブレークポイントを解除するステップと、
前記デバッグモードの切り替え後の前記デバッグモードのブレークポイントを設定するステップとを含むことを特徴とする請求項１または請求項２いずれかに記載のデバッグ方法。
【請求項４】
前記ブレークポイント管理情報は、ブレークポイントが何れのデバッグモードで設定されたかを識別するデバッグモード識別子を含むことを特徴とする請求項３記載のデバッグ方法。
【請求項５】
前記ブレークポイント管理情報は、前記各々のデバッグモードのデバッグモード用ブレークポイント管理情報を含み、
前記デバッグモード用ブレークポイント管理情報は、該デバッグモードのブレークポイント情報であることを特徴とする請求項３記載のデバッグ方法。
【請求項６】
前記デバッグ対象プログラムは、
少なくとも１つのタスクから構成されるマルチタスクシステムと、
前記マルチタスクシステムを管理するオペレーティングシステムとを含むことを特徴とする請求項１、２、３、４または５いずれかに記載のデバッグ方法。
【請求項７】
前記デバッグ対象プログラムは、
少なくとも２つのマルチタスクシステムで構成される複合システムを含み、
前記少なくとも２つのマルチタスクシステムの各々は１つ以上のタスクを含み、
前記複合システムは、
前記少なくとも２つのマルチタスクシステムの中でデバッグ対象とする少なくとも１つのデバッグ対象マルチタスクシステムを含み、
前記少なくとも１つのデバッグ対象マルチタスクシステムを管理する第１オペレーティングシステムと、
前記第１オペレーティングシステムをそのタスクとして管理すると共に、前記複合システム全体を管理する第２オペレーティングシステムから構成されることを特徴とする請求項１、２、３、４または５いずれかに記載のデバッグ方法。
【請求項８】
デバッガとターゲットシステムから構成されるデバッグシステムであって、
前記デバッガは、前記ターゲットシステムにデバッグコマンドを送信し、
前記ターゲットシステムは、
デバッグ対象プログラムと少なくとも２つのモニタプログラムとを格納するプログラム格納手段と、
前記プログラム格納手段に格納されたプログラムを実行するプログラム実行手段と、
モニタ管理手段とを備え、
前記モニタ管理手段は、前記デバッガからデバッグモードを切り替えるデバッグコマンドを受信したときに前記少なくとも２つのモニタプログラムのいずれか１つを選択してデバッグモードを切り替えることを特徴とするデバッグシステム。
【請求項９】
前記モニタ管理手段は、前記デバッグモードを切り替えるときに、前記デバッグ対象プログラムが停止している場合、
前記デバッグモードの切り替え前の前記モニタプログラムを起動することを特徴とする請求項８記載のデバッグシステム。
【請求項１０】
前記デバッガは、
各々のデバッグモードのブレークポイント情報を管理するブレークポイント管理情報を保持し、
前記デバッグモードの切り替え前の前記デバッグモードのブレークポイントを解除する手段と、
前記デバッグモードの切り替え後の前記デバッグモードのブレークポイントを設定する手段とを備えることを特徴とする請求項８または請求項９いずれかに記載のデバッグシステム。
【請求項１１】
前記ブレークポイント管理情報は、ブレークポイントが何れのデバッグモードで設定されたかを識別するデバッグモード識別子を含むことを特徴とする請求項１０記載のデバッグシステム。
【請求項１２】
前記ブレークポイント管理情報は、前記各々のデバッグモードのデバッグモード用ブレークポイント管理情報を含み、前記デバッグモード用ブレークポイント管理情報は、該デバッグモードのブレークポイント情報であることを特徴とする請求項１０記載のデバッグシステム。
【請求項１３】
前記デバッグ対象プログラムは、
少なくとも１つのタスクから構成されるマルチタスクシステムと、
前記マルチタスクシステムを管理するオペレーティングシステムとを含むことを特徴とする請求項８、９、１０、１１または１２いずれかに記載のデバッグシステム。
【請求項１４】
前記デバッグ対象プログラムは、
少なくとも２つのマルチタスクシステムで構成される複合システムを含み、
前記少なくとも２つのマルチタスクシステムの各々は１つ以上のタスクを含み、
前記複合システムは、
前記少なくとも２つのマルチタスクシステムの中でデバッグ対象とする少なくとも１つのデバッグ対象マルチタスクシステムを含み、
前記少なくとも１つのデバッグ対象マルチタスクシステムを管理する第１オペレーティングシステムと、
前記第１オペレーティングシステムをそのタスクとして管理すると共に、前記複合システム全体を管理する第２オペレーティングシステムから構成されることを特徴とする請求項項８、９、１０、１１または１２いずれかに記載のデバッグシステム。
【請求項１５】
デバッガからのコマンドに基づいてデバッグを行うデバッグ装置であって、
デバッグ対象プログラムと少なくとも２つのモニタプログラムとを格納するプログラム格納手段と、
前記プログラム格納手段に格納されたプログラムを実行するプログラム実行手段と、
モニタ管理手段とを備え、
前記モニタ管理手段は、前記デバッガからデバッグモードを切り替えるデバッグコマンドを受信したときに前記少なくとも２つのモニタプログラムのいずれか１つを選択してデバッグモードを切り替えることを特徴とするデバッグ装置。
【請求項１６】
前記モニタ管理手段は、前記デバッグモードを切り替えるときに、前記デバッグ対象プログラムが停止している場合、
前記デバッグモードの切り替え前の前記モニタプログラムを起動することを特徴とする請求項１５記載のデバッグ装置。
【請求項１７】
前記デバッグ対象プログラムは、
少なくとも１つのタスクから構成されるマルチタスクシステムと、
前記マルチタスクシステムを管理するオペレーティングシステムとを含むことを特徴とする請求項１５、または１６いずれかに記載のデバッグ装置。
【請求項１８】
前記デバッグ対象プログラムは、
少なくとも２つのマルチタスクシステムで構成される複合システムを含み、
前記少なくとも２つのマルチタスクシステムの各々は１つ以上のタスクを含み、
前記複合システムは、
前記少なくとも２つのマルチタスクシステムの中でデバッグ対象とする少なくとも１つのデバッグ対象マルチタスクシステムを含み、
前記少なくとも１つのデバッグ対象マルチタスクシステムを管理する第１オペレーティングシステムと、
前記第１オペレーティングシステムをそのタスクとして管理すると共に、前記複合システム全体を管理する第２オペレーティングシステムから構成されることを特徴とする請求項１５、または１６いずれかに記載のデバッグ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータやマイクロプロセッサなどのプロセッサ装置で実行されるプログラムのデバッグ方法およびその装置に関するものである。
【背景技術】
【０００２】
近年、マイクロコンピュータやマイクロプロセッサは多くの製品に組み込まれるようになってきた。
【０００３】
マイクロコンピュータやマイクロプロセッサを製品に組み込んだ場合、その製品に必要なプログラムを開発することが必要となる。このようなプログラム開発はデバッグ装置を用いて行われる。
【０００４】
デバッグ装置の１つとして、マイクロコンピュータやマイクロプロセッサで実行しているデバッグ対象プログラムに、デバッグ対象プログラムの実行状態の取得や実行制御を行うモニタプログラムを組み込み、他ホストからモニタプログラムを制御し、デバッグ対象プログラムのデバッグを行うモニタ型のものがある。
【０００５】
図１にモニタ型のデバッグ装置の概略図を示す。
【０００６】
モニタ型のデバッグ装置は、デバッガ１１０と通信手段１２０とターゲットシステム１３０から構成される。ターゲットシステム１３０は、ＣＰＵ１４１と実メモリ１４２から構成され、実メモリ１４２内には、モニタプログラム１５０とデバッグ対象プログラム１６０が配置され、モニタプログラム１５０とデバッグ対象プログラム１６０はＣＰＵ１４１により実行される。また、ターゲットシステム１３０は、デバッガ１１０と通信手段１２０により接続され、モニタプログラム１５０はデバッガ１１０からの通信による割込みにより起動され、起動されたモニタプログラム１５０が、デバッガ１１０からのデバッグコマンドを受信し、受信したコマンドを実行することによって、デバッグ対象プログラム１６０のデータの参照および変更、ブレークポイントの設定などを行うと共に、デバッグ対象プログラム１６０の実行制御を行う。   一方、デバッグ装置には、システム全体をデバッグする（以後、システムデバッグと称す）装置とタスクレベルでデバッグする（以後、タスクデバッグと称す）装置がある。
【０００７】
システムデバッグ装置におけるプログラムの停止処理は、モニタプログラムでプログラムをループすることにより、システム全体を停止する。また、タスクデバッグ装置におけるプログラムの停止処理は、オペレーティング・システム（以下、ＯＳと記す）によりデバッグ対象タスクの実行制御を行い、即ち、デバッグ対象タスクを停止状態とすることにより、デバッグ対象タスクの実行を停止する。この時、デバッグ対象タスク以外のタスクは実行可能であり、システム全体としては停止しない。
【０００８】
タスクデバッグの従来技術として、デバッグのために、マルチタスクジョブを構成する任意のタスクがあらかじめ設定されたブレークポイントあるいは例外を発生した時点で、そのタスクと同一マルチタスクジョブグループ内のすべてのタスクの実行を停止させ、任意の時点でそのマルチタスクジョブグループ内のすべてのタスクの実行を再開さるというマルチタスク制御方法がある（例えば、特許文献１参照）。
【０００９】
また、デバッグ対象タスクのブレーク時に、デバッガ専用のタスク停止のシステムコールをＯＳへ発行し、そのタスクを停止させることにより、タスクブレークを確実に機能させるタスクデバッグ方法がある（例えば、特許文献２参照）。
【特許文献１】特開平４−３１４１４１号公報
【特許文献２】特開平１１−２７２５０１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記の従来のデバッグ装置では、次のような問題がある。まず、システムデバッグ装置では、プログラムの停止処理において、システム全体が停止するため、デバッグ対象タスク以外の他のタスクの動作に影響を与えずにデバッグができないという問題がある。
【００１１】
また、タスクデバッグ装置では、デバッグ対象タスク（または、同一マルチタスクジョブグループ内のすべてのタスク）のみ停止するものの、タスク（または、異なるマルチタスクジョブグループのタスク）間の同期処理やタスク以外の割込み処理、ＯＳなどのデバッグができないという問題がある。
【００１２】
本発明の目的は、上記問題を解決するものであって、任意の時点でシステムデバッグおよびタスクデバッグなどのデバッグモードを切り替え可能であり、複数のデバッグモードを同一デバッグ環境下で実行することができ、マルチタスクシステムのプログラム開発及び、デバッグを容易にすることを目的としたプログラムデバッグ方法とその装置を提供することにある。
【課題を解決するための手段】
【００１３】
本発明のプログラムのデバッグ方法およびその装置は、ユーザが任意の時点で、システムデバッグ、および、タスクデバッグなどのデバッグモードを切り替え、デバッグモード切り替え時に、システムデバッグ用のモニタプログラムとタスクレベルデバッグ用のモニタプログラムなどの各デバッグモード用モニタプログラムを動的に切り替える。また、各デバッグモードのブレークポイント情報を保持しておき、デバッグモード切り替え時には、各モードのブレークポイントを再設定するようにして実現される。
【発明の効果】
【００１４】
任意の時点でシステムデバッグおよびタスクデバッグなどのデバッグモードの切り替えが可能であり、複数のデバッグモードを同一デバッグ環境下で実行することができ、プログラムの開発及び、デバッグを容易にすることが可能となる。また、複数のデバッグモードにおけるデバッグが可能となり、大規模なプログラムの開発、および、デバッグを容易にすることが可能となる。
【発明を実施するための最良の形態】
【００１５】
（実施の形態１）
本発明の実施の形態１を、図面を参照して説明する。
【００１６】
図２は、本発明の実施の形態１のデバッグ装置の全体構成を示す概略図である。
【００１７】
デバッガ２１０は、ターゲットシステム２３０と通信手段２２０により接続され、ユーザからのデバッグ要求を解釈実行するユーザコマンド実行部２１１と、システムデバッグモードおよびタスクデバッグモードなどのデバッグモードを選択するデバッグモード選択手段２１２から構成される。
【００１８】
また、ターゲットシステム２３０は、ＣＰＵ２４１と実メモリ２４２から構成される。実メモリ２４２内には、モニタ管理プログラム２５１、システムデバッグ用モニタプログラム２５２、タスクデバッグ用モニタプログラム２５３、モニタモード保持手段２５４、および、ユーザプログラム２６０が配置される。
【００１９】
モニタ管理プログラム２５１は、デバッグモード切り替え時にモニタプログラムの切り替えを行い、デバッグモードに応じたモニタプログラムの起動などの制御を行う。システムデバッグ用モニタプログラム２５２はシステムデバッグモード時に、デバッグ対象プログラムの実行状態取得や実行制御を行い、タスクデバッグ用モニタプログラム２５３はタスクデバッグモード時に、デバッグ対象タスクの実行状態取得や実行制御を行う。モニタモード保持手段２５４には、デバッグモード切り替え前のデバッグモードを保持しておく。ユーザプログラム２６０は、ＯＳ２７０、および、マルチタスクシステム２８０で構成され、マルチタスクシステム２８０はタスク２８１およびタスク２８２から構成される。
【００２０】
また、モニタ管理プログラム２５１はデバッガ２１０からの通信による割込みにより起動され、起動されたモニタ管理プログラム２５１が、デバッガ２１０からのデバッグコマンドを受信し、デバッグモードに応じたモニタプログラム（システムデバッグ用モニタプログラム２５２、または、タスクデバッグ用モニタプログラム２５３）を起動する。起動されたモニタプログラムがデバッグコマンドを実行し、各デバッグコマンドに応じて、デバッグ対象プログラムのデータの参照および変更、ブレークポイント設定、ステップ実行設定などを行うと共に、デバッグ対象プログラムの実行制御を行い、デバッガ２１０に応答を送信する。これにより、ユーザに対しターゲットシステム２３０上のデバッグ対象プログラムに関するデバッグ機能を提供する。
【００２１】
次に、モニタ管理プログラム２５１のデバッグコマンド処理の処理例を図３に示す。まず、デバッガ２１０からの通信による割込みによりモニタ管理プログラム２５１が起動され、レジスタの退避などの前処理を実行する（図３ステップＳ３００）。次に、デバッガ２１０からのコマンドを受信する（図３ステップＳ３０１）。そして、受信したデバッグコマンドが、デバッグモード切り替えのためのデバッグコマンド（以後、モニタ制御デバッグコマンドと称す。また、区別のためモニタ制御デバッグコマンド以外のデバッグコマンドを通常デバッグコマンドと称す）であるかどうかの判定を行う（図３ステップＳ３０２）。モニタ制御デバッグコマンドである場合は、デバッグモード切り替え処理を実行する（図３ステップＳ３０３）。デバッグ制御コマンドでない場合（即ち、通常デバッグコマンドの場合）は、通常デバッグコマンドを実行するために、デバッグモードに応じたモニタプログラム（システムデバッグ用モニタプログラム２５２、または、タスクデバッグ用モニタプログラム２５３）を起動し、起動されたモニタプログラムにおいて、デバッグコマンドを実行する（図３ステップＳ３０４）。デバッグコマンドの実行が終了したら、レジスタの復元などの後処理を実行する（図３ステップＳ３０５）。
【００２２】
次に、デバッグモード切り替え処理（図３ステップＳ３０３）の処理例を図４に示す。
まず、デバッグモード切り替え前のデバッグモードをモニタモード保持手段２５４に設定する（図４ステップＳ４０１）。次に、通常デバッグコマンドで起動するモニタプログラム（図３ステップＳ３０４）をデバッグモード切り替え後のモニタプログラムに設定する（図４ステップＳ４０２）。次に切り替え前のデバッグモードにおいて、ブレークポイントなどによりプログラムが停止しているか判定を行う（図４ステップＳ４０３）。プログラムが停止中でない場合は、デバッガ２１０に、デバッグコマンド実行結果を送信する（図４ステップＳ４０４）。プログラム停止中の場合は、プログラムを再開させるために切り替え前のデバッグモードのモニタプログラムを起動し、プログラム再開のデバッグコマンドを実行する（図４ステップＳ４０５）。これにより、デバッグモード切り替え前のプログラム停止状態を解除し、切り替え後のデバッグモードでデバッグすることが可能となる。以上により、デバッグモード選択時に、デバッグモードを切り替えることができる。
次に、モニタ管理プログラム２５１のプログラム停止処理の処理例を図５に示す。
【００２３】
まず、デバッグ対象プログラムがブレークポイントに到達する、あるいは例外を発生すると、モニタ管理プログラム２５１のプログラム停止処理に制御が移る。レジスタ退避などの前処理の後（図５ステップＳ５０１）、デバッグモード切り替え処理（図４）において設定されたモニタプログラムを起動し、起動されたモニタプログラムのプログラム停止処理を実行する（図５ステップＳ５０２）。モニタプログラムのプログラム停止処理は、例えば、システムデバッグ用のモニタプログラムのプログラム停止処理では、ＣＰＵ２４１のプログラムカウンタを無限ループを実行するプログラム番地に設定することにより行うことができ、タスクデバッグ用モニタプログラムのプログラム停止処理では、デバッグ対象タスクをサスペンド状態等に遷移させるシステムコールをＯＳ２７０に発行することにより、デバッグ対象タスクを停止する。以上によりブレークポイントあるいは例外が発生した時点で、デバッグ対象プログラムを停止することができる。
【００２４】
次に、システムデバッグ用モニタプログラム２５２の処理例を図６に示す。まず、モニタプログラムが起動されると、各デバッグコマンドに応じて処理が実行される（図６ステップＳ６０１）。デバッグコマンドの実行が終了すると、デバッグコマンドの実行結果をデバッガ２１０に送信する（図６ステップＳ６０２）。タスクデバッグ用モニタプログラム２５３においても、同様に、各デバッグコマンドに応じた処理を実行し、実行結果をデバッガ２１０に送信する。
【００２５】
以上のように構成された本発明の第１の実施の形態におけるデバッグ装置の動作について図２から図６を用いて説明する。
【００２６】
まず、デバッグモードの選択時の動作について説明する。
【００２７】
ユーザが、デバッグモード選択手段２１２より、デバッグモードを選択すると、デバッガ２１０からモニタ制御デバッグコマンドが発行され、通信手段２２０を介して、モニタプログラム管理プログラム２５１が起動される。レジスタの退避などの前処理を実行し（図３ステップＳ３００）、デバッグコマンド受信処理を実行し（図３ステップＳ３０１）、デバッグコマンドがモニタ制御デバッグコマンドか判定を行う（図３ステップＳ３０２）。モニタ制御デバッグコマンドであるので、デバッグモード切り替え処理を実行する（図３ステップＳ３０３）。
【００２８】
まず、デバッグモード切り替え前のデバッグモードをモニタモード保持手段２５４に設定する（図４ステップＳ４０１）。次に、通常デバッグコマンドで起動するモニタプログラムをデバッグモード切り替え後のモニタプログラムに設定する（図４ステップＳ４０２）。次に、切り替え前のデバッグモードにおいて、ブレークポイントなどによりプログラムが停止しているか判定を行う（図４ステップＳ４０３）。プログラムが停止中でない場合は、デバッグコマンド実行結果を送信する。プログラム停止中の場合は、プログラムを再開させるために切り替え前のデバッグモードのモニタプログラムを起動し、プログラム再開のデバッグコマンドを実行する。以上により、デバッグモード選択時に、デバッグモードを切り替えることができる。
【００２９】
次に、通常デバッグコマンドの動作例を説明する。通常デバッグコマンドとして、ブレークポイント設定のデバッグコマンドの例で説明する。
【００３０】
デバッガ２１０からブレークポイント設定の通常デバッグコマンドが発行されると、通信手段２２０を介して、モニタプログラム管理プログラム２５１が起動される。レジスタの退避などの前処理を実行し（図３ステップＳ３００）、デバッグコマンド受信処理を実行し（図３ステップＳ３０１）、デバッグコマンドがモニタ制御デバッグコマンドか判定を行う（図３ステップＳ３０２）。モニタ制御デバッグコマンドではないので、デバッグモード切り替え処理（図４）において設定したモニタプログラムを起動する（図３ステップＳ３０４）。ここで、デバッグモードがシステムデバッグモードであるとすると、システムデバッグ用のモニタプログラム２５２が起動され、ブレークポイント設定のデバッグコマンドが実行される（図６ステップＳ６０１）。ブレークポイントが設定されると実行結果をデバッガ２１０へ送信し（図６ステップ６０２）、レジスタの復元などの後処理を実行する（図３ステップＳ３０５）。以上により、ブレークポイントを設定する通常デバッグコマンドを実行することができる。
【００３１】
次に、ブレークポイントあるいは例外が発生した時点で、デバッグ対象プログラムを停止する動作例について説明する。この例では、タスクデバッグモード時であり、タスク２８２が実行中における、ブレークポイントのプログラム停止処理について説明する。
【００３２】
まず、タスク２８２がブレークポイントに到達すると、モニタ管理プログラム２５１のプログラム停止処理に制御が移る（図５）。レジスタ退避等の前処理の後（図５ステップＳ５０１）、デバッグモード切り替え処理（図４）において設定されたモニタプログラムを起動する（図５ステップＳ５０２）。タスクデバッグモードであるので、タスクデバッグ用モニタプログラム２５３が起動され、タスク２８２をサスペンド状態などに遷移させるシステムコールをＯＳ２７０に発行することにより、プログラムの停止処理を実行する。
【００３３】
以上、説明したように、モニタ管理プログラム２５１において、選択されたデバッグモードに応じて、起動するモニタプログラム（システムデバッグ用モニタプログラム２５２、および、タスクデバッグ用モニタプログラム２５３）を動的に切り替えることによって、ユーザが任意の時点でシステムデバッグおよびタスクデバッグを切り替え可能であり、システムデバッグおよびタスクデバッグを同一デバッグ環境下で実行することができ、マルチタスクシステムのプログラム開発及び、デバッグを容易にすることが可能となる。
【００３４】
（実施の形態２）
次に、本発明の実施の形態２を、図面を参照して説明する。
【００３５】
図７は、本発明の実施の形態２のデバッグ装置の全体構成を示す概略図である。同図において、図２と同一構成要素には同一符号を付す。
【００３６】
本発明の実施の形態２のデバッグ装置の全体構成は、実施の形態１で説明した図２のデバッグ装置の全体構成におけるデバッガ２１０に、選択されたデバッグモードを保持しておくデバッグモード保持手段２１３と、ブレークポイントの情報を保持しておく、ブレークポイント管理情報２１４を追加したものである。ブレークポイント管理情報２１４は、各デバッグモード時のブレークポイントの情報を管理するデバッグモード用ブレークポイント管理情報２１５から構成される。
【００３７】
本実施の形態２におけるデバッグ装置は、本実施の形態１で説明したデバッグ装置に、デバッグモード選択時に選択前のデバッグモードのブレークポイントを解除し、選択後のデバッグモードのブレークポイントを設定する処理を追加したものである。この処理は、例えば、デバッグモードをシステムデバッグモードからタスクデバッグモードに切り替えた時に、システムデバッグモードのブレークポイントがそのまま設定されていると、デバッグ対象タスク以外のプログラムにブレークポイントが設定されている可能性があるために、各デバッグモードに応じたブレークポイントの設定を行う。
【００３８】
次に、本実施の形態２におけるモニタ管理プログラム２５１Ａのデバッグコマンド処理について説明する。本実施の形態２におけるモニタ管理プログラム２５１Ａのデバッグコマンド処理は、実施の形態１において説明したモニタ管理プログラム２５１のデバッグコマンド処理（図３）と同様であるが、デバッグモード切り替え処理（図４）が異なる。
【００３９】
本実施の形態２におけるデバッグモード切り替え処理の処理例を図８に示す。まず、デバッガ２１０から受信したモニタ制御デバッグコマンドがどのコマンドであるかの判定を行う（図８ステップＳ８００）。本実施の形態２では、モニタ制御デバッグコマンドとして、モード設定開始コマンド、モード変更コマンド、モード設定終了コマンドがある。
【００４０】
受信したモニタ制御デバッグコマンドがモード設定開始コマンドである場合には、システム全体を停止する処理を実行する（図８ステップＳ８０１）。システム全体停止処理は、例えば、割込み前のレジスタを退避し、ＣＰＵ２４１のプログラムカウンタを無限ループを実行するプログラム番地に設定することにより行うことができる。次にデバッガ２１０にデバッグコマンドの実行結果を送信する（図８ステップＳ８０７）。
【００４１】
受信したモニタ制御デバッグコマンドがモード変更コマンドである場合には、デバッグモード切り替え前のデバッグモードをモニタモード保持手段２５４に設定する（図８ステップＳ８０２）。次に、通常デバッグコマンドで起動するモニタプログラム（図３ステップＳ３０４）をデバッグモード切り替え後のモニタプログラムに設定する（図８ステップＳ８０３）。次にデバッガ２１０にデバッグコマンドの実行結果を送信する（図８ステップＳ８０７）。
【００４２】
受信したモニタ制御デバッグコマンドがモード設定終了コマンドである場合には、まず、モード設定開始コマンドにおけるシステム全体停止処理を解除する（図８ステップＳ８０４）。次に、切り替え前のデバッグモードをモニタモード保持手段２５４より取得し（図８ステップＳ８０５）、切り替え前のデバッグモードがブレークポイントなどによりプログラムが停止しているか判定を行う（図８ステップＳ８０６）。プログラムが停止中でない場合は、デバッガ２１０にデバッグコマンドの実行結果を送信する（図８ステップＳ８０７）。プログラム停止中の場合は、プログラムを再開させるために切り替え前のデバッグモードのモニタプログラムを起動し、プログラム再開のデバッグコマンドを実行する（図８ステップＳ８０８）。これにより、システム全体の実行を再開することができる。
【００４３】
次に、モニタ管理プログラム２５１Ａにおけるプログラム停止処理について説明する。モニタ管理プログラム２５１Ａにおけるプログラム停止処理は、実施の形態１において説明したモニタ管理プログラムの停止処理（図５）と同様であり、デバッグモードに応じたモニタプログラムを起動し、起動されたモニタプログラムのプログラム停止処理を実行する。
【００４４】
次に、デバッグモードの選択時のデバッガ２１０の処理について説明する。
【００４５】
デバッグモード選択時のデバッガ２１０の処理例を示すフローチャートを図９に示す。
【００４６】
ユーザが、デバッグモード選択手段２１２より、デバッグモードを選択すると、ユーザコマンド実行部２１１のデバッグモード選択処理（図９）に制御が移る。
【００４７】
まず、モード設定開始のモニタ制御デバッグコマンドを発行し（図９ステップＳ９０１）、モニタ管理プログラム２５１Ａにおいて、システム全体を停止する。次に切り替え前のデバッグモードをデバッグモード保持手段２１３から取得し（図９ステップＳ９０２）、切り替え前のブレークポイントの解除処理を行う（図９ステップＳ９０３）。ブレークポイント解除処理は、ブレークポイント管理情報２１４のデバッグモード用ブレークポイント管理情報２１５を参照して、解除するブレークポイントがあるかの判定を行い（図９ステップＳ９１０）、ない場合には、何もしない。ある場合にはブレークポイント解除の通常デバッグコマンドを発行する（図９ステップＳ９１１）。解除するブレークポイントがなくなるまでステップＳ９１１繰り返す。これにより、切り替え前のデバッグモードのブレークポイントを全て解除する。
【００４８】
次に、モード変更のモニタ制御デバッグコマンドを発行し（図９ステップＳ９０４）、モニタ管理プログラム２５１Ａにおいて、デバッグモード切り替え前のデバッグモードをモニタモード保持手段２５４に保存し、デバッグモード切り替え後のモニタプログラムを設定する。
【００４９】
次にデバッグモードの保存の処理を実行し（図９ステップＳ９０５）、デバッグモード保持手段２１３に選択されたデバッグモードを保存する。そして、切り替え後のブレークポイントの設定処理を実行する（図９ステップＳ９０６）。ブレークポイント設定処理は、ブレークポイント管理情報２１４のデバッグモード用ブレークポイント管理情報２１５を参照して、設定するブレークポイントがあるかの判定を行い（図９ステップＳ９２０）、ない場合には、何もしない。ある場合にはブレークポイント設定の通常デバッグコマンドを発行する（図９ステップＳ９２１）。設定するブレークポイントがなくなるまでステップＳ９２１を繰り返す。これにより、デバッグモード切り替え後のブレークポイントの再設定を行う。
【００５０】
次に、モード設定終了のモニタ制御デバッグコマンドを発行する（図９ステップＳ９０７）。これにより、システム全体の実行を再開する。
【００５１】
以上のように構成された本発明の第２の実施の形態におけるデバッグ装置のデバッグモードの選択時の動作について説明する。
【００５２】
ユーザが、デバッグモード選択手段２１２より、デバッグモードを選択すると、ユーザコマンド実行部２１１のデバッグモード選択処理（図９）に制御が移る。
【００５３】
まず、モード設定開始のモニタ制御デバッグコマンドを発行する（図９ステップＳ９０１）。通信手段２２０を介して、モニタ管理プログラム２５１Ａが起動され、レジスタの退避などの前処理を実行する（図３ステップＳ３００）。デバッグコマンド受信処理を行い（図３ステップＳ３０１）、デバッグコマンドがモニタ制御デバッグコマンドか判定を行う（図３ステップＳ３０２）。モニタ制御デバッグコマンドであるので、デバッグモード切り替え処理を実行する（図３ステップＳ３０３）。
【００５４】
まず、モニタ制御デバッグコマンドがどのコマンドであるかの判定を行う（図８ステップＳ８００）。モード設定開始コマンドなので、システム全体を停止する（図８ステップＳ８０１）。そして、デバッガ２１０に、デバッグコマンド実行結果を送信し（図８ステップＳ８０７）、レジスタの復元などの後処理を実行する（図３ステップＳ３０５）。通信手段２２０を介して、デバッガ２１０は、デバッグコマンド実行結果を受信する。
【００５５】
次に切り替え前のデバッグモードをデバッグモード保持手段２１３から取得し（図９ステップＳ９０２）、ブレークポイントの解除処理を行う（図９ステップＳ９０３）。ブレークポイント解除処理は、ブレークポイント管理情報２１４のデバッグモード用ブレークポイント管理情報２１５を参照して、解除するブレークポイントがあるかの判定を行い（図９ステップＳ９１０）、ない場合には、何もしない。ある場合にはブレークポイント解除のデバッグコマンドを発行する（図９ステップＳ９１１）。解除するブレークポイントがなくなるまでステップＳ９１１を繰り返す。
【００５６】
ブレークポイント解除のデバッグコマンドが発行されると、通信手段２２０を介して、モニタ管理プログラム２５１Ａが起動され、レジスタの退避などの前処理を実行する（図３ステップＳ３００）。デバッグコマンド受信処理を行い（図３ステップＳ３０１）、デバッグコマンドがモニタ制御デバッグコマンドか判定を行う（図３ステップＳ３０２）。モニタ制御デバッグコマンドではないので、デバッグモードに応じたモニタプログラムを起動する（図３ステップＳ３０４）。ここでデバッグモードがシステムデバッグモードであるとすると、システムデバッグ用のモニタプログラム２５２が起動され、ブレークポイント解除のデバッグコマンドが実行される（図６ステップＳ６０１）。ブレークポイントが解除されると実行結果をデバッガ２１０へ送信し（図６ステップＳ６０２）、レジスタの復元などの後処理を実行する（図３ステップＳ３０５）。以上によりブレークポイントの解除が実行される。
【００５７】
ブレークポイントの解除処理（図９ステップＳ９０３）の実行後、モード変更のモニタ制御デバッグコマンドを発行する（図９ステップＳ９０４）。モード設定開始のモニタ制御デバッグコマンドと同様にモニタ管理プログラム２５１Ａが起動され、デバッグモード切り替え処理（図８）が実行される。モード変更コマンドなので、デバッグモード切り替え前のデバッグモードをモニタモード保持手段２５４に設定し（図８ステップＳ８０２）、通常デバッグコマンドで起動するモニタプログラムをデバッグモード切り替え後のモニタプログラムに設定する（図８ステップＳ８０３）。そして、デバッグコマンド実行結果を送信する（図８ステップＳ８０７）。
【００５８】
次にデバッグモードの保存の処理を実行し（図９ステップＳ９０５）、デバッグモード保持手段２１３に選択されたデバッグモードを保存する。そして、ブレークポイントの設定処理を実行する（図９ステップＳ９０６）。これにより、デバッグモード切り替え後のブレークポイントの再設定を行う。
【００５９】
ブレークポイント設定処理は、ブレークポイント管理情報２１４のデバッグモード用ブレークポイント管理情報２１５を参照して、設定するブレークポイントがあるかの判定を行い（図９ステップＳ９２０）、ない場合には、何もしない。ある場合にはブレークポイント設定のデバッグコマンドを発行する（図９ステップＳ９２１）。設定するブレークポイントがなくなるまでステップＳ９１２を繰り返す。
【００６０】
次に、モード設定終了のモニタ制御デバッグコマンドを発行する（図９ステップＳ９０７）。モード設定開始のモニタ制御デバッグコマンドと同様にモニタ管理プログラム２５１Ａが起動され、デバッグモード切り替え処理（図８）が実行される。モード設定終了コマンドなので、モード設定開始コマンドにおけるシステム全体停止処理を解除する（図８ステップＳ８０４）。次に、切り替え前のデバッグモードをモニタモード保持手段２５４より取得し（図８ステップＳ８０５）、切り替え前のデバッグモードがブレークポイントなどによりプログラムが停止しているか判定を行う（図８ステップＳ８０６）。プログラムが停止中でない場合は、デバッガ２１０に、デバッグコマンド実行結果を送信する（図８ステップＳ８０７）。
【００６１】
プログラム停止中の場合は、プログラムを再開させるために切り替え前のデバッグモードのモニタプログラムを起動し、プログラム再開のデバッグコマンドを実行する（図８ステップＳ８０８）。これによりシステム全体の実行を再開することができる。
【００６２】
以上、説明したように、モニタ管理プログラム２５１Ａにおいて、選択されたデバッグモードに応じて、起動するモニタプログラム（システムデバッグ用モニタプログラム２５２、および、タスクデバッグ用モニタプログラム２５３）を動的に切り替えることによって、ユーザが任意の時点でシステムデバッグおよびタスクデバッグを切り替え可能であり、システムデバッグおよびタスクデバッグを同一デバッグ環境下で実行することができ、マルチタスクシステムのプログラム開発及び、デバッグを容易にすることが可能となる。
また、デバッグモード選択時に選択前のデバッグモードのブレークポイントを解除し、選択後のデバッグモードのブレークポイントを設定することにより、異なるデバッグモードのブレークポイントの設定によるプログラムの誤動作などを回避することが可能となる。
【００６３】
なお、本実施の形態では、各デバッグモードのブレークポイントの情報をデバッグモード用ブレークポイント管理情報２１５において管理したが、各デバッグモードごとのブレークポイントの情報を管理できればよいのであって、例えば、ブレークポイントの情報に、ブレークポイントが、何れのデバッグモードで設定したブレークポイントであるかを
識別するデバッグモード識別フラグなどを追加し、各デバッグモードのブレークポイントの情報を全てのデバッグモード共通のブレークポイント管理情報において管理してもよい。
【００６４】
（実施の形態３）
次に、本発明の実施の形態３を、図面を参照して説明する。
【００６５】
図１０は、本発明の実施の形態３のデバッグ装置の全体構成を示す概略図である。同図において、図７と同一構成要素には同一符号を付す。
【００６６】
本発明の実施の形態３のデバッグ装置の全体構成は、実施の形態２で説明した図７のシステムの全体構成を示す概略図における構成を次のように変更したものである。
【００６７】
まず、図７におけるＯＳ２７０とマルチタスクシステム２８０から構成されるユーザプログラム２６０を、第２ＯＳ１０１０と第１ＯＳタスク１０２０とマルチタスクシステム１０３０とデバッグ対象マルチタスクシステム１０４０とから構成されるユーザプログラム２６０Ａに変更する。また、タスクデバッグ用モニタプログラム２５３をレイヤードデバッグ用モニタプログラム１０００に変更する。
【００６８】
マルチタスクシステム１０３０はタスク１０３１およびタスク１０３２から構成され、第２ＯＳ１０１０で管理されている。デバッグ対象マルチタスクシステム１０４０は、タスク１０４１およびタスク１０４２から構成され、第１ＯＳタスク１０２０で管理される。また、第１ＯＳタスク１０２０は、第２ＯＳ１０１０によって管理されるタスクである。
【００６９】
次に、レイヤードデバッグ用モニタプログラム１０００について説明する。
【００７０】
レイヤードデバッグ用モニタプログラム１０００は、デバッグ対象マルチタスクシステム１０４０を構成する任意のタスク（タスク１０４１、または、タスク１０４２）がブレークポイントに到達した時点あるいは例外を発生した時点で、デバッグ対象マルチタスクシステム１０４０を構成するすべてのタスク（タスク１０４１、および、タスク１０４２）に関し、その実行環境を保持した状態で実行を抑制し、デバッグ対象マルチタスクシステム１０４０に関するデバッグ機能を提供する。これにより、デバッグ対象マルチタスクシステム１０４０のデバッグが可能となり、また、デバッグ対象マルチタスクシステム１０４０が、ブレークポイントなどにより停止しても、マルチタスクシステム１０３０のタスク１０３１、および、タスク１０３２は実行可能であり、システム全体としては停止しない。さらに、デバッグ対象マルチタスクシステム１０４０の停止中に他の実行中のタスクなどによる、タスクの状態を変化させるようなシステムコールが第２ＯＳ１０１０に発行されても、第１ＯＳタスク１０２０で管理されているデバッグ対象マルチタスクシステム１０４０のタスク１０４１および１０４２は影響を受けないで、デバッグすることが可能となる。
【００７１】
次に、レイヤードデバッグ用モニタプログラム１０００のデバッグ対象マルチタスクシステムの停止処理例を示すフローチャートを図１１に示す。
【００７２】
まず、レジスタ退避等の前処理（図１１ステップＳ１１０１）の後、デバッグ対象マルチタスクシステム１０４０を管理している第１ＯＳタスク１０２０の実行を停止させるため、第１ＯＳタスク１０２０を強制待ち（サスペンド）状態へ遷移させるシステムコールを第２ＯＳ１０１０に発行する（図１１ステップＳ１１０２）。このとき、第２ＯＳ１０１０では、システムコールを受けて、第１ＯＳタスク１０２０を強制待ち状態へ遷移させる処理を実行する。
【００７３】
次に、デバッグ対象マルチタスクシステム１０４０のすべての割込みを禁止する（図１１ステップＳ１１０３）。次に、第２ＯＳ１０１０のタスクディスパッチ処理を実行し（図１１ステップＳ１１０４）、デバッグ対象マルチタスクシステム１０４０を管理している第１ＯＳタスク１０２０から他の最優先のタスク（タスク１０３１またはタスク１０３２）にタスクディスパッチする。タスクディスパッチとは、タスクの優先度を基準にスケジューリングを行い、最高優先度のタスクに切り替える処理である。以上によりデバッグ対象マルチタスクシステム１０４０の複数タスク（タスク１０４１およびタスク１０４２）の実行を抑制し、デバッグ対象マルチタスクシステム１０４０を停止する。
【００７４】
次に、レイヤードデバッグ用モニタプログラム１０００のデバッグ対象マルチタスクシステムの再開処理例を示すフローチャートを図１２に示す。
【００７５】
まず、レジスタ退避等の前処理（図１２ステップＳ１２０１）の後、デバッグ対象マルチタスクシステム１０４０を管理している第１ＯＳタスク１０２０の実行を再開させるためのシステムコールを第２ＯＳ１０１０に発行し（図１２ステップＳ１２０２）、第１ＯＳタスク１０２０を強制待ち状態から元の状態に復帰させる。次に、デバッグ対象マルチタスクシステム停止処理のデバッグ対象マルチタスクシステムの割込み禁止処理（図１１ステップＳ１１０３）において禁止したデバッグ対象マルチタスクシステムの割込みを許可し（図１２ステップＳ１２０３）、第２ＯＳ１０１０のタスクディスパッチ処理を実行する（図１２ステップＳ１２０４）。これにより、デバッグ対象マルチタスクシステム１０４０の複数タスク（タスク１０４１およびタスク１０４２）の実行を再開することができる。
【００７６】
レイヤードデバッグ用モニタプログラム１０００のデバッグコマンド処理については、システムデバッグ用モニタプログラム２５２およびタスクデバッグ用モニタプログラム２５３と同様に、モニタプログラムが起動されると、各デバッグコマンドに応じて処理が実行され、デバッグコマンドの実行が終了すると、デバッグコマンドの実行結果をデバッガ２１０に送信する。
以上により、デバッグ対象マルチタスクシステム１０４０を第１ＯＳタスク１０２０で管理し、デバッグ対象マルチタスクシステム１０４０を構成する任意のタスク（タスク１０４１またはタスク１０４２）がブレークポイントに到達した時点あるいは例外を発生した時点で、第１ＯＳタスク１０２０の実行を停止することにより、デバッグ対象マルチタスクシステム１０４０を構成するすべてのタスク（１０４１および１０４２）に関し、その実行環境を保持した状態で実行を抑制することが可能となる。
【００７７】
次に、実施の形態３におけるデバッグ装置における、モニタ管理プログラム２５１Ａについて説明する。本実施の形態３におけるモニタ管理プログラム２５１Ａのデバッグコマンド処理は、実施の形態１および実施の形態２において説明したモニタ管理プログラムのデバッグコマンド処理（図３）と同様であり、デバッグコマンドを取得し、モニタ制御デバッグコマンドである場合は、デバッグモード切り替え処理を実行し、通常デバッグコマンドである場合には、デバッグモードに応じたモニタプログラムを起動する。例えば、デバッグモードがレイヤードデバッグモードである場合には、レイヤードデバッグ用モニタプログラム１０００を起動し、通常デバッグコマンドを実行する。また、デバッグモード切り替え処理も、実施の形態２において説明したデバッグモード切り替え処理（図８）と同様である。
【００７８】
また、モニタ管理プログラム２５１Ａにおけるプログラム停止処理も実施の形態１および実施の形態２において説明したモニタ管理プログラムの停止処理（図５）と同様であり、デバッグモードに応じたモニタプログラムのプログラム停止処理を実行する。その他の構成要素においても実施の形態２で説明した図７の構成要素と同じである。
【００７９】
以上、説明したように、モニタ管理プログラム２５１Ａにおいて、選択されたデバッグモードに応じて、起動するモニタプログラム（システムデバッグ用モニタプログラム２５２、および、レイヤードデバッグ用モニタプログラム１０００）を動的に切り替えることによって、ユーザが任意の時点でシステムデバッグおよびレイヤードデバッグを切り替え可能であり、システムデバッグおよびレイヤードデバッグを同一デバッグ環境下で実行することができ、複数のマルチタスクシステムのプログラム開発及び、デバッグを容易にすることが可能となる。また、複数のデバッグモードでのデバッグが可能となり、大規模なプログラムにおける開発、デバッグを容易にすることが可能となる。
【００８０】
なお、本実施の形態では、モニタプログラムは、システムデバッグ用モニタプログラム２５２とレイヤードデバッグ用モニタプログラム１０００の２つで構成される例で説明したが、複数の異なるモニタプログラムをモニタ管理プログラム２５１Ａにおいて動的に切り替えることが可能であるので、例えば、タスクレベル用モニタプログラム２５３とレイヤードデバッグ用モニタプログラム１０００で構成される場合にも本発明は適用可能である。
【００８１】
なお、本実施の形態では、モニタプログラムは、システムデバッグ用モニタプログラム２５２とレイヤードデバッグ用モニタプログラム１０００の２つで構成される例で説明したが、例えば、システムデバッグ用モニタプログラム２５２とタスクデバッグ用モニタプログラム２５３とレイヤードデバッグ用モニタプログラム１０００の３つで構成するなど、３つ以上のモニタプログラムで構成される場合にも本発明は適用可能である。
【産業上の利用可能性】
【００８２】
本発明にかかる、プログラムのデバッグ方法とその装置は、任意の時点でシステムデバッグおよびタスクデバッグなどのデバッグモードを切り替え可能であり、複数のデバッグモードを同一デバッグ環境下で実行することができ、プログラム開発及び、デバッグを容易にするという効果を有し、マイクロコンピュータやマイクロプロセッサなどのプロセッサ装置で実行されるプログラムのデバッグを行うデバッグ方法およびデバッグ装置等として有用である。
【図面の簡単な説明】
【００８３】
【図１】モニタ型デバッグ装置の概略図
【図２】実施の形態１のデバッグ装置の全体構成を示す概略図
【図３】モニタ管理プログラムのデバッグコマンド処理のフローチャート
【図４】実施の形態１のデバッグモード切り替え処理のフローチャート
【図５】モニタ管理プログラムのプログラム停止処理のフローチャート
【図６】モニタプログラム処理のフローチャート
【図７】実施の形態２のデバッグ装置の全体構成を示す概略図
【図８】実施の形態２のデバッグモード切り替え処理のフローチャート
【図９】デバッグモード選択時のデバッガの処理例を示すフローチャート
【図１０】実施の形態３のデバッグ装置の全体構成を示す概略図
【図１１】レイヤードデバッグ用モニタプログラムのデバッグ対象マルチタスクシステムの停止処理例を示すフローチャート
【図１２】レイヤードデバッグ用モニタプログラムのデバッグ対象マルチタスクシステムの再開処理例を示すフローチャート
【符号の説明】
【００８４】
１１０    デバッガ
１２０    通信手段
１３０    ターゲットシステム
１４１    ＣＰＵ
１４２    実メモリ
１５０    モニタプログラム
１６０    デバッグ対象プログラム
２１０    デバッガ
２１１    ユーザコマンド実行部
２１２    デバッグモード選択手段
２１３    デバッグモード保持手段
２１４    ブレークポイント管理情報
２１５    デバッグモード用ブレークポイント管理情報
２２０    通信手段
２３０    ターゲットシステム
２４１    ＣＰＵ
２４２    実メモリ
２５１    モニタ管理プログラム
２５１Ａ    モニタ管理プログラム
２５２    システムデバッグ用モニタプログラム
２５３    タスクデバッグ用モニタプログラム
２５４    モニタモード保持手段
２６０    ユーザプログラム
２６０Ａ    ユーザプログラム
２７０    ＯＳ
２８０    マルチタスクシステム
２８１    タスク
２８２    タスク
１０００    レイヤードデバッグ用モニタプログラム
１０１０    第２ＯＳ
１０２０    第１ＯＳ
１０３０    マルチタスクシステム
１０３１    タスク
１０３２    タスク
１０４０    デバッグ対象マルチタスクシステム
１０４１    タスク
１０４２    タスク
【図１】
2006079261.tif 000003
【図２】
2006079261.tif 000004
【図３】
2006079261.tif 000005
【図４】
2006079261.tif 000006
【図５】
2006079261.tif 000007
【図６】
2006079261.tif 000008
【図７】
2006079261.tif 000009
【図８】
2006079261.tif 000010
【図９】
2006079261.tif 000011
【図１０】
2006079261.tif 000012
【図１１】
2006079261.tif 000013
【図１２】
2006079261.tif 000014