(57)【要約】【課題】マルチタスク環境下で特定のユーザタスクが共通アクセス領域にアクセスした場合にその特定のユーザタスクの動作を停止させるとともに、割り込み処理のオーバーヘッドを低減する。【解決手段】ディスパッチャ１２１１は、次に実行すべきタスクがデバッグ対象のタスクであることを指示されると、デバッグ対象のタスクがライトアクセスする特定のライトアドレス、リードアクセスする特定のリードアドレス、または、実行するブレークポイントの特定の命令アドレスをデバックレジスタ１１１に設定する。ＣＰＵ１１は、デバッグ対象のタスクが特定のライトアドレスにライトアクセスした場合、特定のリードアドレスにリードアクセスした場合、または、ブレークポイントの命令アドレスを実行した場合に、デバッグ割り込みを発生する。デバッグ割り込みハンドラ１２１２は、デバッグ割り込みが発生した時点で、デバッグ対象のタスクの実行を停止させる。【選択図】図１
2007213396.tif 000002
【特許請求の範囲】
【請求項１】
マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるデバッグシステムにおいて、
前記特定のタスクの実行開始が指示された時点で、該特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定手段と、
前記特定のタスクが前記レジスタに設定された前記特定のライトアドレスにライトアクセスした時点で、デバッグ割り込みを発生する制御手段と、
前記制御手段により前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止手段とを有することを特徴とするデバッグシステム。
【請求項２】
前記設定手段は、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定し、
前記制御手段は、前記特定のタスクが前記レジスタに設定された前記特定のリードアドレスにリードアクセスした時点で、前記デバッグ割り込みを発生することを特徴とする、請求項１に記載のデバッグシステム。
【請求項３】
前記設定手段は、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定し、
前記制御手段は、前記特定のタスクが前記特定の命令アドレスの命令を実行した時点で、前記デバッグ割り込みを発生することを特徴とする、請求項１または２に記載のデバッグシステム。
【請求項４】
前記停止手段は、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記設定手段に前記特定のタスクをディスパッチさせるための処理とを行うことを特徴とする、請求項１から３のいずれか１項に記載のデバッグシステム。
【請求項５】
前記設定手段は、前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行うことを特徴とする、請求項４に記載のデバッグシステム。
【請求項６】
マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるオペレーティングシステムにおいて、
前記特定のタスクの実行開始が指示された時点で、制御手段にデバッグ割り込みを発生させるアドレスとして、前記特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定手段と、
前記制御手段により前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止手段とを有することを特徴とするオペレーティングシステム。
【請求項７】
前記設定手段は、前記制御手段に前記デバッグ割り込みを発生させるアドレスとして、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定することを特徴とする、請求項６に記載のオペレーティングシステム。
【請求項８】
前記設定手段は、前記制御手段に前記デバッグ割り込みを発生させるアドレスとして、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定することを特徴とする、請求項６または７に記載のオペレーティングシステム。
【請求項９】
前記停止手段は、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記設定手段に前記特定のタスクをディスパッチさせるための処理とを行うことを特徴とする、請求項６から８のいずれか１項に記載のオペレーティングシステム。
【請求項１０】
前記設定手段は、前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行うことを特徴とする、請求項９に記載のオペレーティングシステム。
【請求項１１】
マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるデバッグシステムによるデバッグ方法において、
前記特定のタスクの実行開始が指示された時点で、該特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定ステップと、
前記特定のタスクが前記レジスタに設定された前記特定のライトアドレスにライトアクセスした時点で、デバッグ割り込みを発生する割り込み発生ステップと、
前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止ステップとを有することを特徴とするデバッグ方法。
【請求項１２】
前記設定ステップでは、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定し、
前記割り込み発生ステップでは、前記特定のタスクが前記レジスタに設定された前記特定のリードアドレスにリードアクセスした時点で、前記デバッグ割り込みを発生することを特徴とする、請求項１１に記載のデバッグ方法。
【請求項１３】
前記設定ステップでは、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定し、
前記割り込み発生ステップでは、前記特定のタスクが前記レジスタに設定された前記特定の命令アドレスの命令を実行した時点で、前記デバッグ割り込みを発生することを特徴とする、請求項１１または１２に記載のデバッグ方法。
【請求項１４】
前記停止ステップでは、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記特定のタスクをディスパッチさせる処理とを行うことを特徴とする、請求項１１から１３のいずれか１項に記載のデバッグ方法。
【請求項１５】
前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行う再開ステップをさらに有することを特徴とする、請求項１４に記載のデバッグ方法。
【請求項１６】
マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるデバッグシステムに、
前記特定のタスクの実行開始が指示された時点で、該特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定ステップと、
前記特定のタスクが前記レジスタに設定された前記特定のライトアドレスにライトアクセスした時点で、デバッグ割り込みを発生する割り込み発生ステップと、
前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止ステップとを実行させることを特徴とするプログラム。
【請求項１７】
前記設定ステップでは、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定し、
前記割り込み発生ステップでは、前記特定のタスクが前記レジスタに設定された前記特定のリードアドレスにリードアクセスした時点で、前記デバッグ割り込みを発生することを特徴とする、請求項１６に記載のプログラム。
【請求項１８】
前記設定ステップでは、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定し、
前記割り込み発生ステップでは、前記特定のタスクが前記レジスタに設定された前記特定の命令アドレスの命令を実行した時点で、前記デバッグ割り込みを発生することを特徴とする、請求項１６または１７に記載のプログラム。
【請求項１９】
前記停止ステップでは、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記特定のタスクをディスパッチさせる処理とを行うことを特徴とする、請求項１６から１８のいずれか１項に記載のプログラム。
【請求項２０】
前記デバッグシステムに、
前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行う再開ステップをさらに実行させることを特徴とする、請求項１９に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスク環境におけるデバッグシステム、オペレーションシステム、デバッグ方法、プログラムに関し、特に、マルチタスク環境下で特定のユーザタスクの実行を停止させてその特定のユーザタスクのデバッグを行うことを可能とするデバッグシステム、オペレーションシステム、デバッグ方法、プログラムに関する。
【背景技術】
【０００２】
従来、シングルタスク環境下でユーザタスクのデバッグを行うデバッグシステムでは、操作者が、ユーザタスクの任意の位置にブレークポイントを設定する。ブレークポイントを設定した状態でユーザタスクを実行し、その実行過程においてブレークポイントが実行されると、ユーザタスクの実行を停止させる。そして、ユーザタスクの実行を停止させた時点におけるメモリ（変数）およびレジスタの内容を確認することにより、ユーザタスクの論理検証およびハードウェアの動作検証を行う。
【０００３】
一方、マルチタスク環境下でユーザタスクのデバッグを行うデバッグシステムでは、複数のユーザタスクに共通に使用される共通関数が存在するため、操作者が共通関数内にブレークポイントを設定する場合がある。しかし、この場合、デバッグ対象外のユーザタスクが共通関数を使用しても、そのデバッグ対象外のユーザタスクの実行が停止してしまう。したがって、デバッグ対象のユーザタスクを検証することが困難となる。
【０００４】
そこで、最近、上記のような問題を解決するために、特定のユーザタスクの実行のみを停止させる技術が一部で開示されている。
【０００５】
例えば、特許文献１に開示されたデバッグシステムでは、所定の１つのユーザタスクの実行を停止させるモードと全てのユーザタスクの実行を停止させるモードとの２つのモードを設定可能とする。前者のモードに設定されている状態で、ブレークポイントが実行されると、所定の１つのユーザタスクの実行のみを停止させる。
【０００６】
また、特許文献２に開示されたデバッグシステムでは、予め所定のアドレスにブレークポイントを設定する。ＯＳは、各ユーザタスクがブレークポイントを実行する度に割り込みを発生させ、ブレークポイントを実行したユーザタスクがデバッグ対象のユーザタスクであるかを判断し、デバッグ対象であればユーザタスクの実行を停止させる。
【特許文献１】特開２００４−３１８６５８号公報
【特許文献２】特開平９−２５９００２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来のデバッグシステムでは、デバッグ対象のユーザタスクがブレークポイントを実行した時にそのユーザタスクの実行を停止させることはできるものの、デバッグ対象のユーザタスクが共通アクセス領域にアクセスした時にそのユーザタスクの実行を停止させることはできないという課題がある。
【０００８】
マルチタスク環境下では、複数のユーザタスクの各々が共通に使用する変数やデータテーブルなどの共有データが格納された共通アクセス領域がある。そのため、共通アクセス領域の共有データをどのユーザタスクが書き換えたのか、各ユーザタスクがどの共有データを読み込んで実行しているかといった事項は、重要な検証事項となる。
【０００９】
また、従来のデバッグシステムでは、ユーザタスク実行中の割り込み処理の実行回数が多くなる可能性があるため、割り込み処理のオーバーヘッドが大きくなってしまうという課題がある。
【００１０】
例えば、特許文献２に開示されたデバッグシステムでは、各ユーザタスクがブレークポイントを実行する度に割り込みを発生させるため、デバック対象外のユーザタスクがブレークポイントを実行する回数が多い場合は、ユーザタスク実行中の割り込み処理のオーバーヘッドが大きくなり、検証の妨げとなる。
【００１１】
そこで、本発明の目的は、マルチタスク環境下で特定のユーザタスクが共通アクセス領域にアクセスした場合にその特定のユーザタスクの動作を停止させることができるとともに、ユーザタスク実行中の割り込み処理のオーバーヘッドを低減することができるデバッグシステム、オペレーションシステム、デバッグ方法、プログラムを提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するために本発明は、
マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるデバッグシステムにおいて、
前記特定のタスクの実行開始が指示された時点で、該特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定手段と、
前記特定のタスクが前記レジスタに設定された前記特定のライトアドレスにライトアクセスした時点で、デバッグ割り込みを発生する制御手段と、
前記制御手段により前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止手段とを有することを特徴とする。
【００１３】
上記の構成によれば、マルチタスク環境下で特定のタスクが特定のライトアドレスにライトアクセスした場合に、その特定のタスクの動作を停止させる構成となっている。そのため、特定のライトアドレスを共通アクセス領域とした場合、共通アクセス領域に共有データが正常に書き込まれているかといった重要な事項を検証できる。
【００１４】
また、特定のタスクが特定のライトアドレスにライトアクセスするときにのみデバッグ割り込みを発生させる構成になっている。そのため、特定のタスクを停止させる場合のデバッグ割り込みの回数を１回のみにできるため、デバッグ割り込みのオーバーヘッドを低減できる。
【００１５】
なお、前記設定手段は、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定し、
前記制御手段は、前記特定のタスクが前記レジスタに設定された前記特定のリードアドレスにリードアクセスした時点で、前記デバッグ割り込みを発生することとしても良い。
【００１６】
上記の構成によれば、マルチタスク環境下で特定のタスクが特定のリードアドレスにリードアクセスした場合に、その特定のタスクの動作を停止させる構成となっている。そのため、特定のリードアドレスを共通アクセス領域とした場合、共通アクセス領域から共有データが正常に読み出されているかといった重要な事項を検証できる。
【００１７】
また、前記設定手段は、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定し、
前記制御手段は、前記特定のタスクが前記特定の命令アドレスの命令を実行した時点で、前記デバッグ割り込みを発生することを特徴とすることとしても良い。
【００１８】
上記の構成によれば、マルチタスク環境下で特定のタスクが特定の命令アドレスの命令を実行した場合に、その特定のタスクの動作を停止させる構成となっている。そのため、特定の命令アドレスをブレークポイントとした場合、ブレークポイントを実行した特定のタスクを停止してその特定のタスクを検証できる。
【００１９】
また、制御手段によるデバッグ割り込みを利用しているため、データアクセスかブレークポイントかの区別を意識する必要がない。また、データアクセスによる停止とブレークポイントによる停止を同じ手段で実現できる。
【００２０】
また、前記停止手段は、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記設定手段に前記特定のタスクをディスパッチさせるための処理とを行うこととしても良い。
【００２１】
また、前記設定手段は、前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行うこととしても良い。
【発明の効果】
【００２２】
以上説明したように本発明によれば、マルチタスク環境下で特定のタスクが特定のライトアドレスにライトアクセスした場合に、その特定のタスクの動作を停止させる構成となっている。
【００２３】
そのため、特定のライトアドレスにデータが正常に書き込まれているかといった重要な事項を検証できるという効果が得られる。
【００２４】
また、本発明によれば、特定のタスクが特定のライトアドレスにライトアクセスするときにのみデバッグ割り込みを発生させる構成になっている。
【００２５】
そのため、特定のタスクを停止させる場合のデバッグ割り込みの回数を１回のみにできるため、デバッグ割り込みのオーバーヘッドを低減できるという効果が得られる。
【発明を実施するための最良の形態】
【００２６】
以下に、本発明を実施するための最良の形態について図面を参照して説明する。
【００２７】
図１を参照すると、本発明の一実施形態のデバッグシステムは、マルチタスク環境下でユーザタスクの実行／デバッグを行う計算機１と、計算機１へのデバッグパラメータの入力を行うキーボード等である入力装置２とを含む。
【００２８】
計算機１は、プログラム処理を行う制御手段であるＣＰＵ１１と、プログラムやデータを格納するメモリ１２とを備えている。
【００２９】
ＣＰＵ１１は、デバッグレジスタ１１１を備えている。
【００３０】
メモリ１２は、マルチタスク制御を行うＯＳ１２１と、入力装置２からデバッグ対象のユーザタスクのパラメータであるデバッグパラメータが入力されるとともにデバッグ結果を出力するデバッガタスク１２２と、デバッグパラメータを格納するデバッグパラメータテーブル１２３と、ユーザタスク１２４〜１２６とを備えている。
【００３１】
ＯＳ１２１は、タスクディスパッチを行う設定手段であるディスパッチャ１２１１と、デバッグ割り込み処理を行う停止手段であるデバッグ割り込みハンドラ１２１２と、ディスパッチするユーザタスクをスケジューリングするスケジューラ１２１３を備えている。
【００３２】
図２を参照すると、デバッグレジスタ１１１には、命令アドレス比較フィールド１１１１と、リードアドレス比較フィールド１１１２と、ライトアドレス比較フィールド１１１３とが設けられている。なお、各フィールド１１１１〜１１１３は、全て初期値が“０"であり、それ以外の値は設定されているものとみなす。
【００３３】
命令アドレス比較フィールド１１１１には、ディスパッチャ１２１１により、ＣＰＵ１１がデバッグ割り込みを発生するアドレスとして、ユーザタスク１２４〜１２６により実行されるブレークポイントの命令アドレスが格納される。
【００３４】
リードアドレス比較フィールド１１１２には、ディスパッチャ１２１１により、ＣＰＵ１１がデバッグ割り込みを発生するアドレスとして、ユーザタスク１２４〜１２６によりリードアクセスされるリードアドレスが格納される。
【００３５】
ライトアドレス比較フィールド１１１３には、ディスパッチャ１２１１により、ＣＰＵ１１がデバッグ割り込みを発生するアドレスとして、ユーザタスク１２４〜１２６によりライトアクセスされるライトアドレスが格納される。
【００３６】
ＣＰＵ１１は、命令アドレス比較フィールド１１１１に格納されている命令アドレスの命令を実行した場合、リードアドレス比較フィールド１１１２に格納されているリードアドレスにリードアクセスした場合、およびＣＰＵ１１は、ライトアドレス比較フィールド１１１３に格納されているライトアドレスにライトアクセスした場合に、デバッグ割り込みを発生する。
【００３７】
図３を参照すると、デバッグパラメータテーブル１２３には、タスクＩＤフィールド１２３１と、停止モードフィールド１２３２と、アドレスフィールド１２３３と、アクセス属性フィールド１２３４と、タスクコンテキスト情報フィールド１２３５とが設けられている。なお、各フィールド１２３１〜１２３５は、全て初期値が“０"であり、それ以外の値は設定されているものとみなす。
【００３８】
タスクＩＤフィールド１２３１には、デバッガタスク１２２により、デバッグ対象のユーザタスクのタスクＩＤが格納される。
【００３９】
停止モードフィールド１２３２には、デバッガタスク１２２により、デバッグ対象のユーザタスクの実行を停止させる停止モードが、データアクセス停止モードまたはブレークポイント停止モードのいずれであるかを識別する情報が格納される。ここで、データアクセス停止モードとは、特定のリードアドレスにリードアクセスした時および特定のライトアドレスにライトアクセスした時にデバッグ対象のユーザタスクの実行を停止させるモードである。また、ブレークポイント停止モードとは、ブレークポイントとなる命令アドレスの命令の実行時にデバッグ対象のユーザタスクの実行を停止させるモードである。
【００４０】
アドレスフィールド１２３３には、デバッガタスク１２２により、ＣＰＵ１１がデバッグ割り込みを発生するアドレスが格納される。例えば、停止モードがデータアクセス停止モードであれば、リードアドレスまたはライトアドレスが格納され、停止モードがブレークポイント停止モードであれば、ブレークポイントの命令アドレスが格納される。
【００４１】
アクセス属性フィールド１２３４には、停止モードがデータアクセス停止モードである場合に、デバッガタスク１２２により、アクセス属性がリード属性、ライト属性、またはリードライト属性のいずれであるかを識別する情報が格納される。
【００４２】
タスクコンテキスト情報フィールド１２３５には、ＣＰＵ１１がデバッグ割り込みを発生してデバッグ対象のユーザタスクが停止した場合に、デバッグ割り込みハンドラ１２１２により、デバッグ割り込みが発生した時点のデバッグ対象のユーザタスクのコンテキスト（状態）を示すタスクコンテキスト情報が格納される。
【００４３】
以下、図１〜図３に示した本実施形態のデバッグシステムの動作について説明する。
【００４４】
まず、デバッグ対象のユーザタスクの実行を停止させるための前処理を行う場合の動作について、図４を参照して説明する。
【００４５】
図４を参照すると、デバッガタスク１２２は、入力装置２からデバッグ対象のユーザタスクのデバッグパラメータが入力されると、入力されたデバッグパラメータをデバッグパラメータテーブル１２３に格納する（ステップ４０１）。この時点で、デバッグパラメータテーブル１２３においては、デバッグ対象のユーザタスクのタスクＩＤがタスクＩＤフィールド１２３１に、停止モードが停止モードフィールド１２３２に、ＣＰＵ１１がデバッグ割り込みを発生するアドレスがアドレスフィールド１２３３に格納される。また、停止モードがデータアクセス停止モードであれば、アクセス属性がアクセス属性フィールド１２３４に格納される。
【００４６】
タイマやハードウェア等によるディスパッチ要因が発生すると（ステップ４０２）、スケジューラ１２１３は、次に実行すべきユーザタスク（ユーザタスク１２４〜１２６のいずれか）を決定し、決定したユーザタスクのタスクＩＤをディスパッチャ１２１１に渡す（ステップ４０３）。
【００４７】
ディスパッチャ１２１１は、スケジューラ１２１３から渡されたタスクＩＤと、デバッグパラメータテーブル１２３のタスクＩＤフィールド１２３１のタスクＩＤとが一致するかを比較する。それにより、次に実行すべきユーザタスクがデバック対象のユーザタスクであるか否かを判断する（ステップ４０４）。
【００４８】
ここで、ディスパッチャ１２１１は、タスクＩＤが一致すれば、次に実行すべきユーザタスクがデバック対象のユーザタスクであると判断し、デバッグレジスタ１１１にデバッグパラメータを設定する（ステップ４０５）。このとき、ディスパッチャ１２１１は、停止モードフィールド１２３２を参照し、ブレークポイント停止モードならば、アドレスフィールド１２３３の値を命令アドレス比較フィールド１１１１に設定する。一方、ディスパッチャ１２１１は、データアクセス停止モードならば、アクセス属性フィールド１２３４を参照し、リード属性なら、リードアドレス比較フィールド１１１２にアドレスフィールド１２３３の値を設定し、また、ライト属性なら、ライトアドレス比較フィールド１１１３に、アドレスフィールド１２３３の値を設定する。もし、リードライト属性なら、リードアドレス比較フィールド１１１２およびライトアドレス比較フィールド１１１３の両方に、アドレスフィールド１２３３の値を設定する。
【００４９】
その後、ディスパッチャ１２１１は、デバッグ対象のユーザタスクのディスパッチを行い（ステップ４０６）、デバッグ対象のユーザタスクの実行を開始させる（ステップ４０７）。
【００５０】
次に、図４のステップ４０７でデバッグ対象のユーザタスクの実行を開始させた後に、デバッグ割り込みを行ってデバック対象のユーザタスクを停止させる場合の動作について、図５を参照して説明する。
【００５１】
図５を参照すると、ＣＰＵ１１は、デバッグ対象のユーザタスクの実行により、デバッグレジスタ１１１に設定された条件が満たされた場合、デバッグ割り込みを発生する（ステップ５０１）。なお、ＣＰＵ１１がデバッグ割り込みを発生するのは、次の（ａ）〜（ｃ）のような場合である。
（ａ）停止モードがブレークポイント停止モードである状態で、デバッグ対象のユーザタスクが命令アドレス比較フィールド１１１１に格納された命令アドレスの命令を実行した場合
（ｂ）停止モードがデータアクセス停止モードでかつアクセス属性がリード属性またはリードライト属性である状態で、デバッグ対象のユーザタスクがリードアドレス比較フィールド１１１２に格納されたリードアドレスにリードアクセスした場合
（ｃ）停止モードがデータアクセス停止モードでかつアクセス属性がライト属性またはリードライト属性である状態で、デバッグ対象のユーザタスクがライトアドレス比較フィールド１１１３に格納されたライトアドレスにライトアクセスした場合
ＣＰＵ１１がデバッグ割り込みを発生すると、デバッグ割り込みハンドラ１２１２が起動される。デバッグ割り込みハンドラ１２１２は、割り込み発生時点のデバッグ対象のユーザタスクのタスクコンテキスト情報を、タスクコンテキスト情報フィールド１２３５に格納し（ステップ５０２）、デバッグレジスタ１１１の設定をクリアする（ステップ５０３）。デバッグレジスタ１１１の設定をクリアしたことにより、以降、他のユーザタスクが同じ条件で実行を行ってもデバッグ割り込みは発生しない。
次に、デバッグ割り込みハンドラ１２１２は、次に動作すべきユーザタスクがデバッガタスク１２２であることを、スケジューラ１２１３に指示する（ステップ５０４）。スケジューラ１２１３は、ディスパッチャ１２１１に次に動作すべきユーザタスクがデバッガタスク１２２であることを通知し、ディスパッチャ１２１１は、デバッガタスク１２２にディスパッチを行う（ステップ５０５）。これにより、ディスパッチ対象のユーザタスクは、停止条件に従って実行を停止したことになる。
【００５２】
次に、図５のステップ５０５でデバッグ対象のユーザタスクのディスパッチを行って実行を停止させた後に、デバッグ対象のユーザタスクの実行を再開させる場合の動作について、図６を参照して説明する。
【００５３】
図６を参照すると、デバッガタスク１２２は、実行を停止しているデバッグ対象のユーザタスクが次に実行すべきユーザタスクであることを、スケジューラ１２１３に指示する。これを受けて、スケジューラ１２１３は、実行を停止しているデバッグ対象のユーザタスクが次に実行すべきユーザタスクであり、そのユーザタスクのディスパッチを行うことを、ディスパッチャ１２１１に指示する（ステップ６０１）。
【００５４】
次に、ディスパッチャ１２１１は、タスクコンテキスト情報フィールド１２３５からデバッグ対象のユーザタスクのタスクコンテキスト情報を読み出し、読み出したタスクコンテキスト情報に基づいて、デバッグ対象のユーザタスクをデバッグ割り込み発生時のコンテキストに戻す（ステップ６０２）。
【００５５】
その後、ディスパッチャ１２１１は、実行を停止しているデバッグ対象のユーザタスクのディスパッチを行い（ステップ６０３）、デバッグ対象のユーザタスクの実行を再開させる（ステップ６０４）。これにより、実行を停止しているディスパッチ対象のユーザタスクは、実行を再開したことになる。
【００５６】
上述したように本実施形態においては、ＣＰＵ１１によるデバッグ割り込みのみによって特定のユーザタスクを停止させる構成であるため、実装が容易である。さらに、データアクセス時にもデバッグ割り込みを発生させる構成であるため、データアクセスが行われる場合にもユーザタスクを停止させることができる。
【００５７】
また、本実施形態においては、デバッグ対象のユーザタスクのディパッチ時にのみデバッグ割り込みを発生させる構成であるため、デバック割り込みのオーバーヘッドを削減することができる。
【００５８】
また、本実施形態においては、メモリ使用量もデバッグパラメータテーブル１２３分だけに留めた構成であるため、メモリ容量の小さい計算機でも実現可能な形態である。
【００５９】
以下、本実施形態のデバッグシステムの動作について、図７を参照してさらに具体的に説明する。なお、図７において、ユーザアプリケーション３は、図１のメモリ１２上に展開されており、図１のＯＳ１２１の管理下で動作を行うものとする。各ユーザタスク３１〜３３は、メッセージ通信によって相互にデータのやり取りを行い、共有データテーブル３４にアクセスしながら動作を行うものとする。
【００６０】
このような環境で、操作者は、各ユーザタスク３１〜３３間でメッセージ通信されているメッセージ内容の検証と、共有データテーブル３４へのライトアクセスの検証を行う。
【００６１】
まず、操作者は、入力装置２から、ユーザタスク３１のタスクＩＤ（＝１）と、メッセージを受信した直後に参照される共通関数の命令アドレスと、停止モード（＝ブレークポイント停止モード）とを入力する。
【００６２】
デバッガタスク１２２は、入力装置２から入力されたタスクＩＤ（＝１）をタスクＩＤフィールド１２３１に、命令アドレスをアドレスフィールド１２３３に、停止モード（＝ブレークポイント停止モード）を停止モードフィールド１２３２に格納する（図４のステップ４０１）。
【００６３】
タイマ等によるディスパッチ要因が発生すると（図４のステップ４０２）、スケジューラ１２１３は、次に実行すべきユーザタスクのタスクＩＤ（ここでは、タスクＩＤ＝１とする）をディスパッチャ１２１１に渡す（図４のステップ４０３）。
【００６４】
ディスパッチャ１２１１は、タスクＩＤフィールド１２３１からタスクＩＤを読み出し、スケジューラ１２１３から渡されたタスクＩＤと比較する（図４のステップ４０４）。ここでは、比較結果が一致することから、ディスパッチャ１２１１は、次に実行すべきユーザタスクがデバッグ対象のユーザタスクであると判断する。
【００６５】
次に、ディスパッチャ１２１１は、停止モードフィールド１２３２を読み出す。ここでは、停止モードは、ブレークポイント停止モードであるため、アドレスフィールド１２３３の値を命令アドレス比較フィールド１１１１に設定する（図４のステップ４０５）。
【００６６】
その後、ディスパッチャ１２１１は、ユーザタスク３１のディスパッチを行い（図４のステップ４０６）、ユーザタスク３１の実行を開始する（図４のステップ４０７）。
【００６７】
ここで、ユーザタスク３１が命令アドレス比較フィールド１１１１に設定されている命令アドレスの命令を実行すると、ＣＰＵ１１は、デバッグ割り込みを発生させる（図５のステップ５０１）。
【００６８】
ＣＰＵ１１のデバッグ割り込み発生により、デバッグ割り込みハンドラ１２１２が起動される。デバッグ割り込みハンドラ１２１２は、デバッグ割り込みが発生した時点のユーザタスク３１のタスクコンテキスト情報をタスクコンテキスト情報フィールド１２３５に格納し（図５のステップ５０２）、命令アドレス比較フィールド１１１１の設定をクリアする（図５のステップ５０３）。
【００６９】
デバッグ割り込みハンドラ１２１２は、次に動作すべきユーザタスクがデバッガタスク１２２であることを、スケジューラ１２１３に指示する（図５のステップ５０４）。スケジューラ１２１３は、ディスパッチャ１２１１に次に動作すべきユーザタスクがデバッガタスク１２２であることを通知し、ディスパッチャ１２１１は、デバッガタスク１２２にディスパッチを行う（図５のステップ５０５）。
【００７０】
以上の手順により、ユーザタスク３１の実行が停止される。これを受けて、操作者は、入力装置２からメモリダンプ等のデバッグコマンドをデバッガタスク１２２に入力する。そして、操作者は、デバッガタスク１２２から出力されたデバッグ結果に基づき、ユーザタスク３１が仕様通りのメッセージを受信しているかの検証を行う。
【００７１】
引き続き、操作者は、入力装置２から、ユーザタスク３２のタスクＩＤ（＝２）と、共有データテーブル３４の検証したい箇所のデータアドレスと、停止モード（＝データアクセス停止モード）と、アクセス属性（＝ライト属性）とを入力する。
【００７２】
デバッガタスク１２２は、入力装置２から入力されたタスクＩＤ（＝２）をタスクＩＤフィールド１２３１に、データアドレスをアドレスフィールド１２３３に、停止モード（＝データアクセス停止モード）を停止モードフィールド１２３２に、アクセス属性（＝ライト属性）をアクセス属性フィールド１２３４に格納する（図４のステップ４０１）。
【００７３】
次に、操作者は、実行を停止しているユーザタスク３１の再開命令をデバッガタスク１２２に指示する。デバッガタスク１２２は、ユーザタスク３１が次に実行すべきユーザタスクであることをスケジューラ１２１３に指示する。これを受けて、スケジューラ１２１３は、次に実行すべきユーザタスクがユーザタスク３１であり、ユーザタスク３１のディスパッチを行うことをディスパッチャ１２１１に指示する（図６のステップ６０１）。
【００７４】
ディスパッチャ１２１１は、タスクコンテキスト情報フィールド１２３５から、ユーザタスク３１のタスクコンテキスト情報を読み出し、ユーザタスク３１をデバッグ割り込み発生時のコンテキストに戻す（図６のステップ６０２）。
【００７５】
その後、ディスパッチャ１２１１は、実行を停止しているユーザタスク３１のディスパッチを行い（ステップ６０３）、ユーザタスク３１の実行を再開させる（ステップ６０４）。
【００７６】
以上の手順により、ユーザタスク３１の実行が再開される。
【００７７】
タイマ等によるディスパッチ要因が発生すると（図４のステップ４０２）、スケジューラ１２１３は、次に実行すべきユーザタスクのタスクＩＤ（ここでは、タスクＩＤ＝２とする）をディスパッチャ１２１１に渡す（図４のステップ４０３）。
【００７８】
ディスパッチャ１２１１は、タスクＩＤフィールド１２３１からタスクＩＤを読み出し、スケジューラ１２１３から渡されたタスクＩＤと比較する（図４のステップ４０４）。ここでは比較結果が一致することから、ディスパッチャ１２１１は、次に実行すべきユーザタスク３２はデバッグ対象のユーザタスクであると判断する。
【００７９】
次に、ディスパッチャ１２１１は、停止モードフィールド１２３２を読み出す。ここでは、停止モードはデータアクセス停止モードであるため、アクセス属性フィールド１２３４を読み出す。ここでは、アクセス属性がライト属性であることから、ディスパッチャ１２１１は、ライトアドレス比較フィールド１１１３にアドレスフィールド１２３３の値を設定する（図４のステップ４０５）。
【００８０】
その後、ディスパッチャ１２１１は、ユーザタスク３２のディスパッチを行い（図４のステップ４０６）、ユーザタスク３２の実行を開始する（図４のステップ４０７）。
【００８１】
ここで、ユーザタスク３２がライトアドレス比較フィールド１１１３に設定されているライトアドレスにライトアクセスすると、ＣＰＵ１１は、デバッグ割り込みを発生させる（図５のステップ５０１）。
【００８２】
ＣＰＵ１１のデバッグ割り込み発生により、デバッグ割り込みハンドラ１２１２が起動される。デバッグ割り込みハンドラ１２１２は、デバッグ割り込みが発生した時点のユーザタスク３２のコンテキスト情報をタスクコンテキスト情報フィールド１２３５に格納し（図５のステップ５０２）、ライトアドレス比較フィールド１１１３の設定をクリアする（図５のステップ５０３）。
【００８３】
次に、デバッグ割り込みハンドラ１２１２は、次に動作すべきユーザタスクがデバッガタスク１２２であることを、スケジューラ１２１３に指示する（図５のステップ５０４）。スケジューラ１２１３は、ディスパッチャ１２１１に次に動作すべきユーザタスクがデバッガタスク１２２であることを通知し、ディスパッチャ１２１１は、デバッガタスク１２２にディスパッチを行う（図５のステップ５０５）。
【００８４】
以上の手順により、ユーザタスク３２の実行が停止される。これを受けて、操作者は、入力装置２からメモリダンプ等のデバッグコマンドをデバッガタスク１２２に入力する。そして、操作者は、デバッガタスク１２２から出力されたデバッグ結果に基づき、ユーザタスク３２が仕様通りの値を共有データテーブル３４に書き込んでいるかの検証を行う。
【図面の簡単な説明】
【００８５】
【図１】本発明の一実施形態のデバッグシステムの構成を示すブロック図である。
【図２】図１に示したデバッグレジスタのフォーマットを示す図である。
【図３】図１に示したデバッグパラメータテーブルのフォーマットを示す図である。
【図４】図１に示したデバッグシステムにおいて、ユーザタスクを停止するための前処理を行う場合の動作を説明するフローチャートである。
【図５】図１に示したデバッグシステムにおいて、デバッグ割り込みを行う場合の動作を説明するフローチャートである。
【図６】図１に示したデバッグシステムにおいて、実行を停止していたユーザタスクの実行を再開する場合の動作を説明するフローチャートである。
【図７】図１に示したデバッグレジスタのソフトウェア構成を示す図である。
【符号の説明】
【００８６】
１    計算機
２    入力装置
３    ユーザアプリケーション
１１    ＣＰＵ
１２    メモリ
３１    ユーザタスク
３２    ユーザタスク
３３    ユーザタスク
３４    共有データテーブル
１１１    デバッグレジスタ
１２１    ＯＳ
１２２    デバッガタスク
１２３    デバッグパラメータテーブル
１２４    ユーザタスク
１２５    ユーザタスク
１２６    ユーザタスク
１１１１    命令アドレス比較フィールド
１１１２    リードアドレス比較フィールド
１１１３    ライトアドレス比較フィールド
１２１１    ディスパッチャ
１２１２    デバッグ割り込みハンドラ
１２１３    スケジューラ
１２３１    タスクＩＤフィールド
１２３２    停止モードフィールド
１２３３    アドレスフィールド
１２３４    アクセス属性フィールド
１２３５    タスクコンテキスト情報フィールド
【図１】
2007213396.tif 000003
【図２】
2007213396.tif 000004
【図３】
2007213396.tif 000005
【図４】
2007213396.tif 000006
【図５】
2007213396.tif 000007
【図６】
2007213396.tif 000008
【図７】
2007213396.tif 000009