JP2006139346A - デバッグ制御方法 - Google Patents
デバッグ制御方法 Download PDFInfo
- Publication number
- JP2006139346A JP2006139346A JP2004326050A JP2004326050A JP2006139346A JP 2006139346 A JP2006139346 A JP 2006139346A JP 2004326050 A JP2004326050 A JP 2004326050A JP 2004326050 A JP2004326050 A JP 2004326050A JP 2006139346 A JP2006139346 A JP 2006139346A
- Authority
- JP
- Japan
- Prior art keywords
- program
- command
- debug
- processor
- execution
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】シングルプロセッサシステム用のデバッガに大幅な変更を加えることなくマルチプロセッサシステムに適用可能とするデバッグ制御方法を提供する。
【解決手段】デバッガ11からのコマンドを所定時間内に受信した場合(S1)には、当該コマンドを制御コマンドとして設定し(S4)、当該制御コマンドが、プログラム実行制御コマンドであるか否かの確認を行う(S5)。そして、プログラム実行制御コマンドである場合には、CPUボード2に向けて送信し、当該制御御コマンドを送ったプロセッサをモニタし、プログラムの実行が停止するのを所定時間だけ待つ。所定時間が経過しても、プログラムが停止していない場合は、タイムアウトしてステップS1に戻り、他のデバッガ11からのコマンド受信を待つ。
【選択図】図2
【解決手段】デバッガ11からのコマンドを所定時間内に受信した場合(S1)には、当該コマンドを制御コマンドとして設定し(S4)、当該制御コマンドが、プログラム実行制御コマンドであるか否かの確認を行う(S5)。そして、プログラム実行制御コマンドである場合には、CPUボード2に向けて送信し、当該制御御コマンドを送ったプロセッサをモニタし、プログラムの実行が停止するのを所定時間だけ待つ。所定時間が経過しても、プログラムが停止していない場合は、タイムアウトしてステップS1に戻り、他のデバッガ11からのコマンド受信を待つ。
【選択図】図2
Description
本発明はプログラムデバッグにおける制御方法に関し、特にマルチプロセッサシステムに使用可能なデバッグ制御方法に関する。
プロセッサを複数有して構成されるマルチプロセッサシステムにおいて、プログラムデバッグを行うために、従来は、例えば特許文献1に開示されるように、シングルプロセッサシステム用の既存のデバッガに、複数のコンテキスト(プロセッサ)を扱う機能を追加することでマルチプロセッサシステムに対応させていた。
シングルプロセッサシステム用のデバッガは、単一のコンテキストを想定して作られているので、複数のコンテキストを持つマルチプロセッサシステムに対して対応するように機能を追加するには、デバッガの数十万行におよぶソースコードの大幅な変更が必要であり、マルチプロセッサシステムに対応するデバッグシステムを構築するには、多大な労力が必要であった。
本発明は上記のような問題点を解消するためになされたもので、シングルプロセッサシステム用のデバッガに大幅な変更を加えることなくマルチプロセッサシステムに適用可能とするデバッグ制御方法を提供することを目的とする。
本発明に係る請求項1記載のデバッグ制御方法は、複数のプロセッサを有して構成されるマルチプロセッサシステムと複数のデバッガとの通信を仲介し、前記マルチプロセッサシステムにおけるデバッグ動作を制御するデバッグ制御方法であって、以下のステップ(a)〜(d)を備えている。すなわち、前記複数のデバッガから、予め定めた所定時間内にコマンドを受信したか否かについて確認するステップ(a)と、前記ステップ(a)で受信した受信コマンドに対応させて、前記マルチプロセッサシステムに送信するための制御コマンドを設定するステップ(b)と、前記制御コマンドが、前記複数のプロセッサの1つにデバッグプログラムを実行させるプログラム実行制御コマンドであるか否かを確認するステップ(c)と、前記制御コマンドがプログラム実行制御コマンドである場合、前記プログラム実行制御コマンドが送信された前記プロセッサであるプログラム実行プロセッサをモニタして、予め定めた所定時間内に前記デバッグプログラムの実行が停止するか否かを確認するステップ(d)とを備え、前記デバッグプログラムの実行が停止しない場合には、前記プログラム実行プロセッサのモニタを中止して前記ステップ(a)に戻り、前記複数のデバッガのうち他のデバッガからのコマンド受信を待つ。
本発明に係る請求項1記載のデバッグ制御方法によれば、プログラム実行制御コマンドを送信したプログラム実行プロセッサをモニタして、予め定めた所定時間内にデバッグプログラムの実行が停止しない場合には、プログラム実行プロセッサのモニタを中止してステップ(a)に戻り、複数のデバッガのうち他のデバッガからのコマンド受信を待つので、プロセッサを複数有して構成されるマルチプロセッサシステムにおいて、何れかのプロセッサの動作中でも、他のプロセッサに対するコマンドを受け付けることができ、マルチプロセッサシステムに適したデバッグ制御を行うことができる。
<実施の形態>
<A.デバッグシステムの構成>
まず、図1を用いて本発明に係るデバッグ制御方法を適用したデバッグシステムの構成について説明する。
<A.デバッグシステムの構成>
まず、図1を用いて本発明に係るデバッグ制御方法を適用したデバッグシステムの構成について説明する。
図1において、複数のプロセッサ1を搭載したCPUボード2とデバッグサーバ10とが通信インターフェースC1を用いて接続され、デバッグサーバ10には、複数のデバッガ11が通信インターフェースC1を用いて接続された構成となっている。
デバッグサーバ10は、デバッガ11とCPUボード2との通信を仲介し、マルチプロセッサシステムにおけるデバッグ動作を制御する機能を有している。
ここで、デバッグサーバ10およびデバッガ11はソフトウエアであり、両者の間の通信インターフェースC2には、ソケット通信等のプログラム間で使用される通信インターフェースを用いる。なお、デバッグサーバ10およびデバッガ11を構成するプログラムは、パーソナルコンピュータやワークステーション上で動作し、CPUボード2は評価ボードやエミュレータに搭載されており、CPUボード2とデバッグサーバ10との間の通信インターフェースC1には、シリアルインターフェースやUSB(Universal Serial Bus)などの物理的な通信インターフェースを用いる。
CPUボード2に対しては、デバッグサーバ10から制御コマンドが与えられ、制御コマンドは、CPUボード2上のデバッグインターフェース21を介して対応するプロセッサ1に与えられる。
そして、デバッグサーバ10には、複数のデバッガ11からそれぞれ出力されるコマンドが与えられる構成となっている。
制御コマンドは、複数のデバッガ11からそれぞれ出力されるコマンドに対応して出力されるコマンドであり、デバッガ11から送信されるコマンドと、デバッグサーバ10がCPUボード2に送信する制御コマンドとが同一の通信プロトコルを持たない場合は、デバッグサーバ10は、当該コマンドを、CPUボード2のデバッグインターフェース21が持つ通信プロトコルに合うように、単一もしくは複数の制御コマンドに変換して出力する。
個々のデバッガ11は、プログラムの実行や、メモリやレジスタの参照および書き換え等の指示を操作者(ユーザ)から受け、それらの指示をコマンドに変換してデバッグサーバ10に送信する。
<B.デバッグサーバの動作>
次に、図2に示すフローチャートを用いて、図1を参照しつつデバッグサーバ10の動作について説明する。
次に、図2に示すフローチャートを用いて、図1を参照しつつデバッグサーバ10の動作について説明する。
デバッガ11によるデバッグ動作が開始すると、デバッグサーバ10では、デバッガ11からのコマンドを所定時間内に受信したか否かの確認動作を行う(ステップS1)。これは、デバッガからのコマンドの送信を待っているコマンド待ちのステップであり、コマンドを受信した場合にはステップS2に進み、所定時間内にコマンドを受信しなかった場合には、ステップS10に進む。なお、ステップS10では、CPUボード2上の各プロセッサ1の動作状態を確認し、何れかのプロセッサがプログラムを実行中であるか否かを確認する。
そして、プログラムを実行中のプロセッサ1が存在する場合には、ステップS7以下の動作を行う。従って、プログラムを実行中のプロセッサ1を再びモニタすることができる。
なお、プログラムを実行中のプロセッサが存在しない場合には、ステップS1に戻り、デバッガからのコマンドの送信を待つことになる。
ステップS2では、受信したコマンドが新規の接続を要求するコマンド(接続要求コマンド)であるか否か、すなわち、未だCPUボード2上の何れのプロセッサ1にも接続されていないデバッガ11が、何れかのプロセッサ1に接続されることを要求して送信したコマンドであるか否かの確認を行う。
ここで、受信したコマンドが新規の接続を要求するコマンドである場合にはステップS11に進み、新規の接続を要求するコマンド以外である場合、すなわち既に何れかのプロセッサ1に接続されたデバッガ11からのコマンドである場合にはステップS3に進む。
ステップS3では、コマンドを送信してきたデバッガ11が現在接続されているプロセッサ1を検索する。
次に、ステップS4において、受信したコマンドの通信プロトコルが、CPUボード2のデバッグインターフェース21が持つ通信プロトコルと一致するか否かを確認し、一致しない場合には、デバッグインターフェース21の通信プロトコルに合わせて単一もしくは複数のコマンドに変換したもの制御コマンドとして設定する。なお、通信プロトコルが一致する場合には、受信したコマンドを制御コマンドとして設定する。
次に、ステップS4において設定した制御コマンドが、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンド(プログラム実行制御コマンド)であるか否かの確認を行う(ステップS5)。そして、プログラムを実行するための制御コマンドであると確認された場合にはステップS6に進み、そうでない場合にはステップS16に進む。
ステップS6では、制御コマンド(ここではプログラムを実行するための制御コマンド)をCPUボード2に向けて送信する。
次に、ステップS7において、制御コマンドを送ったプロセッサ(プログラム実行プロセッサ)をモニタし、プログラムの実行が停止するのを所定時間だけ待つ(プログラムの停止待ち処理)。
ここで、ステップS7のプログラムの停止待ち処理について図3を用いて、さらに説明する。
プログラムの停止待ち処理は、プログラムを実行するための制御コマンドをCPUボード2に向けて送信することで開始し、まず、ステップS701において、制御コマンドを送ったプロセッサの動作状態を調べる。
そして、ステップS702において、当該プロセッサがプログラムを実行中であるか否かを確認する。
ステップS702において、プログラムを実行中であることを確認した場合には、ステップS703において、予め定めた所定時間が経過するまでステップS701以下のプロセッサのモニタを続け、所定時間が経過した後は、プログラムの停止待ち処理を終了する。
なお、ステップS702において、プログラムが実行中でないことを確認した場合は直ちにプログラムの停止待ち処理を終了する。
ここで、再び図2のフローチャートの説明に戻る。
ステップS7のプログラムの停止待ち処理において、予め定めた所定時間が経過するまでプロセッサのモニタを続けた後、ステップS8においてプログラムが停止したことを確認した場合には、ステップS9に進んでデバッガ11にコマンド実行の終了結果を送信した後、ステップS1以下の動作を繰り返す。
ステップS7のプログラムの停止待ち処理において、予め定めた所定時間が経過するまでプロセッサのモニタを続けた後、ステップS8においてプログラムが停止したことを確認した場合には、ステップS9に進んでデバッガ11にコマンド実行の終了結果を送信した後、ステップS1以下の動作を繰り返す。
一方、ステップS7におけるプログラムの停止待ち処理を終了しても(所定時間が経過しても)、プログラムが停止していない場合は、タイムアウトしてステップS1に戻り、他のデバッガ11からのコマンドを所定時間内に受信したか否かの確認動作を行う。なお、所定時間内にデバッガ11からのコマンドを受信しない場合には、ステップS10に進む。
このとき、先に説明したステップS7において、プログラムの停止待ち処理を終了しても停止していないプログラムが実行中である場合には、ステップS10では、プログラム実行中のプロセッサがあると判断され、再び、ステップS7のプログラムの停止待ち処理に入ることになる。
なお、ステップS1においてコマンドを受信した場合にはステップS2に進み、受信したコマンドが新規の接続を要求するコマンドであるか否かの確認を行う。
ここで、受信したコマンドが新規の接続を要求するコマンドである場合には、ステップS11に進んで、CPUボード2上の各プロセッサ1の検索を開始する。
そして、デバッガ11が未だに割り当てられていないプロセッサ1が存在するか否かについての確認を行い(ステップS12)、デバッガ11が割り当てられていないプロセッサ1が存在する場合には、ステップS13に進んで、未割り当てのプロセッサ1のうち、プロセッサ番号の最も小さいものを、新規の接続を要求するデバッガ11に自動的に割り当てる作業を行う。
そして、割り当て作業が終了すると、新規の接続を要求するデバッガ11に対して、接続許可のメッセージを送り、以後、再びステップS1以下の動作を繰り返す。
なお、ステップS12において、未割り当てのプロセッサ1が存在しない場合には、新規の接続を要求するデバッガ11に対して、接続拒否のメッセージを送り(ステップS15)、以後、再びステップS1以下の動作を繰り返す。
なお、通常は、CPUボード2上の複数のプロセッサ1に対して、同数のデバッガ11を起動させるので、ステップS15に進むことは希であるが、必要数以上のデバッガ11を起動させてしまったような場合には、ステップS15において接続拒否のメッセージを送ることで、不要なデバッガ11を終了させることができる。
なお、ステップS5において制御コマンドが、プログラムを実行するための制御コマンドでないと確認された場合には、ステップS16において、制御コマンド(ここではプログラムを実行する以外の制御コマンド)をCPUボード2に向けて送信し、プロセッサでのコマンドの実行結果を取得する。なお、プログラム実行以外のコマンドは、プログラム実行に比べて極めて短時間で実行が終了するので、ステップS7におけるプログラムの停止待ち処理は不要である。
ステップS16においてコマンドの実行結果を取得した後は、ステップS9に進んでデバッガにコマンド実行の終了結果を送信する。
<C.デバッガの動作>
次に、デバッガ11の動作について図4に示すフローチャートを用いて説明する。
先に説明したように、デバッガ11はソフトウエアであり、パーソナルコンピュータやワークステーション上で動作し、ユーザが当該ソフトウエアを起動させることでデバッグ動作を開始する。
次に、デバッガ11の動作について図4に示すフローチャートを用いて説明する。
先に説明したように、デバッガ11はソフトウエアであり、パーソナルコンピュータやワークステーション上で動作し、ユーザが当該ソフトウエアを起動させることでデバッグ動作を開始する。
起動したデバッガ11は、まず、CPUボード2上の何れかのプロセッサ1に対する接続要求をデバッグサーバ10に向けて送信する(ステップS101)。
そして、ステップS102において、デバッグサーバ10からの接続許可、あるいは接続拒否のメッセージの送信を待ち、ステップS103に進む。
ステップS103では、デバッグサーバ10からのメッセージを判別し、接続許可であればステップS104に進み、接続拒否であればステップS108に進む。
ステップS108に進んだ場合は、接続拒否のメッセージをパーソナルコンピュータやワークステーションの画面上に表示した後、当該デバッガでのデバッグ動作を終了する。なお、先に説明したように、接続が拒否される場合とは、必要数以上のデバッガ11を起動させてしまったような場合であり、不要なデバッガ11の動作を終了させることに問題はない。
一方、ステップS104に進んだ場合、ユーザからのコマンド入力を待ち、ユーザの入力に応じたコマンドをデバッグサーバ10に送信する(ステップS105)。
デバッグサーバ10では、当該コマンドに対して先に説明したステップS1〜S16の処理を施し、コマンド実行が終了した場合にはデバッガ11に対して終了結果を送信する。デバッガ11では、コマンド実行の終了結果を待ち、終了結果が送信された場合にはステップS107に進む(ステップS106)。
なお、デバッガ11では、コマンド実行の終了結果が送信されるまで、ステップS106の待機状態を続行する。
ステップS107では、コマンド実行の終了結果をパーソナルコンピュータやワークステーションの画面上に表示した後、ユーザからのデバッグ動作の終了指示の有無を確認し、終了指示があった場合にはデバッグ動作を終了し、終了指示がない場合には、ステップS105に戻って、ユーザから新たなコマンドが入力されるのを待つ。
<D.効果>
以上説明したように本発明に係るデバッグ制御方法、デバッガ11から送られてきたコマンドに基づいて、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンドをプロセッサ1に送った場合には、プログラムの実行が停止するのを所定時間だけ待ち、所定時間過ぎてもプログラムの実行が停止しない場合には、プログラムの停止待ち処理を打ち切り、他のデバッガ11からのコマンドを受け付けるように構成されている。従って、プロセッサを複数有して構成されるマルチプロセッサシステムにおいて、何れかのプロセッサの動作中でも、他のプロセッサに対するコマンドを受け付けることができ、マルチプロセッサシステムに適したデバッグ制御を行うことができる。
以上説明したように本発明に係るデバッグ制御方法、デバッガ11から送られてきたコマンドに基づいて、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンドをプロセッサ1に送った場合には、プログラムの実行が停止するのを所定時間だけ待ち、所定時間過ぎてもプログラムの実行が停止しない場合には、プログラムの停止待ち処理を打ち切り、他のデバッガ11からのコマンドを受け付けるように構成されている。従って、プロセッサを複数有して構成されるマルチプロセッサシステムにおいて、何れかのプロセッサの動作中でも、他のプロセッサに対するコマンドを受け付けることができ、マルチプロセッサシステムに適したデバッグ制御を行うことができる。
ここで、デバッガ11にはマルチプロセッサシステムに適応させるための新たな機能としては、デバッグサーバ10からの接続許可、あるいは接続拒否のメッセージの送信を待ち、接続拒否であればメッセージを表示する機能を付加するだけで良いので、シングルプロセッサシステムに対応した従来のデバッガを大幅に変更する必要がなく、マルチプロセッサシステムに対応するデバッグシステムの構築を比較的容易に実現できる。
また、本発明に係るデバッグ制御方法では、デバッガ11から新規の接続を要求するコマンドが与えられた場合には、CPUボード2上の各プロセッサ1の検索を行い、デバッガ11が未割り当てのプロセッサ1が存在する場合には、未割り当てのプロセッサ1のうち、プロセッサ番号の最も小さいものから順に、新規の接続を要求するデバッガ11に割り当てる機能を有しているので、デバッガ11に、プロセッサ1を選択する機能を持たせることが不要となって、デバッガ11のプログラムを簡略化できる。
なお、上述したプロセッサ1の割り当てでは、プロセッサ番号の最も小さいものから順に割り当てるものとして説明したが、これは、番号が最も小さいプロセッサは、リセット時に直接に起動されたり、割り込み処理に対するより高い優先度を振り充てられ、マスタープロセッサとしての役割を有していることが多いためであるが、番号が最も大きいプロセッサにマスタープロセッサとしての役割を与えるのであれば、プロセッサ1の割り当ては、プロセッサ番号の最も大きいものから順に割り当てるようにすれば良い。
<E.プログラムの実行再開のための機能について>
図2に示すステップS7では、プログラムの停止待ち処理について説明したが、ここで言うプログラムの停止とは、一連のデバッグ対象となるプログラム(デバッグプログラムと呼称する場合もあり)のうち、デバッガ11からのコマンドに応じてプログラムの一部が実行され、一旦停止することを意味し、その実行結果は、当該プログラムを実行したプロセッサ1に付属するレジスタ(図示は省略)に、レジスタ値として記録される。このレジスタ値は、デバッグプログラムを再開する際に必要となるが、プログラムの実行以外の操作を指示するコマンドがデバッガ11から入力され、当該操作がプロセッサ1において実行されると、プロセッサ1に付属するレジスタの値が変更される場合がある。レジスタの値が変更されてしまうと、デバッグプログラムの再開に支障を来すことになる。
図2に示すステップS7では、プログラムの停止待ち処理について説明したが、ここで言うプログラムの停止とは、一連のデバッグ対象となるプログラム(デバッグプログラムと呼称する場合もあり)のうち、デバッガ11からのコマンドに応じてプログラムの一部が実行され、一旦停止することを意味し、その実行結果は、当該プログラムを実行したプロセッサ1に付属するレジスタ(図示は省略)に、レジスタ値として記録される。このレジスタ値は、デバッグプログラムを再開する際に必要となるが、プログラムの実行以外の操作を指示するコマンドがデバッガ11から入力され、当該操作がプロセッサ1において実行されると、プロセッサ1に付属するレジスタの値が変更される場合がある。レジスタの値が変更されてしまうと、デバッグプログラムの再開に支障を来すことになる。
そこで、前回デバッグプログラムが停止した時点でのレジスタ値を、デバッグサーバ10において変数を用いて保存し、読み出す機能を持たせ、デバッグプログラムを再開する際に、保存したレジスタ値を読み出し、デバッグプログラムを実行するプロセッサ1に付属するレジスタに書き込む、すなわち前回デバッグプログラムが停止した時点でのレジスタの値に戻すようにする。
具体的には、CPUボード2上の各プロセッサ1は、上述したレジスタをそれぞれ備え、デバッグサーバ10には、各レジスタの値をデバッグプログラムが停止するごとに記録する機能を持たせ、例えばステップS9においてデバッガ11にコマンド実行の終了結果を送信する前後において各レジスタの値をデバッグサーバ10上で記録しておく。
そして、何れかのプロセッサ1においてデバッグプログラムを実行(再開)させる際に、例えばステップS6において制御コマンドを送信する際に、そのプロセッサ1で前回デバッグプログラムが停止した時点でのレジスタの値を送信し、該当するプロセッサ1のレジスタを書き戻す動作を行う。
なお、デバッグサーバ10において変数を用いて保存し、読み出すという動作は、デバッグサーバ10を構成するソフトウエアを実行するパーソナルコンピュータやワークステーションなどのメモリの一部の領域にデータを記憶させ、当該領域に対応付けて所定の変数を設定し、当該変数を用いて記憶させたデータを読み出す動作である。
このような機能を備えることで、CPUボード2上の各プロセッサ1におけるデバッグプログラムの実行をスムーズに再開させることが可能となる。
なお、デバッグサーバ10において記憶されている前回デバッグプログラムが停止した時点でのレジスタの値は、ステップS6に先だって読み出せば良く、例えばステップS4において、プロセッサ1に送るべき制御コマンドを設定する際に読み出しても良いし、ステップS6の実行直前に読み出しても良い。
<F.変形例1>
プログラムのデバッグに際しては、特定の時点のプロセッサ1の状態を確認するために、CPUボード2上の全プロセッサのプログラムの実行を同時に止めることが要求される場合がある。そこで、デバッグサーバ10において、プログラムの同時停止機能を持たせることで、当該要求を満たすようにする。具体的には、図5に示すフローチャートを用いてプログラムの同時停止機能を実現する。
プログラムのデバッグに際しては、特定の時点のプロセッサ1の状態を確認するために、CPUボード2上の全プロセッサのプログラムの実行を同時に止めることが要求される場合がある。そこで、デバッグサーバ10において、プログラムの同時停止機能を持たせることで、当該要求を満たすようにする。具体的には、図5に示すフローチャートを用いてプログラムの同時停止機能を実現する。
図5においてステップS21〜S28、ステップS30〜S36で示す動作は、図2においてステップS1〜S8、ステップS10〜S16を用いて説明した動作と同じであり、説明は省略する。
図5に示すステップS28において、CPUボード2上の1つのプロセッサ1でのプログラムが停止したことを確認した場合、ステップS29に進んでデバッガ11にコマンド実行の終了結果を送信するが、その際に、CPUボード2上の他のプロセッサ1に対して強制停止を指示する強制停止コマンドも併せて送信する。この強制停止コマンド送信するステップは、プログラムの同時停止機能という新たな機能を付加する同時停止モードの設定によって起動する。
強制停止コマンドを受けた、CPUボード2上の他のプロセッサ1は、先に停止したプロセッサ1とほぼ同時に停止することになる。
このように、デバッグサーバ10において、プログラムの同時停止機能を持たせることでCPUボード2上の全プロセッサのプログラムの実行を同時に止めることが可能となる。
なお、強制停止コマンドは、デバッガ11がデバッグサーバ10に与えるコマンドの1つであり、本来は、デバッガ11に接続されたCPU1におけるプログラムの実行を、当該デバッガ11からのコマンドに基づいて停止させるものであるが、デバッグサーバ10では、ユーザが同時停止モードを選択することで、強制停止コマンドに対応する制御コマンドを設定して全てのプロセッサ1に向けて送信することになる。
ここで、デバッグサーバ10におけるプログラムの同時停止機能は、常に起動している必要はなく、ユーザがプログラムの同時停止を希望する場合に、同時停止モードを設定することで起動するようにすれば良い。
デバッグサーバ10は、ユーザが同時停止モードを設定することで、ステップS29において強制停止コマンドが送信されることとなり、同時停止モードを設定しない場合は、図2に示す通常動作を行う。
同時停止モードの設定および解除の方法としては、デバッグサーバ10の起動時に、予め定めた引数(変数)を入力することで同時停止モードを設定することとし、同時停止モードを使用しない場合には、別途に定めた引数を入力するようにすれば良い。
このように、デバッグサーバ10の起動時に引数を入力して同時停止モードの設定および解除を行うので、同時停止モードの設定を比較的容易に行うことができる。
なお、デフォルトとして、デバッグサーバ10の起動時には同時停止モードを使用しないように設定しておき、同時停止モードを使用する場合にのみ所定の引数を入力することとしても良い。
また、シグナルやソケット通信等のプログラム間通信用のインターフェースを用いてサーバに対して同時停止モードの設定および解除を指示しても良い。
ここで、プログラム間通信用のインターフェースとは、デバッグサーバ10とデバッガ11との間の通信を行うためのインターフェースであり、一般的に知られているプロセス間通信と同じインターフェースである。
プログラム間通信用のインターフェースを用いてサーバに対して同時停止モードの設定および解除を指示するということは、プログラム間通信によってデバッガ11から同時停止モードの設定および解除のための指示をデバッグサーバ10に与えることで、予め定めた同時停止モードの設定および解除のための変数をサーバ側で書き換えることを意味している。
そして、UNIX(登録商標)で使用されるプロセス間通信の一種であるシグナルを使用する場合の具体例としては以下のような構成が考えられる。
すなわち、デバッグサーバ10において、シグナルシステムコールを使って特定のシグナル番号に対して同時停止モード切り替え用のシグナルハンドラを予め登録しておく。ユーザがデバッガ11を介して特定のシグナル番号をデバッグサーバ10に送信すると、予め登録されていたシグナルハンドラがカーネルによって起動される。起動したシグナルハンドラは、同時停止モードの変数をトグルで切り替える。
また、ソケット通信を使用する場合の具体例としては以下のような構成が考えられる。
すなわち、ソケット通信では通信データはバイト列で送信されるので、バイト列を使ってデバッガ11からデバッグサーバ10にコマンドを送信する。従って、予め、同時停止モード設定用のコマンド、つまりバイト列における値を決めておき、その値を含むバイト列をソケット通信を使ってデバッグサーバ10に送り、サーバ側で同時停止モードの変数を切り替える。
このように、プログラム間通信用のインターフェースを用いてサーバに対して同時停止モードの設定および解除を指示するので、ユーザがデバッガ11を介して同時停止モードの設定および解除を任意に行うことができ、使い勝手の良いデバッグシステムが得られる。
また、同時停止モードの設定および解除の方法としては、サーバ起動時に使用される制御用ファイル内に同時停止モードの変数の初期値を記載しておくことで、起動時にデバッグサーバ10が当該初期値を自動的に読み込んで、同時停止モードの変数を設定するような構成としても良い。
このように、サーバ起動時に使用される制御用ファイルを用いて同時停止モードの設定および解除を行うので、同時停止モードの設定を比較的容易に行うことができる。
また、同時停止モードの設定および解除の方法としては、GUI(Graphical User Interface)を用いてユーザが指示を与えるように構成しても良い。
このように、GUIを用いてサーバに対して同時停止モードの設定および解除を指示するので、ユーザが同時停止モードの設定および解除を任意に行うことができ、極めて使い勝手の良いデバッグシステムが得られる。
<G.変形例2>
プログラムのデバッグに際しては、CPUボード2上の各プロセッサ1で実行するプログラムの同期を取るため、全てのプロセッサ1におけるプログラムを同時に実行することが要求される場合がある。そこで、デバッグサーバ10において、プログラムの同時実行機能を持たせることで、当該要求を満たすようにする。具体的には、図6に示すフローチャートを用いてプログラムの同時実行機能を実現する。
プログラムのデバッグに際しては、CPUボード2上の各プロセッサ1で実行するプログラムの同期を取るため、全てのプロセッサ1におけるプログラムを同時に実行することが要求される場合がある。そこで、デバッグサーバ10において、プログラムの同時実行機能を持たせることで、当該要求を満たすようにする。具体的には、図6に示すフローチャートを用いてプログラムの同時実行機能を実現する。
図6においてステップS41〜S45、ステップS47〜S56で示す動作は、図2においてステップS1〜S5、ステップS7〜S16を用いて説明した動作と同じであり、説明は省略する。
図6に示すステップS45において、1つのデバッガ11から与えられたコマンドが、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンドであることが確認された場合、ステップS451に進む。
ステップS451では、全てのデバッガ11からプログラムを実行するためのコマンドが送信されたか否かを確認するステップであり、当該コマンドを送信していない他のデバッガ11が存在する場合には、ステップS41の動作に戻って上記他のバッガ11からのコマンド送信を待つことになる。なお、全てのデバッガ11からプログラムを実行するためのコマンドが送信されるまで、ステップS41以下の動作を繰り返す。
一方、全てのデバッガ11からプログラムを実行するためのコマンドが与えられた場合には、ステップS46に進み、CPUボード2上の各プロセッサ1のそれぞれに対して、対応する制御コマンドを送信する。
これにより、CPUボード2上の全プロセッサ1において同時にプログラムが実行を開始することになる。
このように、デバッグサーバ10において、プログラムの同時実行機能を持たせることでCPUボード2上の全プロセッサ1において、プログラムを同時に実行させることが可能となる。
ここで、ステップS451は、プログラムの同時実行機能という新たな機能を付加する同時実行モードの設定によって起動するが、デバッグサーバ10におけるプログラムの同時実行機能は、常に起動している必要はなく、ユーザがプログラムの同時実行を希望する場合に、同時実行モードを設定することで起動するようにすれば良い。
デバッグサーバ10は、ユーザが同時実行モードを設定することで、ステップS451において、全てのデバッガ11からプログラムを実行するためのコマンドが与えられたことを確認するまで、CPUボード2に向けての制御コマンドの送信を待つこととなり、同時実行モードを設定しない場合は、図2に示す通常動作を行う。
同時実行モードの設定および解除の方法としては、デバッグサーバ10の起動時に、予め定めた引数(変数)を入力することで同時実行モードを設定することとし、同時実行モードを使用しない場合には、別途に定めた引数を入力するようにすれば良い。なお、デフォルトとして、デバッグサーバ10の起動時には同時実行モードを使用しないように設定しておき、同時実行モードを使用する場合にのみ所定の引数を入力することとしても良い。
また、シグナルやソケット通信等のプログラム間通信用のインターフェースを用いてサーバに対して同時実行モードの設定および解除を指示しても良い。なお、この方法の詳細については変形例1として説明した同時停止モードの場合と同様であるので、説明は省略する。
また、同時実行モードの設定および解除の方法としては、サーバ起動時に使用される制御用ファイル内に同時実行モードの変数の初期値を記載しておくことで、起動時にデバッグサーバ10が当該初期値を自動的に読み込んで、同時実行モードの変数を設定するような構成としても良い。
また、同時実行モードの設定および解除の方法としては、GUIを用いてユーザが指示を与えるように構成しても良い。
<H.変形例3>
プログラムのデバッグに際しては、CPUボード2上の全プロセッサ1で同じ操作を行うことが要求される場合がある。そこで、デバッグサーバ10において、特定のデバッガ11から送信されたコマンドに基づいて、全プロセッサ1で同じ操作を実行するクローン機能を持たせることで、当該要求を満たすようにする。具体的には、図7に示すフローチャートを用いてクローン機能を実現する。
プログラムのデバッグに際しては、CPUボード2上の全プロセッサ1で同じ操作を行うことが要求される場合がある。そこで、デバッグサーバ10において、特定のデバッガ11から送信されたコマンドに基づいて、全プロセッサ1で同じ操作を実行するクローン機能を持たせることで、当該要求を満たすようにする。具体的には、図7に示すフローチャートを用いてクローン機能を実現する。
図7においてステップS61〜S65、ステップS67〜S70で示す動作は、図2においてステップS1〜S5、ステップS7〜S10を用いて説明した動作と同じであり、説明は省略する。
図7に示すステップS65において、特定の1つのデバッガ11から与えられたコマンドが、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンドであることが確認された場合、ステップS66に進む。
ステップS66では、CPUボード2上の全てのプロセッサ1に対して、特定の1つのデバッガ11から与えられたコマンドに対応する制御コマンドを送信する。
一方、ステップS65において、特定の1つのデバッガ11から与えられたコマンドが、ステップ実行やコンティニュー実行等のプログラムを実行するための制御コマンドでないと確認された場合には、ステップS76において、当該制御コマンド(ここではプログラムを実行する以外の制御コマンド)を、CPUボード2上の全てのプロセッサ1に対して送信し、プロセッサでのコマンドの実行結果を取得する。
これにより、CPUボード2上の全プロセッサ1において、特定の1つのデバッガ11から送信されたコマンドに基づいて、同じ操作を実行することが可能となる。
ここで、ステップS62では、受信したコマンドが新規の接続を要求するコマンドであるか否かの確認を行うが、本例では、CPUボード2上の全てのプロセッサ1を特定の1つのデバッガ11からのコマンドで操作するので、特定の1つのデバッガ以外のデバッガ11は、何れのプロセッサ1にも接続しない。
そこで、ステップS62において受信したコマンドが新規の接続を要求するコマンドである場合にはステップS71に進み、当該コマンドが、予め定めた特定の1つのデバッガ11からのコマンドであるか否かを確認し、特定の1つのデバッガ11からのコマンドである場合はステップS73に進み、そうでない場合はステップS72に進む。
ステップS72では、新規の接続を要求するデバッガ11(ここでは特定の1つのデバッガ以外のデバッガ)に対して、接続拒否のメッセージを送り、以後、再びステップS61以下の動作を繰り返す。
また、ステップS73では、複数のプロセッサ1のうち、プロセッサ番号の最も小さいものを、新規の接続を要求するデバッガ11(ここでは特定の1つのデバッガ)に自動的に割り当てる作業を行う。
そして、割り当て作業が終了すると、ステップS74において新規の接続を要求するデバッガ11に対して、接続許可のメッセージを送り、以後、再びステップS1以下の動作を繰り返す。
ここで、ステップS71は、クローン機能という新たな機能を付加するクローンモードの設定によって起動するが、デバッグサーバ10におけるクローン機能は、常に起動している必要はなく、ユーザがクローン機能を希望する場合に、クローンモードを設定することで起動するようにすれば良い。
デバッグサーバ10は、ユーザがクローンモードを設定することで、特定のデバッガ以外のデバッガ11に対してはプロセッサ1との接続を許可せず(ステップS71)、ステップS66において、CPUボード2上の全てのプロセッサ1に対して、特定の1つのデバッガ11から与えられたコマンドに対応する制御コマンドを送信することとなり、クローンモードを設定しない場合は、図2に示す通常動作を行う。
クローンモードの設定および解除の方法としては、デバッグサーバ10の起動時に、予め定めた引数(変数)を入力することでクローンモードを設定することとし、クローンモードを使用しない場合には、別途に定めた引数を入力するようにすれば良い。なお、デフォルトとして、デバッグサーバ10の起動時にはクローンモードを使用しないように設定しておき、クローンモードを使用する場合にのみ所定の引数を入力することとしても良い。
また、シグナルやソケット通信等のプログラム間通信用のインターフェースを用いてサーバに対してクローンモードの設定および解除を指示しても良い。なお、この方法の詳細については変形例1として説明した同時停止モードの場合と同様であるので、説明は省略する。
また、クローンモードの設定および解除の方法としては、サーバ起動時に使用される制御用ファイル内にクローンモードの変数の初期値を記載しておくことで、起動時にデバッグサーバ10が当該初期値を自動的に読み込んで、クローンモードの変数を設定するような構成としても良い。
また、クローンモードの設定および解除の方法としては、GUIを用いてユーザが指示を与えるように構成しても良い。
なお、上記説明では図7に示すステップS66において、CPUボード2上の全てのプロセッサ1に対して、特定の1つのデバッガ11から与えられたコマンドに対応する制御コマンドを送信することとしたが、特定のプロセッサ1には、予め定めた特定の制御コマンドを送信するように構成しても良い。この特定の制御コマンドは、特定の1つのデバッガ11から与えられたコマンドに対応する制御コマンドと同じ操作を上記特定のプロセッサ1に実行させるものであり、ハードウエア上の相違により、特定の1つのデバッガ11から与えられたコマンドでは一律に制御できないプロセッサ1を操作できるように構成されている。
1 プロセッサ、2 CPUボード。
Claims (12)
- 複数のプロセッサを有して構成されるマルチプロセッサシステムと複数のデバッガとの通信を仲介し、前記マルチプロセッサシステムにおけるデバッグ動作を制御するデバッグ制御方法であって、
(a)前記複数のデバッガから、予め定めた所定時間内にコマンドを受信したか否かについて確認するステップと、
(b)前記ステップ(a)で受信した受信コマンドに対応させて、前記マルチプロセッサシステムに送信するための制御コマンドを設定するステップと、
(c)前記制御コマンドが、前記複数のプロセッサの1つにデバッグプログラムを実行させるプログラム実行制御コマンドであるか否かを確認するステップと、
(d)前記制御コマンドがプログラム実行制御コマンドである場合、前記プログラム実行制御コマンドが送信された前記プロセッサであるプログラム実行プロセッサをモニタして、予め定めた所定時間内に前記デバッグプログラムの実行が停止するか否かを確認するステップと、を備え、
前記デバッグプログラムの実行が停止しない場合には、前記プログラム実行プロセッサのモニタを中止して前記ステップ(a)に戻り、前記複数のデバッガのうち他のデバッガからのコマンド受信を待つ、デバッグ制御方法。 - 前記ステップ(a)において、前記所定時間内にコマンドを受信しない場合であって、前記デバッグプログラムを実行中の前記プログラム実行プロセッサが存在する場合は、該プロセッサに対して前記ステップ(d)を繰り返す、請求項1記載のデバッグ制御方法。
- 前記ステップ(a)で受信した前記受信コマンドが、前記複数のデバッガの1つから前記複数のプロセッサの何れかへの接続を求める接続要求コマンドである場合、
(e)前記複数のデバッガの何れにも接続されていない未割り当てのプロセッサの有無を確認するステップと、
(f)前記未割り当てのプロセッサが存在する場合、該プロセッサに前記接続要求コマンドを送信したデバッガを接続するステップと、をさらに備える、請求項2記載のデバッグ制御方法。 - 前記ステップ(f)は、前記接続要求コマンドを送信したデバッガに、前記未割り当てのプロセッサのうち、プロセッサ番号の最も小さいものを接続するステップを含む、請求項3記載のデバッグ制御方法。
- 前記マルチプロセッサシステムは、前記複数のプロセッサごとに付属するレジスタを複数有し、それぞれのプロセッサにおける前記デバッグプログラムの実行結果は、前記デバッグプログラムが実行を停止するごとに前記それぞれのプロセッサに付属するレジスタに記録され、
前記ステップ(d)において、前記プログラム実行プロセッサでの前記デバッグプログラムの実行が停止したことを確認した場合には、前記プログラム実行プロセッサに付属する前記レジスタのレジスタ値を読み出して保存し、
前記プログラム実行プロセッサでの前記デバッグプログラムの実行再開に際して、保存した前記レジスタ値を前記プログラム実行プロセッサに付属する前記レジスタに書き込む、請求項1記載のデバッグ制御方法。 - 前記ステップ(d)において、前記プログラム実行プロセッサでの前記デバッグプログラムの実行が停止したことを確認した場合に、
(g)前記マルチプロセッサシステムにおける他のプロセッサで実行中の前記デバッグプログラムを同時に強制的に停止させるように、前記マルチプロセッサシステムに対して強制停止コマンドを送信するステップをさらに備え、
前記ステップ(g)は、新たな機能を付加する付加モードの設定によって起動する、請求項1記載のデバッグ制御方法。 - 前記ステップ(c)において前記制御コマンドが前記プログラム実行制御コマンドであることを確認した場合、前記ステップ(d)に先だって、
(h)前記受信コマンドを送信したデバッガ以外の全てのデバッガから前記プログラム実行制御コマンドに対応するコマンドが送信されるのを確認するステップをさらに備え、
前記ステップ(d)において、前記マルチプロセッサシステムにおける前記複数のプロセッサの全てに対して、それぞれ対応する前記プログラム実行制御コマンドを送信し、前記ステップ(h)は、新たな機能を付加する付加モードの設定によって起動する、請求項1記載のデバッグ制御方法。 - 前記ステップ(a)で受信した前記受信コマンドが、前記複数のデバッガの1つから前記複数のプロセッサの何れかへの接続を求める接続要求コマンドである場合、
(i)前記受信コマンドが予め定めた特定の1つのデバッガからのコマンドであるか否かを確認するステップをさらに備え、
前記受信コマンドが前記特定の1つのデバッガからのコマンドについてのみ、前記ステップ(b)以下の処理を進め、
前記ステップ(d)において、前記マルチプロセッサシステムにおける前記複数のプロセッサの全てに対して前記プログラム実行制御コマンドを送信し、
前記ステップ(i)は、新たな機能を付加する付加モードの設定によって起動する、請求項1記載のデバッグ制御方法。 - 前記デバッグ制御方法はプログラムをコンピュータ上で実行することで実現し、
前記プログラムの起動時に、予め定めた引数を入力することで前記付加モードの設定および解除を行う、請求項6ないし請求項8の何れかに記載のデバッグ制御方法。 - 前記デバッグ制御方法はプログラムをコンピュータ上で実行することで実現し、
プログラム間通信用のインターフェースを用いて前記付加モードの設定および解除を行う、請求項6ないし請求項8の何れかに記載のデバッグ制御方法。 - 前記デバッグ制御方法はプログラムをコンピュータ上で実行することで実現し、
前記プログラムの起動時に使用される制御用ファイル内に記載する所定の変数に基づいて前記付加モードの設定および解除を行う、請求項6ないし請求項8の何れかに記載のデバッグ制御方法。 - 前記デバッグ制御方法はプログラムをコンピュータ上で実行することで実現し、GUI(Graphical User Interface)を用いて前記付加モードの設定および解除を行う、請求項6ないし請求項8の何れかに記載のデバッグ制御方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004326050A JP2006139346A (ja) | 2004-11-10 | 2004-11-10 | デバッグ制御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004326050A JP2006139346A (ja) | 2004-11-10 | 2004-11-10 | デバッグ制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006139346A true JP2006139346A (ja) | 2006-06-01 |
Family
ID=36620157
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004326050A Pending JP2006139346A (ja) | 2004-11-10 | 2004-11-10 | デバッグ制御方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2006139346A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPWO2012077704A1 (ja) * | 2010-12-07 | 2014-05-22 | 日本電気株式会社 | デバッグスタブサーバ、デバッグ方法およびプログラム |
-
2004
- 2004-11-10 JP JP2004326050A patent/JP2006139346A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPWO2012077704A1 (ja) * | 2010-12-07 | 2014-05-22 | 日本電気株式会社 | デバッグスタブサーバ、デバッグ方法およびプログラム |
US9292395B2 (en) | 2010-12-07 | 2016-03-22 | Nec Corporation | Debug stub server, debug method, and program |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI381310B (zh) | 使運算裝置上之迷你程式能存取輔助系統之方法及系統 | |
KR20130139897A (ko) | 컴퓨트 클러스터에서의 디버거 런칭 및 첨부 | |
JPH0795314B2 (ja) | 周辺装置支援システム | |
US20050223359A1 (en) | Techniques for multi-core debugging | |
JP6413813B2 (ja) | 電子機器、制御装置及びプログラム | |
CN111176801A (zh) | 一种多进程管理方法、装置、设备及存储介质 | |
CN110971591B (zh) | 一种多进程访问可信应用的方法和系统 | |
JPH0754471B2 (ja) | デ−タ処理装置 | |
US7865883B1 (en) | Parallel and asynchronous debugger and debugging method for multi-threaded programs | |
JP7093979B2 (ja) | デバイスプロキシ装置及びそれを含む計算機システム | |
JP2006139346A (ja) | デバッグ制御方法 | |
JP2003108513A (ja) | ハードウェア・チェーン・プル | |
WO2014087654A1 (ja) | データ送信装置、データ送信方法、及び記録媒体 | |
JP6151946B2 (ja) | 情報処理システム、情報処理装置およびそれらの制御方法 | |
JP2005107909A (ja) | デバッグ機能を備えるマルチプロセッサシステム及びマルチプロセッサシステムのプログラム | |
JPH0588933A (ja) | デバツグ機能を有する並列処理システム | |
JP2004021751A (ja) | デバッグ装置、デバッグプログラム、およびデバッグプログラム記録媒体 | |
JPH07306800A (ja) | デバッグ方式 | |
KR20010038205A (ko) | 내장형 실시간 소프트웨어의 원격 디버깅을 위한 디버그 에이전트 장치 및 그 운용 방법 | |
TW201821999A (zh) | 交換器系統 | |
JP2002297402A (ja) | デジタル機器、タスク管理方法及びそのプログラム | |
JP2009075724A (ja) | 管理装置、管理システム、管理プログラム、および、管理方法 | |
KR20140140790A (ko) | Rtos 기반 임베디드 시스템 소프트웨어 모니터링을 위한 타겟 에이젼트 운용 방법 | |
JP2551054B2 (ja) | 入出力系再構成処理装置 | |
JP2018147429A (ja) | Vnf管理装置、vnfシステム、vnf管理方法、および、vnf管理プログラム |