(57)【要約】【課題】複数のプロセスに関するリモートデバッグを適切に実現すること。【解決手段】デバッグ支援プログラムは、コンピュータに、デバッグ対象のプロセスの識別子が指定されたリモートデバッグの接続要求を受信する受信手順と、当該コンピュータにおいて起動されている複数のプロセスの中から、前記識別子と一致するプロセスを検索する検索手順と、検索されたプロセスを、前記接続要求に係るデバッグ対象とする接続手順とを実行させる。【選択図】図７
2012079130.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
デバッグ対象のプロセスの識別子が指定されたリモートデバッグの接続要求を受信する受信手順と、
当該コンピュータにおいて起動されている複数のプロセスの中から、前記識別子と一致するプロセスを検索する検索手順と、
検索されたプロセスを、前記接続要求に係るデバッグ対象とする接続手順とを実行させるデバッグ支援プログラム。
【請求項２】
前記検索手順は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域の一部分のデータが前記識別子と一致するプロセスを、検索する請求項１記載のデバッグ支援プログラム。
【請求項３】
前記検索手順は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域における複数の部分のデータを連結した値が、前記識別子と一致するプロセスを検索する請求項１記載のデバッグ支援プログラム。
【請求項４】
前記検索手順は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域におけるデータに対して所定の変換処理を実行した結果が、前記識別子と一致するプロセスを検索する請求項１記載のデバッグ支援プログラム。
【請求項５】
デバッグ支援装置であって、
デバッグ対象のプロセスの識別子が指定されたリモートデバッグの接続要求を受信する受信手部と、
当該デバッグ支援装置において起動されている複数のプロセスの中から、前記識別子と一致するプロセスを検索する検索部と、
検索されたプロセスを、前記接続要求に係るデバッグ対象とする接続部とを有するデバッグ支援装置。
【請求項６】
コンピュータが、
デバッグ対象のプロセスの識別子が指定されたリモートデバッグの接続要求を受信する受信手順と、
当該コンピュータにおいて起動されている複数のプロセスの中から、前記識別子と一致するプロセスを検索する検索手順と、
検索されたプロセスを、前記接続要求に係るデバッグ対象とする接続手順とを実行するデバッグ支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リモートデバッグを支援するデバッグ支援プログラム、デバッグ支援装置、及びデバッグ支援方法に関する。
【背景技術】
【０００２】
従来、携帯電話等の組み込み機器において動作するプログラムのデバッグには、「リモートデバッグ」と呼ばれるデバッグ手法が使われている。
【０００３】
図１は、従来のリモートデバッグの仕組みを説明するための図である。同図において、ターゲットマシン５１０は、デバッグ対象のプロセスが実行される組み込み機器である。ホストマシン５２０は、ユーザ（例えば、開発者）が、デバッグ操作に利用するコンピュータである。ターゲットマシン５１０とホストマシン５２０とは、ネットワーク又はシリアルケーブル等の通信回線によって接続される。
【０００４】
ホストマシン５２０は、デバッグクライアント５２１及びデバッグ情報５２２等を有する。デバッグクライアント５２１は、ユーザからのデバッグ操作指示の受付や、操作指示に応じた情報の表示等を行うプログラムである。デバッグクライアント５２１は、デバッグ対象とされるプロセスに対応してホストマシン５２０上に起動される。デバッグ情報５２２は、デバッグ対象のプロセスに係るプログラムのソースコードと、ソース内の各種シンボル（変数、関数等）のアドレス情報との対応情報等を含む情報である。
【０００５】
ダーゲットマシン５１０は、デバッグサーバ５１１等を有する。デバッグサーバ５１１は、デバッグ対象のプロセスに関する各種のデバッグ処理を実行する。同図では、デバッグ対象のプロセスとして、プロセスｐ１が起動されている例が示されている。
【０００６】
例えば、デバッグクライアント５２１に対して、プロセスｐ１に関するレジスタやメモリ状態の参照指示がユーザによって入力されると、デバッグクライアント５２１は、当該参照指示に対応するデバッグコマンドをデバッグサーバ５１１に送信する。デバッグサーバ５１１は、当該デバッグコマンドに応じて、プロセスｐ１に関するレジスタやメモリの状態を取得し、取得された情報をデバッグクライアント５２１に返信する。デバッグクライアント５２１は、受信された情報を表示させる。この際、デバッグクライアント５２１は、デバッグ情報５２２を用いて、受信された情報を、ユーザに理解し易い表現形式で表示させる。
【０００７】
以上のようなリモートデバッグによれば、ＰＣ（Personal Computer）等が備える、利便性の高い入力装置や表示装置等を用いて、組み込み機器のデバッグを容易に行うことができる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平９−２５９００２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
他方において、近年、組み込み機器のプロセッサにおいて、Ｕｎｉｘ（登録商標）やＳｙｍｂｉａｎＯＳ等のＯＳ（Operating System）が搭載されるようになり、マルチプロセスシステムが一般化してきている。また、組み込み機器において、仮想化技術によって複数のＯＳが同時に動作する、マルチＯＳシステムも使われるようになってきている。すなわち、一台の組み込み機器において、複数のプロセスが並列的に実行可能となっている。したがって、複数のプロセスが相互に協調することによって、所定の機能が実現するプログラムの実装も可能となっている。
【００１０】
このような背景に鑑みれば、組み込み機器のリモートデバッグに関して、図２に示されるような構成が実現されるとデバッグ作業の効率化を期待できる。
【００１１】
図２は、複数のプロセスに関して並列的にリモートデバッグを行うために想定される一つの構成例を示す図である。図２中、図１と同一部分には同一符号を付し、その説明は適宜省略する。
【００１２】
同図において、ターゲットマシン５１０上では、プロセスｐ１〜ｐ３の三つのプロセスが起動されている。また、ホストマシン５２０上では、デバッグクライアント５２１ａ〜５２１ｃの三つのデバッグクライアント５２１が起動されている。デバッグクライアント５２１ａは、プロセスｐ１をデバッグ対象とする。デバッグクライアント５２１ｂは、プロセスｐ２をデバッグ対象とする。デバッグクライアント５２１ｃは、プロセスｐ３をデバッグ対象とする。なお、同図におけるプロセスｐ１〜ｐ３は、相互に異なるプログラムに係るプロセスであるとする。したがって、デバッグクライアント５２１ａ〜５２１ｃは、それぞれ相互に異なるデバッグ情報５２２ａ〜５２２ｃに関して起動されている。
【００１３】
図２に示される構成によれば、ユーザは、デバッグクライアント５２１ａ〜５２１ｃを操作することにより、プロセスｐ１〜ｐ３に関するデバッグを並列的に行うことができる。但し、図２の状態が実現されるためには、プロセスｐ１〜ｐ３に対して各デバッグ情報５２２が正しく割り付けられてデバッグクライアント５２１が起動される必要がある。
【００１４】
しかしながら、組み込み機器において、各プロセスは、図３に示されるように様々なロード元からターゲットマシン５１０へロードされうる。
【００１５】
図３は、複数のプロセスに関するリモートデバッグの問題点を説明するための図である。図３中、図２と同一部分には同一符号を付し、その説明は適宜省略する。
【００１６】
図３において、プロセスｐ１は、ブートデバイス５３０に記録されているプログラムが、ブートローダ５１３によってロードされることにより生成されることが示されている。プロセスｐ２は、外部メモリ５４０に記録されているプログラムが、ＯＳ５１４によってロードされることにより生成されることが示されている。プロセスｐ３は、ネットワーク５５０を介してダウンロードされるプログラムが、ＯＳ５１４によってロードされることにより生成されることが示されている。
【００１７】
このように、組み機器における各プロセスのロード元は、多種多様である。
【００１８】
また、各プロセスがロードされるタイミングや方法は、ターゲットマシンに搭載されるブートローダやＯＳに強く依存している。したがって、デバッグサーバ５１１は、必ずしも各プロセスの起動に関与できない。その結果、デバッグサーバ５１１は、各プロセスが、何時、何処に(どのメモリ番地に)、どういうプロセスＩＤでターゲットマシン５１０にロードされるのかを知ることは困難である。
【００１９】
したがって、従来、図３のクエスチョンマーク（「？」）に示されるように、デバッグサーバ５１１が、ターゲットマシン５１０上の各プロセスとホストマシン５２０上のデバッグ情報５２２（すなわち、デバッグクライアント５２１）との対応付けを把握することは非常に困難であった。
【００２０】
１つの側面では、本発明は、複数のプロセスに関するリモートデバッグを適切に実現することのできるデバッグ支援プログラム、デバッグ支援装置、及びデバッグ支援方法の提供を目的とする。
【課題を解決するための手段】
【００２１】
１つの案では、デバッグ支援プログラムは、コンピュータに、デバッグ対象のプロセスの識別子が指定されたリモートデバッグの接続要求を受信する受信手順と、当該コンピュータにおいて起動されている複数のプロセスの中から、前記識別子と一致するプロセスを検索する検索手順と、検索されたプロセスを、前記接続要求に係るデバッグ対象とする接続手順とを実行させる。
【発明の効果】
【００２２】
複数のプロセスに関するリモートデバッグを適切に実現することができる。
【図面の簡単な説明】
【００２３】
【図１】従来のリモートデバッグの仕組みを説明するための図である。
【図２】複数のプロセスに関して並列的にリモートデバッグを行うために想定される一つの構成例を示す図である。
【図３】複数のプロセスに関するリモートデバッグの問題点を説明するための図である。
【図４】本発明の実施の形態におけるリモートデバッグ支援システムの構成例を示す図である。
【図５】本発明の実施の形態のデバッグクライアント及びデバッグサーバの機能構成例を示す図である。
【図６】本発明の実施の形態におけるターゲットマシンのハードウェア構成例を示す図である。
【図７】デバッグ支援システムが実行する処理手順の一例を説明するための図である。
【図８】デバッグクライアントとデバッグ対象のプロセスとの対応情報の一例を示す図である。
【図９】プログラムＩＤの第一の例を説明するための図である。
【図１０】プログラムＩＤの第二の例を説明するための図である。
【図１１】プログラムＩＤの第三の例を説明するための図である。
【発明を実施するための形態】
【００２４】
以下、図面に基づいて本発明の実施の形態を説明する。図４は、本発明の実施の形態におけるリモートデバッグ支援システムの構成例を示す図である。同図において、リモートデバッグ支援システム１は、ターゲットマシン１０及びホストマシン２０等を含む。ターゲットマシン１０とホストマシン２０とは、ネットワーク又はシリアルケーブル等の通信回線３０（有線又は無線の別は問わない）を介して接続されている。なお、一台のターゲットマシン１０に対して、複数のホストマシン２０が接続されてもよい。
【００２５】
同図において、ターゲットマシン１０は、デバッグ対象のプロセスが起動されるコンピュータである。リモートデバッグの有用性を発揮する形態として、ターゲットマシン１０は、組み込みシステムが組み込まれた機器（組み込み機器）である形態が挙げられる。組み込み機器の一例として、携帯電話、ＰＤＡ（Personal Digital Assistance）、スマートフォン、デジタルテレビ、又はデジタルカメラ等が挙げられる。但し、マルチプロセスを実現可能であり、通信機能を有する機器であれば、ターゲットマシン１０は特定の機器に限定されない。本実施の形態において、ターゲットマシン１０は、デバッグ支援装置の一例である。
【００２６】
ホストマシン２０は、ユーザ（例えば、開発者）が、デバッグ操作に利用する、ＰＣ（Personal Computer）等のコンピュータである。
【００２７】
ホストマシン２０は、デバッグクライアント２１及びデバッグ情報２２等を有する。デバッグクライアント２１は、ユーザからのデバッグ操作指示の受付や、操作指示に応じた情報の表示等を行うプログラムである。デバッグクライアント２１は、デバッグ対象とされるプロセスに対応してホストマシン２０上に起動される。デバッグ情報２２は、デバッグ対象のプロセスに係るプログラムのソースコードと、ソース内の各種シンボル（変数、関数等）のアドレス情報との対応情報等を含む情報である。
【００２８】
ダーゲットマシン１０は、デバッグサーバ１１等を有する。デバッグサーバ１１は、デバッグ対象のプロセスに関する各種のデバッグ処理を実行する。同図では、デバッグ対象として、プロセスＰ１〜Ｐ３の三つのプロセスが起動されている状態が示されている。これらのプロセスは、同一のＯＳ（Operating System）上において起動されていてもよいし、異なるＯＳ上において起動されていてもよい。各プロセスが、異なるＯＳにおいて起動されている場合とは、ターゲットマシン１０において複数の仮想マシンが起動されている場合が一例に相当する。この場合、仮想マシンごとにＯＳを起動可能であり、更に、ＯＳごとにプロセスを起動することが可能だからである。なお、ターゲットマシン１０において複数の仮想マシンが起動される場合においても、起動されるデバッグサーバ１１は一つでよい。この場合、デバッグサーバ１１は、仮想マシンを管理する、ハイパーバイザ等と呼ばれるプログラムの一部として実装されてもよい。
【００２９】
三つのプロセスに対応して、ホストマシン２０では、三つのデバッグクライアント２１が起動されている。すなわち、デバッグクライアント２１ａは、プロセスＰ１に対応する。デバッグクライアント２１ｂは、プロセスＰ２に対応する。デバッグクライアント２１ｃは、プロセスＰ３に対応する。換言すれば、デバッグ情報２２ａは、プロセスＰ１に係るプログラムのデバッグ情報２２である。デバッグ情報２２ｂは、プロセスＰ２に係るプログラムのデバッグ情報２２である。デバッグ情報２２ｃは、プロセスＰ３に係るプログラムのデバッグ情報２２である。なお、プロセスＰ１〜Ｐ３は、相互に異なるプログラムのプロセスであるとする。
【００３０】
例えば、デバッグクライアント２１ａに対して、プロセスＰ１に関するレジスタやメモリ状態の参照指示がユーザによって入力されると、デバッグクライアント２１ａは、当該参照指示に対応するデバッグコマンドをデバッグサーバ１１に送信する。デバッグサーバ１１は、当該デバッグコマンドに応じて、プロセスＰ１に関するレジスタやメモリの状態を取得し、取得された情報をデバッグクライアント２１ａに返信する。デバッグクライアント２１ａは、受信された情報を表示させる。この際、デバッグクライアント２１ａは、デバッグ情報２２ａを用いて、受信された情報を、ユーザに理解し易い表現形式で表示させる。
【００３１】
デバッグクライアント２１ｂ又はデバッグクライアント２１ｃに対してデバッグ指示が入力された場合も、同様の処理フローが実行される。但し、デバッグクライアント２１ｂについてはプロセスＰ２が、デバッグクライアント２１ｃについてはプロセスＰ３が、それぞれデバッグ処理の対象とされる。
【００３２】
このように、ユーザは、ターゲットマシン１０上において起動されているプロセスについて、ホストマシン２０を操作してリモートデバッグを行うことができる。
【００３３】
なお、デバッグクライアント２１及びデバッグサーバ１１が提供可能なデバッグ機能は、レジスタやメモリ状態の参照に限られない。デバッグクライアント２１及びデバッグサーバ１１は、ブレークポイントの設定や解除、レジスタの書き換え等、一般的なデバッガが有する機能を提供することができる。
【００３４】
図５は、本発明の実施の形態のデバッグクライアント及びデバッグサーバの機能構成例を示す図である。同図に示されるように、各デバッグクライアント２１は、プログラムＩＤ取得部２１１、接続要求送信部２１２、及びデバッグコマンド要求部２１３等を有する。プログラムＩＤ取得部２１１は、デバッグ情報２２の一部として含まれている、デバッグ対象のプログラムの実行形式ファイル２２１（の複製）より、当該プログラムの識別子を取得する。本実施の形態において、当該識別子を「プログラムＩＤ」と呼ぶ。すなわち、本実施の形態では、ホストマシン２０側にも、デバッグ対象のプログラムの実行形式ファイル２２１が配置（保存）される。
【００３５】
接続要求送信部２１２は、リモートデバッグのための接続要求をデバッグサーバ１１に送信する。当該接続要求には、デバッグ対象のプログラムのプログラムＩＤが指定される。
【００３６】
デバッグコマンド要求部２１３は、リモートデバッグのための接続が確立された後、ユーザによる指示入力に応じたデバッグコマンドをデバッグサーバ１１に送信する。デバッグコマンド要求部２１３は、また、送信したデバッグコマンドに応じて返信される応答に含まれている情報を、ホストマシン２０の表示装置に表示させる。
【００３７】
一方、デバッグサーバ１１は、接続要求受信部１１１、デバッグ対象検索部１１２、接続部１１３、及びデバッグコマンド応答部１１４等を有する。
【００３８】
接続要求受信部１１１は、デバッグクライアント２１からのリモートデバッグのための接続要求を受信する。例えば、接続要求受信部１１１は、当該接続要求の受信用のポートを開設し、当該ポート宛の接続要求の受信を待機する。
【００３９】
デバッグ対象検索部１１２は、ターゲットマシン１０において起動されている複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域よりプログラムＩＤと一致する値が取得されるプロセスを検索する。ここでいうプログラムＩＤは、接続要求受信部１１１により受信される接続要求に指定されているプログラムＩＤである。書き込みが行われない領域とは、例えばｒｅａｄ  ｏｎｌｙな領域のことである。
【００４０】
接続部１１３は、デバッグ対象検索部１１２によって検索されたプロセスと、接続要求に係るデバッグクライアント２１との間に接続関係又は対応関係を構築する。例えば、接続部１１３は、接続要求に係るデバッグクライアント２１との通信用に新たなポートを開設する。接続部１１３は、開設されたポートのポート番号と、検索されたプロセスのプロセスＩＤとの対応情報を、例えば、メモリ装置１０３に記録する。プロセスＩＤとは、プロセスの起動時に、ＯＳ（Operating System）によって当該プロセスに対して割り当てられるＩＤである。
【００４１】
デバッグコマンド応答部１１４は、デバッグクライアント２１からのデバッグコマンドの受信を待機し、受信されたデバッグコマンドに応じた処理を実行する。デバッグコマンド応答部１１４が実行する処理の対象とされるプロセスは、デバッグコマンドが受信されたポートのポート番号に基づいて判定される。すなわち、当該ポート番号との対応情報がメモリ装置１０３に記憶されているプロセスＩＤに係るプロセスが処理対象とされる。
【００４２】
図６は、本発明の実施の形態におけるターゲットマシンのハードウェア構成例を示す図である。同図においてターゲットマシン１０は、それぞれバスBで相互に接続されているドライブ装置１００と、補助記憶装置１０２と、メモリ装置１０３と、ＣＰＵ１０４と、インタフェース装置１０５とを有する。
【００４３】
ターゲットマシン１０での処理を実現するプログラムは、記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００４４】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従ってターゲットマシン１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００４５】
なお、記録媒体１０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、ＳＤメモリカード、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置１０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体１０１及び補助記憶装置１０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【００４６】
以下、デバッグ支援システム１の処理手順について説明する。図７は、デバッグ支援システムが実行する処理手順の一例を説明するための図である。例えば、ユーザによって、いずれかのデバッグ情報２２が指定又は選択されて、デバッグクライアント２１の起動指示が入力されると、当該デバッグクライアント２１に関して、図７の処理が開始される。なお、デバッグ情報２２の指定等は、実質的に、デバッグ対象とするプログラム（プロセス）の指定等に相当する。
【００４７】
ステップＳ１０１において、デバッグクライアント２１のプログラムＩＤ取得部２１１は、指定されたデバッグ情報２２に含まれているプログラムの実行形式ファイル２２１よりプログラムＩＤを取得する。続いて、接続要求送信部２１２は、プログラムＩＤ取得部２１１によって取得されたプログラムＩＤを指定して、リモートデバッグのための接続要求をデバッグサーバ１１に送信する（Ｓ１０２）。なお、接続要求の送信先のアドレス情報は、例えば、デバッグクラアイント２１の起動時において指定されてもよいし、補助記憶装置１０２に予め記録されていてもよい。当該アドレス情報には、デバッグサーバ１１が開設しているポートのポート番号も含まれる。
【００４８】
一方、デバッグサーバ１１の接続要求受信部１１１は、ターゲットマシン１０においてデバッグサーバ１１が起動された際に、接続要求の受信用のポートを開設して、接続要求の受信を待機している（Ｓ２０１）。当該ポートを介して、デバッグクライアント２１からの接続要求が受信されると、接続要求受信部１１１は、当該接続要求よりプログラムＩＤを取り出す（Ｓ２０２）。
【００４９】
続いて、デバッグ対象検索部１１２は、ターゲットマシン１０において起動されている複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域より当該プログラムＩＤと一致する値が取得されるプロセスを検索する（Ｓ２０３）。ターゲットマシン１０において起動されているプロセス及びそのメモリ空間のアドレスは、ＯＳに問い合わせることにより把握可能である。
【００５０】
該当するプロセスが検索されなかった場合（Ｓ２０４でＮｏ）、接続要求受信部１１１は、接続の拒否を示す応答をデバッグクライアント２１に返信する（Ｓ２０５）。なお、該当するプロセスが検索されなかった場合、デバッグ対象検索部１１２は、所定時間経過後に再度ステップＳ２０３の検索を繰り返してもよい。検索の繰り返しは、該当するプロセスが起動されるまで継続されてもよいし、所定回数に限定されてもよい。
【００５１】
一方、該当するプロセス（以下、「対象プロセス」という。）が検索された場合（Ｓ２０４でＹｅｓ）、接続部１１３は、対象プロセスをリモートデバッグのデバッグ対象とする論理的な通信路をデバッグクライアント２１との間に形成する（Ｓ２０６）。接続部１１３は、当該通信路を介して接続の許可を示す応答をデバッグクライアント２１に返信する。なお、論理的な通信路の形成は、例えば、当該デバッグクライアント２１に対応した新たなポートの開設が一例として挙げられる。この場合、接続部１１３は、新たに開設されたポートのポート番号と、対象プロセスのプロセスＩＤとの対応情報をメモリ装置１０３に記録する。これにより、当該プロセスＩＤに係る対象プロセスと、デバッグクライアント２１との接続関係が構築されたことになる。
【００５２】
図８は、デバッグクライアントとデバッグ対象のプロセスとの対応情報の一例を示す図である。同図に示されるように、対応情報１１５は、ポート番号とプロセスＩＤとの対応付けを示す情報である。
【００５３】
デバッグサーバ１１からの応答が受信されると（Ｓ１０３）、デバッグクライアント２１は、応答の内容に応じて処理を分岐させる（Ｓ１０４）。すなわち、接続が拒否された場合（Ｓ１０４でＮｏ）、デバッグクライアント２１は、自らを異常終了させる（Ｓ１０５）。したがって、この場合、リモードデバッグを行うことはできない。接続が許可された場合（Ｓ１０４でＹｅｓ）、デバッグコマンド要求部２１３は、デバッグサーバ１１との間でリモートデバッグのための通信を行う（Ｓ１０６）。当該通信は、ステップＳ２０６において形成された通信路を介して行われる。例えば、デバッグコマンド要求部２１３は、ユーザからの入力される指示に応じたデバッグコマンドをデバッグサーバ１１に送信する。
【００５４】
当該デバッグコマンドは、デバッグサーバ１１において、ステップＳ２０６において開設されたポートを介して受信される。デバッグコマンド応答部１１４は、デバッグコマンドが受信されたポートのポート番号に対応するプロセスＩＤを対応情報１１５に基づいて判定する。デバッグコマンド応答部１１４は、当該プロセスＩＤに係る対象プロセスに関して、当該デバッグコマンドを実行する（Ｓ２０７）。例えば、レジスタの値やメモリ状態の取得、ブレークポイントの設定や解除、レジスタの書き換え等が実行される。なお、デバッグコマンドの実行の仕組みについては、公知のデバッガと同様でよい。したがって、その詳細については省略する。
【００５５】
以降、ユーザの指示入力に応じて、ステップＳ１０６及びＳ２０７が繰り返し実行されることにより、リモートデバッグが行われる。
【００５６】
なお、デバッグクライアント２１とデバッグ対象のプロセスとの対応付けの方法は、必ずしも、ポート番号とプロセスＩＤとの対応付けに限定されない。換言すれば、デバッグクライアント２１を識別するための情報は、ポート番号に限定されない。例えば、接続部１１３は、各デバッグクライアント２１に対して一意なセッションＩＤを割り当て、当該セッションＩＤとプロセスＩＤとの対応情報をメモリ装置１０３に記録するようにしてもよい。この場合、接続要求に対する応答には、当該セッションＩＤが含まれる。デバッグクライアント２１のデバッグコマンド要求部２１３は、デバッグコマンドと共にセッションＩＤをデバッグサーバ１１に送信する。デバッグサーバ１１のデバッグコマンド応答部１１４は、セッションＩＤと対応情報とに基づいて対応するプロセスを判定する。なお、プログラムＩＤがセッションＩＤとして用いられてもよい。また、この場合、デバッグクライアント２１ごとにポートは開設されなくてもよい。すなわち、接続要求の受信用のポートが、各デバッグクライアント２１からのデバッグコマンドの受信用として共用されてもよい。セッションＩＤによって各デバッグクライアント２１との論理的な通信路は確保可能だからである。すなわち、デバッグサーバ１１は、セッションＩＤによって、デバッグコマンドの送信元のデバッグクライアント２１を識別可能だからである。
【００５７】
続いて、プログラムＩＤの詳細について説明する。図９は、プログラムＩＤの第一の例を説明するための図である。
【００５８】
第一の例では、プログラムＩＤは、実行形式ファイル２２１の特定の箇所に記録される。例えば、プログラムＩＤは、ソースコードのコマパイル時にコンパイラによって生成され、実行形式ファイル２２１の特定の箇所に記録される（埋め込まれる）。当該特定の箇所は、プログラムの実行時において参照のみが行われるセクション（ｒｅａｄ  ｏｎｌｙな領域）、換言すれば、書き込みが行われないセクション内の一部であればよい。セクションとは、実行形式ファイル２２１内のデータ（すなわち、プログラム）がメモリに配置される際の、配置の単位である。セクションには、例えば、．ｔｅｘｔ、．ｄａｔａ、．ｂｓｓ、．ｒｏｄａｔａ等が有る。
【００５９】
．ｔｅｘｔは、プログラムのうち、機械語の部分を格納するためのセクションである。したがって、当該セクションには書き込みは行われない。．ｄａｔａは、プログラムのうち、初期値を持つ変数を格納するためのセクションである。したがって、当該セクションには書き込みが行われる。．ｂｓｓは、プログラムのうち、初期値を持たない変数を格納するためのセクションである。したがって、当該セクションには書き込みが行われる。．ｒｏｄａｔａは、プログラムのうち、定数を格納するためのセクションである。したがって、当該セクションには書き込みは行われない。
【００６０】
同図の例では、．ｔｅｘｔの先頭から１００バイト目（．ｔｅｘｔ［１００］）にプログラムＩＤが記録された例が示されている。なお、図９以降において「ＰＩＤ」は、プログラムＩＤを示す。
【００６１】
この場合、デバッグクライアント２１のプログラムＩＤ取得部２１１は、実行形式ファイル２２１の実行コードセクションの先頭から１００バイト目より、所定のバイト数のプログラムＩＤを取得する。
【００６２】
また、デバッグサーバ１１のデバッグ対象検索部１１２は、実行形式ファイル２２１がロードされて生成されたプロセスのメモリ空間（メモリイメージ）２２１ｍにおける実行コードセクションの先頭から１００バイト目より、所定バイト数のプログラムＩＤを取得する。すなわち、デバッグ対象検索部１１２は、プロセスのメモリ空間における一部分のデータが、受信されたプログラムＩＤと一致するプロセスを検索する。
【００６３】
ところで、実行形式ファイル２２１を構成する各セクションがメモリ空間のどの位置にロードされるかを示す情報は、実行形式ファイル２２１には記録されているものの、ロード後のメモリイメージには含まれていない。そして、当該メモリイメージにおいて、各セクションの区切りは必ずしも明確ではない。したがって、デバッグ対象検索部１１２は、各セクションの開始位置を特定できない可能性がある。そこで、プロセスＩＤ取得部が、例えば、プロセスＩＤの取得時に、プロセスＩＤが格納されているセクションがロードされるアドレス情報を実行形式ファイル２２１より読み取るようにしてもよい。接続要求送信部２１２は、プロセスＩＤと共に当該アドレス情報を指定して接続要求を送信する。デバッグサーバ１１のデバッグ対象検索部１１２は、指定されたアドレス情報に基づいて、メモリ空間２２１ｍにおけるプログラムＩＤの位置を特定する。
【００６４】
なお、メモリ空間２２１ｍにおける各セクションの位置は、デバッグサーバ１１のデバッグ対象検索部１１２が、ターゲットマシン１０内に記憶されている実行形式ファイル２２１を参照して特定してもよい。
【００６５】
続いて、図１０は、プログラムＩＤの第二の例を説明するための図である。第二の例のプログラムＩＤは、書き込みが行われないセクション内の所定の複数の部分（代表箇所）の値を連結した値によって生成される。
【００６６】
同図の例では、．ｔｅｘｔの先頭から１０バイト目（．ｔｅｘｔ［１０］）と、１００バイト目（．ｔｅｘｔ［１００］）と、．ｒｏｄａｔａの先頭から２０バイト目（ｒｏｄａｔａ［２０］）とにおける所定のバイト数のデータを連結することにより、プログラムＩＤが生成されている。
【００６７】
この場合、デバッグクライアント２１のプログラムＩＤ取得部２１１は、実行形式ファイル２２１の該当部分から取得されるデータを連結してプログラムＩＤを生成する。
【００６８】
また、デバッグサーバ１１のデバッグ対象検索部１１２は、実行形式ファイル２２１がロードされて生成されたプロセスのメモリ空間２２１ｍにおける該当箇部分から取得されるデータを連結したプログラムＩＤを生成する。すなわち、デバッグ対象検索部１１２は、プロセスのメモリ空間における所定部分のデータを連結した値が、受信されたプログラムＩＤと一致するプロセスを検索する。
【００６９】
第二の例によれば、実行形式ファイル２２１に予めプログラムＩＤが記録される必要はない。また、プログラムの複数の部分が連結されることにより、プログラムＩＤについて、プログラムごとの一意性を高めることができる。
【００７０】
続いて、図１１は、プログラムＩＤの第三の例を説明するための図である。第三の例のプログラムＩＤは、書き込みが行われないセクションの一部又は全部に対して所定の変換処理を実行することにより生成される。
【００７１】
同図の例では、．ｔｅｘｔと．ｒｏｄａｔａとのバイナリデータのハッシュ値がプログラムＩＤとして算出される例が示されている。ハッシュ関数は、所定のものに限定されない。例えば、ＭＤ５が用いられてもよい。また、当該バイナリデータがＤＥＳ（Data Encryption Standard）等の暗号化アルゴリズムによって暗号化された結果がプログラムＩＤとされてもよい。
【００７２】
この場合、デバッグクライアント２１のプログラムＩＤ取得部２１１は、実行形式ファイル２２１において書き込みが行われないセクションの所定の一部分又は全部に対して所定の変換処理を実行し、変換処理の結果をプログラムＩＤとする。
【００７３】
また、デバッグサーバ１１のデバッグ対象検索部１１２は、実行形式ファイル２２１がロードされて生成されたプロセスのメモリ空間２２１ｍにおいて書き込みが行われないセクションの所定の一部分又は全部に対して所定の変換処理を実行し、変換処理の結果をプログラムＩＤとする。すなわち、デバッグ対象検索部１１２は、当該変換処理の結果が、受信されたプログラムＩＤと一致するプロセスを検索する。
【００７４】
第三の例によれば、第二の例に比べて、プログラムのより広範囲な部分に基づいてプログラムＩＤを生成することができる。したがって、プログラムＩＤについて、プログラムごとの一意性を更に高めることができる。
【００７５】
上述したように、本実施の形態によれば、デバッグサーバ１１は、プログラムＩＤに基づいて、デバッグクライアント２１（デバッグ情報２２）と、デバッグ対象のプロセスとを対応付けることができる。したがって、ターゲットマシン１０において異なるプログラムに係る複数のプロセスが起動されている場合であっても、各デバッグクライアント２１と各プロセスとの関係を正しく構築することができる。その結果、マルチプロセス環境におけるリモートデバッグを適切に実現することができる。例えば、デバッグ対象のプロセス数が増大しても、快適なデバッグ環境を開発者に提供することができる。
【００７６】
また、本実施の形態によれば、デバッグ対象のプロセスとデバッグクライアント２１との対応付けに関して、ターゲットマシン１０のＯＳ（Operating System）が特別な機能を有している必要はない。したがって、仮想マシン上のプロセスや、システムのブート時にロードされるプロセス等についても、適切にデバッグ対象とすることができる。
【００７７】
また、デバッグサーバ１１において、プログラムＩＤを取得するための処理は、省メモリ及び省ＣＰＵ時間の手順によって実現することができる。したがって、ハードウェア資源の制約が厳しいターゲットマシン１０上でも容易に実装することができる。
【００７８】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【００７９】
以上の説明に関し、更に以下の項を開示する。
（付記１）
コンピュータに、
デバッグ対象のプロセスの識別子が指定されたリモートデバッグの接続要求を受信する受信手順と、
当該コンピュータにおいて起動されている複数のプロセスの中から、前記識別子と一致するプロセスを検索する検索手順と、
検索されたプロセスを、前記接続要求に係るデバッグ対象とする接続手順とを実行させるデバッグ支援プログラム。
（付記２）
前記検索手順は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域の一部分のデータが前記識別子と一致するプロセスを、検索する付記１記載のデバッグ支援プログラム。
（付記３）
前記検索手順は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域における複数の部分のデータを連結した値が、前記識別子と一致するプロセスを検索する付記１記載のデバッグ支援プログラム。
（付記４）
前記検索手順は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域におけるデータに対して所定の変換処理を実行した結果が、前記識別子と一致するプロセスを検索する付記１記載のデバッグ支援プログラム。
（付記５）
デバッグ支援装置であって、
デバッグ対象のプロセスの識別子が指定されたリモートデバッグの接続要求を受信する受信手部と、
当該デバッグ支援装置において起動されている複数のプロセスの中から、前記識別子と一致するプロセスを検索する検索部と、
検索されたプロセスを、前記接続要求に係るデバッグ対象とする接続部とを有するデバッグ支援装置。
（付記６）
前記検索部は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域の一部分のデータが前記識別子と一致するプロセスを、検索する付記５記載のデバッグ支援装置。
（付記７）
前記検索部は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域における複数の部分のデータを連結した値が、前記識別子と一致するプロセスを検索する付記５記載のデバッグ支援装置。
（付記８）
前記検索部は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域におけるデータに対して所定の変換処理を実行した結果が、前記識別子と一致するプロセスを検索する付記５記載のデバッグ支援装置。
（付記９）
コンピュータが、
デバッグ対象のプロセスの識別子が指定されたリモートデバッグの接続要求を受信する受信手順と、
当該コンピュータにおいて起動されている複数のプロセスの中から、前記識別子と一致するプロセスを検索する検索手順と、
検索されたプロセスを、前記接続要求に係るデバッグ対象とする接続手順とを実行するデバッグ支援方法。
（付記１０）
前記検索手順は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域の一部分のデータが前記識別子と一致するプロセスを、検索する付記９記載のデバッグ支援方法。
（付記１１）
前記検索手順は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域における複数の部分のデータを連結した値が、前記識別子と一致するプロセスを検索する付記９記載のデバッグ支援方法。
（付記１２）
前記検索手順は、前記複数のプロセスの中から、当該プロセスに係るメモリ空間において書き込みが行われない領域におけるデータに対して所定の変換処理を実行した結果が、前記識別子と一致するプロセスを検索する付記９記載のデバッグ支援方法。
【符号の説明】
【００８０】
１            リモートデバッグ支援システム
１０          ターゲットマシン
１１          デバッグサーバ
２０          ホストマシン
２１          デバッグクライアント
２２          デバッグ情報
３０          通信回線
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１１１        接続要求受信部
１１２        デバッグ対象検索部
１１３        接続部
１１４        デバッグコマンド応答部
２１１        プログラムＩＤ取得部
２１２        接続要求送信部
２１３        デバッグコマンド要求部
２２１        実行形式ファイル
Ｂ            バス
【図１】
2012079130.tif 000003
【図２】
2012079130.tif 000004
【図３】
2012079130.tif 000005
【図４】
2012079130.tif 000006
【図５】
2012079130.tif 000007
【図６】
2012079130.tif 000008
【図７】
2012079130.tif 000009
【図８】
2012079130.tif 000010
【図９】
2012079130.tif 000011
【図１０】
2012079130.tif 000012
【図１１】
2012079130.tif 000013