(57)【要約】【課題】シングルプロセッサシステム用のデバッガに大幅な変更を加えることなくマルチプロセッサシステムに適用可能とするデバッグ制御方法を提供する。【解決手段】デバッガ１１からのコマンドを所定時間内に受信した場合（Ｓ１）には、当該コマンドを制御コマンドとして設定し（Ｓ４）、当該制御コマンドが、プログラム実行制御コマンドであるか否かの確認を行う（Ｓ５）。そして、プログラム実行制御コマンドである場合には、ＣＰＵボード２に向けて送信し、当該制御御コマンドを送ったプロセッサをモニタし、プログラムの実行が停止するのを所定時間だけ待つ。所定時間が経過しても、プログラムが停止していない場合は、タイムアウトしてステップＳ１に戻り、他のデバッガ１１からのコマンド受信を待つ。【選択図】図２
2006139346.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサを有して構成されるマルチプロセッサシステムと複数のデバッガとの通信を仲介し、前記マルチプロセッサシステムにおけるデバッグ動作を制御するデバッグ制御方法であって、
(ａ)前記複数のデバッガから、予め定めた所定時間内にコマンドを受信したか否かについて確認するステップと、
(ｂ)前記ステップ(ａ)で受信した受信コマンドに対応させて、前記マルチプロセッサシステムに送信するための制御コマンドを設定するステップと、
(ｃ)前記制御コマンドが、前記複数のプロセッサの１つにデバッグプログラムを実行させるプログラム実行制御コマンドであるか否かを確認するステップと、
(ｄ)前記制御コマンドがプログラム実行制御コマンドである場合、前記プログラム実行制御コマンドが送信された前記プロセッサであるプログラム実行プロセッサをモニタして、予め定めた所定時間内に前記デバッグプログラムの実行が停止するか否かを確認するステップと、を備え、
前記デバッグプログラムの実行が停止しない場合には、前記プログラム実行プロセッサのモニタを中止して前記ステップ(ａ)に戻り、前記複数のデバッガのうち他のデバッガからのコマンド受信を待つ、デバッグ制御方法。
【請求項２】
前記ステップ(ａ)において、前記所定時間内にコマンドを受信しない場合であって、前記デバッグプログラムを実行中の前記プログラム実行プロセッサが存在する場合は、該プロセッサに対して前記ステップ(ｄ)を繰り返す、請求項１記載のデバッグ制御方法。
【請求項３】
前記ステップ(ａ)で受信した前記受信コマンドが、前記複数のデバッガの１つから前記複数のプロセッサの何れかへの接続を求める接続要求コマンドである場合、
(ｅ)前記複数のデバッガの何れにも接続されていない未割り当てのプロセッサの有無を確認するステップと、
(ｆ)前記未割り当てのプロセッサが存在する場合、該プロセッサに前記接続要求コマンドを送信したデバッガを接続するステップと、をさらに備える、請求項２記載のデバッグ制御方法。
【請求項４】
前記ステップ(ｆ)は、前記接続要求コマンドを送信したデバッガに、前記未割り当てのプロセッサのうち、プロセッサ番号の最も小さいものを接続するステップを含む、請求項３記載のデバッグ制御方法。
【請求項５】
前記マルチプロセッサシステムは、前記複数のプロセッサごとに付属するレジスタを複数有し、それぞれのプロセッサにおける前記デバッグプログラムの実行結果は、前記デバッグプログラムが実行を停止するごとに前記それぞれのプロセッサに付属するレジスタに記録され、
前記ステップ(ｄ)において、前記プログラム実行プロセッサでの前記デバッグプログラムの実行が停止したことを確認した場合には、前記プログラム実行プロセッサに付属する前記レジスタのレジスタ値を読み出して保存し、
前記プログラム実行プロセッサでの前記デバッグプログラムの実行再開に際して、保存した前記レジスタ値を前記プログラム実行プロセッサに付属する前記レジスタに書き込む、請求項１記載のデバッグ制御方法。
【請求項６】
前記ステップ(ｄ)において、前記プログラム実行プロセッサでの前記デバッグプログラムの実行が停止したことを確認した場合に、
(ｇ)前記マルチプロセッサシステムにおける他のプロセッサで実行中の前記デバッグプログラムを同時に強制的に停止させるように、前記マルチプロセッサシステムに対して強制停止コマンドを送信するステップをさらに備え、
前記ステップ(ｇ)は、新たな機能を付加する付加モードの設定によって起動する、請求項１記載のデバッグ制御方法。
【請求項７】
前記ステップ(ｃ)において前記制御コマンドが前記プログラム実行制御コマンドであることを確認した場合、前記ステップ(ｄ)に先だって、
(ｈ)前記受信コマンドを送信したデバッガ以外の全てのデバッガから前記プログラム実行制御コマンドに対応するコマンドが送信されるのを確認するステップをさらに備え、
前記ステップ(ｄ)において、前記マルチプロセッサシステムにおける前記複数のプロセッサの全てに対して、それぞれ対応する前記プログラム実行制御コマンドを送信し、前記ステップ(ｈ)は、新たな機能を付加する付加モードの設定によって起動する、請求項１記載のデバッグ制御方法。
【請求項８】
前記ステップ(ａ)で受信した前記受信コマンドが、前記複数のデバッガの１つから前記複数のプロセッサの何れかへの接続を求める接続要求コマンドである場合、
(ｉ)前記受信コマンドが予め定めた特定の１つのデバッガからのコマンドであるか否かを確認するステップをさらに備え、
前記受信コマンドが前記特定の１つのデバッガからのコマンドについてのみ、前記ステップ(ｂ)以下の処理を進め、
前記ステップ(ｄ)において、前記マルチプロセッサシステムにおける前記複数のプロセッサの全てに対して前記プログラム実行制御コマンドを送信し、
前記ステップ(ｉ)は、新たな機能を付加する付加モードの設定によって起動する、請求項１記載のデバッグ制御方法。
【請求項９】
前記デバッグ制御方法はプログラムをコンピュータ上で実行することで実現し、
前記プログラムの起動時に、予め定めた引数を入力することで前記付加モードの設定および解除を行う、請求項６ないし請求項８の何れかに記載のデバッグ制御方法。
【請求項１０】
前記デバッグ制御方法はプログラムをコンピュータ上で実行することで実現し、
プログラム間通信用のインターフェースを用いて前記付加モードの設定および解除を行う、請求項６ないし請求項８の何れかに記載のデバッグ制御方法。
【請求項１１】
前記デバッグ制御方法はプログラムをコンピュータ上で実行することで実現し、
前記プログラムの起動時に使用される制御用ファイル内に記載する所定の変数に基づいて前記付加モードの設定および解除を行う、請求項６ないし請求項８の何れかに記載のデバッグ制御方法。
【請求項１２】
前記デバッグ制御方法はプログラムをコンピュータ上で実行することで実現し、ＧＵＩ（Graphical User Interface）を用いて前記付加モードの設定および解除を行う、請求項６ないし請求項８の何れかに記載のデバッグ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラムデバッグにおける制御方法に関し、特にマルチプロセッサシステムに使用可能なデバッグ制御方法に関する。
【背景技術】
【０００２】
プロセッサを複数有して構成されるマルチプロセッサシステムにおいて、プログラムデバッグを行うために、従来は、例えば特許文献１に開示されるように、シングルプロセッサシステム用の既存のデバッガに、複数のコンテキスト（プロセッサ）を扱う機能を追加することでマルチプロセッサシステムに対応させていた。
【０００３】
【特許文献１】特開平６−３３２７４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
シングルプロセッサシステム用のデバッガは、単一のコンテキストを想定して作られているので、複数のコンテキストを持つマルチプロセッサシステムに対して対応するように機能を追加するには、デバッガの数十万行におよぶソースコードの大幅な変更が必要であり、マルチプロセッサシステムに対応するデバッグシステムを構築するには、多大な労力が必要であった。
【０００５】
本発明は上記のような問題点を解消するためになされたもので、シングルプロセッサシステム用のデバッガに大幅な変更を加えることなくマルチプロセッサシステムに適用可能とするデバッグ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る請求項１記載のデバッグ制御方法は、複数のプロセッサを有して構成されるマルチプロセッサシステムと複数のデバッガとの通信を仲介し、前記マルチプロセッサシステムにおけるデバッグ動作を制御するデバッグ制御方法であって、以下のステップ(ａ)〜(ｄ)を備えている。すなわち、前記複数のデバッガから、予め定めた所定時間内にコマンドを受信したか否かについて確認するステップ(ａ)と、前記ステップ(ａ)で受信した受信コマンドに対応させて、前記マルチプロセッサシステムに送信するための制御コマンドを設定するステップ(ｂ)と、前記制御コマンドが、前記複数のプロセッサの１つにデバッグプログラムを実行させるプログラム実行制御コマンドであるか否かを確認するステップ(ｃ)と、前記制御コマンドがプログラム実行制御コマンドである場合、前記プログラム実行制御コマンドが送信された前記プロセッサであるプログラム実行プロセッサをモニタして、予め定めた所定時間内に前記デバッグプログラムの実行が停止するか否かを確認するステップ(ｄ)とを備え、前記デバッグプログラムの実行が停止しない場合には、前記プログラム実行プロセッサのモニタを中止して前記ステップ(ａ)に戻り、前記複数のデバッガのうち他のデバッガからのコマンド受信を待つ。
【発明の効果】
【０００７】
本発明に係る請求項１記載のデバッグ制御方法によれば、プログラム実行制御コマンドを送信したプログラム実行プロセッサをモニタして、予め定めた所定時間内にデバッグプログラムの実行が停止しない場合には、プログラム実行プロセッサのモニタを中止してステップ(ａ)に戻り、複数のデバッガのうち他のデバッガからのコマンド受信を待つので、プロセッサを複数有して構成されるマルチプロセッサシステムにおいて、何れかのプロセッサの動作中でも、他のプロセッサに対するコマンドを受け付けることができ、マルチプロセッサシステムに適したデバッグ制御を行うことができる。
【発明を実施するための最良の形態】
【０００８】
＜実施の形態＞
＜Ａ．デバッグシステムの構成＞
まず、図１を用いて本発明に係るデバッグ制御方法を適用したデバッグシステムの構成について説明する。
【０００９】
図１において、複数のプロセッサ１を搭載したＣＰＵボード２とデバッグサーバ１０とが通信インターフェースＣ１を用いて接続され、デバッグサーバ１０には、複数のデバッガ１１が通信インターフェースＣ１を用いて接続された構成となっている。
【００１０】
デバッグサーバ１０は、デバッガ１１とＣＰＵボード２との通信を仲介し、マルチプロセッサシステムにおけるデバッグ動作を制御する機能を有している。
【００１１】
ここで、デバッグサーバ１０およびデバッガ１１はソフトウエアであり、両者の間の通信インターフェースＣ２には、ソケット通信等のプログラム間で使用される通信インターフェースを用いる。なお、デバッグサーバ１０およびデバッガ１１を構成するプログラムは、パーソナルコンピュータやワークステーション上で動作し、ＣＰＵボード２は評価ボードやエミュレータに搭載されており、ＣＰＵボード２とデバッグサーバ１０との間の通信インターフェースＣ１には、シリアルインターフェースやＵＳＢ（Universal Serial Bus）などの物理的な通信インターフェースを用いる。
【００１２】
ＣＰＵボード２に対しては、デバッグサーバ１０から制御コマンドが与えられ、制御コマンドは、ＣＰＵボード２上のデバッグインターフェース２１を介して対応するプロセッサ１に与えられる。
【００１３】
そして、デバッグサーバ１０には、複数のデバッガ１１からそれぞれ出力されるコマンドが与えられる構成となっている。
【００１４】
制御コマンドは、複数のデバッガ１１からそれぞれ出力されるコマンドに対応して出力されるコマンドであり、デバッガ１１から送信されるコマンドと、デバッグサーバ１０がＣＰＵボード２に送信する制御コマンドとが同一の通信プロトコルを持たない場合は、デバッグサーバ１０は、当該コマンドを、ＣＰＵボード２のデバッグインターフェース２１が持つ通信プロトコルに合うように、単一もしくは複数の制御コマンドに変換して出力する。
【００１５】
個々のデバッガ１１は、プログラムの実行や、メモリやレジスタの参照および書き換え等の指示を操作者（ユーザ）から受け、それらの指示をコマンドに変換してデバッグサーバ１０に送信する。
【００１６】
＜Ｂ．デバッグサーバの動作＞
次に、図２に示すフローチャートを用いて、図１を参照しつつデバッグサーバ１０の動作について説明する。
【００１７】
デバッガ１１によるデバッグ動作が開始すると、デバッグサーバ１０では、デバッガ１１からのコマンドを所定時間内に受信したか否かの確認動作を行う（ステップＳ１）。これは、デバッガからのコマンドの送信を待っているコマンド待ちのステップであり、コマンドを受信した場合にはステップＳ２に進み、所定時間内にコマンドを受信しなかった場合には、ステップＳ１０に進む。なお、ステップＳ１０では、ＣＰＵボード２上の各プロセッサ１の動作状態を確認し、何れかのプロセッサがプログラムを実行中であるか否かを確認する。
【００１８】
そして、プログラムを実行中のプロセッサ１が存在する場合には、ステップＳ７以下の動作を行う。従って、プログラムを実行中のプロセッサ１を再びモニタすることができる。
【００１９】
なお、プログラムを実行中のプロセッサが存在しない場合には、ステップＳ１に戻り、デバッガからのコマンドの送信を待つことになる。
【００２０】
ステップＳ２では、受信したコマンドが新規の接続を要求するコマンド（接続要求コマンド）であるか否か、すなわち、未だＣＰＵボード２上の何れのプロセッサ１にも接続されていないデバッガ１１が、何れかのプロセッサ１に接続されることを要求して送信したコマンドであるか否かの確認を行う。
【００２１】
ここで、受信したコマンドが新規の接続を要求するコマンドである場合にはステップＳ１１に進み、新規の接続を要求するコマンド以外である場合、すなわち既に何れかのプロセッサ１に接続されたデバッガ１１からのコマンドである場合にはステップＳ３に進む。
【００２２】
ステップＳ３では、コマンドを送信してきたデバッガ１１が現在接続されているプロセッサ１を検索する。
【００２３】
次に、ステップＳ４において、受信したコマンドの通信プロトコルが、ＣＰＵボード２のデバッグインターフェース２１が持つ通信プロトコルと一致するか否かを確認し、一致しない場合には、デバッグインターフェース２１の通信プロトコルに合わせて単一もしくは複数のコマンドに変換したもの制御コマンドとして設定する。なお、通信プロトコルが一致する場合には、受信したコマンドを制御コマンドとして設定する。
【００２４】
次に、ステップＳ４において設定した制御コマンドが、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンド（プログラム実行制御コマンド）であるか否かの確認を行う（ステップＳ５）。そして、プログラムを実行するための制御コマンドであると確認された場合にはステップＳ６に進み、そうでない場合にはステップＳ１６に進む。
【００２５】
ステップＳ６では、制御コマンド（ここではプログラムを実行するための制御コマンド）をＣＰＵボード２に向けて送信する。
【００２６】
次に、ステップＳ７において、制御コマンドを送ったプロセッサ（プログラム実行プロセッサ）をモニタし、プログラムの実行が停止するのを所定時間だけ待つ（プログラムの停止待ち処理）。
【００２７】
ここで、ステップＳ７のプログラムの停止待ち処理について図３を用いて、さらに説明する。
【００２８】
プログラムの停止待ち処理は、プログラムを実行するための制御コマンドをＣＰＵボード２に向けて送信することで開始し、まず、ステップＳ７０１において、制御コマンドを送ったプロセッサの動作状態を調べる。
【００２９】
そして、ステップＳ７０２において、当該プロセッサがプログラムを実行中であるか否かを確認する。
【００３０】
ステップＳ７０２において、プログラムを実行中であることを確認した場合には、ステップＳ７０３において、予め定めた所定時間が経過するまでステップＳ７０１以下のプロセッサのモニタを続け、所定時間が経過した後は、プログラムの停止待ち処理を終了する。
【００３１】
なお、ステップＳ７０２において、プログラムが実行中でないことを確認した場合は直ちにプログラムの停止待ち処理を終了する。
【００３２】
ここで、再び図２のフローチャートの説明に戻る。
ステップＳ７のプログラムの停止待ち処理において、予め定めた所定時間が経過するまでプロセッサのモニタを続けた後、ステップＳ８においてプログラムが停止したことを確認した場合には、ステップＳ９に進んでデバッガ１１にコマンド実行の終了結果を送信した後、ステップＳ１以下の動作を繰り返す。
【００３３】
一方、ステップＳ７におけるプログラムの停止待ち処理を終了しても（所定時間が経過しても）、プログラムが停止していない場合は、タイムアウトしてステップＳ１に戻り、他のデバッガ１１からのコマンドを所定時間内に受信したか否かの確認動作を行う。なお、所定時間内にデバッガ１１からのコマンドを受信しない場合には、ステップＳ１０に進む。
【００３４】
このとき、先に説明したステップＳ７において、プログラムの停止待ち処理を終了しても停止していないプログラムが実行中である場合には、ステップＳ１０では、プログラム実行中のプロセッサがあると判断され、再び、ステップＳ７のプログラムの停止待ち処理に入ることになる。
【００３５】
なお、ステップＳ１においてコマンドを受信した場合にはステップＳ２に進み、受信したコマンドが新規の接続を要求するコマンドであるか否かの確認を行う。
【００３６】
ここで、受信したコマンドが新規の接続を要求するコマンドである場合には、ステップＳ１１に進んで、ＣＰＵボード２上の各プロセッサ１の検索を開始する。
【００３７】
そして、デバッガ１１が未だに割り当てられていないプロセッサ１が存在するか否かについての確認を行い（ステップＳ１２）、デバッガ１１が割り当てられていないプロセッサ１が存在する場合には、ステップＳ１３に進んで、未割り当てのプロセッサ１のうち、プロセッサ番号の最も小さいものを、新規の接続を要求するデバッガ１１に自動的に割り当てる作業を行う。
【００３８】
そして、割り当て作業が終了すると、新規の接続を要求するデバッガ１１に対して、接続許可のメッセージを送り、以後、再びステップＳ１以下の動作を繰り返す。
【００３９】
なお、ステップＳ１２において、未割り当てのプロセッサ１が存在しない場合には、新規の接続を要求するデバッガ１１に対して、接続拒否のメッセージを送り（ステップＳ１５）、以後、再びステップＳ１以下の動作を繰り返す。
【００４０】
なお、通常は、ＣＰＵボード２上の複数のプロセッサ１に対して、同数のデバッガ１１を起動させるので、ステップＳ１５に進むことは希であるが、必要数以上のデバッガ１１を起動させてしまったような場合には、ステップＳ１５において接続拒否のメッセージを送ることで、不要なデバッガ１１を終了させることができる。
【００４１】
なお、ステップＳ５において制御コマンドが、プログラムを実行するための制御コマンドでないと確認された場合には、ステップＳ１６において、制御コマンド（ここではプログラムを実行する以外の制御コマンド）をＣＰＵボード２に向けて送信し、プロセッサでのコマンドの実行結果を取得する。なお、プログラム実行以外のコマンドは、プログラム実行に比べて極めて短時間で実行が終了するので、ステップＳ７におけるプログラムの停止待ち処理は不要である。
【００４２】
ステップＳ１６においてコマンドの実行結果を取得した後は、ステップＳ９に進んでデバッガにコマンド実行の終了結果を送信する。
【００４３】
＜Ｃ．デバッガの動作＞
次に、デバッガ１１の動作について図４に示すフローチャートを用いて説明する。
先に説明したように、デバッガ１１はソフトウエアであり、パーソナルコンピュータやワークステーション上で動作し、ユーザが当該ソフトウエアを起動させることでデバッグ動作を開始する。
【００４４】
起動したデバッガ１１は、まず、ＣＰＵボード２上の何れかのプロセッサ１に対する接続要求をデバッグサーバ１０に向けて送信する（ステップＳ１０１）。
【００４５】
そして、ステップＳ１０２において、デバッグサーバ１０からの接続許可、あるいは接続拒否のメッセージの送信を待ち、ステップＳ１０３に進む。
【００４６】
ステップＳ１０３では、デバッグサーバ１０からのメッセージを判別し、接続許可であればステップＳ１０４に進み、接続拒否であればステップＳ１０８に進む。
【００４７】
ステップＳ１０８に進んだ場合は、接続拒否のメッセージをパーソナルコンピュータやワークステーションの画面上に表示した後、当該デバッガでのデバッグ動作を終了する。なお、先に説明したように、接続が拒否される場合とは、必要数以上のデバッガ１１を起動させてしまったような場合であり、不要なデバッガ１１の動作を終了させることに問題はない。
【００４８】
一方、ステップＳ１０４に進んだ場合、ユーザからのコマンド入力を待ち、ユーザの入力に応じたコマンドをデバッグサーバ１０に送信する（ステップＳ１０５）。
【００４９】
デバッグサーバ１０では、当該コマンドに対して先に説明したステップＳ１〜Ｓ１６の処理を施し、コマンド実行が終了した場合にはデバッガ１１に対して終了結果を送信する。デバッガ１１では、コマンド実行の終了結果を待ち、終了結果が送信された場合にはステップＳ１０７に進む（ステップＳ１０６）。
【００５０】
なお、デバッガ１１では、コマンド実行の終了結果が送信されるまで、ステップＳ１０６の待機状態を続行する。
【００５１】
ステップＳ１０７では、コマンド実行の終了結果をパーソナルコンピュータやワークステーションの画面上に表示した後、ユーザからのデバッグ動作の終了指示の有無を確認し、終了指示があった場合にはデバッグ動作を終了し、終了指示がない場合には、ステップＳ１０５に戻って、ユーザから新たなコマンドが入力されるのを待つ。
【００５２】
＜Ｄ．効果＞
以上説明したように本発明に係るデバッグ制御方法、デバッガ１１から送られてきたコマンドに基づいて、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンドをプロセッサ１に送った場合には、プログラムの実行が停止するのを所定時間だけ待ち、所定時間過ぎてもプログラムの実行が停止しない場合には、プログラムの停止待ち処理を打ち切り、他のデバッガ１１からのコマンドを受け付けるように構成されている。従って、プロセッサを複数有して構成されるマルチプロセッサシステムにおいて、何れかのプロセッサの動作中でも、他のプロセッサに対するコマンドを受け付けることができ、マルチプロセッサシステムに適したデバッグ制御を行うことができる。
【００５３】
ここで、デバッガ１１にはマルチプロセッサシステムに適応させるための新たな機能としては、デバッグサーバ１０からの接続許可、あるいは接続拒否のメッセージの送信を待ち、接続拒否であればメッセージを表示する機能を付加するだけで良いので、シングルプロセッサシステムに対応した従来のデバッガを大幅に変更する必要がなく、マルチプロセッサシステムに対応するデバッグシステムの構築を比較的容易に実現できる。
【００５４】
また、本発明に係るデバッグ制御方法では、デバッガ１１から新規の接続を要求するコマンドが与えられた場合には、ＣＰＵボード２上の各プロセッサ１の検索を行い、デバッガ１１が未割り当てのプロセッサ１が存在する場合には、未割り当てのプロセッサ１のうち、プロセッサ番号の最も小さいものから順に、新規の接続を要求するデバッガ１１に割り当てる機能を有しているので、デバッガ１１に、プロセッサ１を選択する機能を持たせることが不要となって、デバッガ１１のプログラムを簡略化できる。
【００５５】
なお、上述したプロセッサ１の割り当てでは、プロセッサ番号の最も小さいものから順に割り当てるものとして説明したが、これは、番号が最も小さいプロセッサは、リセット時に直接に起動されたり、割り込み処理に対するより高い優先度を振り充てられ、マスタープロセッサとしての役割を有していることが多いためであるが、番号が最も大きいプロセッサにマスタープロセッサとしての役割を与えるのであれば、プロセッサ１の割り当ては、プロセッサ番号の最も大きいものから順に割り当てるようにすれば良い。
【００５６】
＜Ｅ．プログラムの実行再開のための機能について＞
図２に示すステップＳ７では、プログラムの停止待ち処理について説明したが、ここで言うプログラムの停止とは、一連のデバッグ対象となるプログラム（デバッグプログラムと呼称する場合もあり）のうち、デバッガ１１からのコマンドに応じてプログラムの一部が実行され、一旦停止することを意味し、その実行結果は、当該プログラムを実行したプロセッサ１に付属するレジスタ（図示は省略）に、レジスタ値として記録される。このレジスタ値は、デバッグプログラムを再開する際に必要となるが、プログラムの実行以外の操作を指示するコマンドがデバッガ１１から入力され、当該操作がプロセッサ１において実行されると、プロセッサ１に付属するレジスタの値が変更される場合がある。レジスタの値が変更されてしまうと、デバッグプログラムの再開に支障を来すことになる。
【００５７】
そこで、前回デバッグプログラムが停止した時点でのレジスタ値を、デバッグサーバ１０において変数を用いて保存し、読み出す機能を持たせ、デバッグプログラムを再開する際に、保存したレジスタ値を読み出し、デバッグプログラムを実行するプロセッサ１に付属するレジスタに書き込む、すなわち前回デバッグプログラムが停止した時点でのレジスタの値に戻すようにする。
【００５８】
具体的には、ＣＰＵボード２上の各プロセッサ１は、上述したレジスタをそれぞれ備え、デバッグサーバ１０には、各レジスタの値をデバッグプログラムが停止するごとに記録する機能を持たせ、例えばステップＳ９においてデバッガ１１にコマンド実行の終了結果を送信する前後において各レジスタの値をデバッグサーバ１０上で記録しておく。
【００５９】
そして、何れかのプロセッサ１においてデバッグプログラムを実行（再開）させる際に、例えばステップＳ６において制御コマンドを送信する際に、そのプロセッサ１で前回デバッグプログラムが停止した時点でのレジスタの値を送信し、該当するプロセッサ１のレジスタを書き戻す動作を行う。
【００６０】
なお、デバッグサーバ１０において変数を用いて保存し、読み出すという動作は、デバッグサーバ１０を構成するソフトウエアを実行するパーソナルコンピュータやワークステーションなどのメモリの一部の領域にデータを記憶させ、当該領域に対応付けて所定の変数を設定し、当該変数を用いて記憶させたデータを読み出す動作である。
【００６１】
このような機能を備えることで、ＣＰＵボード２上の各プロセッサ１におけるデバッグプログラムの実行をスムーズに再開させることが可能となる。
【００６２】
なお、デバッグサーバ１０において記憶されている前回デバッグプログラムが停止した時点でのレジスタの値は、ステップＳ６に先だって読み出せば良く、例えばステップＳ４において、プロセッサ１に送るべき制御コマンドを設定する際に読み出しても良いし、ステップＳ６の実行直前に読み出しても良い。
【００６３】
＜Ｆ．変形例１＞
プログラムのデバッグに際しては、特定の時点のプロセッサ１の状態を確認するために、ＣＰＵボード２上の全プロセッサのプログラムの実行を同時に止めることが要求される場合がある。そこで、デバッグサーバ１０において、プログラムの同時停止機能を持たせることで、当該要求を満たすようにする。具体的には、図５に示すフローチャートを用いてプログラムの同時停止機能を実現する。
【００６４】
図５においてステップＳ２１〜Ｓ２８、ステップＳ３０〜Ｓ３６で示す動作は、図２においてステップＳ１〜Ｓ８、ステップＳ１０〜Ｓ１６を用いて説明した動作と同じであり、説明は省略する。
【００６５】
図５に示すステップＳ２８において、ＣＰＵボード２上の１つのプロセッサ１でのプログラムが停止したことを確認した場合、ステップＳ２９に進んでデバッガ１１にコマンド実行の終了結果を送信するが、その際に、ＣＰＵボード２上の他のプロセッサ１に対して強制停止を指示する強制停止コマンドも併せて送信する。この強制停止コマンド送信するステップは、プログラムの同時停止機能という新たな機能を付加する同時停止モードの設定によって起動する。
【００６６】
強制停止コマンドを受けた、ＣＰＵボード２上の他のプロセッサ１は、先に停止したプロセッサ１とほぼ同時に停止することになる。
【００６７】
このように、デバッグサーバ１０において、プログラムの同時停止機能を持たせることでＣＰＵボード２上の全プロセッサのプログラムの実行を同時に止めることが可能となる。
【００６８】
なお、強制停止コマンドは、デバッガ１１がデバッグサーバ１０に与えるコマンドの１つであり、本来は、デバッガ１１に接続されたＣＰＵ１におけるプログラムの実行を、当該デバッガ１１からのコマンドに基づいて停止させるものであるが、デバッグサーバ１０では、ユーザが同時停止モードを選択することで、強制停止コマンドに対応する制御コマンドを設定して全てのプロセッサ１に向けて送信することになる。
【００６９】
ここで、デバッグサーバ１０におけるプログラムの同時停止機能は、常に起動している必要はなく、ユーザがプログラムの同時停止を希望する場合に、同時停止モードを設定することで起動するようにすれば良い。
【００７０】
デバッグサーバ１０は、ユーザが同時停止モードを設定することで、ステップＳ２９において強制停止コマンドが送信されることとなり、同時停止モードを設定しない場合は、図２に示す通常動作を行う。
【００７１】
同時停止モードの設定および解除の方法としては、デバッグサーバ１０の起動時に、予め定めた引数（変数）を入力することで同時停止モードを設定することとし、同時停止モードを使用しない場合には、別途に定めた引数を入力するようにすれば良い。
【００７２】
このように、デバッグサーバ１０の起動時に引数を入力して同時停止モードの設定および解除を行うので、同時停止モードの設定を比較的容易に行うことができる。
【００７３】
なお、デフォルトとして、デバッグサーバ１０の起動時には同時停止モードを使用しないように設定しておき、同時停止モードを使用する場合にのみ所定の引数を入力することとしても良い。
【００７４】
また、シグナルやソケット通信等のプログラム間通信用のインターフェースを用いてサーバに対して同時停止モードの設定および解除を指示しても良い。
【００７５】
ここで、プログラム間通信用のインターフェースとは、デバッグサーバ１０とデバッガ１１との間の通信を行うためのインターフェースであり、一般的に知られているプロセス間通信と同じインターフェースである。
【００７６】
プログラム間通信用のインターフェースを用いてサーバに対して同時停止モードの設定および解除を指示するということは、プログラム間通信によってデバッガ１１から同時停止モードの設定および解除のための指示をデバッグサーバ１０に与えることで、予め定めた同時停止モードの設定および解除のための変数をサーバ側で書き換えることを意味している。
【００７７】
そして、ＵＮＩＸ（登録商標）で使用されるプロセス間通信の一種であるシグナルを使用する場合の具体例としては以下のような構成が考えられる。
【００７８】
すなわち、デバッグサーバ１０において、シグナルシステムコールを使って特定のシグナル番号に対して同時停止モード切り替え用のシグナルハンドラを予め登録しておく。ユーザがデバッガ１１を介して特定のシグナル番号をデバッグサーバ１０に送信すると、予め登録されていたシグナルハンドラがカーネルによって起動される。起動したシグナルハンドラは、同時停止モードの変数をトグルで切り替える。
【００７９】
また、ソケット通信を使用する場合の具体例としては以下のような構成が考えられる。
【００８０】
すなわち、ソケット通信では通信データはバイト列で送信されるので、バイト列を使ってデバッガ１１からデバッグサーバ１０にコマンドを送信する。従って、予め、同時停止モード設定用のコマンド、つまりバイト列における値を決めておき、その値を含むバイト列をソケット通信を使ってデバッグサーバ１０に送り、サーバ側で同時停止モードの変数を切り替える。
【００８１】
このように、プログラム間通信用のインターフェースを用いてサーバに対して同時停止モードの設定および解除を指示するので、ユーザがデバッガ１１を介して同時停止モードの設定および解除を任意に行うことができ、使い勝手の良いデバッグシステムが得られる。
【００８２】
また、同時停止モードの設定および解除の方法としては、サーバ起動時に使用される制御用ファイル内に同時停止モードの変数の初期値を記載しておくことで、起動時にデバッグサーバ１０が当該初期値を自動的に読み込んで、同時停止モードの変数を設定するような構成としても良い。
【００８３】
このように、サーバ起動時に使用される制御用ファイルを用いて同時停止モードの設定および解除を行うので、同時停止モードの設定を比較的容易に行うことができる。
【００８４】
また、同時停止モードの設定および解除の方法としては、ＧＵＩ（Graphical User Interface）を用いてユーザが指示を与えるように構成しても良い。
【００８５】
このように、ＧＵＩを用いてサーバに対して同時停止モードの設定および解除を指示するので、ユーザが同時停止モードの設定および解除を任意に行うことができ、極めて使い勝手の良いデバッグシステムが得られる。
【００８６】
＜Ｇ．変形例２＞
プログラムのデバッグに際しては、ＣＰＵボード２上の各プロセッサ１で実行するプログラムの同期を取るため、全てのプロセッサ１におけるプログラムを同時に実行することが要求される場合がある。そこで、デバッグサーバ１０において、プログラムの同時実行機能を持たせることで、当該要求を満たすようにする。具体的には、図６に示すフローチャートを用いてプログラムの同時実行機能を実現する。
【００８７】
図６においてステップＳ４１〜Ｓ４５、ステップＳ４７〜Ｓ５６で示す動作は、図２においてステップＳ１〜Ｓ５、ステップＳ７〜Ｓ１６を用いて説明した動作と同じであり、説明は省略する。
【００８８】
図６に示すステップＳ４５において、１つのデバッガ１１から与えられたコマンドが、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンドであることが確認された場合、ステップＳ４５１に進む。
【００８９】
ステップＳ４５１では、全てのデバッガ１１からプログラムを実行するためのコマンドが送信されたか否かを確認するステップであり、当該コマンドを送信していない他のデバッガ１１が存在する場合には、ステップＳ４１の動作に戻って上記他のバッガ１１からのコマンド送信を待つことになる。なお、全てのデバッガ１１からプログラムを実行するためのコマンドが送信されるまで、ステップＳ４１以下の動作を繰り返す。
【００９０】
一方、全てのデバッガ１１からプログラムを実行するためのコマンドが与えられた場合には、ステップＳ４６に進み、ＣＰＵボード２上の各プロセッサ１のそれぞれに対して、対応する制御コマンドを送信する。
【００９１】
これにより、ＣＰＵボード２上の全プロセッサ１において同時にプログラムが実行を開始することになる。
【００９２】
このように、デバッグサーバ１０において、プログラムの同時実行機能を持たせることでＣＰＵボード２上の全プロセッサ１において、プログラムを同時に実行させることが可能となる。
【００９３】
ここで、ステップＳ４５１は、プログラムの同時実行機能という新たな機能を付加する同時実行モードの設定によって起動するが、デバッグサーバ１０におけるプログラムの同時実行機能は、常に起動している必要はなく、ユーザがプログラムの同時実行を希望する場合に、同時実行モードを設定することで起動するようにすれば良い。
【００９４】
デバッグサーバ１０は、ユーザが同時実行モードを設定することで、ステップＳ４５１において、全てのデバッガ１１からプログラムを実行するためのコマンドが与えられたことを確認するまで、ＣＰＵボード２に向けての制御コマンドの送信を待つこととなり、同時実行モードを設定しない場合は、図２に示す通常動作を行う。
【００９５】
同時実行モードの設定および解除の方法としては、デバッグサーバ１０の起動時に、予め定めた引数（変数）を入力することで同時実行モードを設定することとし、同時実行モードを使用しない場合には、別途に定めた引数を入力するようにすれば良い。なお、デフォルトとして、デバッグサーバ１０の起動時には同時実行モードを使用しないように設定しておき、同時実行モードを使用する場合にのみ所定の引数を入力することとしても良い。
【００９６】
また、シグナルやソケット通信等のプログラム間通信用のインターフェースを用いてサーバに対して同時実行モードの設定および解除を指示しても良い。なお、この方法の詳細については変形例１として説明した同時停止モードの場合と同様であるので、説明は省略する。
【００９７】
また、同時実行モードの設定および解除の方法としては、サーバ起動時に使用される制御用ファイル内に同時実行モードの変数の初期値を記載しておくことで、起動時にデバッグサーバ１０が当該初期値を自動的に読み込んで、同時実行モードの変数を設定するような構成としても良い。
【００９８】
また、同時実行モードの設定および解除の方法としては、ＧＵＩを用いてユーザが指示を与えるように構成しても良い。
【００９９】
＜Ｈ．変形例３＞
プログラムのデバッグに際しては、ＣＰＵボード２上の全プロセッサ１で同じ操作を行うことが要求される場合がある。そこで、デバッグサーバ１０において、特定のデバッガ１１から送信されたコマンドに基づいて、全プロセッサ１で同じ操作を実行するクローン機能を持たせることで、当該要求を満たすようにする。具体的には、図７に示すフローチャートを用いてクローン機能を実現する。
【０１００】
図７においてステップＳ６１〜Ｓ６５、ステップＳ６７〜Ｓ７０で示す動作は、図２においてステップＳ１〜Ｓ５、ステップＳ７〜Ｓ１０を用いて説明した動作と同じであり、説明は省略する。
【０１０１】
図７に示すステップＳ６５において、特定の１つのデバッガ１１から与えられたコマンドが、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンドであることが確認された場合、ステップＳ６６に進む。
【０１０２】
ステップＳ６６では、ＣＰＵボード２上の全てのプロセッサ１に対して、特定の１つのデバッガ１１から与えられたコマンドに対応する制御コマンドを送信する。
【０１０３】
一方、ステップＳ６５において、特定の１つのデバッガ１１から与えられたコマンドが、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンドでないと確認された場合には、ステップＳ７６において、当該制御コマンド（ここではプログラムを実行する以外の制御コマンド）を、ＣＰＵボード２上の全てのプロセッサ１に対して送信し、プロセッサでのコマンドの実行結果を取得する。
【０１０４】
これにより、ＣＰＵボード２上の全プロセッサ１において、特定の１つのデバッガ１１から送信されたコマンドに基づいて、同じ操作を実行することが可能となる。
【０１０５】
ここで、ステップＳ６２では、受信したコマンドが新規の接続を要求するコマンドであるか否かの確認を行うが、本例では、ＣＰＵボード２上の全てのプロセッサ１を特定の１つのデバッガ１１からのコマンドで操作するので、特定の１つのデバッガ以外のデバッガ１１は、何れのプロセッサ１にも接続しない。
【０１０６】
そこで、ステップＳ６２において受信したコマンドが新規の接続を要求するコマンドである場合にはステップＳ７１に進み、当該コマンドが、予め定めた特定の１つのデバッガ１１からのコマンドであるか否かを確認し、特定の１つのデバッガ１１からのコマンドである場合はステップＳ７３に進み、そうでない場合はステップＳ７２に進む。
【０１０７】
ステップＳ７２では、新規の接続を要求するデバッガ１１（ここでは特定の１つのデバッガ以外のデバッガ）に対して、接続拒否のメッセージを送り、以後、再びステップＳ６１以下の動作を繰り返す。
【０１０８】
また、ステップＳ７３では、複数のプロセッサ１のうち、プロセッサ番号の最も小さいものを、新規の接続を要求するデバッガ１１（ここでは特定の１つのデバッガ）に自動的に割り当てる作業を行う。
【０１０９】
そして、割り当て作業が終了すると、ステップＳ７４において新規の接続を要求するデバッガ１１に対して、接続許可のメッセージを送り、以後、再びステップＳ１以下の動作を繰り返す。
【０１１０】
ここで、ステップＳ７１は、クローン機能という新たな機能を付加するクローンモードの設定によって起動するが、デバッグサーバ１０におけるクローン機能は、常に起動している必要はなく、ユーザがクローン機能を希望する場合に、クローンモードを設定することで起動するようにすれば良い。
【０１１１】
デバッグサーバ１０は、ユーザがクローンモードを設定することで、特定のデバッガ以外のデバッガ１１に対してはプロセッサ１との接続を許可せず（ステップＳ７１）、ステップＳ６６において、ＣＰＵボード２上の全てのプロセッサ１に対して、特定の１つのデバッガ１１から与えられたコマンドに対応する制御コマンドを送信することとなり、クローンモードを設定しない場合は、図２に示す通常動作を行う。
【０１１２】
クローンモードの設定および解除の方法としては、デバッグサーバ１０の起動時に、予め定めた引数（変数）を入力することでクローンモードを設定することとし、クローンモードを使用しない場合には、別途に定めた引数を入力するようにすれば良い。なお、デフォルトとして、デバッグサーバ１０の起動時にはクローンモードを使用しないように設定しておき、クローンモードを使用する場合にのみ所定の引数を入力することとしても良い。
【０１１３】
また、シグナルやソケット通信等のプログラム間通信用のインターフェースを用いてサーバに対してクローンモードの設定および解除を指示しても良い。なお、この方法の詳細については変形例１として説明した同時停止モードの場合と同様であるので、説明は省略する。
【０１１４】
また、クローンモードの設定および解除の方法としては、サーバ起動時に使用される制御用ファイル内にクローンモードの変数の初期値を記載しておくことで、起動時にデバッグサーバ１０が当該初期値を自動的に読み込んで、クローンモードの変数を設定するような構成としても良い。
【０１１５】
また、クローンモードの設定および解除の方法としては、ＧＵＩを用いてユーザが指示を与えるように構成しても良い。
【０１１６】
なお、上記説明では図７に示すステップＳ６６において、ＣＰＵボード２上の全てのプロセッサ１に対して、特定の１つのデバッガ１１から与えられたコマンドに対応する制御コマンドを送信することとしたが、特定のプロセッサ１には、予め定めた特定の制御コマンドを送信するように構成しても良い。この特定の制御コマンドは、特定の１つのデバッガ１１から与えられたコマンドに対応する制御コマンドと同じ操作を上記特定のプロセッサ１に実行させるものであり、ハードウエア上の相違により、特定の１つのデバッガ１１から与えられたコマンドでは一律に制御できないプロセッサ１を操作できるように構成されている。
【図面の簡単な説明】
【０１１７】
【図１】本発明に係るデバッグ制御方法を適用したデバッグシステムの構成を示すブロック図である。
【図２】本発明に係るデバッグ制御方法の実施の形態を説明するフローチャートである。
【図３】プログラムの停止待ち処理を説明するフローチャートである。
【図４】デバッガの動作を説明するフローチャートである。
【図５】本発明に係るデバッグ制御方法の実施の形態の変形例１を説明するフローチャートである。
【図６】本発明に係るデバッグ制御方法の実施の形態の変形例２を説明するフローチャートである。
【図７】本発明に係るデバッグ制御方法の実施の形態の変形例３を説明するフローチャートである。
【符号の説明】
【０１１８】
１  プロセッサ、２  ＣＰＵボード。
【図１】
2006139346.tif 000003
【図２】
2006139346.tif 000004
【図３】
2006139346.tif 000005
【図４】
2006139346.tif 000006
【図５】
2006139346.tif 000007
【図６】
2006139346.tif 000008
【図７】
2006139346.tif 000009