明 細 書
デバッグシステム、デバッグ方法、およびプログラム
技術分野
[0001] 本発明は、デバッグシステム、デバッグ方法、およびプログラムに関し、特に、複数 の実行ユニットを有するシステムにおけるデバッグシステム、デバッグ方法およびプロ グラムに関する。
背景技術
[0002] 近年、開発するプログラムの規模は増大してきており、デバッグ作業に要する時間 が製品開発スケジュールに与える影響が大きくなつてきている。そのため、効率よくデ ノ ッグを行うことができる環境の構築が望まれて 、る。効率よくデバッグを行うための 手法として、特許文献 1の「プロセッサ情報収集装置およびそのプログラム記録媒体」 に記載されたデバッグシステムのように、デバッグを支援する診断プロセッサを用いる 方法がある。
[0003] 図 1に示すように、この従来のデバッグシステムは、演算プロセッサ群 801と、メモリ 装置 802と、演算プロセッサ群 801の動作状態を監視する診断プロセッサ 803とを備 えている。そして、診断プロセッサ 803は、演算プロセッサ群 801を構成する各演算 プロセッサがストール状態になったことを検出するストール検出部 831と、演算プロセ ッサの内部状態を採集する採集部 832と、演算プロセッサの内部状態をメモリ装置 8 02に保存する書込み部 834と、メモリ装置 802に演算プロセッサの内部状態を保持 したまま情報処理システムを初期化する初期化部 836とから構成されている。
[0004] このような構成を有する従来のデバッグシステムは次のように動作する。
[0005] まず、ストール検出部 831が、演算プロセッサ群 801を構成する各演算プロセッサ 力 Sストール状態になったことを検出する。ストールが発生した場合、採集部 832が、演 算プロセッサの内部状態を採集し、書込み部 834が、採集された演算プロセッサの 内部状態を、演算プロセッサの内部状態 821としてメモリ装置 802に書き込む。そし て、メモリ装置 802に演算プロセッサの内部状態を保持したまま情報処理システムが 初期化される。よって、初期化後もメモリ装置 802上に演算プロセッサの内部状態の
情報が保存されているため、この情報を用いることで、ストールが発生した状況につ V、てのデバッグ作業を行うことができる。
[0006] しかし、特許文献 1に記載の従来技術のように、診断プロセッサ 803というデバッグ のための高機能な専用ハードウェアをシステムに搭載する手法は、デバッグを効率 化する効果をもたらすものの、通常動作に寄与しな 、ノヽ一ドウエアの追カ卩が必要とな り、システムのコストが増加するという弊害がある。また、特に組込み機器ではコストに 対する要求が厳しく、専用ハードウェアの搭載が許容されな 、ことが多 、。
[0007] 一方で、半導体集積回路の微細化や、システム LSIに対して要求される機能の高 度化に伴い、システム LSIに CPUなどの複数の実行ユニットを搭載することが増えて きている。デバッグのための専用ハードウェアによるコストの増加を避けつつ、デバッ グを効率ィ匕する従来技術として、特許文献 2の「マルチ CPUのリセット回路およびリセ ット方法」に記載されたデバッグシステムがある。
[0008] 図 2に示すように、この従来のデバッグシステムは、複数の CPU (CPU—A901、 C PU— B902)を内蔵するシステム LSIのリセットおよび割り込みを制御する CPU制御 回路 903を備えている。 CPU制御回路 903は、複数の CPU (CPU—A901、 CPU -B902)のうちの 1つを、通常動作用プログラムをデバッグ用プログラムに置き換え たデバッグ手段に設定する機能を有する。また、 CPU制御回路 903は、割込み制御 回路 904と、バストレース機能 905と、ストラップ取込み回路 906と、デバッグ制御回 路 907とを備えている。
[0009] このような構成を有する従来のデバッグシステムの動作について、図 3を参照して説 明する。
[0010] まず、 CPU制御回路 903がハードウェアリセットを検知すると、デバッグ制御回路 9 07力 内部の各機能ブロック(図示せず)にリセットを発行する (ステップ S91)。
[0011] 次に、ストラップ取込み回路 906が、ストラップ設定部 908からのストラップ情報等の 外部設定情報を読み込む (ステップ S92)。
[0012] 読み込んだストラップ情報が通常動作を示して 、る場合 (ステップ S93の No)、デ ノ ッグ制御回路 907が、読み込んだストラップ情報に基づき、 CPU— A901および C PU— B902と各機能ブロックとに対するリセットを解除する (ステップ S94)。
[0013] リセットが解除されると、各機能ブロックは動作を開始する (ステップ S95)。
[0014] 一方、読み込んだストラップ情報がデバッグを指定して 、る場合 (ステップ S93の Y es)、デバッグ処理に入る(ステップ S96)。
[0015] ここで、ストラップ情報がデバッガとして CPU— B902を選択して 、る場合 (ステップ S961の B)、デバッグ制御回路 907が、ストラップ情報により選択された CPU— B90 2のリセットを解除する(ステップ S962)。
[0016] その後、デバッガ CPU— B902が起動し (ステップ S963)、立ち上がり動作が完了 すると(ステップ S 964の Yes)、ターゲット側の CPU— A901と各機能ブロックのリセッ トを解除する (ステップ S965)。
[0017] 一方、ストラップ情報がデバッガとして CPU— A901を選択している場合 (ステップ S961の A)、デバッグ制御回路 907が、ストラップ情報により選択された CPU— A90 1のリセットを解除する(ステップ S966)。
[0018] その後、デバッガ CPU— A901が起動し (ステップ S967)、立ち上がり動作が完了 すると(ステップ S968の Yes)、ターゲット側の CPU— B902と各機能ブロックのリセッ トを解除する (ステップ S969)。
[0019] 複数の実行ユニットが連携動作するシステムにお 、て実行されるプログラムのデバ ッグを行う場合、複数の実行ユニット間の通信に関する情報であって実行ユニット以 外の外部力 確認できる情報や、不具合発生時の情報を保存しておいて、これらの 情報を後から確認することがある。しかし、この方法では、不具合発生原因を十分に 追究することができないことが多い。他方、通常動作プログラムにより生成される送信 内容を擬似的に生成するデバッグ用プログラムや、送受信内容をデバッグ作業者に 通知するデバッグ用プログラムを利用すると、不具合発生原因を効果的に追求でき ることが多い。そのため、これらのデバッグ用プログラムを実行ユニット上で動作させ てデバッグ作業を行うことがある。
[0020] 一方で、これらのデバッグ用プログラムを事前に動作させておくと、 CPUの負荷が 高くなり、また、デバッグ用プログラムが記憶領域を使用することから、通常動作プロ グラムの動作タイミングなどに影響が出る。そのため、デバッグ用プログラムの存在に よって、通常動作で発生する可能性がある不具合が発生しない、また、この逆に通常
動作プログラムのみの実行では発生しないはずの不具合が発生するなどの弊害があ る。
[0021] また、複数の実行ユニットが連携動作するシステムにおいて実行されるプログラムに おいては、特にタイミングに起因する不具合については、その不具合がどの実行ュ ニットで発生するかが一意に定まらないため、その不具合の発生を想定することは困 難である。ここで、実行ユニットがストール状態になった場合や、実行ユニットの動作 に影響が出る不具合が発生した場合、ストール状態になった実行ユニット上のデバッ グ用プログラムや、動作に影響を受けた実行ユニット上のデバッグ用プログラムが使 用できないことがある。そのため、別の実行ユニット上でデバッグ用プログラムを動作 させる必要がある。しかし、不具合発生箇所が一意に定まらない不具合の場合、その 不具合に影響を受けな 、実行ユニットを決定しておくことができな 、。
[0022] また、特許文献 2に記載の従来手法は、リセット時にデバッグ用プログラムを起動す る実行ユニット(デバッグ用 CPU)を割り当てることを特徴としており、デバッグ用 CPU を変更する場合には再度リセットを行う必要がある。そのため、リセット時に割り当てら れたデバッグ用 CPUの動作に影響を与える不具合が発生した場合、その状況をデ ノ ッグすることができない。
[0023] 上述したように、上記の従来のデバッグシステムでは、複数の実行ユニット(CPU) が連携動作するシステムにおいてデバッグを行う際に、下記のような問題が発生する
(1)予めデバッグ用プログラムを起動させておくと、通常動作プログラムのみを動作さ せた場合と動作タイミングが異なってしまうため、デバッグ用プログラムの存在によつ て、通常動作で発生する可能性がある不具合が発生しない、また、この逆に通常動 作プログラムのみの実行では発生しないはずの不具合が発生する。
(2)デバッグ用プログラムを実行させる実行ユニットを予め設定しておく必要があるが 、設定された実行ユニットの動作に影響を及ぼす不具合が発生した場合、その状況 をデバッグすることができなくなる。
特許文献 1:特開平 11― 184736号公報
特許文献 2:特開 2004 - 164113号公報
発明の開示
[0024] 本発明は上記の問題点に鑑みてなされたものであって、複数の実行ユニットが連 携動作するシステムにお 、て、任意の実行ユニット上で任意のタイミングでデバッグ 用プログラムを起動して、デバッグ作業を行うことを可能にするデバッグシステム、デ ノ ッグ方法、およびプログラムを提供することを目的とする。
[0025] 上記目的を達成するために、本発明のデバッグシステムは、
複数の実行ユニットが連携動作するシステムにおいて実行されるプログラムのデバ ッグを行うためのデバッグシステムであって、
デバッグ用プログラムの起動を指示する起動指示を受信すると、前記複数の実行 ユニットに対して前記起動指示を振り分ける起動指示振り分け手段と、
前記複数の実行ユニットの各々に対応して設けられ、前記起動指示振り分け手段 により振り分けられた起動指示に基づいて、対応する実行ユニット上でデバッグ用プ ログラムを起動する複数のデバッグ用プログラム起動手段とを備えている。
[0026] また、前記起動指示振り分け手段は、前記起動指示により指定された実行ユニット に対応するデバッグ用プログラム起動手段に対して前記起動指示を送信してもよい。
[0027] 本発明によれば、デバッグ用プログラムを起動するためのデバッグ用プログラム起 動手段を各実行ユニット毎に設け、このデバッグ用プログラム起動手段により、起動 指示振り分け手段により振り分けられた起動指示に基づいてデバッグ用プログラムの 起動を行うようにしている。そのため、通常動作プログラムのみを動作させた状態で不 具合が確認された場合であっても、任意のタイミングで不具合の発生原因となる処理 を行っている実行ユニット上でデバッグ用プログラムを起動してデバッグ作業を行うこ とが可能となる。
[0028] また、前記起動指示振り分け手段は、前記複数の実行ユニットの各々の動作状況 に基づ!/ヽて定められる実行ュニットに対応するデバッグ用プログラム起動手段に対し て前記起動指示を送信してもよ ヽ。
[0029] また、前記起動指示振り分け手段は、前記複数の実行ユニットの各々が利用する 記憶領域の空き容量を検出し、検出された空き容量に余裕のある実行ユニットに対 応するデバッグ用プログラム起動手段に対して前記起動指示を送信してもよい。
[0030] このようにすれば、空き容量不足でデバッグ用プログラムを起動できない状態が発 生することを防ぐことが可能となる。
[0031] また、前記起動指示振り分け手段は、デバッグ対象の実行ユニットと関係が無いま たは関係が少ない実行ユニットに対応するデバッグ用プログラム起動手段に対して 前記起動指示を送信してもよ ヽ。
[0032] このようにすれば、不具合の発生原因となる処理を行って!/、る実行ユニットと連携し て動作している実行ユニット上でデバッグ用プログラムを起動して不具合の発生原因 が確認できなくなるという弊害の発生を防ぐことが可能となる。
[0033] また、本発明の他のデバッグシステムでは、前記複数の実行ユニットの!/、ずれか 1 つに対応して設けられ、通信ポートからデバッグ用プログラムに対して送信されるコマ ンドを、前記起動指示により指定された実行ユニット上のデバッグ用プログラムに対し て中継する中継手段をさらに備える。
[0034] 本発明によれば、通信ポートの通信対象の実行ユニットが固定されているようなシ ステムに対しても適用が可能になる。
[0035] さらに、本発明の他のデバッグシステムでは、前記複数の実行ユニットの各々に対 応して設けられ、通信ポートからデバッグ用プログラムに対して送信されるコマンドを
、前記起動指示により指定された実行ユニット上のデバッグ用プログラムに対して中 継する複数の中継手段をさらに備える。
[0036] 本発明によれば、デバッグ用プログラムに対して送信されるコマンドを中継する中 継手段が各実行ユニット毎に設けられているので、ある実行ユニットがストール状態と なった場合でも、通信ポートの通信対象の実行ユニットの煩雑な切り替えを不要とし つつ、複数の実行ユニットで同時に複数のデバッグ用プログラムを起動することが可 能となる。
[0037] さらに、本発明の他のデバッグシステムでは、前記起動指示がストール状態の実行 ユニットに対応するデバッグ用プログラム起動手段には送信されないようにするスト一 ル発生実行ユニット回避手段をさらに備える。
[0038] 本発明によれば、ストール発生実行ユニット回避手段を設けることにより、デバッグ 用プログラム起動指示力 Sストール状態の実行ユニットに対応するデバッグ用プロダラ
ム起動手段に対して送信されてしま 、、デバッグ作業を行うことができな 、と 、う弊害 を防ぐことが可能となる。
[0039] さらに、本発明の他のデバッグシステムでは、
前記複数の実行ユニットのいずれかにおいて起動されるデバッグ用プログラム内に は、
仮想アドレスを物理アドレスに変換する物理'仮想アドレス変換手段と、 前記物理'仮想アドレス変換手段により変換された物理アドレスを用いて、オペレー ティングシステムが管理情報をメモリに配置する構造を考慮して、前記デバッグ用プ ログラムが起動している実行ユニットとは異なるデバッグ対象の実行ユニットが利用す る記憶領域力 必要情報を抽出する情報抽出手段とが構成されている。
[0040] 本発明によれば、デバッグ用プログラム内に物理'仮想アドレス変換手段と情報抽 出手段とを構成しているので、デバッグ用プログラムは、起動された実行ユニットとは 異なる実行ユニットが利用する記憶領域を参照することが可能になる。そのため、デ ノ ッグ対象の実行ユニットがストール状態となった場合でも、外部力も記憶領域の内 容を確認することが可能となる。
[0041] さらに、本発明の他のデバッグシステムでは、前記複数の実行ユニットの中カも不 具合が発生した実行ユニットを検出し、検出された実行ユニットのデバッグを行うため の起動指示を生成する不具合検出手段をさらに備える。
[0042] 本発明によれば、複数の実行ユニットの中のいずれかの実行ユニットに不具合が 発生した場合、その不具合をデバッグするためのデバッグ用プログラムの起動指示を 不具合検出手段により生成してデバッグ用プログラムを自動的に起動することが可能 となる。従って、外部力もデバッグ用プログラム起動指示を生成することなぐデバッグ 作業を行うことが可能となる。
[0043] さらに、本発明の他のデバッグシステムでは、
前記複数の実行ユニットの各々にお 、て割り込みが発生した場合に該割り込みを 処理するために最初に起動されるプログラムである割り込みハンドラ内には、 他の実行ユニットからの割り込みが発生した際に、予め設定されたメモリ内の情報を 取得する情報取得 ·制御手段と、
前記情報取得 '制御手段により取得された情報を、割り込みを発生させた実行ュニ ットに対して送信する応答生成手段とが構成されており、
前記複数の実行ユニットのいずれかにおいて起動されるデバッグ用プログラム内に は、
デバッグ対象の実行ユニットに対して割り込みを発生させる実行ユニット間割り込み 生成手段と、
デバッグ対象の実行ユニットからの応答を受信する応答受信手段とが構成されてい る。
[0044] 本発明によれば、割り込みハンドラ内にメモリ内の情報を取得するための情報取得 •制御手段を構成し、デバッグ用プログラム内に実行ユニット間割り込み生成手段を 構成しているので、デバッグ対象の実行ユニットがストール状態となった場合でも、キ ャッシュメモリやレジスタ等のメモリ内の情報を取得してデバッグ作業を行うことが可能 となる。
[0045] 以上説明したように、本発明は、デバッグ用プログラム起動指示振り分け手段と、デ ノ ッグ用プログラム起動手段を備えることにより、任意のタイミングで任意の実行ュ- ット上にデバッグ用プログラムを起動できるよう構成されていることにより、通常動作プ ログラムのみを実行した状態で不具合を発生させる力、その直前まで進め、その後、 不具合の発生原因となる処理を行っている実行ユニット上にデバッグ用プログラムを 起動し、デバッグ作業を行うことが可能になるという効果を得ることができる。
図面の簡単な説明
[0046] [図 1]従来のデバッグシステムの一構成例を示すブロック図である。
[図 2]従来のデバッグシステムの他の構成例を示すブロック図である。
[図 3]図 2に示したデバッグシステムの動作を説明するフローチャートである。
[図 4]本発明を実施するための対象ハードウェアの一構成例を示すブロック図である
[図 5]本発明の第 1の実施形態のデバッグシステムの構成を示すブロック図である。
[図 6]図 5に示したデバッグ用プログラム起動指示振り分け部の一構成例を示すプロ ック図である。
[図 7]図 5に示したデバッグシステムの動作を説明するフローチャートである。
[図 8]図 5および図 6に示したデバッグ用プログラム起動指示振り分け部の動作を説 明するフローチャートである。
[図 9]本発明の第 2の実施形態のデバッグシステムの構成を示すブロック図である。
[図 10]本発明の第 3の実施形態のデバッグシステムの構成を示すブロック図である。
[図 11]本発明の第 4の実施形態のデバッグシステムの構成を示すブロック図である。
[図 12]図 11に示したストール発生実行ユニット回避部の動作を説明するフローチヤ ートである。
[図 13]本発明の第 5の実施形態のデバッグシステムの構成を示すブロック図である。
[図 14]図 13に示した物理'仮想アドレス変換部の第 2の物理'仮想アドレス変換動作 を説明するフローチャートである。
[図 15]図 13に示した情報抽出部の動作を説明するフローチャートである。
[図 16]本発明の第 6の実施形態のデバッグシステムの構成を示すブロック図である。
[図 17]図 16に示した不具合検出部の第 2の構成の動作を説明するフローチャートで ある。
[図 18]図 16に示した不具合検出部の第 3の構成の動作を説明するフローチャートで ある。
[図 19]図 16に示した不具合検出部の第 4の構成の動作を説明するフローチャートで ある。
[図 20]本発明の第 7の実施形態のデバッグシステムの構成を示すブロック図である。
[図 21]図 20に示したデバッグシステムの動作を説明するフローチャートである。
[図 22]本発明の第 8の実施形態のデバッグシステムの構成を示すブロック図である。
[図 23]図 22に示したデバッグシステムの動作を説明するフローチャートである。 発明を実施するための最良の形態
[0047] 以下に、本発明の実施形態について図面を参照して説明する。
[0048] (第 1の実施形態)
まず、本発明の第 1の実施形態のデバッグシステムについて図面を参照して説明 する。
[0049] 図 4に示すように、本実施形態のデバッグシステムは、 2個の実行ユニット A, Bと、 通信ポート 1と、 RAM (Random Access Memory)等により構成され書き換え可能な記 憶部 2と、 HDD (Hard Disk Drive)装置等により構成され各種プログラムが格納され たプログラム格納部 3とを備えている。そして、記憶部 2の記憶領域は、実行ユニット A用プログラム領域 6と、実行ユニット B用プログラム領域 7とから構成されている。
[0050] 図 5に示すように、実行ユニット A用プログラム領域 6は、デバッグ用プログラム起動 指示振り分け部(図 5中では、振り分け部と表示する。)61と、デバッグ用プログラム起 動部(図 5中では、起動部と表示する。)62と、デバッグ用プログラム 63と、通常動作 プログラム 64とを備えて 、る。これらは実行ユニット A上で実行されるプログラムとして 構成されている。
[0051] また、図 5に示すように、実行ユニット B用プログラム領域 7も、デバッグ用プログラム 起動指示振り分け部 71と、デバッグ用プログラム起動部 72と、デバッグ用プログラム 73と、通常動作プログラム 74とを備えている。これらは実行ユニット B上で実行される プログラムとして構成されて 、る。
[0052] ここで、デバッグ用プログラム起動指示振り分け部 61, 71およびデバッグ用プログ ラム起動部 62, 72は、記憶部 2内では単にプログラムとして記憶されていて、実行ュ ニット A, B上で起動されて初めて各種の動作を行うものである。ただし、ここでは、説 明を簡単にするために、デバッグ用プログラム起動指示振り分け部 61, 71およびデ バッグ用プログラム起動部 62, 72は、独自に各種の動作を行うものとして説明する。
[0053] これらの各種プログラムは、プログラム格納部 3から記憶部 2に読み込まれ、記憶部 2上の所定の領域に記憶される。
[0054] デバッグ用プログラム起動指示振り分け部 61, 71は、通信ポート 1から送られてくる デバッグ用プログラムの起動指示 (以下、単に、起動指示と称する。)を受信すると、 この起動指示により指定されている実行ユニットに対して、受信したデバッグ用プログ ラムを振り分ける。デバッグ用プログラム起動部 62, 72は、実行ユニット A, Bの各々 に対応して設けられており、起動指示振り分け部 61, 71により振り分けられた起動指 示に基づいて、対応する実行ユニット上でデバッグ用プログラム 63, 73を起動する。
[0055] ここで、図 6に示すように、デバッグ用プログラム起動指示振り分け部 61は、通信ポ
ート 1から起動指示を受信する受信部 611と、デバッグ用プログラム起動部 62に起動 指示を送信する送信部 614と、実行ユニット間通信を用いて他の実行ユニット Bに起 動指示を送信する送信部 612と、他の実行ユニット Bから実行ユニット間通信を用い て送信されてくる起動指示を受信する受信部 615と、通信ポート 1の通信対象の実行 ユニットを変更する通信対象変更部 613とを備えている。
[0056] また、デバッグ用プログラム起動指示振り分け部 71も同様に、受信部 711と、送信 部 714と、送信部 712と、受信部 715と、通信対象変更部 713とを備えている。
[0057] 次に、図 5および図 7のフローチャートを参照して本実施形態のデバッグシステムの 全体動作について説明する。
[0058] まず、外部の制御端末(図示せず)において入力された起動指示が、通信ポート 1 に対して送られてくる。この起動指示には、デバッグ用プログラムを起動する実行ュ ニットを指定する符号と、起動するデバッグ用プログラムの種別を指定する符号とが 含まれている。
[0059] ここで、デバッグ用プログラム起動指示振り分け部 61, 71が、通信ポート 1からデバ ッグ用プログラム起動指示を受信すると (ステップ S1)、起動指示で指定されている、 デバッグ用プログラムを起動する実行ユニットに対して、起動指示を振り分け、デバッ グ用プログラム起動部 62, 72に起動指示を発行する (ステップ S2)。その後、デバッ グ用プログラム起動部 62, 72が、デバッグ用プログラム 63, 73の起動を行う(ステツ プ S3)。
[0060] ここで、デバッグ用プログラム 63, 73が通信ポート 1からコマンドを受信すると (ステ ップ S4)、デバッグ用プログラム 63, 73により構成されるコマンド解析部(図示せず) 力 Sコマンドを解析する。通信ポート 1から受信したコマンドがデバッグコマンドの場合 は (ステップ S5の No)、コマンドに応じた作業内容が実行され、デバッグ作業が行わ れる。ここで、作業内容によっては通信ポート 1を通じてデータの送受信を行うことも ある。通信ポート 1から受信したコマンドが終了コマンドであった場合は (ステップ S5 の Yes)、デバッグ用プログラム 63, 73はデバッグを終了する。
[0061] ここで、コマンド解析部とは、受信したコマンドの内容を解析するための手段であり、 デバッグ用プログラム 63, 73により構成される。また、コマンドの種類としては、上述
した終了コマンド以外にも、メモリやレジスタの内容を読み込むコマンドや、メモリゃレ ジスタに値を書き込むコマンドが存在する。
[0062] 次に、図 6および図 8のフローチャートを参照して、デバッグ用プログラム起動指示 振り分け部 61, 71の動作について説明する。ここでは、通信ポート 1の割り込み先の 初期値が実行ユニット Aであるものとして説明する。
[0063] まず、デバッグ用プログラム起動指示が通信ポート 1から送られてきた場合、実行ュ ニット Aに対する割り込みが発生し (ステップ S11)、起動指示振り分け部 61が起動す る。その後、受信部 611が通信ポート 1からの起動指示を受信し (ステップ S12)、そ の宛先を判定する。ここで、宛先が実行ユニット Aであった場合には (ステップ S21の Yes)、送信部 614が、実行ユニット Aのデバッグ用プログラム起動部 62に対して起 動指示を送信する (ステップ S22)。一方、宛先が実行ユニット Bであった場合には( ステップ S21の No)、ユニット間通信を用いる送信部 612が、実行ユニット Bに対して 起動指示を送信する (ステップ S23)。次に、実行ユニット B側の起動指示振り分け部 71が、受信部 715によりこの起動指示を受信すると (ステップ S24)、通信対象変更 部 713が、通信ポート 1の通信対象を実行ユニット Bに変更し (ステップ S25)、送信 部 714が、実行ユニット Bのデバッグ用プログラム起動部 72に対して起動指示を送信 する。
[0064] なお、本実施形態では、通信ポート 1からデバッグ用プログラムの起動指示を受け 取ることによって、デバッグ用プログラムを起動するものとして説明した。その他にも、 タイマなどを用いて起動指示を与えることにより一定時間経過後にデバッグ用プログ ラムを起動し、その時点での状況を確認するような構成とすることもできる。また、ブレ イクポイントを設定する方法、ある地点に到達した時にデバッグ対象のプログラム自 身が起動指示を発行する方法などにより、プログラムが特定地点に到達したことによ つて、デバッグ用プログラムを起動することとしてもよい。
[0065] また、本実施形態では、 2個の実行ユニット A, Bを備えるシステムを例に挙げて説 明したが、 3個以上の任意の個数の実行ユニットを備えるシステムへの拡張も容易に 可能である。
[0066] さらに、本実施形態では、デバッグ用プログラムを起動する実行ユニットが予め指定
されていて、デバッグ用プログラム起動指示振り分け部 61, 71は、起動指示により指 定された実行ユニットに対して起動指示を振り分けるものとして説明したが、デバッグ 用プログラムを起動する実行ユニットを自動的に選択する構成とすることもできる。例 えば、実行ユニット A, Bの動作状況に基づいて定められる実行ユニットに対応した デバッグ用プログラム起動部に対して起動指示を送るように、デバッグ用プログラム起 動指示振り分け部 61, 71を構成することができる。ここで、実行ユニット A, Bの動作 状況とは、例えば、各実行ユニット A, Bが利用する記憶領域の空き容量や、実行ュ ニット A, B間の連携の状態等を示している。
[0067] 各実行ユニット A, Bの記憶領域の空き容量に基づいて振り分け先を選択する場合 、例えば、各実行ユニット A, Bの記憶領域の空き容量を検出し、検出された空き容 量に余裕がある実行ユニットに対応したデバッグ用プログラム起動部に対して起動指 示を振り分けるように、起動指示振り分け部 61, 71を構成することができる。このよう な構成とするための方式としては、各実行ユニット A, B上の起動指示振り分け部 61 , 71が空き容量の検出を行い、他の実行ユニットに対して空き容量を通知する方式 や、各実行ユニット A, B上の起動指示振り分け部 61, 71が、他の実行ユニットが利 用する記憶領域を直接参照して、単独で空き容量を検出する方式などがある。
[0068] また、本実施形態では、 2個の実行ユニット A, Bが連携して動作を行うシステムを 例に挙げて説明した。 3個以上の実行ユニットで連携を行いながら動作するシステム に利用されるプログラムをデバッグ対象とする場合には、その連携の状態を把握して 起動指示の振り分け先を決定することもできる。
[0069] この場合には、まず、各プログラムが他のプログラムとの通信経路を確保したことを 検出し、デバッグ対象とする連携動作しているプログラムとの関係が無いまたは関係 が少ない実行ユニット上に起動指示を振り分けるように、起動指示振り分け部 61, 71 を構成することができる。ここで、通信経路が確保されたことの検出方法としては、プ ログラムが通信経路を確保する関数呼び出しを行ったことを検出する方法、通信経 路のステータスが保存されている記憶領域を観測する方法などを採用することができ る。
[0070] その逆に、デバッグ対象のプログラムが別の実行ユニット上で動作しているプロダラ
ムと連携して 、る場合、デバッグ対象のプログラムが動作して 、る実行ユニットだけで なぐその連携先の実行ユニットに対しても起動指示を振り分け、連携するプログラム をまとめてデバッグ対象とするような構成とすることもできる。
[0071] 次に、本実施形態のデバッグシステムの効果について説明する。
[0072] 本実施形態では、デバッグ用プログラム起動指示振り分け部 61, 71とデバッグ用 プログラム起動部 62, 72とを実行ユニット A, B上で実行されるプログラムとして構成 し、起動指示の受信後に、デバッグ用プログラムを実行ユニット A, B上のいずれかで 起動するよう構成されて 、るため、デバッグ専用のハードウェアによりコストが増加す ることなぐデバッグ作業の効率ィ匕を図ることができる。
[0073] また、本実施形態では、デバッグ用プログラム起動指示振り分け部 61, 71とデバッ グ用プログラム起動部 62, 72とを備えているため、任意のタイミングで任意の実行ュ ニット上でデバッグ用プログラムを起動することが可能となる。その結果、通常動作プ ログラムのみを実行した状態で不具合を発生させるか、通常動作プログラムを不具合 が発生する直前まで実行し、その後に、不具合の発生原因となる処理を行っている 実行ユニット上でデバッグ用プログラムを起動し、デバッグ作業を行うことが可能であ る。
[0074] また、本実施形態では、タイマなどを用いてデバッグ用プログラムの起動指示を与 え、一定時間経過後にデバッグ用プログラムを起動する構成とすることもできる。この ような構成とすることで、デバッグ作業者自身が起動指示を入力することで生じる、デ ノ ッグ用プログラムを起動するタイミングがばらつくといった影響を排除することが可 能となり、また、高い時間精度で起動時間を調整することが可能となる。
[0075] また、本実施形態では、ブレイクポイントを設定する方法、ある地点に到達した時に デバッグ対象のプログラム自身が起動指示を発行する方法などにより、プログラムが 特定地点に到達したことによってデバッグ用プログラムを起動する構成とすることもで きる。このような構成とすることで、起動時間を調整するのみでは、観測を行いたい地 点への到達時間が条件により一定にならな 、場合にぉ 、ても、観測を行!ヽた 、地点 でデバッグ用プログラムを起動することが可能となる。
[0076] さらに、既に動作している通常動作プログラムによって記憶領域が使用されており、
デバッグ用プログラムを追加で起動できない場合がある。一方で、デバッグ用プログ ラムの中には、どの実行ユニットで起動してもデバッグ作業を行えるタイプのものがあ る。このような場合に、本実施形態では、各実行ユニットの記憶領域の空き容量を検 出し、空き容量に余裕がある実行ユニットに対して起動指示を振り分ける構成とする こともできる。このような構成とすることで、空き容量不足でデバッグ用プログラムが起 動できな 、実行ユニットを避けて、起動指示を発行することができる。
[0077] また、連携動作して!/、るプログラムが実行されて 、る実行ユニット上でデバッグ用プ ログラムを起動すると、連携動作して 、るプログラムの動作に影響を与えることがあり 、デバッグ作業に支障をきたすことがある。このような場合に、本実施形態では、連携 の状態を把握して起動指示を発行する構成とすることもできる。このような構成とする ことで、連携動作して 、るプログラムが実行されて 、る実行ユニットとは異なる実行ュ ニット上でデバッグ用プログラムを起動することができる。
[0078] (第 2の実施形態)
次に、本発明の第 2の実施形態のデバッグシステムについて図面を参照して説明 する。
[0079] 上記で説明した第 1の実施形態は、通信ポートの通信対象の実行ユニットを変更で きるシステムに対して本発明を適用した場合であった。しかし、システムによっては、 通信ポートの通信対象の実行ユニットを変更できな!/、、つまり通信ポートの通信対象 の実行ユニットが固定されているようなシステムも存在する。このようなシステムに対し て本発明を適用した場合、デバッグ用プログラム起動指示振り分け部を各実行ュ-ッ トに対して設けたとしても、通信ポートの通信対象となって 、な 、実行ユニット上で起 動されたデバッグ用プログラムに対してコマンドを送信することができない。
[0080] 本実施形態のデバッグシステムは、通信ポートの通信対象の実行ユニットが固定さ れて 、るシステムに対して適用可能な構成となって 、る。
[0081] 図 9に示すように、本実施形態のデバッグシステムは、図 5に示された第 1の実施形 態における構成と比較して、他の実行ユニットで実行されるデバッグ用プログラムの 通信を中継する中継部 65を追加した構成となって 、る。
[0082] 中継部 65は、 2つの実行ユニット A, Bのうちの実行ユニット A上で実行されるもの
であり、通信ポート 1からデバッグ用プログラム 63, 73に対して送信されるコマンドを、 起動指示により指定された実行ユニット上のデバッグ用プログラムに対して中継する
[0083] 本実施形態における通信ポート 1は、通信対象の実行ユニットが実行ユニット Aに 固定されている。そして、中継部 65は、通信ポート 1からのコマンドの宛先が実行ュ ニット Aの場合には、そのコマンドを実行ユニット Aのデバッグ用プログラム 63に送信 し、また、通信ポート 1からのコマンドの宛先が実行ユニット Bの場合には、そのコマン ドを実行ユニット Bのデバッグ用プログラム 73に送信する。
[0084] 本実施形態における起動指示振り分け部 61, 71は、図 6に示した起動指示振り分 け部 61, 71のうち、通信対象変更部 613, 713と、実行ユニット A側のユニット間通 信受信部 615と、実行ユニット B側のユニット間通信送信部 712および通信ポート受 信部 711とを省略することができる。
[0085] 本実施形態における全体動作は、本発明の第 1の実施形態と同一である。起動指 示振り分け部 61, 71の動作は、図 8における通信ポートの通信対象を変更するステ ップがないことを除いて本発明の第 1の実施形態と同一である。
[0086] また、本実施形態では、 2個の実行ユニット A, Bを備えるシステムを例に挙げて説 明したが、 3個以上の任意の個数の実行ユニットを備えるシステムへの拡張も容易に 可能である。
[0087] 次に、本実施形態のデバッグシステムの効果について説明する。
[0088] 本実施形態では、実行ユニット A用プログラム領域 6に、デバッグ用プログラム 63, 73への通信を中継する中継部 65が備えられ、この中継部 65が、実行ユニット Bで実 行されるデバッグ用プログラム 73の通信を中継するように構成されている。そのため 、通信ポート 1の通信対象の実行ユニットが実行ユニット Aに固定されていて変更で きないようなシステムに対しても、本発明を適用することが可能となる。また、通信ポー ト 1と直接通信して 、な 、実行ユニット B上のデバッグ用プログラム 73も中継部 65に よって通信が可能となるため、複数の実行ユニット A, Bで同時に複数のデバッグ用 プログラム 63, 73を利用することが可能となる。
[0089] (第 3の実施形態)
次に、本発明の第 3の実施形態のデバッグシステムについて図面を参照して説明 する。
[0090] 本実施形態のデバッグシステムは、第 1の実施形態のデバッグシステムと同様に、 通信ポートの通信対象の実行ユニットの変更が可能なシステムに対して本発明を適 用したものである。
[0091] 通信ポートの通信対象の実行ユニットの変更が可能なシステムでは、デバッグ用プ ログラムに対するコマンドは、通信ポートの切り替えにより送信することが可能である。 しかし、複数のデバッグ用プログラムを同時に起動させるような場合、通信ポートの切 り替えが煩雑に発生することが予想される。また、通信ポートの通信対象の実行ュ- ットを変更する処理には、ある程度のオーバヘッドが必要となる。
[0092] そのため、通信ポートの通信対象の実行ユニットを変更可能な場合であっても、図 9に示した第 2の実施形態のデバッグシステムにおける中継部を用いて、デバッグ用 プログラムへの各種コマンドを中継した方力 S、通信ポートを切り替える処理が不要とな り処理の軽減を図ることが可能となる。
[0093] しかし、この中継部をある特定の実行ユニットにし力備えないような構成を採用した 場合、中継部が備えられた実行ユニットがストール状態となると、中継部自体も機能 しなくなつてしまう。
[0094] そのため、本実施形態のデバッグシステムは、どの実行ユニットがストール状態にな つた場合でも、デバッグ用プログラムへの各種コマンドを中継することが可能なように 、中継部を各実行ユニット毎に設けた構成になっている。
[0095] 以下では、説明の都合により、 3つの実行ユニット A, B, Cが存在するシステムに対 して本発明を適用した場合について説明する。
[0096] 図 10に示すように、本実施形態のデバッグシステムは、図 5に示された第 1の実施 形態における構成と比較して、実行ユニット C用プログラム領域 8を新たに追加し、さ らに、他の実行ユニットで実行されるデバッグ用プログラムの通信を中継するための 実行ユニット A側の中継部 65、実行ユニット B側の中継部 75、および実行ユニット C 側の中継部 85を追カ卩した構成となって 、る。
[0097] 本実施形態における中継部 65, 75, 85は、 3つの実行ユニット A, B, C上でそれ
ぞれ実行されるものであり、通信ポート 1からデバッグ用プログラム 63, 73, 83に対し て送信されるコマンドを、起動指示により指定された実行ユニット上のデバッグ用プロ グラムに対して中継する。
[0098] 実行ユニット C用プログラム領域 8は、デバッグ用プログラム起動指示振り分け部 81 と、デバッグ用プログラム起動部 82と、デバッグ用プログラム 83と、通常動作プロダラ ム 84とを備えて 、る。これらは実行ユニット C上で実行されるプログラムとして構成さ れている。
[0099] 本実施形態における起動指示振り分け部 61, 71の動作は、本発明の第 1の実施 形態と同様である。また、起動指示振り分け部 81の動作は、起動指示振り分け部 61 , 71と同様である。ただし、起動指示振り分け部 61, 71, 81の動作における通信ポ ート 1の通信対象を変更するステップについては、 2つ目以降のデバッグ用プロダラ ムを起動する場合には切り替えが無駄であることも考えられるため、実行しなくてもよ い。
[0100] また、本実施形態では、 3個の実行ユニット A, B, Cを備えるシステムを例に挙げて 説明したが、 4個以上の任意の個数の実行ユニットを備えるシステムへの拡張も容易 に可能である。
[0101] 次に、本実施形態のデバッグシステムの効果について説明する。
[0102] 本実施形態では、各実行ユニット A, B, C毎に、デバッグ用プログラムへの通信を 中継する中継部 65, 75, 85を備え、他の実行ユニットで実行されるデバッグ用プロ グラムの通信を 、ずれの実行ユニットでも中継可能なように構成されて 、る。そのた め、ある実行ユニットがストール状態になった場合でも、通信ポート 1の通信対象の実 行ユニット A, B, Cの煩雑な切り替えを不要としつつ、複数の実行ユニット A, B,じで 同時に複数のデバッグ用プログラム 63, 73, 83を利用することができる。
[0103] 例えば、図 10に示した本実施形態のデバッグシステムにおいて、 3つのデバッグ用 プログラム 63, 73, 83をそれぞれ起動した場合を例に挙げて説明する。
[0104] 図 10の例では、通信ポート 1の通信対象実行ユニットとして実行ユニット Aが設定さ れている。そのため、実行ユニット Aに対して備えられた中継部 65を経由して、デバ ッグ用プログラム 63、デバッグ用プログラム 73、およびデバッグ用プログラム 83に対
して各種コマンドが中継される。ここで、実行ユニット Aが何等かの理由によりストール 状態となってしまった場合、中継部 65も機能しなくなってしまう。そのため、通信ポー ト 1の通信対象の実行ユニットを、実行ユニット Aから実行ユニット Bに変更し、実行ュ ニット Bに対して備えられている中継部 75を経由して、デバッグ用プログラム 73, 83 への各種コマンドの中継を行うようにすればよい。そうすれば、デバッグ用プログラム 73との通信においては実行ユニット Bへ、デバッグ用プログラム 83との通信において は実行ユニット Cへというように、各通信毎に通信ポート 1における通信対象の実行ュ ニットを切り替える煩雑な処理を必要とすることなぐ 2個の実行ユニット B, Cで同時 にデバッグ用プログラムの起動を行うことが可能となる。
[0105] (第 4の実施形態)
次に、本発明の第 4の実施形態のデバッグシステムについて図面を参照して説明 する。
[0106] 上記第 1から第 3の実施形態では、デバッグ用プログラム起動指示により指定され た実行ユニットまたは起動指示振り分け部により選択された実行ユニットに対して、デ バッグ用プログラム起動指示が振り分けられていた。しかし、デバッグ用プログラムを 起動しょうとした実行ユニットが既にストール状態となっていて、デバッグ用プログラム の起動が不可能な場合がある。
[0107] 本実施形態のデバッグシステムは、このような弊害の発生を防ぐため、デバッグ用 プログラムを起動可能な実行ユニットを選定する際に、ストール状態となってデバッグ 用プログラムの起動が不可能な実行ユニットが選択されないような構成になっている
[0108] 図 11に示すように、本実施形態のデバッグシステムは、図 5に示された第 1の実施 形態における構成と比較して、ストールしている実行ユニットを避けて、プログラムを 実行可能な実行ユニットの起動指示振り分け部に起動指示が送られるような処理を 行うストール発生実行ユニット回避部(図 11中では、回避部と表示する。 ) 66, 76を 備える構成となっている。
[0109] ストール発生実行ユニット回避部 66, 76は、デバッグ用プログラムを起動可能な複 数の実行ユニット A, B毎にそれぞれ配置されている。そして、ストール発生実行ュ-
ット回避部 66, 76は、ストール状態の実行ユニットに対して起動指示が送られないよ うな処理を行っている。
[0110] 具体的には、実行ユニット Aのストール発生実行ユニット回避部 66は、起動指示の 振り分け元の実行ユニット(つまり、通信ポート 1の通信対象の実行ユニット)を実行ュ ニット Aにするよう通信ポート 1に対して通知し、実行ユニット Bのストール発生実行ュ ニット回避部 76は、起動指示の振り分け元の実行ユニットを実行ユニット Bにするよう 通信ポート 1に対して通知する。
[0111] 図 4のように 2個の実行ユニット A, Bを備えるシステムでは、実行ユニット A, B, A, B, · ··, A, Bのように交互に、ストール発生実行ユニット回避部 66, 76が起動される よう構成する。また、 3個以上の実行ユニットを備えるシステムでは、それぞれ順番に 、タイマを利用する力、通常動作時に利用されているタイマ割り込みハンドラ内のプロ グラムによってストール発生実行ユニット回避部が起動されるよう構成する。なお、スト ール発生実行ユニット回避部 66, 76の具体的な実現方法としては、交互に起動した り、順番に起動したりする必要は必ずしもないが、後述する不具合検出部と効果的に 組み合わせるために、このように構成することが望ま 、。
[0112] タイマ割り込みハンドラとは、タイマ割り込みが発生した場合に、その割り込みを処 理するために最初に起動されるプログラムのことである。このタイマ割り込みハンドラ は、タイマ割り込み機能を備えた実行ユニットであれば、一般的に使用されるプロダラ ムである。
[0113] 本実施形態における全体の動作については、図 7のフローチャートにおける起動指 示受信前に、デバッグ用プログラムを起動可能な実行ユニットを選定するステップが 追加されることを除いて本発明の第 1の実施形態と同一である。
[0114] 次に、ストール発生実行ユニット回避部 66, 76の動作について図 12を参照して説 明する。なお、図 12において、ステップ S71とステップ S74は意図的に選択するもの ではなぐその時点での状況によって必然的に選択される処理である。つまり、ステツ プ S72は実行ユニット Aによって実行される処理である力 実行ユニット Aがストール している場合はプログラムが実行されない。そのため、ステップ S71の分岐は、ステツ プ S72の処理が行われずにステップ S73に進んでしまうことを示す。同様に、ステツ
プ S75は実行ユニット Bによって実行される処理である力 実行ユニット Bがストール している場合はプログラムが実行されない。そのため、ステップ S74の分岐は、ステツ プ S75の処理が行われずにステップ S76に進んでしまうことを示す。ここでは、デバッ グ用プログラムの起動指示の振り分け元の実行ユニット(つまり、通信ポート丄の通信 対象の実行ユニット)の初期値が Bであるものとして説明する。
[0115] まず、ステップ S71の段階で、実行ユニット Aがストールしていない場合 (ステップ S 71の No)、実行ユニット A上のストール発生実行ユニット回避部 66が、デバッグ用プ ログラム起動指示の振り分け元となる実行ユニットの設定値を実行ユニット Aに変更 する (ステップ S72)。この処理は、通信ポート 1の通信対象を変更することで行われ る。ここで起動指示があった場合 (ステップ S73の Yes)、設定された実行ユニット (こ こでは実行ユニット A)へ起動指示が送信される (ステップ S77)。
[0116] 一方、ステップ S73で起動指示がな力つた場合 (ステップ S73の No)、実行ユニット Bがストールしていなければ (ステップ S74の No)、実行ユニット B上のストール発生 実行ユニット回避部 76が、デバッグ用プログラム起動指示の振り分け元となる起動ュ ニットを実行ユニット Bに変更する (ステップ S75)。ここで起動指示があった場合 (ス テツプ S76の Yes)、設定された実行ユニット (ここでは実行ユニット B)へ起動指示が 送信される (ステップ S77)。起動指示がな!、場合は (ステップ S76の No)、初めに戻 る。
[0117] ここで、ステップ S71の段階で実行ユニット Aがストールしていた場合、ステップ S72 の処理が行われずにステップ S73に進む力 ここで起動指示があった場合、デバッ グ用プログラムの起動指示の振り分け元である実行ユニットは実行ユニット Bである。 そのため、ストールした実行ユニット Aにデバッグ用プログラム起動指示が送信され、 起動ができなくなる状況を避けることができる。また、ステップ S74の段階で実行ュ- ット Bがストールしていた場合も、同様の仕組みにより、実行ユニット Bにデバッグ用プ ログラムの起動指示が送信され、起動ができなくなる状況を避けることができる。
[0118] この方法は、実行ユニットが 3個以上の場合でも容易に拡張可能であり、実行ュ- ットの 、ずれかが動作して 、れば、動作して!/、る実行ユニットがデバッグ用プログラム の起動指示の振り分け元となるよう設定される。
[0119] ただし、次の場合について注意が必要である。
[0120] 1つの注意点は、ステップ S72においてデバッグ用プログラムの起動指示の振り分 け元となる実行ユニットを実行ユニット Aに変更した後、ステップ S73において起動指 示を受け取る前に実行ユニット Aがストールする場合である。これは、ステップ S75と ステップ S76の間においても同様である。この場合、デバッグプログラムの起動指示 が受理されないが、一定時間を経過すると、ストールしていない実行ユニットによって 起動指示の振り分け元となる実行ユニットが変更されるため、起動に失敗した場合に は一定時間後に起動指示を再発行するような構成とすることが望ましい。また、全て の実行ユニットがストールした場合に備えて、一定回数の起動指示の再発行によって も起動しない場合は処理を終了し、エラー報告をするような構成としてもよい。
[0121] 他の注意点は、これまでの手法によりデバッグ用プログラム起動指示振り分け部ま での実行は可能であるものの、起動指示で指定して 、るデバッグ用プログラムを起動 する実行ユニットがストールしている場合には起動ができないことである。この場合、 一定時間後に起動が確認できな 、場合はエラー報告をするような構成としてもょ 、。 ただし、後述する不具合検出'起動指示生成部の不具合検出手法によってストール を検出し、起動できないと判定されている場合には、即座にエラー報告をし、別の実 行ユニットでデバッグ用プログラムを起動するなどの手法を用いることが望まし 、。
[0122] また、起動する実行ユニットを別途指定する必要がないように、デバッグ用プロダラ ムが起動している実行ユニットとは異なる、デバッグ対象の実行ユニットに関わる記憶 領域を参照し、デバッグ対象の実行ユニットやその実行ユニットで動作して 、るプロ グラムの状態を解析するデバッグ用プログラムを起動するなどして、起動指示振り分 け元の実行ユニット上でデバッグ用プログラムを起動するような構成とすることが望ま しい。この場合は、起動指示振り分け部の機能のうち、起動指示を他の実行ユニット に対して転送する機能を不要とすることもできる。
[0123] 次に、本実施形態のデバッグシステムの効果について説明する。
[0124] 本実施形態では、ストール発生実行ユニット回避部 66, 76により、デバッグ用プロ グラムを実行不可能な実行ユニットに対して起動指示が送られな ヽように構成されて いるため、不具合によって実行ユニットがストールし、実行ユニットの動作に影響が出
るような場合でも、利用可能な実行ユニットがあれば、その実行ユニット上でデバッグ 用プログラムを起動することが可能となる。
[0125] (第 5の実施形態)
次に、本発明の第 5の実施形態について説明する。
[0126] 上記第 1から第 4の実施形態では、デバッグ用プログラムは、起動された実行ュ-ッ トに関わる記憶領域しか参照することができな力つた。しかし、記憶領域をどのように 使用しているかを参照することにより、デバッグ対象の実行ユニットで動作しているプ ログラムの状態を解析することが可能になる場合がある。
[0127] 本実施形態のデバッグシステムは、デバッグ対象の実行ユニットの記録領域をデバ ッグ用プログラムが起動された実行ユニットから参照してデバッグ作業を行うことを可 能にする構成となっている。
[0128] 図 13に示すように、本実施形態のデバッグシステムは、図 5に示された第 1の実施 形態における構成と比較して、デバッグ用プログラム 63, 73を、それぞれデバッグ用 プログラム 67, 77に置き換えた構成となっている。
[0129] デバッグ用プログラム 67は、状態を解析するために、物理'仮想アドレス変換部 67
1と、情報抽出部 672とを備えている。
[0130] 物理 ·仮想アドレス変換部 671は、仮想アドレスを物理アドレスに変換する。
[0131] 情報抽出部 672は、物理'仮想アドレス変換部 671により変換された物理アドレスを 用い、 OS (Operating System)などが管理情報をメモリに配置する構造を考慮して、 通常動作プログラム 74が使用している記憶領域力 必要情報を抽出する。
[0132] また、デバッグ用プログラム 77も同様に、物理 ·仮想アドレス変換部 771と、情報抽 出部 772とを備えている。
[0133] 以下では、実行ユニット A上でデバッグ用プログラムを起動する場合の動作を例に 挙げて説明するが、実行ユニット B上でデバッグ用プログラム 77を起動する場合の動 作も同様である。
[0134] 物理 ·仮想アドレス変換部 671は、仮想アドレスと物理アドレスのオフセット(差分) 情報を加減することにより、仮想アドレスと物理アドレスの相互変換を行う第 1の物理' 仮想アドレス変換動作と、物理'仮想変換テーブルの情報を解析することにより仮想
アドレスと物理アドレスを対応づける第 2の物理'仮想アドレス変換動作とを行う。
[0135] まず、第 1の物理'仮想アドレス変換動作について説明する。
[0136] 第 1の物理'仮想アドレス変換動作は、 OSのカーネルが静的に確保する領域など 、広範囲に渡って連続する物理アドレスが確保されている領域 (以後、連続領域とす る)に対応するための動作である。
[0137] 連続領域において、ある仮想アドレスに対応する物理アドレスが分力つた場合に、 仮想アドレスと物理アドレスの差分を求めることができる。連続領域では、仮想アドレ スを n単位増加させた場合に対応する物理アドレスも n単位増加したものになる。その ため、仮想アドレスと物理アドレスの差分を保持し、これを加減することで、仮想アドレ スから物理アドレスへの変換、物理アドレス力 仮想アドレスの変換を行うことが可能 となる。
[0138] また、仮想アドレスと物理アドレスの差分は別途計算しておいたものを用いることも できるが、連続領域の先頭に対応する仮想アドレスが予め決まっている OSがある。こ の場合、各 CPUに割り当てられる記憶領域の先頭の物理アドレス情報を元に差分を 計算することが可能となる。そのため、デバッグ用プログラムの起動時に、各 CPUに 割り当てられて 、る記憶領域の先頭の物理アドレス情報を取得可能とし、自動的に 差分を計算可能にする構成とすることが望ましい。
[0139] 次に、第 2の物理'仮想アドレス変換動作について図 14を用いて説明する。
[0140] 第 2の物理'仮想アドレス変換動作は、高機能 OSなどで用いられる手法であって、 物理 ·仮想アドレステーブルを用いてユーザプログラムなどの仮想アドレス管理を行う 手法に対応するための動作である。ユーザプログラムなどでは、連続する仮想アドレ スに対応する記憶領域が連続しているとは限らず、物理アドレスが差分により一意に 決まらないため、複数の手順を要する。
[0141] 第 2の物理'仮想アドレス変換動作では、まず、第 1の物理'仮想アドレス変換動作 を利用して、 OSが保持して 、る物理 ·仮想アドレス変換テーブルの物理アドレスを取 得する(ステップ S 101)。
[0142] この物理アドレスを用いて物理.仮想アドレス変換テーブルを参照し、物理'仮想ァ ドレス変換テーブルの内容を取得する(ステップ S 102)。
[0143] 高機能 OSでは、物理'仮想変換テーブルが複数の層で構成されているものがあり
、一度の参照で変換が完了するとは限らない。そのため、変換が完了しない場合 (ス テツプ S103の No)、物理.仮想変換テーブルの内容力も次に参照すべき物理.仮想 変換テーブルの仮想アドレスを取得する(ステップ S 104)。
[0144] これらの処理を繰り返し、目的の物理アドレスが得られた場合 (ステップ S 103の Ye s)、得られた物理アドレスの通知を行い (ステップ S 105)、第 2の物理'仮想アドレス 変換動作を終了する。
[0145] 次に、情報抽出部 672の動作について図 15を用いて説明する。
[0146] まず、基点となるデータ構造が存在する仮想アドレスを元に、物理'仮想アドレス変 換を行うことによって (ステップ S201)、参照するデータが存在する物理アドレスを取 得する。
[0147] データを直接参照可能な物理アドレスがマッピング可能である場合、参照するデー タと同一または類似の構造をもつ構造体の変数を該当する物理アドレスにマッピング するなどの方法で必要なデータに容易にアクセス可能なように構成し (ステップ S 202 )、データを参照する (ステップ S 203)。
[0148] または、参照するデータと同一または類似の構造をもつ変数を予め用意し、取得さ れた物理アドレスを用いて、参照するデータを用意した変数の領域にコピーし、その データを参照を行うこととしてもよい。この場合、物理アドレスがデータを直接参照で きないものであっても、そのデータを参照することが可能になる力 コピーを行うォー バヘッドが発生すると 、う欠点も生じる。
[0149] データ構造が単純な場合、これらの処理で抽出が終了し (ステップ S204の Yes)、 抽出結果を通知 (ステップ S206)することで処理が完了する。ただし、データによつ ては、リスト構造などのデータが分散した状態で配置されているものがある。
[0150] 最初の参照で必要データがな!、かまたは一部し力揃って 、な 、場合 (ステップ S 20 4の No)、次のリストの場所を示すアドレスを取得する(ステップ S 205)。このアドレス は仮想アドレスで記載されているため、物理'仮想アドレス変換を行うことによって、物 理アドレスを取得し (ステップ S201)、次のリストの内容を参照する(ステップ S202, S 203)。この処理を必要なデータが揃うまで複数回繰り返す。
[0151] なお、本実施形態では、仮想アドレスを用いる OS以外では、これらの処理のうちス テツプ S201の物理 ·仮想アドレス変換は必要がなぐこれを除いた処理によって同様 の機能を実現することができる。
[0152] また、本実施形態では、 2個の実行ユニット A, Bを備えるシステムを例に挙げて説 明したが、 3個以上の任意の個数の実行ユニットを備えるシステムへの拡張も容易に 可能である。
[0153] 本実施形態では、デバッグ用プログラムが起動して 、る実行ユニットとは異なるデバ ッグ対象の実行ユニットに関わる記憶領域を参照することで、デバッグ対象の実行ュ ニットやその実行ユニットで動作しているプログラムの状態を解析するデバッグ用プロ グラムを備えている。そのため、デバッグ対象の実行ユニットの状態の如何にかかわ らずデバッグ作業を行うことが可能となる。
[0154] 一方で、実行ユニットが備えるレジスタやキャッシュメモリなどの資源は、実行ュ-ッ トが使用する記憶領域を参照するだけでは確認することができない。そして、レジスタ の内容が参照できないことにより、必要なデバッグ情報が得られないという弊害や、キ ャッシュメモリに最新の情報がとどまり続けることにより、記憶領域を参照するだけでは 最新の情報が確認できないなどの弊害が生じる可能性がある。
[0155] そのため、本実施形態では、デバッグ対象である実行ユニット上で、実行ユニットが 備えるレジスタやキャッシュメモリの読み書き、制御などを行う実行ユニット内資源管 理部(図示せず)を、デバッグ用プログラムにより構成するようにしてもよい。この実行 ユニット内資源管理部は、レジスタ内容読み出し '書込み部(図示せず)と、キャッシュ メモリ管理部(図示せず)と力も構成されている。
[0156] レジスタ内容の読み出しを行う場合、デバッグ対象とする実行ユニット上のデバッグ 用プログラムに読み出し指示を与え、レジスタ内容読み出し '書込み部により読み出 しを行わせ、その結果を通知させる。書き込みを行う場合は、デバッグ対象とする実 行ユニット上のデバッグ用プログラムに書き込み指示と書き込むデータを与え、レジス タ内容読み出し'書込み部により書き込みが行わせる。
[0157] また、キャッシュメモリ管理部は、キャッシュ内容の吐き出し指示を受け取ると、実行 ユニットにキャッシュメモリ吐き出し命令を実行するように制御を行う。キャッシュメモリ
の吐き出しが完了すると、メモリ上に最新の情報が書き込まれる。そのため、その後、 情報を取得するデバッグ用プログラムが、他の実行ユニット上の記憶領域を観測する ことも可能となる。または、デバッグ対象の実行ユニット上のデバッグ用プログラム力 読み出したキャッシュメモリの内容を外部に通知するような構成とすることもできる。ま た、キャッシュメモリの動作モードの制御や、内容の更新なども制御可能なように構成 することが望ましい。
[0158] さらに、デバッグ対象の実行ユニット上でデバッグ用プログラムを実行中は、その実 行ユニットが備えるレジスタのうち、演算に用いるレジスタやプログラムカウンタなどの プログラムの進行に関わるレジスタなどの内容は、記憶領域のスタック領域に退避さ れている。しかし、そのスタック領域の内容がキャッシュメモリ上に残っており、記憶領 域上には最新の値が保存されていない可能性がある。そのため、上記のキャッシュメ モリ管理部を用いることによって、キャッシュメモリの内容を記憶領域上に吐き出すか 、キャッシュメモリの内容を直接読み出すことにより、退避されたレジスタの内容を取 得するような構成とすることができる。それにより、デバッグ対象プログラムの実行中に 保持されていたレジスタ内容を取得することができる。
[0159] このような構成とすることにより、デバッグ対象の実行ユニットでデバッグ用プロダラ ムを利用可能である場合には、デバッグ対象の実行ユニット上の、レジスタ内容読み 出し'書込み部およびキャッシュメモリ管理部を備えるデバッグ用プログラムを利用し 、記憶領域を参照することができる。それにより、情報を取得するデバッグ用プロダラ ムカ 通常は実行できないレジスタやキャッシュメモリの読み書き、制御などを実現可 能となる。
[0160] (第 6の実施形態)
次に、本発明の第 6の実施形態のデバッグシステムについて説明する。
[0161] 上記で説明した第 1〜第 5の実施形態では、実行ユニットに何らかの不具合が発生 した場合には、外部の制御端末力も起動指示を入力する必要があった。
[0162] 本実施形態のデバッグシステムは、実行ユニットに何等かの不具合が発生した場 合には、外部の制御端末力 起動指示を入力しない場合であっても、自動的に起動 指示が生成される構成となって!/ヽる。
[0163] 図 16に示すように、本実施形態のデバッグシステムは、図 5に示した第 1の実施形 態のデバッグシステムにおける構成と比較して、不具合の発生を検出する不具合検 出部 68, 78を追加した構成となっている。
[0164] 不具合検出部 68, 78は、実行ユニット A, Bにおいて不具合が発生したことを検出 すると、デバッグ用プログラムの起動指示を生成する。
[0165] ここで、不具合検出部 68, 78によって不具合を検出したことを外部の制御端末に 通知することのみを行うようシステムを構成してもよい。ただし、不具合発生を検出し た時点で不具合が発生した実行ユニットやプログラム、不具合を発生させる原因とな る実行ユニットやプログラム、またはその他の実行ユニットやプログラムを停止させる 手段を設けた構成とすることが望ま U、。
[0166] なお、不具合検出部 68, 78が備えられる実行ユニットは、デバッグ用プログラム起 動部 62, 72が備えられる実行ユニットと必ずしも一致している必要はなぐ実行ュ- ット A, Bのどちらか片方にのみ備えられて!/、てもよ!/、。
[0167] 本実施形態における全体の動作については、不具合検出部 68, 78によって不具 合を検出するステップが、デバッグ用プログラム起動指示を受信するステップの前に 追加されることを除いて、上記で説明したいずれかの実施形態と同一である。
[0168] 次に、不具合検出部 68, 78の構成'動作について説明する。
[0169] 不具合には、不具合の発生がシステムにより報告される不具合 (以下、実行時エラ 一と称する。)と、システムによる報告が行われず、正常動作を妨げる不具合とがある 。実行時エラーには、不正メモリ参照、不正命令実行、ハードウェア例外などがある。 正常動作を妨げる不具合には、無限ループなどによるストールや、暴走などがある。
[0170] まず、実行時エラーを対象とする不具合検出部 68, 78の第 1の構成について説明 する。この場合の不具合検出部 68, 78は、システムにより報告される不具合を受信 する不具合受信部(図示せず)と、不具合発生を通知する通知部(図示せず)とから 構成される。ここで、実行時エラーが発生した場合に特定のプログラムが実行される ように構成されて 、るシステムにお 、ては、この特定のプログラム内に不具合検出部 を設けてもよい。
[0171] 実行時エラーを対象とするために、実行ユニット上のプログラムとして不具合検出部
を設けた場合、実行時エラーが発生した実行ユニットの不具合検出部によって不具 合が検出される。この場合、デバッグ用プログラムを起動する実行ユニットを、不具合 の発生した実行ユニットにして起動指示を生成することとしてもよい。一方で、実行時 エラーが発生した実行ユニット上でデバッグ用プログラムを起動する場合、プログラム の起動が実行ユニットや記憶領域に与える影響によって不具合の原因が判別できな くなる可能性もある。このような場合には、別の実行ユニットに対してデバッグ用プロ グラムの起動指示を発行し、第 5の実施形態におけるデバッグ用プログラム 67, 77を 起動するような構成とすることが望ま 、。
[0172] 次に、正常動作を妨げる不具合を対象とする不具合検出部 68, 78の第 2の構成に ついて説明する。この場合の不具合検出部 68, 78は、デバッグ対象の実行ユニット 上で実行されるプログラムによって更新される情報を読み出す更新情報読出し部(図 示せず)と、情報の更新が正常に行われているかどうかを確認する正常更新確認部( 図示せず)と、不具合発生を通知する不具合発生通知部(図示せず)とから構成され る。
[0173] 次に、不具合検出部 68, 78の第 2の構成の動作について図 17を参照して説明す る。ここでは、不具合発生通知部を、不具合発生確認後にデバッグ用プログラムの起 動指示を生成するデバッグ用プログラム起動指示生成部として設けた場合を例に挙 げて説明する。
[0174] まず、更新情報読出し部が、他の実行ユニット上で実行されるプログラムによって更 新される情報を読み出す (ステップ S301)。この情報を元に、正常更新確認部が、更 新が正常に行われているかどうかを確認する (ステップ S302)。更新が正常に行われ ている場合 (ステップ S303の Yes)、正常更新確認部は次の更新を確認する。不具 合の発生により更新が異常であることが検出されると (ステップ S303の No)、デバッ グ用プログラム起動指示生成部が、デバッグ用プログラム起動指示を生成し (ステツ プ S304)、デバッグ用プログラム起動部に起動指示を与える。なお、プログラムによ つて更新される情報は、情報を更新するプログラムを設けて取得することにしてもよ ヽ 。ただし、 OSが内部で使用する時刻情報をプログラムによって更新される情報として 用いることで、別途プログラムを設けずに不具合検出部を構成することができる。
[0175] 次に、正常動作を妨げる不具合を対象とする不具合検出部 68, 78の第 3の構成に ついて説明する。この場合の不具合検出部 68, 78は、デバッグ対象の実行ユニット に対して割り込みを発生させる割り込み生成部(図示せず)と、デバッグ対象の実行 ユニットからの応答を確認する応答確認部(図示せず)と、デバッグ用プログラムの起 動指示を生成する起動指示生成部(図示せず)と力も構成される。また、デバッグ対 象の実行ユニットは割り込みに対する応答部を備える。
[0176] 次に、不具合検出部の第 3の構成の動作について図 18を参照して説明する。
[0177] まず、割り込み生成部が、他の実行ユニットに対して割り込みを発生させ (ステップ S311)、応答が返ってくるのを待つ (ステップ S312)。規定時間内に応答を受信した 場合は (ステップ S313の Yes)、正常であると判断し、次の割り込みを発生させる。規 定時間内に応答が返ってこない場合 (ステップ S313の No)、不具合により応答不能 になったと判断し、起動指示生成部が、デバッグ用プログラムの起動指示を生成し( ステップ S314)、デバッグ用プログラム起動部に起動指示を与える。なお、ここでは 判断基準を規定時間内に応答が返ってくることとしたが、返ってきた応答が正常であ るか異常であるかを判断基準とすることもできる。
[0178] 次に、正常動作を妨げる不具合を対象とする不具合検出部 68, 78の第 4の構成に ついて説明する。この構成は、ストールが発生している実行ユニットを避けてデバッグ 用プログラムを起動可能な実行ユニットを選定するストール発生実行ユニット回避部( 図 11のストール発生実行ユニット回避部 66, 76)に、現在どの実行ユニットが選定さ れて 、るかを検査する手段を追加することで実現される。
[0179] 次に、不具合検出部 68, 78の第 4の構成の動作について図 19を参照して説明す る。
[0180] 不具合検出部 68, 78の第 4の構成では、図 12におけるストール発生実行ユニット 回避部 66, 76の動作に加えて、図 19のように、ストール発生実行ユニット回避部 66 , 76によって設定されている現在の実行ユニットがどれであるかを判定するステップ S78, S79力追カロされている。
[0181] なお、図 19において、ステップ S71とステップ S74は意図的に選択するものではな ぐその時点での状況によって必然的に選択される処理である。つまり、ステップ S72
は実行ユニット Aによって実行される処理である力 実行ユニット Aがストールして ヽる 場合はプログラムが実行されない。そのため、ステップ S71の分岐は、ステップ S72 の処理が行われずにステップ S73に進んでしまうことを示す。同様に、ステップ S75 は実行ユニット Bによって実行される処理である力 実行ユニット Bがストールしている 場合はプログラムが実行されない。そのため、ステップ S74の分岐は、ステップ S75 の処理が行われずにステップ S76に進んでしまうことを示す。ここでは、デバッグ用プ ログラム起動指示の振り分け元となる実行ユニットの初期値が実行ユニット Bであるも のとして説明する。
[0182] まず、実行ユニット Aがストールしていない場合 (ステップ S71の No)、初期設定値 は実行ユニット Bであるので (ステップ S78の Yes)、実行ユニット A上のプログラムが、 デバッグ用プログラムの起動指示の振り分け元となる実行ユニットを実行ユニット Aに 変更する (ステップ S72)。一方、実行ユニット Aがストールしていた場合 (ステップ S 7 1の Yes)、ステップ S72の処理が行われずにステップ S73に進む。ここで起動指示 がな 、場合 (ステップ S73の No)、実行ユニット Bがストールして!/、なければ (ステップ S74の No)、ステップ S79の検査〖こ進む。ステップ S79では、起動指示の振り分け元 として設定されている実行ユニットを検査する。この検査では、設定されている実行ュ ニットが Aであれば (ステップ S79の Yes)、正常である。し力し、実行ユニット Aでない 場合は (ステップ S79の No)、ステップ S72が実行されな力つたことになるため、実行 ユニット Aの不具合を検出できる。この場合には、ステップ S77に進み、設定されてい る実行ユニット(この場合、実行ユニット B)に起動指示が送信され、デバッグ用プログ ラムを起動する。ここで、実行ユニット Bがストールしていた場合には(ステップ S74の Yes) ,同様にステップ S78にて不具合が検出され (ステップ S78の No)、デバッグ用 プログラムが起動される。
[0183] なお、上記の不具合検出部の第 1〜第 4の構成は、互いに排他的なものではなぐ 任意に組み合わせることも可能である。
[0184] 次に、本実施形態のデバッグシステムの効果について説明する。
[0185] 本実施形態では、不具合検出部 68, 78を備え、不具合の発生を確認できるような 構成としているため、不具合発生の確認が困難なシステムであっても、不具合発生確
認後にデバッグ用プログラムを起動してデバッグ作業を開始することができる。
[0186] また、本実施形態では、不具合発生を検出した時点で不具合が発生した実行ュニ ットゃプログラム、不具合を発生させる原因となる実行ユニットやプログラム、またはそ の他の実行ユニットやプログラムを停止させる手段を設けた構成とすることもできる。 このような構成とすることで、不具合発生後に処理が進んでしまうことにより、不具合 発生の原因の追究が困難になることを避けることができる。
[0187] また、本実施形態では、不具合の発生を検出すると、デバッグ用プログラム起動指 示を生成するよう不具合検出部 68, 78を構成することもできる。このような構成とする ことで、デバッグ作業者が、デバッグ用プログラムを起動する実行ユニットやデバッグ 用プログラムの種類を判断してそのデバッグ用プログラムを起動することなぐデバッ グ作業を開始することができる。
[0188] (第 7の実施形態)
次に、本発明の第 7の実施形態のデバッグシステムについて説明する。
[0189] 上記で説明した第 5の実施形態のデバッグシステムによれば、ある実行ユニットがス トールした場合でも、その実行ユニットに関するメモリの内容を読むことが可能となる。 しかし、この第 5の実施形態のデバッグシステムによっても、ストール状態となった実 行ユニットのレジスタやキャッシュメモリの内容を読むことはできない。なぜならば、実 行ユニットがストール状態となった場合には、一般的にレジスタやキャッシュメモリの 内容の読み出しができなくなるからである。
[0190] 本実施形態のデバッグシステムは、ある実行ユニットがストールした場合であっても 、その実行ユニットのレジスタやキャッシュメモリの内容を読み出してデバッグを行うこ とを可能にする構成となって 、る。
[0191] 図 20に示すように、本実施形態のデバッグシステムは、上記で説明した第 1の実施 形態における構成と比較して、実行ユニット A用プログラム領域 6内のデバッグ用プロ グラム 63は、実行ユニット間割り込み生成部(図 20中では、割り込み生成部と表示す る。)631と応答受信部 632とを備え、また、デバッグ対象の実行ユニットで実行され る割り込みハンドラ 69は、応答生成部 691と情報取得 ·制御部 692とを備える構成と なっている。
[0192] 実行ユニット間割り込み生成部 631は、デバッグ対象の実行ユニット Bに対して割り 込みを発生させる。応答受信部 632は、デバッグ対象の実行ユニット Bからの応答を 応答生成部 791を経由して受信する。
[0193] 情報取得.制御部 692は、他の実行ユニット Bからの割り込みが発生した際に、レジ スタ、キャッシュメモリ、フラッシュメモリ等の予め設定されたメモリ内の情報を取得する
。応答生成部 691は、情報取得 ·制御部 692により得られた情報を、割り込みを発生 させた実行ユニット Bに対して送信する。
[0194] なお、図 5に示した第 1の実施形態では、割り込みハンドラ 69は図示されていない 力 割り込みハンドラは一般的な実行ユニットであれば標準的に備えられて 、るプロ グラムである。
[0195] また、本実施形態のデバッグシステムは、同様にして、実行ユニット B用プログラム 領域 7内のデバッグ用プログラム 73は、実行ユニット間割り込み生成部 731と応答受 信部 732とを備え、また、デバッグ対象の実行ユニットで実行される割り込みハンドラ 79には、応答生成部 791と情報取得 ·制御部 792とを備えた構成となっている。
[0196] なお、図 20は、本実施形態のデバッグシステムを、第 1の実施形態の構成に対して 適用した場合の例を示しているが、第 2〜第 6の実施形態に対しても同様に適用する ことができる。
[0197] 次に、図 21のフローチャートを参照して本実施形態のデバッグシステムの動作につ いて説明する。ここでは、実行ユニット Aのデバッグ用プログラム 63から、実行ユニット B側のデバッグを行う場合の例について説明する。
[0198] まず、デバッグ用プログラム 63は、対象となる実行ユニット Bに対して実行ユニット間 割り込みを発行する (ステップ S401)。すると、実行ユニット Bの割り込みハンドラ 79 が起動する (ステップ S402)。この割り込みハンドラ 79において情報取得'制御部 79 2を用いることにより、実行ユニット Bのレジスタ、キャッシュメモリ、フラッシュメモリを対 象として情報収集、書込み、制御などを行う (ステップ S403)。その後、応答生成部 7 91によって実行ユニット Aに対して応答を生成し (ステップ S404)、実行ユニット Aは 応答受信部 632を用いてこれを受信する (ステップ S405)。ここで、作業内容が制御 のみの場合は、応答には制御の成否情報のみを含めればよい。一方、作業内容が
情報収集を含む場合は、応答には収集した情報も含める。
[0199] または、実行ユニット B側で周期的に発生するタイマ割り込みの割り込みハンドラを 割り込みハンドラ 79とし、実行ユニット Aが通信部(図示せず)を用いて、対象プロセ スの実行制御を行う指示を実行ユニット Bに与える構成としてもよい。ただし、この構 成の場合は、実行制御を行うタイミングが、周期的に発生するタイマ割り込みのタイミ ングだけになるという制約が生じる。
[0200] なお、本実施形態では、実行ユニット Bのデバッグ用プログラム 73から、実行ュ-ッ ト A側のデバッグを行う場合の動作も、同様の仕組みで実現可能である。
[0201] また、本実施形態では、 2個の実行ユニット A, Bを備えるシステムを例に挙げて説 明したが、 3個以上の任意の個数の実行ユニットを備えるシステムへの拡張も容易に 可能である。
[0202] 次に、本実施形態のデバッグシステムの効果について説明する。
[0203] 本実施形態では、デバッグ用プログラム 63, 73は、実行ユニット間割り込み生成部 631, 731と応答受信部 632, 732とを備え、デバッグ対象の実行ユニットで実行さ れる割り込みハンドラは、情報取得 ·制御部 692, 792と応答生成部 691, 791とを備 えている。そして、デバッグ対象の実行ユニット以外の実行ユニット上で動作している デバッグ用プログラムから、デバッグ対象の実行ユニットに対して割り込みを発生させ 、割り込みハンドラにより情報取得や制御を行う。
[0204] 上述したように、割り込みハンドラとは、割り込みが発生した場合に、その割り込みを 処理するために最初に起動されるプログラムである。そのため、実行ユニット A, Bの 割り込みハンドラ 69, 79内に、情報取得 ·制御部 692, 792および応答生成部 691, 791をそれぞれ設けることにより、実行ユニット A, Bがストール状態となった場合でも ストール状態となった実行ユニットのキャッシュメモリやレジスタの内容を読むことが可 能となる。
[0205] (第 8の実施形態)
次に、本発明の第 8の実施形態のデバッグシステムについて説明する。
[0206] 上記で説明した第 1〜第 7の実施形態では、ある実行ユニットがストール状態となつ た場合に、その実行ユニットのデバッグを行うものであった。
[0207] 実行ユニットがストール状態となる場合、通常動作プログラムにより実行されている あるプロセスが暴走していることが考えられる。このように、あるプロセスが暴走状態に なると、他のプロセスは不具合がないにもかかわらず、実行ユニット全体としてはスト ール状態になり機能しなくなってしまう。
[0208] そこで、本実施形態のデバッグシステムは、あるプロセスが暴走し、実行ユニットが ストール状態となった場合でも、暴走したプロセスを停止させ、不具合の修正を行うこ とにより、ストール状態となった実行ユニットを正常状態に復帰させる構成となってい る。
[0209] 本実施形態のデバッグシステムの構成を図 22に示す。図 22は、実行ユニット Bが デバッグ対象実行ユニットとなり、実行ユニット Aから実行ユニット Bに対するデバッグ を行うことのみが可能な構成となって 、る。任意の実行ユニットから任意の実行ュ-ッ トをデバッグする場合には、同様の構成を各実行ユニットに設ける必要がある。
[0210] 図 22に示すように、本実施形態のデバッグシステムは、図 5に示した第 1の実施形 態のデバッグシステムにおける構成と比較して、デバッグ用プログラム 63は、実行ュ ニット間割り込み生成部(図 22中では、割り込み生成部と表示する。)631と応答受 信部 632とを備え、また、デバッグ対象の実行ユニットである実行ユニット Bにおいて 実行される割り込みハンドラ 79は、応答生成部 791とプロセス制御部 793とを備えた 構成となっている。
[0211] 実行ユニット間割り込み生成部 631は、デバッグ対象の実行ユニット Bに対する割り 込みを発生させる。応答受信部 632は、デバッグ対象の実行ユニット Bからの応答を 応答生成部 791を経由して受信する。
[0212] プロセス制御部 793は、デバッグ対象の実行ユニット Bにおいて起動している通常 動作プログラム 74のプロセス制御を行って、暴走しているプロセスを停止させる。応 答生成部 791は、プロセス制御部 793によるプロセス制御の結果により得られた情報 を、割り込みを発生させた実行ユニット Bに対して送信する。
[0213] 次に、図 23のフローチャートを参照して本実施形態のデバッグシステムの動作につ いて説明する。図 23は、実行ユニット Aのデバッグ用プログラム 63から、実行ユニット
B側のプロセス制御を行う場合の例を示している。
[0214] まず、デバッグ用プログラム 63は、デバッグ対象となる実行ユニット Bに対して実行 ユニット間割り込みを発行する (ステップ S401)。すると、実行ユニット Bの割り込みハ ンドラ 79が起動する(ステップ S402)。この割り込みハンドラ 79においてプロセス制 御部 793を用いることにより、実行ユニット Bで実行されている通常動作プログラム 74 のプロセス制御を行う(ステップ S406)。その後、応答生成部 791によって応答を生 成して実行ユニット Aに対して送信し (ステップ S404)、実行ユニット Aは応答受信部 632を用いて応答を受信する (ステップ S405)。
[0215] または、実行ユニット B側で周期的に発生するタイマ割り込みの割り込みハンドラを 割り込みハンドラ 79とし、実行ユニット Aが通信部(図示せず)を用いて、対象プロセ スの実行制御を行う指示を実行ユニット Bに与える構成としてもよい。ただし、この構 成の場合は、実行制御を行うタイミングが、周期的に発生するタイマ割り込みのタイミ ングだけになるという制約が生じる。
[0216] 制御対象プロセスに対するプロセス制御を実現する具体的な方法としては、次のよ うな方法がある。
[0217] 第 1のプロセス制御方法では、 OSのスケジューラに、スケジューラが行うプロセス制 御を外部からの指示に基づいて変更するプロセス制御変更部を備えるようにする。そ して、割り込みハンドラ 79内のプロセス制御部 793からプロセス制御変更部に対し、 プロセス変更指示を送信することで実現することができる。
[0218] 第 2のプロセス制御方法では、割り込みハンドラ 79内のプロセス制御部 793から、
OSの API (Application Program Interface) (システムコールなど)に類似する手順によ り、制御対象プロセスに対してプロセス制御シグナルを発行するプロセス制御シグナ ル発行部を備えるようにする。そして、プロセス制御シグナル発行部が制御対象プロ セスにプロセス制御シグナルを発行することで実現することができる。
[0219] 第 3のプロセス制御方法では、割り込みハンドラ 79内に、記憶領域上に退避されて いる制御対象プロセスへの戻りアドレスを、別のアドレスに変更するアドレス変更部を 備えるようにする。そして、割り込みハンドラ 79内のアドレス変更部が、戻りアドレスを 不正なアドレスに変更し、不正アドレス参照例外を発生させることで実現することがで きる。ここで、例外を発生させる処理のみでも、例外による異常終了処理を OSが行う
ため、プロセスを終了させることができる。しかし、例外ハンドラ内で、プロセスを停止 させるなどの、異常終了処理以外の制御を行わせるような構成とすることで、様々な プロセス制御を行うことが可能となる。
[0220] 第 4のプロセス制御方法では、割り込みハンドラ 79内に、記憶領域上に退避されて いる制御対象プロセスへの戻りアドレスに存在する命令を別の命令に変更する命令 変更部を備えるようにする。そして、割り込みハンドラ 79内の命令変更部が、戻りアド レスに存在する命令をデバッグ命令、不正な命令などに置き換え、例外を発生させる ことで実現することができる。ここで、例外を発生させる処理のみでも、例外による異 常終了処理を OSが行うため、プロセスを終了させることができる。しかし、例外ハンド ラ内で、プロセスを停止させるなどの、異常終了処理以外の制御を行わせるような構 成とすることで、様々なプロセス制御を行うことが可能となる。
[0221] ユーザプロセスとして構成されるデバッグ用プログラム力もプロセス制御用システム コールを発行し、プロセス制御を行う既存手法がある。このような手法を用いる場合、 実行ユニットで実行されて 、るプロセスの 、ずれかが暴走すると、デバッグ用プロダラ ムに制御が移らず、その結果、プロセス制御を行うことができないという弊害がある。 しかし、割り込みハンドラ 79内力もプロセス制御を行う上記いずれかのプロセス制御 を用いる場合、割り込みハンドラ 79はユーザプロセスに比べて高い優先度で実行さ れるため、暴走したプロセスが存在する場合であってもプロセス制御を行うことが可能 となる。
[0222] なお、本実施形態では、実行ユニット Bのデバッグ用プログラムから、実行ユニット A 側のデバッグを行う場合の動作も、同様の仕組みで実現可能である。
[0223] また、本実施形態では、 2個の実行ユニット A, Bを備えるシステムを例に挙げて説 明したが、 3個以上の任意の個数の実行ユニットを備えるシステムへの拡張も容易に 可能である。
[0224] 次に、本実施形態のデバッグシステムの効果について説明する。
[0225] 本実施形態では、デバッグ対象の実行ユニット Bによって実行される割り込みハンド ラ 79内にプロセス制御部 793を備えさせ、割り込みハンドラ 79内からデバッグ対象の プロセスの制御を行うような構成としてする。そして、デバッグ対象の実行ユニット B以
外の実行ユニット A上で動作して 、るデバッグ用プログラム 63から、デバッグ対象の 実行ユニット Bに割り込みを発生させ、割り込みハンドラ 79内でプロセス制御を行うこ とにより、デバッグ対象の実行ユニット B以外の実行ユニット A力もプロセス制御を行う ことが可能になる。また、ユーザプロセスよりも高い優先度で実行される割り込みハン ドラ 79内からプロセス制御を行うため、暴走したプロセスが存在する場合であっても、 暴走して!/、るプロセスを停止させ、不具合が発生して!/、る状況を解析して変数内容 の修正等の処理を行 、、さらに再度プログラムを実行させて不具合が解消されたか 否かを観察することが可能となる。そして、このような処理を繰り返すことにより、最終 的にはストール状態となっていた実行ユニットを正常動作に復帰することが可能とな る。
産業上の利用可能性
本発明は、複数の実行ユニットを備えるシステム LSI用のデバッグシステムといった 用途に適用可能である。また、本発明は、複数の実行ユニットを備える組み込みシス テム、複数の実行ユニットを備えるコンピュータシステム用のデバッグシステムと 、つ た用途にも適用可能である。