JP2007213396A - デバッグシステム、オペレーションシステム、デバッグ方法、プログラム - Google Patents

デバッグシステム、オペレーションシステム、デバッグ方法、プログラム Download PDF

Info

Publication number
JP2007213396A
JP2007213396A JP2006033814A JP2006033814A JP2007213396A JP 2007213396 A JP2007213396 A JP 2007213396A JP 2006033814 A JP2006033814 A JP 2006033814A JP 2006033814 A JP2006033814 A JP 2006033814A JP 2007213396 A JP2007213396 A JP 2007213396A
Authority
JP
Japan
Prior art keywords
specific task
specific
task
register
debug
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006033814A
Other languages
English (en)
Inventor
Koichi Sato
浩一 佐藤
Akihiro Motoki
顕弘 元木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2006033814A priority Critical patent/JP2007213396A/ja
Publication of JP2007213396A publication Critical patent/JP2007213396A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】マルチタスク環境下で特定のユーザタスクが共通アクセス領域にアクセスした場合にその特定のユーザタスクの動作を停止させるとともに、割り込み処理のオーバーヘッドを低減する。
【解決手段】ディスパッチャ1211は、次に実行すべきタスクがデバッグ対象のタスクであることを指示されると、デバッグ対象のタスクがライトアクセスする特定のライトアドレス、リードアクセスする特定のリードアドレス、または、実行するブレークポイントの特定の命令アドレスをデバックレジスタ111に設定する。CPU11は、デバッグ対象のタスクが特定のライトアドレスにライトアクセスした場合、特定のリードアドレスにリードアクセスした場合、または、ブレークポイントの命令アドレスを実行した場合に、デバッグ割り込みを発生する。デバッグ割り込みハンドラ1212は、デバッグ割り込みが発生した時点で、デバッグ対象のタスクの実行を停止させる。
【選択図】図1

Description

本発明は、マルチタスク環境におけるデバッグシステム、オペレーションシステム、デバッグ方法、プログラムに関し、特に、マルチタスク環境下で特定のユーザタスクの実行を停止させてその特定のユーザタスクのデバッグを行うことを可能とするデバッグシステム、オペレーションシステム、デバッグ方法、プログラムに関する。
従来、シングルタスク環境下でユーザタスクのデバッグを行うデバッグシステムでは、操作者が、ユーザタスクの任意の位置にブレークポイントを設定する。ブレークポイントを設定した状態でユーザタスクを実行し、その実行過程においてブレークポイントが実行されると、ユーザタスクの実行を停止させる。そして、ユーザタスクの実行を停止させた時点におけるメモリ(変数)およびレジスタの内容を確認することにより、ユーザタスクの論理検証およびハードウェアの動作検証を行う。
一方、マルチタスク環境下でユーザタスクのデバッグを行うデバッグシステムでは、複数のユーザタスクに共通に使用される共通関数が存在するため、操作者が共通関数内にブレークポイントを設定する場合がある。しかし、この場合、デバッグ対象外のユーザタスクが共通関数を使用しても、そのデバッグ対象外のユーザタスクの実行が停止してしまう。したがって、デバッグ対象のユーザタスクを検証することが困難となる。
そこで、最近、上記のような問題を解決するために、特定のユーザタスクの実行のみを停止させる技術が一部で開示されている。
例えば、特許文献1に開示されたデバッグシステムでは、所定の1つのユーザタスクの実行を停止させるモードと全てのユーザタスクの実行を停止させるモードとの2つのモードを設定可能とする。前者のモードに設定されている状態で、ブレークポイントが実行されると、所定の1つのユーザタスクの実行のみを停止させる。
また、特許文献2に開示されたデバッグシステムでは、予め所定のアドレスにブレークポイントを設定する。OSは、各ユーザタスクがブレークポイントを実行する度に割り込みを発生させ、ブレークポイントを実行したユーザタスクがデバッグ対象のユーザタスクであるかを判断し、デバッグ対象であればユーザタスクの実行を停止させる。
特開2004−318658号公報 特開平9−259002号公報
しかしながら、従来のデバッグシステムでは、デバッグ対象のユーザタスクがブレークポイントを実行した時にそのユーザタスクの実行を停止させることはできるものの、デバッグ対象のユーザタスクが共通アクセス領域にアクセスした時にそのユーザタスクの実行を停止させることはできないという課題がある。
マルチタスク環境下では、複数のユーザタスクの各々が共通に使用する変数やデータテーブルなどの共有データが格納された共通アクセス領域がある。そのため、共通アクセス領域の共有データをどのユーザタスクが書き換えたのか、各ユーザタスクがどの共有データを読み込んで実行しているかといった事項は、重要な検証事項となる。
また、従来のデバッグシステムでは、ユーザタスク実行中の割り込み処理の実行回数が多くなる可能性があるため、割り込み処理のオーバーヘッドが大きくなってしまうという課題がある。
例えば、特許文献2に開示されたデバッグシステムでは、各ユーザタスクがブレークポイントを実行する度に割り込みを発生させるため、デバック対象外のユーザタスクがブレークポイントを実行する回数が多い場合は、ユーザタスク実行中の割り込み処理のオーバーヘッドが大きくなり、検証の妨げとなる。
そこで、本発明の目的は、マルチタスク環境下で特定のユーザタスクが共通アクセス領域にアクセスした場合にその特定のユーザタスクの動作を停止させることができるとともに、ユーザタスク実行中の割り込み処理のオーバーヘッドを低減することができるデバッグシステム、オペレーションシステム、デバッグ方法、プログラムを提供することにある。
上記目的を達成するために本発明は、
マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるデバッグシステムにおいて、
前記特定のタスクの実行開始が指示された時点で、該特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定手段と、
前記特定のタスクが前記レジスタに設定された前記特定のライトアドレスにライトアクセスした時点で、デバッグ割り込みを発生する制御手段と、
前記制御手段により前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止手段とを有することを特徴とする。
上記の構成によれば、マルチタスク環境下で特定のタスクが特定のライトアドレスにライトアクセスした場合に、その特定のタスクの動作を停止させる構成となっている。そのため、特定のライトアドレスを共通アクセス領域とした場合、共通アクセス領域に共有データが正常に書き込まれているかといった重要な事項を検証できる。
また、特定のタスクが特定のライトアドレスにライトアクセスするときにのみデバッグ割り込みを発生させる構成になっている。そのため、特定のタスクを停止させる場合のデバッグ割り込みの回数を1回のみにできるため、デバッグ割り込みのオーバーヘッドを低減できる。
なお、前記設定手段は、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定し、
前記制御手段は、前記特定のタスクが前記レジスタに設定された前記特定のリードアドレスにリードアクセスした時点で、前記デバッグ割り込みを発生することとしても良い。
上記の構成によれば、マルチタスク環境下で特定のタスクが特定のリードアドレスにリードアクセスした場合に、その特定のタスクの動作を停止させる構成となっている。そのため、特定のリードアドレスを共通アクセス領域とした場合、共通アクセス領域から共有データが正常に読み出されているかといった重要な事項を検証できる。
また、前記設定手段は、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定し、
前記制御手段は、前記特定のタスクが前記特定の命令アドレスの命令を実行した時点で、前記デバッグ割り込みを発生することを特徴とすることとしても良い。
上記の構成によれば、マルチタスク環境下で特定のタスクが特定の命令アドレスの命令を実行した場合に、その特定のタスクの動作を停止させる構成となっている。そのため、特定の命令アドレスをブレークポイントとした場合、ブレークポイントを実行した特定のタスクを停止してその特定のタスクを検証できる。
また、制御手段によるデバッグ割り込みを利用しているため、データアクセスかブレークポイントかの区別を意識する必要がない。また、データアクセスによる停止とブレークポイントによる停止を同じ手段で実現できる。
また、前記停止手段は、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記設定手段に前記特定のタスクをディスパッチさせるための処理とを行うこととしても良い。
また、前記設定手段は、前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行うこととしても良い。
以上説明したように本発明によれば、マルチタスク環境下で特定のタスクが特定のライトアドレスにライトアクセスした場合に、その特定のタスクの動作を停止させる構成となっている。
そのため、特定のライトアドレスにデータが正常に書き込まれているかといった重要な事項を検証できるという効果が得られる。
また、本発明によれば、特定のタスクが特定のライトアドレスにライトアクセスするときにのみデバッグ割り込みを発生させる構成になっている。
そのため、特定のタスクを停止させる場合のデバッグ割り込みの回数を1回のみにできるため、デバッグ割り込みのオーバーヘッドを低減できるという効果が得られる。
以下に、本発明を実施するための最良の形態について図面を参照して説明する。
図1を参照すると、本発明の一実施形態のデバッグシステムは、マルチタスク環境下でユーザタスクの実行/デバッグを行う計算機1と、計算機1へのデバッグパラメータの入力を行うキーボード等である入力装置2とを含む。
計算機1は、プログラム処理を行う制御手段であるCPU11と、プログラムやデータを格納するメモリ12とを備えている。
CPU11は、デバッグレジスタ111を備えている。
メモリ12は、マルチタスク制御を行うOS121と、入力装置2からデバッグ対象のユーザタスクのパラメータであるデバッグパラメータが入力されるとともにデバッグ結果を出力するデバッガタスク122と、デバッグパラメータを格納するデバッグパラメータテーブル123と、ユーザタスク124〜126とを備えている。
OS121は、タスクディスパッチを行う設定手段であるディスパッチャ1211と、デバッグ割り込み処理を行う停止手段であるデバッグ割り込みハンドラ1212と、ディスパッチするユーザタスクをスケジューリングするスケジューラ1213を備えている。
図2を参照すると、デバッグレジスタ111には、命令アドレス比較フィールド1111と、リードアドレス比較フィールド1112と、ライトアドレス比較フィールド1113とが設けられている。なお、各フィールド1111〜1113は、全て初期値が“0"であり、それ以外の値は設定されているものとみなす。
命令アドレス比較フィールド1111には、ディスパッチャ1211により、CPU11がデバッグ割り込みを発生するアドレスとして、ユーザタスク124〜126により実行されるブレークポイントの命令アドレスが格納される。
リードアドレス比較フィールド1112には、ディスパッチャ1211により、CPU11がデバッグ割り込みを発生するアドレスとして、ユーザタスク124〜126によりリードアクセスされるリードアドレスが格納される。
ライトアドレス比較フィールド1113には、ディスパッチャ1211により、CPU11がデバッグ割り込みを発生するアドレスとして、ユーザタスク124〜126によりライトアクセスされるライトアドレスが格納される。
CPU11は、命令アドレス比較フィールド1111に格納されている命令アドレスの命令を実行した場合、リードアドレス比較フィールド1112に格納されているリードアドレスにリードアクセスした場合、およびCPU11は、ライトアドレス比較フィールド1113に格納されているライトアドレスにライトアクセスした場合に、デバッグ割り込みを発生する。
図3を参照すると、デバッグパラメータテーブル123には、タスクIDフィールド1231と、停止モードフィールド1232と、アドレスフィールド1233と、アクセス属性フィールド1234と、タスクコンテキスト情報フィールド1235とが設けられている。なお、各フィールド1231〜1235は、全て初期値が“0"であり、それ以外の値は設定されているものとみなす。
タスクIDフィールド1231には、デバッガタスク122により、デバッグ対象のユーザタスクのタスクIDが格納される。
停止モードフィールド1232には、デバッガタスク122により、デバッグ対象のユーザタスクの実行を停止させる停止モードが、データアクセス停止モードまたはブレークポイント停止モードのいずれであるかを識別する情報が格納される。ここで、データアクセス停止モードとは、特定のリードアドレスにリードアクセスした時および特定のライトアドレスにライトアクセスした時にデバッグ対象のユーザタスクの実行を停止させるモードである。また、ブレークポイント停止モードとは、ブレークポイントとなる命令アドレスの命令の実行時にデバッグ対象のユーザタスクの実行を停止させるモードである。
アドレスフィールド1233には、デバッガタスク122により、CPU11がデバッグ割り込みを発生するアドレスが格納される。例えば、停止モードがデータアクセス停止モードであれば、リードアドレスまたはライトアドレスが格納され、停止モードがブレークポイント停止モードであれば、ブレークポイントの命令アドレスが格納される。
アクセス属性フィールド1234には、停止モードがデータアクセス停止モードである場合に、デバッガタスク122により、アクセス属性がリード属性、ライト属性、またはリードライト属性のいずれであるかを識別する情報が格納される。
タスクコンテキスト情報フィールド1235には、CPU11がデバッグ割り込みを発生してデバッグ対象のユーザタスクが停止した場合に、デバッグ割り込みハンドラ1212により、デバッグ割り込みが発生した時点のデバッグ対象のユーザタスクのコンテキスト(状態)を示すタスクコンテキスト情報が格納される。
以下、図1〜図3に示した本実施形態のデバッグシステムの動作について説明する。
まず、デバッグ対象のユーザタスクの実行を停止させるための前処理を行う場合の動作について、図4を参照して説明する。
図4を参照すると、デバッガタスク122は、入力装置2からデバッグ対象のユーザタスクのデバッグパラメータが入力されると、入力されたデバッグパラメータをデバッグパラメータテーブル123に格納する(ステップ401)。この時点で、デバッグパラメータテーブル123においては、デバッグ対象のユーザタスクのタスクIDがタスクIDフィールド1231に、停止モードが停止モードフィールド1232に、CPU11がデバッグ割り込みを発生するアドレスがアドレスフィールド1233に格納される。また、停止モードがデータアクセス停止モードであれば、アクセス属性がアクセス属性フィールド1234に格納される。
タイマやハードウェア等によるディスパッチ要因が発生すると(ステップ402)、スケジューラ1213は、次に実行すべきユーザタスク(ユーザタスク124〜126のいずれか)を決定し、決定したユーザタスクのタスクIDをディスパッチャ1211に渡す(ステップ403)。
ディスパッチャ1211は、スケジューラ1213から渡されたタスクIDと、デバッグパラメータテーブル123のタスクIDフィールド1231のタスクIDとが一致するかを比較する。それにより、次に実行すべきユーザタスクがデバック対象のユーザタスクであるか否かを判断する(ステップ404)。
ここで、ディスパッチャ1211は、タスクIDが一致すれば、次に実行すべきユーザタスクがデバック対象のユーザタスクであると判断し、デバッグレジスタ111にデバッグパラメータを設定する(ステップ405)。このとき、ディスパッチャ1211は、停止モードフィールド1232を参照し、ブレークポイント停止モードならば、アドレスフィールド1233の値を命令アドレス比較フィールド1111に設定する。一方、ディスパッチャ1211は、データアクセス停止モードならば、アクセス属性フィールド1234を参照し、リード属性なら、リードアドレス比較フィールド1112にアドレスフィールド1233の値を設定し、また、ライト属性なら、ライトアドレス比較フィールド1113に、アドレスフィールド1233の値を設定する。もし、リードライト属性なら、リードアドレス比較フィールド1112およびライトアドレス比較フィールド1113の両方に、アドレスフィールド1233の値を設定する。
その後、ディスパッチャ1211は、デバッグ対象のユーザタスクのディスパッチを行い(ステップ406)、デバッグ対象のユーザタスクの実行を開始させる(ステップ407)。
次に、図4のステップ407でデバッグ対象のユーザタスクの実行を開始させた後に、デバッグ割り込みを行ってデバック対象のユーザタスクを停止させる場合の動作について、図5を参照して説明する。
図5を参照すると、CPU11は、デバッグ対象のユーザタスクの実行により、デバッグレジスタ111に設定された条件が満たされた場合、デバッグ割り込みを発生する(ステップ501)。なお、CPU11がデバッグ割り込みを発生するのは、次の(a)〜(c)のような場合である。
(a)停止モードがブレークポイント停止モードである状態で、デバッグ対象のユーザタスクが命令アドレス比較フィールド1111に格納された命令アドレスの命令を実行した場合
(b)停止モードがデータアクセス停止モードでかつアクセス属性がリード属性またはリードライト属性である状態で、デバッグ対象のユーザタスクがリードアドレス比較フィールド1112に格納されたリードアドレスにリードアクセスした場合
(c)停止モードがデータアクセス停止モードでかつアクセス属性がライト属性またはリードライト属性である状態で、デバッグ対象のユーザタスクがライトアドレス比較フィールド1113に格納されたライトアドレスにライトアクセスした場合
CPU11がデバッグ割り込みを発生すると、デバッグ割り込みハンドラ1212が起動される。デバッグ割り込みハンドラ1212は、割り込み発生時点のデバッグ対象のユーザタスクのタスクコンテキスト情報を、タスクコンテキスト情報フィールド1235に格納し(ステップ502)、デバッグレジスタ111の設定をクリアする(ステップ503)。デバッグレジスタ111の設定をクリアしたことにより、以降、他のユーザタスクが同じ条件で実行を行ってもデバッグ割り込みは発生しない。
次に、デバッグ割り込みハンドラ1212は、次に動作すべきユーザタスクがデバッガタスク122であることを、スケジューラ1213に指示する(ステップ504)。スケジューラ1213は、ディスパッチャ1211に次に動作すべきユーザタスクがデバッガタスク122であることを通知し、ディスパッチャ1211は、デバッガタスク122にディスパッチを行う(ステップ505)。これにより、ディスパッチ対象のユーザタスクは、停止条件に従って実行を停止したことになる。
次に、図5のステップ505でデバッグ対象のユーザタスクのディスパッチを行って実行を停止させた後に、デバッグ対象のユーザタスクの実行を再開させる場合の動作について、図6を参照して説明する。
図6を参照すると、デバッガタスク122は、実行を停止しているデバッグ対象のユーザタスクが次に実行すべきユーザタスクであることを、スケジューラ1213に指示する。これを受けて、スケジューラ1213は、実行を停止しているデバッグ対象のユーザタスクが次に実行すべきユーザタスクであり、そのユーザタスクのディスパッチを行うことを、ディスパッチャ1211に指示する(ステップ601)。
次に、ディスパッチャ1211は、タスクコンテキスト情報フィールド1235からデバッグ対象のユーザタスクのタスクコンテキスト情報を読み出し、読み出したタスクコンテキスト情報に基づいて、デバッグ対象のユーザタスクをデバッグ割り込み発生時のコンテキストに戻す(ステップ602)。
その後、ディスパッチャ1211は、実行を停止しているデバッグ対象のユーザタスクのディスパッチを行い(ステップ603)、デバッグ対象のユーザタスクの実行を再開させる(ステップ604)。これにより、実行を停止しているディスパッチ対象のユーザタスクは、実行を再開したことになる。
上述したように本実施形態においては、CPU11によるデバッグ割り込みのみによって特定のユーザタスクを停止させる構成であるため、実装が容易である。さらに、データアクセス時にもデバッグ割り込みを発生させる構成であるため、データアクセスが行われる場合にもユーザタスクを停止させることができる。
また、本実施形態においては、デバッグ対象のユーザタスクのディパッチ時にのみデバッグ割り込みを発生させる構成であるため、デバック割り込みのオーバーヘッドを削減することができる。
また、本実施形態においては、メモリ使用量もデバッグパラメータテーブル123分だけに留めた構成であるため、メモリ容量の小さい計算機でも実現可能な形態である。
以下、本実施形態のデバッグシステムの動作について、図7を参照してさらに具体的に説明する。なお、図7において、ユーザアプリケーション3は、図1のメモリ12上に展開されており、図1のOS121の管理下で動作を行うものとする。各ユーザタスク31〜33は、メッセージ通信によって相互にデータのやり取りを行い、共有データテーブル34にアクセスしながら動作を行うものとする。
このような環境で、操作者は、各ユーザタスク31〜33間でメッセージ通信されているメッセージ内容の検証と、共有データテーブル34へのライトアクセスの検証を行う。
まず、操作者は、入力装置2から、ユーザタスク31のタスクID(=1)と、メッセージを受信した直後に参照される共通関数の命令アドレスと、停止モード(=ブレークポイント停止モード)とを入力する。
デバッガタスク122は、入力装置2から入力されたタスクID(=1)をタスクIDフィールド1231に、命令アドレスをアドレスフィールド1233に、停止モード(=ブレークポイント停止モード)を停止モードフィールド1232に格納する(図4のステップ401)。
タイマ等によるディスパッチ要因が発生すると(図4のステップ402)、スケジューラ1213は、次に実行すべきユーザタスクのタスクID(ここでは、タスクID=1とする)をディスパッチャ1211に渡す(図4のステップ403)。
ディスパッチャ1211は、タスクIDフィールド1231からタスクIDを読み出し、スケジューラ1213から渡されたタスクIDと比較する(図4のステップ404)。ここでは、比較結果が一致することから、ディスパッチャ1211は、次に実行すべきユーザタスクがデバッグ対象のユーザタスクであると判断する。
次に、ディスパッチャ1211は、停止モードフィールド1232を読み出す。ここでは、停止モードは、ブレークポイント停止モードであるため、アドレスフィールド1233の値を命令アドレス比較フィールド1111に設定する(図4のステップ405)。
その後、ディスパッチャ1211は、ユーザタスク31のディスパッチを行い(図4のステップ406)、ユーザタスク31の実行を開始する(図4のステップ407)。
ここで、ユーザタスク31が命令アドレス比較フィールド1111に設定されている命令アドレスの命令を実行すると、CPU11は、デバッグ割り込みを発生させる(図5のステップ501)。
CPU11のデバッグ割り込み発生により、デバッグ割り込みハンドラ1212が起動される。デバッグ割り込みハンドラ1212は、デバッグ割り込みが発生した時点のユーザタスク31のタスクコンテキスト情報をタスクコンテキスト情報フィールド1235に格納し(図5のステップ502)、命令アドレス比較フィールド1111の設定をクリアする(図5のステップ503)。
デバッグ割り込みハンドラ1212は、次に動作すべきユーザタスクがデバッガタスク122であることを、スケジューラ1213に指示する(図5のステップ504)。スケジューラ1213は、ディスパッチャ1211に次に動作すべきユーザタスクがデバッガタスク122であることを通知し、ディスパッチャ1211は、デバッガタスク122にディスパッチを行う(図5のステップ505)。
以上の手順により、ユーザタスク31の実行が停止される。これを受けて、操作者は、入力装置2からメモリダンプ等のデバッグコマンドをデバッガタスク122に入力する。そして、操作者は、デバッガタスク122から出力されたデバッグ結果に基づき、ユーザタスク31が仕様通りのメッセージを受信しているかの検証を行う。
引き続き、操作者は、入力装置2から、ユーザタスク32のタスクID(=2)と、共有データテーブル34の検証したい箇所のデータアドレスと、停止モード(=データアクセス停止モード)と、アクセス属性(=ライト属性)とを入力する。
デバッガタスク122は、入力装置2から入力されたタスクID(=2)をタスクIDフィールド1231に、データアドレスをアドレスフィールド1233に、停止モード(=データアクセス停止モード)を停止モードフィールド1232に、アクセス属性(=ライト属性)をアクセス属性フィールド1234に格納する(図4のステップ401)。
次に、操作者は、実行を停止しているユーザタスク31の再開命令をデバッガタスク122に指示する。デバッガタスク122は、ユーザタスク31が次に実行すべきユーザタスクであることをスケジューラ1213に指示する。これを受けて、スケジューラ1213は、次に実行すべきユーザタスクがユーザタスク31であり、ユーザタスク31のディスパッチを行うことをディスパッチャ1211に指示する(図6のステップ601)。
ディスパッチャ1211は、タスクコンテキスト情報フィールド1235から、ユーザタスク31のタスクコンテキスト情報を読み出し、ユーザタスク31をデバッグ割り込み発生時のコンテキストに戻す(図6のステップ602)。
その後、ディスパッチャ1211は、実行を停止しているユーザタスク31のディスパッチを行い(ステップ603)、ユーザタスク31の実行を再開させる(ステップ604)。
以上の手順により、ユーザタスク31の実行が再開される。
タイマ等によるディスパッチ要因が発生すると(図4のステップ402)、スケジューラ1213は、次に実行すべきユーザタスクのタスクID(ここでは、タスクID=2とする)をディスパッチャ1211に渡す(図4のステップ403)。
ディスパッチャ1211は、タスクIDフィールド1231からタスクIDを読み出し、スケジューラ1213から渡されたタスクIDと比較する(図4のステップ404)。ここでは比較結果が一致することから、ディスパッチャ1211は、次に実行すべきユーザタスク32はデバッグ対象のユーザタスクであると判断する。
次に、ディスパッチャ1211は、停止モードフィールド1232を読み出す。ここでは、停止モードはデータアクセス停止モードであるため、アクセス属性フィールド1234を読み出す。ここでは、アクセス属性がライト属性であることから、ディスパッチャ1211は、ライトアドレス比較フィールド1113にアドレスフィールド1233の値を設定する(図4のステップ405)。
その後、ディスパッチャ1211は、ユーザタスク32のディスパッチを行い(図4のステップ406)、ユーザタスク32の実行を開始する(図4のステップ407)。
ここで、ユーザタスク32がライトアドレス比較フィールド1113に設定されているライトアドレスにライトアクセスすると、CPU11は、デバッグ割り込みを発生させる(図5のステップ501)。
CPU11のデバッグ割り込み発生により、デバッグ割り込みハンドラ1212が起動される。デバッグ割り込みハンドラ1212は、デバッグ割り込みが発生した時点のユーザタスク32のコンテキスト情報をタスクコンテキスト情報フィールド1235に格納し(図5のステップ502)、ライトアドレス比較フィールド1113の設定をクリアする(図5のステップ503)。
次に、デバッグ割り込みハンドラ1212は、次に動作すべきユーザタスクがデバッガタスク122であることを、スケジューラ1213に指示する(図5のステップ504)。スケジューラ1213は、ディスパッチャ1211に次に動作すべきユーザタスクがデバッガタスク122であることを通知し、ディスパッチャ1211は、デバッガタスク122にディスパッチを行う(図5のステップ505)。
以上の手順により、ユーザタスク32の実行が停止される。これを受けて、操作者は、入力装置2からメモリダンプ等のデバッグコマンドをデバッガタスク122に入力する。そして、操作者は、デバッガタスク122から出力されたデバッグ結果に基づき、ユーザタスク32が仕様通りの値を共有データテーブル34に書き込んでいるかの検証を行う。
本発明の一実施形態のデバッグシステムの構成を示すブロック図である。 図1に示したデバッグレジスタのフォーマットを示す図である。 図1に示したデバッグパラメータテーブルのフォーマットを示す図である。 図1に示したデバッグシステムにおいて、ユーザタスクを停止するための前処理を行う場合の動作を説明するフローチャートである。 図1に示したデバッグシステムにおいて、デバッグ割り込みを行う場合の動作を説明するフローチャートである。 図1に示したデバッグシステムにおいて、実行を停止していたユーザタスクの実行を再開する場合の動作を説明するフローチャートである。 図1に示したデバッグレジスタのソフトウェア構成を示す図である。
符号の説明
1 計算機
2 入力装置
3 ユーザアプリケーション
11 CPU
12 メモリ
31 ユーザタスク
32 ユーザタスク
33 ユーザタスク
34 共有データテーブル
111 デバッグレジスタ
121 OS
122 デバッガタスク
123 デバッグパラメータテーブル
124 ユーザタスク
125 ユーザタスク
126 ユーザタスク
1111 命令アドレス比較フィールド
1112 リードアドレス比較フィールド
1113 ライトアドレス比較フィールド
1211 ディスパッチャ
1212 デバッグ割り込みハンドラ
1213 スケジューラ
1231 タスクIDフィールド
1232 停止モードフィールド
1233 アドレスフィールド
1234 アクセス属性フィールド
1235 タスクコンテキスト情報フィールド

Claims (20)

  1. マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるデバッグシステムにおいて、
    前記特定のタスクの実行開始が指示された時点で、該特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定手段と、
    前記特定のタスクが前記レジスタに設定された前記特定のライトアドレスにライトアクセスした時点で、デバッグ割り込みを発生する制御手段と、
    前記制御手段により前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止手段とを有することを特徴とするデバッグシステム。
  2. 前記設定手段は、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定し、
    前記制御手段は、前記特定のタスクが前記レジスタに設定された前記特定のリードアドレスにリードアクセスした時点で、前記デバッグ割り込みを発生することを特徴とする、請求項1に記載のデバッグシステム。
  3. 前記設定手段は、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定し、
    前記制御手段は、前記特定のタスクが前記特定の命令アドレスの命令を実行した時点で、前記デバッグ割り込みを発生することを特徴とする、請求項1または2に記載のデバッグシステム。
  4. 前記停止手段は、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記設定手段に前記特定のタスクをディスパッチさせるための処理とを行うことを特徴とする、請求項1から3のいずれか1項に記載のデバッグシステム。
  5. 前記設定手段は、前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行うことを特徴とする、請求項4に記載のデバッグシステム。
  6. マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるオペレーティングシステムにおいて、
    前記特定のタスクの実行開始が指示された時点で、制御手段にデバッグ割り込みを発生させるアドレスとして、前記特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定手段と、
    前記制御手段により前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止手段とを有することを特徴とするオペレーティングシステム。
  7. 前記設定手段は、前記制御手段に前記デバッグ割り込みを発生させるアドレスとして、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定することを特徴とする、請求項6に記載のオペレーティングシステム。
  8. 前記設定手段は、前記制御手段に前記デバッグ割り込みを発生させるアドレスとして、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定することを特徴とする、請求項6または7に記載のオペレーティングシステム。
  9. 前記停止手段は、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記設定手段に前記特定のタスクをディスパッチさせるための処理とを行うことを特徴とする、請求項6から8のいずれか1項に記載のオペレーティングシステム。
  10. 前記設定手段は、前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行うことを特徴とする、請求項9に記載のオペレーティングシステム。
  11. マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるデバッグシステムによるデバッグ方法において、
    前記特定のタスクの実行開始が指示された時点で、該特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定ステップと、
    前記特定のタスクが前記レジスタに設定された前記特定のライトアドレスにライトアクセスした時点で、デバッグ割り込みを発生する割り込み発生ステップと、
    前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止ステップとを有することを特徴とするデバッグ方法。
  12. 前記設定ステップでは、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定し、
    前記割り込み発生ステップでは、前記特定のタスクが前記レジスタに設定された前記特定のリードアドレスにリードアクセスした時点で、前記デバッグ割り込みを発生することを特徴とする、請求項11に記載のデバッグ方法。
  13. 前記設定ステップでは、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定し、
    前記割り込み発生ステップでは、前記特定のタスクが前記レジスタに設定された前記特定の命令アドレスの命令を実行した時点で、前記デバッグ割り込みを発生することを特徴とする、請求項11または12に記載のデバッグ方法。
  14. 前記停止ステップでは、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記特定のタスクをディスパッチさせる処理とを行うことを特徴とする、請求項11から13のいずれか1項に記載のデバッグ方法。
  15. 前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行う再開ステップをさらに有することを特徴とする、請求項14に記載のデバッグ方法。
  16. マルチタスク環境下で実行される複数のタスクのうち特定のタスクのデバッグを行う場合に該特定のタスクの実行を停止させるデバッグシステムに、
    前記特定のタスクの実行開始が指示された時点で、該特定のタスクによりライトアクセスされる特定のライトアドレスをレジスタに設定し、その後に、前記特定のタスクをディスパッチして実行を開始させる設定ステップと、
    前記特定のタスクが前記レジスタに設定された前記特定のライトアドレスにライトアクセスした時点で、デバッグ割り込みを発生する割り込み発生ステップと、
    前記デバッグ割り込みが発生した時点で、前記特定のタスクの実行を停止させる停止ステップとを実行させることを特徴とするプログラム。
  17. 前記設定ステップでは、前記特定のタスクによりリードアクセスされる特定のリードアドレスを前記レジスタに設定し、
    前記割り込み発生ステップでは、前記特定のタスクが前記レジスタに設定された前記特定のリードアドレスにリードアクセスした時点で、前記デバッグ割り込みを発生することを特徴とする、請求項16に記載のプログラム。
  18. 前記設定ステップでは、前記特定のタスクにより実行される特定の命令アドレスを前記レジスタに設定し、
    前記割り込み発生ステップでは、前記特定のタスクが前記レジスタに設定された前記特定の命令アドレスの命令を実行した時点で、前記デバッグ割り込みを発生することを特徴とする、請求項16または17に記載のプログラム。
  19. 前記停止ステップでは、前記デバッグ割り込みが発生した時点で、前記レジスタの設定内容をクリアする処理と、前記デバッグ割り込みが発生した時点の前記特定のタスクのコンテキストを表すコンテキスト情報をメモリに格納する処理と、前記特定のタスクをディスパッチさせる処理とを行うことを特徴とする、請求項16から18のいずれか1項に記載のプログラム。
  20. 前記デバッグシステムに、
    前記メモリから前記特定のタスクのコンテキスト情報を読み出し、読み出したコンテキスト情報に基づいて、前記特定のタスクを前記デバッグ割り込みが発生した時点のコンテキストに戻す処理と、前記特定のタスクをディスパッチして実行を再開させる処理とを行う再開ステップをさらに実行させることを特徴とする、請求項19に記載のプログラム。
JP2006033814A 2006-02-10 2006-02-10 デバッグシステム、オペレーションシステム、デバッグ方法、プログラム Pending JP2007213396A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006033814A JP2007213396A (ja) 2006-02-10 2006-02-10 デバッグシステム、オペレーションシステム、デバッグ方法、プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006033814A JP2007213396A (ja) 2006-02-10 2006-02-10 デバッグシステム、オペレーションシステム、デバッグ方法、プログラム

Publications (1)

Publication Number Publication Date
JP2007213396A true JP2007213396A (ja) 2007-08-23

Family

ID=38491760

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006033814A Pending JP2007213396A (ja) 2006-02-10 2006-02-10 デバッグシステム、オペレーションシステム、デバッグ方法、プログラム

Country Status (1)

Country Link
JP (1) JP2007213396A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009157874A (ja) * 2007-12-28 2009-07-16 Nec Electronics Corp 情報処理装置、及びソフトウェアのデバッグ方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009157874A (ja) * 2007-12-28 2009-07-16 Nec Electronics Corp 情報処理装置、及びソフトウェアのデバッグ方法

Similar Documents

Publication Publication Date Title
US8327336B2 (en) Enhanced thread stepping
US7992042B2 (en) Debug support device, and program for directing computer to perform debugging method
JP4388518B2 (ja) スレッドデバッグ装置、スレッドデバッグ方法及びプログラム
US10191835B2 (en) Multi-threaded debugger support
JP4476193B2 (ja) 情報処理方法および情報処理装置
JP2004086910A (ja) コンピュータ・プログラムをデバックするための方法、システムおよびソフトウェア・プロダクト
JP2009175960A (ja) 仮想マルチプロセッサシステム
JP2007213396A (ja) デバッグシステム、オペレーションシステム、デバッグ方法、プログラム
US8726244B2 (en) Software breakpoint handling by eliminating instruction replacement and execution under certain conditions
JPH11175369A (ja) プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラムを記録した媒体
US20080133838A1 (en) Data processing device
JPH0895798A (ja) データ処理装置
CN111563000A (zh) 一种文件生成方法、智能终端及存储介质
JP2009064233A (ja) デバッグ装置、デバッグ方法、及びデバッグプログラム
JP2912269B2 (ja) デバッグシステムおよびその方法
WO2006070510A1 (ja) プログラムデバッグ装置、プログラムデバッグ方法及び情報記憶媒体
JPH1145193A (ja) ソフトウエア開発支援方法およびソフトウエア開発支援装置および記録媒体
JP2004318658A (ja) デバッグ制御装置及びその制御方法
JP2002366378A (ja) プログラムのデバッグ装置及びデバッグ方法、並びに記憶媒体
JP2021517291A (ja) 外部例外処理
JPH01145740A (ja) マルチプロセス用エミユレータ
JPS638946A (ja) プログラムデバツグサポ−ト方式
JP2001125804A (ja) 割り込み処理制御装置および方法
JP2004295261A (ja) オペレーティングシステム制御方法、およびその方法をコンピュータに実行させるプログラム、ならびにオペレーティングシステム制御装置
JPH0784826A (ja) マイクロプロセッサ