(57)【要約】【課題】デバッグ作業者がロードのタイミングやロード先のアドレスを知らなくても、ブレークポイントへのブレーク命令の書き込みを可能にするデバッグ装置を提供する。【解決手段】デバッガＡは、ブレーク命令書き込み処理の要求を受け取ったときにブレーク命令をブレークポイントに書き込むブレーク命令設定部１と、ターゲットＢを起動するプログラム制御部２から構成されている。ターゲットＢは、デバッグ対象のプログラムを格納する第１の記憶装置３と、デバッグ対象のプログラムのロード先である第２の記憶装置４と、プログラムを第１の記憶装置３から第２の記憶装置４へロードしロード完了時にデバッガＡに対してロード完了を通知してブレーク命令書き込み処理を要求するローダ５から構成されている。【選択図】図１
2008052533.tif 000002
【特許請求の範囲】
【請求項１】
ブレーク命令書き込み処理の要求を受け取ったときにブレーク命令をブレークポイントに書き込むブレーク命令設定部、および、ターゲットを起動するプログラム制御部から構成されるデバッガと、
デバッグ対象のプログラムを格納する第１の記憶装置、前記プログラムのロード先である第２の記憶装置、および、前記プログラムを前記第１の記憶装置から前記第２の記憶装置へロードしロード完了時に前記デバッガに対してロード完了を通知してブレーク命令書き込み処理を要求するローダから構成されるターゲットとを備えたデバッグ装置。
【請求項２】
前記ローダは、前記デバッガに対して前記ブレーク命令書き込み処理を要求するときに、前記プログラムをロードした前記第２の記憶装置のアドレス範囲を通知し、
前記ブレーク命令設定部は、前記アドレス範囲に含まれる前記ブレークポイントに前記ブレーク命令を書き込む請求項１に記載のデバッグ装置。
【請求項３】
前記プログラムは、固有の識別子が付加されており、
前記ローダは、前記デバッガに対して前記ブレーク命令書き込み処理を要求するときに、ロードした前記プログラムの前記識別子を通知し、
前記ブレーク命令設定部は、通知された前記識別子と一致する前記ブレークポイントに前記ブレーク命令を書き込む請求項１に記載のデバッグ装置。
【請求項４】
前記プログラムは、固有の識別子が付加されており、
前記ローダは、前記デバッガに対して前記ブレーク命令書き込み処理を要求するときに、ロードした前記プログラムの前記識別子とロードした前記第２の記憶装置の先頭アドレスを通知し、
前記ブレーク命令設定部は、ブレークポイント情報が保持する相対アドレスに前記先頭アドレスを加算した結果の絶対アドレスに前記ブレーク命令を書き込む請求項１に記載のデバッグ装置。
【請求項５】
前記デバッガは、さらに、前記ローダよりロード完了の通知を受理したときにロード完了であることを記憶し、前記プログラム制御部より起動要求を受けたときに、前記プログラムのロードが完了ならば、前記ブレーク命令設定部へブレーク命令書き込みを指示するロード監視部を備えている請求項１に記載のデバッグ装置。
【請求項６】
ブレークポイント情報を登録するブレークポイント登録部、および、ターゲットを起動するプログラム制御部から構成されるデバッガと、
デバッグ対象のプログラムを格納する第１の記憶装置、前記プログラムのロード先である第２の記憶装置、前記ブレークポイント情報を格納する第３の記憶装置、および、前記プログラムを前記第１の記憶装置から前記第２の記憶装置へロードしロード完了時に前記第３の記憶装置における前記ブレークポイント情報を参照してブレーク命令の書き込みを行うローダから構成されるターゲットとを備えたデバッグ装置。
【請求項７】
前記ローダは、前記第３の記憶装置における前記ブレークポイント情報から、前記プログラムをロードした領域のアドレス範囲に含まれるブレークポイントを抽出し、抽出された前記ブレークポイントに前記ブレーク命令を書き込む請求項６に記載のデバッグ装置。
【請求項８】
ロードする前記プログラムおよび前記ブレークポイント情報は識別子を保持し、前記ローダは、ロードした前記プログラムの識別子と一致する前記ブレークポイントに前記ブレーク命令を書き込む請求項６に記載のデバッグ装置。
【請求項９】
前記プログラムおよび前記ブレークポイント情報は識別子を保持し、前記ローダは、ロードした前記プログラムの識別子と一致するブレークポイントを抽出し、前記ブレークポイントが保持するアドレスに前記プログラムの先頭アドレスを加算した結果の絶対アドレスに前記ブレーク命令を書き込む請求項６に記載のデバッグ装置。
【請求項１０】
前記第３の記憶装置は、前記第１の記憶装置または前記第２の記憶装置によって兼用されている請求項６から請求項９までのいずれかに記載のデバッグ装置。
【請求項１１】
前記デバッガは、さらに、前記ローダより前記ロード完了の通知を受理したときにアクセスブレークを設定するアクセスブレーク設定部を有している請求項１から請求項５までのいずれかに記載のデバッグ装置。
【請求項１２】
前記デバッガは、さらに、前記プログラムから識別子とシンボル情報を読み込み、シンボル情報管理表に登録し、続けて別のプログラムから識別子とシンボル情報を読み込み、前記シンボル情報管理表に追加登録するシンボル情報読み込み部を備えている請求項１から請求項１０までのいずれかに記載のデバッグ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組込み機器のソフトウェア開発に用いるデバッグ装置にかかわり、特には、高速アクセスのために起動中にプログラムを高速動作可能なメモリへロードするシステムにおいて、デバッグの作業効率を高める技術に関する。
【背景技術】
【０００２】
組込み機器のソフトウェアのデバッグにおいては、プログラム実行中にプログラムを停止させるブレークポイントを設定し、そのブレークポイントにブレーク命令を書き込んでおくことにより、プログラムをブレークポイントまで実行させて動作を停止させ、変数の内容やメモリの内容を確認する。
【０００３】
ところで、高速処理が要求される組込み機器のソフトウェアにおいては、ＲＯＭやフラッシュメモリなどに格納されているプログラムを、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）などアクセスが高速なメモリへロードし、その上でプログラムを実行させるものがある。このようなプログラムをデバッグする場合、プログラムをロードしたことを確認した上で、ブレーク命令の書き込みを行っている。また、従来のデバッグ装置で、プログラムを格納しているメモリ上に、ブレーク命令を書き込んでいるものもある（特許文献１参照）。
【特許文献１】特開２００３−３４５６２４号公報（第６−７頁、第７−８図）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
もし、プログラムをロードする前に、ロード先のメモリにブレーク命令を書き込んだとする。この場合、プログラムのロード時に、先に書き込んだブレーク命令が上書き消去されてしまい、ブレークポイントでプログラムを停止させることができなくなる。したがって、デバッグ作業者は、プログラムがすでにロードされていることを確認した上で、ブレーク命令の書き込みを行う必要がある。
【０００５】
プログラムのロードを確認するためには、プログラムロードのタイミングを把握したり、場合によってはロード先のアドレスを把握しておく必要があるが、デバッグ作業が複雑になる。
【０００６】
本発明は、このような事情に鑑みて創作したものであり、デバッグ作業者がロードのタイミングやロード先のアドレスを知らなくても、ブレーク命令の書き込みを可能にするデバッグ装置を提供することを目的としている。
【課題を解決するための手段】
【０００７】
本発明によるデバッグ装置は、
ブレーク命令書き込み処理の要求を受け取ったときにブレーク命令をブレークポイントに書き込むブレーク命令設定部、および、ターゲットを起動するプログラム制御部から構成されるデバッガと、
デバッグ対象のプログラムを格納する第１の記憶装置、前記プログラムのロード先である第２の記憶装置、および、前記プログラムを前記第１の記憶装置から前記第２の記憶装置へロードしロード完了時に前記デバッガに対してロード完了を通知してブレーク命令書き込み処理を要求するローダから構成されるターゲットとを備えたものである。
【０００８】
この構成において、ターゲットにおけるローダは、第１の記憶装置に格納されているプログラムを読み出して第２の記憶装置にロードする。ローダは、第１の記憶装置から第２の記憶装置へのプログラムのロードの完了を確認すると、そのロード完了をデバッガにおけるブレーク命令設定部に通知し、ブレーク命令書き込み処理を要求する。ロード完了を通知されブレーク命令書き込み処理を要求されたブレーク命令設定部は、ターゲットにおける第２の記憶装置に対してブレークポイントにブレーク命令を書き込む。ブレークポイントに対するブレーク命令の書き込みが完了すると、デバッガにおけるプログラム制御部はターゲットを起動する。
【０００９】
以上のように、プログラムのロードが先で、ブレークポイントへのブレーク命令の書き込みが後、という順序が規定されている。したがって、高速アクセスのために起動中にプログラムを高速動作可能なメモリへロードして実行するシステムにおいて、ロード処理のためにブレーク命令が消去されてしまうということは起こり得ない。結果として、デバッグ作業者はロードのタイミングを考慮しなくても、ブレークポイントへのブレーク命令の自動的な書き込みが可能になる。
【００１０】
上記構成のデバッグ装置において、前記ローダは、前記デバッガに対して前記ブレーク命令書き込み処理を要求するときに、前記プログラムをロードした前記第２の記憶装置のアドレス範囲を通知し、前記ブレーク命令設定部は、前記アドレス範囲に含まれる前記ブレークポイントに前記ブレーク命令を書き込むという態様がある。この場合、プログラムとそのロード先のアドレス範囲とが対応関係をもっている。すなわち、ロードしたプログラムに対してのみブレーク命令の書き込みを行うことになる。したがって、プログラムが複数存在する場合において、先に書き込んだブレーク命令が後のプログラムのロードによって消去されてしまうということは生じない。換言すれば、複数のプログラムをロードするシステムにおいて、個々のプログラムが異なる時間帯に同じ第２の記憶装置にロードされるときでも、それぞれのプログラムについて、個別的にブレーク命令を書き込むことが可能となる。
【００１１】
また、上記の構成のデバッグ装置において、前記プログラムは、固有の識別子が付加されており、前記ローダは、前記デバッガに対して前記ブレーク命令書き込み処理を要求するときに、ロードした前記プログラムの前記識別子を通知し、前記ブレーク命令設定部は、通知された前記識別子と一致する前記ブレークポイントに前記ブレーク命令を書き込むという態様がある。この場合、各プログラムに固有の識別子が付加される。ブレーク命令設定部は第２の記憶装置においてブレークポイントを読み出し、そのブレークポイントの識別子がローダから通知された識別子と一致するか否かを判断し、一致するときに限って、そのブレークポイントにブレーク命令の書き込みを行うことになる。したがって、プログラムが複数存在する場合において、先に書き込んだブレーク命令が後のプログラムのロードによって消去されてしまうということは生じない。
【００１２】
また、上記の構成のデバッグ装置において、前記プログラムは、固有の識別子が付加されており、前記ローダは、前記デバッガに対して前記ブレーク命令書き込み処理を要求するときに、ロードした前記プログラムの前記識別子とロードした前記第２の記憶装置の先頭アドレスを通知し、前記ブレーク命令設定部は、ブレークポイント情報が保持する相対アドレスに前記先頭アドレスを加算した結果の絶対アドレスに前記ブレーク命令を書き込むという態様がある。複数のプログラムが存在しているとする。動的ローディングの場合、ロード時に、ロード先のアドレスが決定する。すなわち、ロード前には、ロード先のアドレスは決定していない。このような場合でも、プログラムロードのタイミングやアドレスを考慮せずにブレーク命令の書き込みが可能になる。これは、ブレーク命令を書き込むソフトウェアブレークのみならず、アクセスブレークなどのハードウェアブレークを行うときにも有用である。
【００１３】
また、上記構成のデバッグ装置において、前記デバッガは、さらに、前記ローダよりロード完了の通知を受理したときにロード完了であることを記憶し、前記プログラム制御部より起動要求を受けたときに、前記プログラムのロードが完了ならば、前記ブレーク命令設定部へブレーク命令書き込みを指示するロード監視部を備えているという態様がある。
【００１４】
この構成において、ターゲットにおけるローダが、第１の記憶装置に格納されているプログラムを読み出して第２の記憶装置にロードし、そのロードの完了を確認して、そのロード完了をデバッガにおけるロード監視部に通知する。ロード監視部は、プログラムのロードが完了しているかを記憶しておく。プログラム制御部がロード監視部を起動したときに、ロード監視部がロード完了を示しているときは、ロード監視部はブレーク命令設定部へブレーク命令書き込みを指示する。ブレーク命令設定部は、ターゲットにおける第２の記憶装置に対してブレークポイントにブレーク命令を書き込む。ブレークポイントに対するブレーク命令の書き込みが完了すると、デバッガにおけるプログラム制御部はターゲットを起動する。一方、プログラムのロードが未完了の場合は、ロード監視部は、ブレーク命令設定部へブレーク命令書き込みを指示しない。つまり、ブレーク命令の書き込みは行わない。以上により、ロード完了済のプログラムについては、ローダを起動することなく、ブレーク命令の書き込みができるので、プログラムの実行開始までの時間を短縮することができる。
【００１５】
また、本発明によるデバッグ装置は、
ブレークポイント情報を登録するブレークポイント登録部、および、ターゲットを起動するプログラム制御部から構成されるデバッガと、
デバッグ対象のプログラムを格納する第１の記憶装置、前記プログラムのロード先である第２の記憶装置、前記ブレークポイント情報を格納する第３の記憶装置、および、前記プログラムを前記第１の記憶装置から前記第２の記憶装置へロードしロード完了時に前記第３の記憶装置における前記ブレークポイント情報を参照してブレーク命令の書き込みを行うローダから構成されるターゲットとを備えたものである。
【００１６】
上記の構成において、前記ローダは、前記第３の記憶装置における前記ブレークポイント情報から、前記プログラムをロードした領域のアドレス範囲に含まれるブレークポイントを抽出し、抽出された前記ブレークポイントに前記ブレーク命令を書き込むという態様がある。
【００１７】
上記のように構成されたデバッグ装置においては、デバッガがターゲットを起動する前にあらかじめ、デバッガにおけるブレークポイント登録部は、ターゲットにおける第３の記憶装置に対してブレークポイント情報を登録しておく。次いで、デバッガにおけるプログラム制御部がターゲットを起動すると、ターゲットにおけるローダは、第１の記憶装置に格納されているプログラムを読み出して第２の記憶装置にロードする。そして、ロードの完了を確認すると、ローダは、第３の記憶装置におけるブレークポイント情報を参照して、第２の記憶装置において対応するブレークポイントにブレーク命令を書き込む。プログラムのロードの完了後にブレーク命令を書き込むので、ロード処理のためにブレーク命令が消去されてしまうということは起こり得ない。ブレークポイント情報の登録は、プログラムのロードに先立ってあらかじめ行われ、かつ、その登録先はターゲットにおける第３の記憶装置である。したがって、デバッグ作業者はロードのタイミングを考慮しなくても、ブレークポイントへのブレーク命令の自動的な書き込みが可能になる。しかも、上記のように、ローダは、ブレーク命令を書き込む機能を有している。換言すれば、ブレーク命令の書き込みを、デバッガを介さずに、ターゲットの内部において完遂させている。したがって、デバッガ経由でブレーク命令を書き込むよりも短時間で書き込み処理を行うことができる。
【００１８】
上記の構成において、ロードする前記プログラムおよび前記ブレークポイント情報は識別子を保持し、前記ローダは、ロードした前記プログラムの識別子と一致する前記ブレークポイントに前記ブレーク命令を書き込むという態様がある。このように構成すれば、プログラムが複数存在する場合において、識別子を介して検索を行うので、ロード済みのプログラムとロード未了のプログラムとの区別を明確につけることができる。したがって、先に書き込んだブレーク命令が後のプログラムのロードによって消去されてしまうということは生じない。
【００１９】
また、上記の構成において、前記プログラムおよび前記ブレークポイント情報は識別子を保持し、前記ローダは、ロードした前記プログラムの識別子と一致するブレークポイントを抽出し、前記ブレークポイントが保持するアドレスに前記プログラムの先頭アドレスを加算した結果の絶対アドレスに前記ブレーク命令を書き込むという態様がある。このように構成すれば、ロード時にロード先のアドレスが決定され、したがって、ロード前にはロード先のアドレスは決定されていない動的ローディングの場合において、プログラムロードのタイミングやアドレスを考慮せずにブレーク命令の書き込みが可能になる。
【００２０】
また、上記の構成において、前記第３の記憶装置は、前記第１の記憶装置または前記第２の記憶装置によって兼用されているという態様がある。
【００２１】
また、上記のデバッグ装置のうちブレークポイント登録部を有するデバッグ装置以外において、前記デバッガは、さらに、前記ローダより前記ロード完了の通知を受理したときにアクセスブレークを設定するアクセスブレーク設定部を有しているという態様がある。アクセスブレークとは、プログラム実行中に指定のアドレスにアクセスしたときにプログラムを停止させる機能である。これは、ブレーク命令設定部が行う処理とは異なり、ターゲットにおけるハードウェアの機能を利用するものである。他のプログラムのロード中に、同じアドレスをデータ領域として使用してもブレークさせないことで、デバッグ作業者は自分がデバッグするプログラムのみに注目してブレーク命令の書き込みを行えばよい。
【００２２】
また、上記の構成において、前記デバッガは、さらに、前記プログラムから識別子とシンボル情報を読み込み、シンボル情報管理表に登録し、続けて別のプログラムから識別子とシンボル情報を読み込み、前記シンボル情報管理表に追加登録するシンボル情報読み込み部を備えているという態様がある。このように構成すれば、複数のプログラムがある場合に、一度にまとめてシンボル情報を読み込むことができ、ターゲットの起動中に実行するプログラムが変わっても、シンボル情報を再取得する必要はなく、ブレーク命令書き込み処理もターゲットの起動前に可能になり、デバッグ作業の効率を上げることができる。
【発明の効果】
【００２３】
本発明によれば、高速アクセスのために起動中にプログラムを高速動作可能なメモリへロードするシステムにおいて、プログラムのロードを先にし、その後にブレーク命令の書き込みを行うので、ロード処理のためにブレーク命令が消去されてしまうことを防止し、デバッグ作業者はロードのタイミングを考慮しなくても、ブレークポイントへのブレーク命令の自動的な書き込みが可能になる。そのため、デバッグ作業が容易になり、デバッグ作業効率が向上する。
【００２４】
また、ブレーク命令を書き込む機能をローダに付加することにより、ブレーク命令書き込み処理を高速化することができる。
【００２５】
また、複数のシンボル情報を一度にまとめて読み込むように構成することにより、複数のプログラムを使用するシステムのデバッグを行う場合、途中でシンボル情報を読み替える必要はなく、ブレーク命令書き込み処理も任意のタイミングで可能になり、デバッグ作業の効率を上げることができる。
【発明を実施するための最良の形態】
【００２６】
以下、本発明にかかわるデバッグ装置の実施の形態を図面に基づいて詳細に説明する。
【００２７】
（実施の形態１）
図１は、本発明の実施の形態１におけるデバッグ装置の構成を示すブロック図である。
【００２８】
このデバッグ装置は、デバッガＡとターゲットＢから構成されている。デバッガＡは、デバッグ対象のプログラムに対して、あらかじめ設定されたブレークポイントにブレーク命令を書き込むブレーク命令設定部１と、ターゲットＢのプログラムを起動するプログラム制御部２とから構成されている。このブレークは、一般にソフトウェアブレークと呼ばれるもので、プログラムを実行させて途中で動作を停止させたい箇所の命令をブレーク命令に書き換えることにより実現する。ブレークさせる箇所をブレークポイントと呼び、デバッグ作業者が設定する。ブレークポイントは、ブレークポイントＩＤとアドレスで管理する。このアドレスは、第２の記憶装置４上のアドレス値である。
【００２９】
ターゲットＢには、デバッグ対象のプログラムを格納する第１の記憶装置３と、プログラムを実行するためにロードする第２の記憶装置４と、プログラムを第１の記憶装置３から第２の記憶装置４へロードしロード完了時にデバッガＡに対してロード完了を通知してブレーク命令書き込み処理を要求するローダ５から構成されている。ローダ５は、ターゲットＢの稼動中に、第１の記憶装置３にあるプログラムを第２の記憶装置４にロードする。ローダ５は、プログラムのロード完了後、デバッガＡのブレーク命令設定部１に対してロード完了の通知を行い、ブレーク命令の書き込み処理を要求するように構成されている。本実施の形態においては、ローダ５は、ブレーク命令設定部１に対してブレーク命令書き込み処理を要求するときに、第２の記憶装置４においてプログラムをロードしたアドレス範囲を通知するようになっている。
【００３０】
ブレーク命令書き込み処理の要求とアドレス範囲を受理したデバッガＡにおけるブレーク命令設定部１は、デバッグ作業者が設定済みのブレークポイントのうち受け取ったアドレス範囲に含まれるブレークポイントのアドレスにブレーク命令を書き込む。設定が完了すれば、プログラム制御部２によってターゲットＢを起動し、プログラムの実行を再開する。
【００３１】
なお、ローダ５はＤＭＡ（Direct Memory Access）などの専用ハード、または、ターゲットＢのＣＰＵ（CentralProcessing Unit）で実行するプログラムのどちらであってもかまわない。
【００３２】
次に、上記のように構成された本実施の形態のデバッグ装置の動作を図２を用いて説明する。図２は、デバッグ装置のブレーク命令設定部１が行う処理の手順を示すフローチャートである。
【００３３】
デバッグ作業者はあらかじめデバッガＡにおいてブレークポイントを設定しておく。ターゲットＢにおけるローダ５は、第１の記憶装置３に格納されているプログラムを読み出して第２の記憶装置４へロードする。そして、ローダ５は、プログラムのロードの完了を確認した後、ロード完了をデバッガＡにおけるブレーク命令設定部１へ通知するとともに、ロード先のアドレス範囲を通知する。アドレス範囲データは、例えば先頭アドレスと終端アドレスの組み合わせ、または先頭アドレスとサイズの組み合わせなどで構成される。さらに、ローダ５は、ブレーク命令設定部１に対してブレーク命令書き込み処理を要求する。
【００３４】
ロード完了を通知されブレーク命令書き込み処理を要求されたブレーク命令設定部１は、次のような処理を行う。この処理を図２のフローチャートに従って説明する。
【００３５】
ステップＳ１において、ブレーク命令設定部１は、ロードしたプログラムのアドレス範囲をローダ５から取得する。
【００３６】
次いでステップＳ２において、ブレーク命令設定部１は、デバッグ作業者があらかじめ設定しておいたブレークポイントを１つずつ読み出す。
【００３７】
次いでステップＳ３において、そのブレークポイントのアドレスが、ローダ５から受け取ったアドレス範囲内かどうかを判定する。判定の結果、範囲内であれば、ステップＳ４に進んで、そのブレークポイントにブレーク命令を書き込む。一方、範囲外であれば、ステップＳ４をスキップすることでブレーク命令の書き込みは行わない。
【００３８】
次いでステップＳ５において、次候補のブレークポイントがあるか判定し、あればステップＳ２に戻って、ブレークポイントを読み出す処理を繰り返す。
【００３９】
そして、以上のようにして第２の記憶装置４においてブレークポイントに対するブレーク命令の書き込みが完了すると、デバッガＡにおけるプログラム制御部２はターゲットＢを起動する。
【００４０】
以上のように、ローダ５でプログラムを第２の記憶装置４へロードした後に、ブレーク命令設定部１によりブレークポイントにブレーク命令を書き込むようにしている。すなわち、プログラムのロードが先で、ブレークポイントへのブレーク命令の書き込みが後、という順序が規定されている。したがって、高速アクセスのために起動中にプログラムを高速動作可能なメモリである第２の記憶装置４へロードして実行するシステムにおいて、ロード処理のためにブレーク命令が消去されてしまうということは起こり得ない。結果として、デバッグ作業者はロードのタイミングを考慮しなくても、ブレークポイントへのブレーク命令の自動的な書き込みが可能になる。
【００４１】
アドレス範囲の検証は、プログラムが複数存在する場合に有用となる。ロードしたプログラムとそのロード先のアドレス範囲とが対応関係をもっている。したがって、ロードしたプログラムに対してのみブレーク命令の書き込みを行うことになる。あるプログラムについてロード後にブレーク命令を書き込み、次いで別のプログラムを書き込むとする。この場合に、先に書き込んだブレーク命令が後のプログラムのロードによって消去されてしまうということは生じない。換言すれば、複数のプログラムをロードするシステムにおいて、個々のプログラムが異なる時間帯に同じ第２の記憶装置にロードされるときでも、それぞれのプログラムについて、個別的にブレーク命令を書き込むことが可能となる。
【００４２】
まとめると、本実施の形態によれば、ロード完了したプログラムに対してのみブレーク命令の書き込みを行うため、ロードするプログラムが複数存在する場合でもブレーク命令がプログラムロードにより消去されることはなく、所期通りにブレークを実現することができる。
【００４３】
（実施の形態２）
本発明の実施の形態２におけるデバッグ装置自体の構成は、実施の形態１の場合の図１と同様となっている。本実施の形態においては、ローダ５は、第１の記憶装置３からプログラムを第２の記憶装置４へロードした後、ブレーク命令設定部１に対して、ロード完了の通知、ブレーク命令書き込み処理の要求とともに、プログラム識別子とロード先の第２の記憶装置４の先頭アドレスを通知する。この先頭アドレスはロードされたプログラムのロード先における先頭アドレスである。
【００４４】
プログラムは複数個存在し、各プログラムを第２の記憶装置４のどこへロードするかは、ローダ５が実行時に決定するものとする。したがって、各プログラムにおいてブレークポイント指定で使用するアドレスは、プログラムの先頭からの相対アドレスとなる。また、ローダ５は、複数のプログラムを互いに区別するため、各プログラムに固有の識別子を付加するように構成されている。例えば、各プログラムごとに異なった番号を、プログラムのヘッダ情報としてプログラム本体に付加しておく。
【００４５】
ブレーク命令設定部１は、通知された識別子と一致するブレークポイントにブレーク命令を書き込むように構成されている。
【００４６】
次に、上記のように構成された本実施の形態のデバッグ装置の動作を図３を用いて説明する。図３は、デバッグ装置のブレーク命令設定部１が行う処理の手順を示すフローチャートである。
【００４７】
ステップＳ１１において、ブレーク命令設定部１は、ローダ５よりロードしたプログラムについて、その識別子と、そのプログラムが格納された第２の記憶装置４の先頭アドレスを取得する。
【００４８】
次いでステップＳ１２において、ブレーク命令設定部１は、デバッグ作業者があらかじめ設定しておいたブレークポイントを第２の記憶装置４において１つずつ読み出す。
【００４９】
次いでステップＳ１３において、ブレーク命令設定部１は、対象のブレークポイントにおけるプログラムの識別子が、ローダ５から受け取ったプログラムの識別子と一致するかを判別する。判別の結果、一致するならばステップＳ１４に進んで、ブレークポイント情報が保持するアドレス（相対アドレス）に、取得したロード先の第２の記憶装置４の先頭アドレスを加算した結果の絶対アドレスにブレーク命令を書き込む。
【００５０】
次いでステップＳ１５において、次のブレークポイントデータがあるか判定し、あればステップＳ１２に戻ってブレークポイントを読み出す処理を繰り返す。
【００５１】
以上により、複数のプログラムが存在し、かつロード前にロード先のアドレスが決定していないものについて、先に書き込んだブレーク命令が後のプログラムのロードによって消去されてしまうということは生じず、所期通りにブレークを実現することができる。
【００５２】
（実施の形態３）
図４は、本発明の実施の形態３におけるデバッグ装置の構成を示すブロック図である。図４において、実施の形態１の図１におけるのと同じ符号は同一構成要素を指している。本実施の形態に特有の構成は、次のとおりである。
【００５３】
デバッガＡは、プログラム制御部２とブレーク命令設定部１に加えて、ロード監視部６を備えている。プログラム制御部２は、ターゲット起動前にロード監視部６を起動するように構成されている。ターゲットＢにおけるローダ５は、プログラムのロード完了後、デバッガＡのロード監視部６に対してロード完了の通知を行うように構成されている。また、ロード監視部６は、ローダ５よりロード完了の通知を受理したときにロード完了であることを記憶し、プログラム制御部２より起動要求を受けたときに、プログラムのロードが完了ならば、ブレーク命令設定部１へブレーク命令書き込みを指示するように構成されている。その結果、ブレーク命令設定部１は、第２の記憶装置４において設定されたブレークポイントへブレーク命令を書き込む。書き込みが完了すれば、プログラム制御部２によってターゲットＢを起動し、プログラムの実行を再開する。
【００５４】
一方、プログラムのロードが未完了の場合は、ロード監視部６は、ブレーク命令設定部１を起動しない。つまり、ブレーク命令の書き込みは行わない。その他の構成については、実施の形態１と同様であるので、説明を省略する。
【００５５】
次に、上記のように構成された本実施の形態のデバッグ装置の動作を説明する。
【００５６】
ターゲットＢにおけるローダ５が、第１の記憶装置３に格納されているプログラムを読み出して第２の記憶装置４にロードし、そのロードの完了を確認して、そのロード完了をデバッガＡにおけるロード監視部６に通知する。通知を受けたロード監視部６は、プログラムのロードが完了していることを記憶しておく。
【００５７】
デバッガＡにおいて、プログラム制御部２がロード監視部６を起動する。起動されたロード監視部６は、すでにロード完了の通知を受けたことを記憶しているときは、ブレーク命令設定部１に対してブレーク命令書き込みを指示する。ブレーク命令設定部１は、ターゲットＢの第２の記憶装置４において設定されたブレークポイントへブレーク命令を書き込む。ブレークポイントに対するブレーク命令の書き込みが完了すると、デバッガＡにおけるプログラム制御部２はターゲットＢを起動する。一方、プログラムのロードが未完了の場合は、ロード監視部６は、ブレーク命令設定部１へブレーク命令書き込みを指示しない。つまり、ブレーク命令の書き込みは行わない。
【００５８】
以上のように本実施の形態によれば、ロード完了済のプログラムについては、ローダ５を起動することなく、ブレーク命令の書き込みができるので、プログラムの実行開始までの時間を短縮することができる。
【００５９】
（実施の形態４）
図５は、本発明の実施の形態４におけるデバッグ装置の構成を示すブロック図である。
【００６０】
本実施の形態におけるデバッガＡは、ブレークポイント情報を登録するブレークポイント登録部１１と、ターゲットＢのプログラムを起動するプログラム制御部２２とから構成されている。ブレークポイント情報は、例えば、ブレークポイント識別子、プログラム識別子、アドレスの組で構成されている。プログラムが１個の場合は、プログラム識別子はなくてもよい。
【００６１】
また、ターゲットＢは、デバッグ対象のプログラムを格納する第１の記憶装置１３と、プログラムを実行するためにロードする第２の記憶装置１４と、ブレークポイント情報を格納する第３の記憶装置１８と、プログラムを第１の記憶装置１３から第２の記憶装置１４へロードしロード完了時に第３の記憶装置１８におけるブレークポイント情報を参照してブレーク命令の書き込みを行うローダ１５とから構成されている。ローダ１５は、プログラムのロード処理を行うロード処理部１６と、上記のブレークポイント情報を参照してプログラムをロードした領域のアドレス範囲に含まれるブレークポイントを抽出し、抽出したブレークポイントにブレーク命令を書き込むブレーク命令設定部１７とから構成されている。
【００６２】
次に、上記のように構成された本実施の形態のデバッグ装置の動作を説明する。
【００６３】
デバッガＡがターゲットＢを起動する前にあらかじめ、デバッグ作業者がブレークポイントを設定すると、デバッガＡにおいて、ブレークポイント登録部１１は、ターゲットＢにおいて第３の記憶装置１８にブレークポイント情報を登録する。
【００６４】
このようにあらかじめブレークポイント情報を第３の記憶装置１８に登録しておいた状態で、次いで、デバッグ作業者がプログラムの実行開始のコマンドを実行すると、プログラム制御部２２はターゲットＢを起動して、プログラムの実行を開始する。ターゲットＢにおけるローダ１５は、第１の記憶装置１３に格納されているプログラムを読み出して第２の記憶装置１４へロードする。そして、ロードの完了を確認すると、ローダ１５におけるブレーク命令設定部１７は、第３の記憶装置１８におけるブレークポイント情報を検索し、プログラムの識別子の比較判定を通じて、ロードしたプログラムに設定すべきブレークポイントがあれば、第２の記憶装置１４において該当するアドレスにブレーク命令を書き込む。
【００６５】
プログラムが１個の場合は、ブレークポイント情報に登録されたすべてのブレークポイントのアドレスにブレーク命令を書き込む。プログラムが複数個ある場合は、ロードしたプログラムのアドレス範囲に含まれるブレークポイントを検索するか、またはプログラムが識別子をもつ場合は、ロードしたプログラムと同じ識別子のブレークポイント情報を検索する。またさらに、ブレークポイント情報に登録されたアドレスがプログラムの先頭からの相対アドレスである場合は、ロード先の先頭アドレスの値を加算した結果の絶対アドレスにブレーク命令を書き込む。ブレーク命令の書き込みが終了したら、ロードしたプログラムを実行する。
【００６６】
以上のように、ブレーク命令設定部１７は、プログラムのロード完了を確認した後に、ブレークポイントにブレーク命令を書き込むので、ロード処理のためにブレーク命令が消去されてしまうということは起こり得ない。また、プログラムが複数存在する場合において、識別子を介して検索を行うので、ロード済みのプログラムとロード未了のプログラムとの区別を明確につけることができ、先に書き込んだブレーク命令が後のプログラムのロードによって消去されてしまうということは生じない。
【００６７】
また、ロード時にロード先のアドレスが決定され、したがって、ロード前にはロード先のアドレスは決定されていない動的ローディングの場合において、プログラムロードのタイミングやアドレスを考慮せずにブレーク命令の書き込みが可能になる。
【００６８】
そして、本実施の形態によれば、ブレークポイント情報の登録は、プログラムのロードに先立ってあらかじめ行われ、かつ、その登録先はターゲットにおける第３の記憶装置である。したがって、デバッグ作業者はロードのタイミングを考慮しなくても、ブレークポイントへのブレーク命令の自動的な書き込みが可能になる。
【００６９】
しかも、上記のように、ローダ１５は、ブレーク命令を書き込む機能を有している。実行中にロードするプログラムに対してブレークポイントを設定し、ブレークさせることができる。換言すれば、ブレーク命令の書き込みを、デバッガＡを介さずに、ターゲットＢの内部において完遂させている。したがって、デバッガＡ経由でブレーク命令を書き込むよりも短時間で書き込み処理を行うことができる。
【００７０】
なお、ブレークポイント情報は第３の記憶装置１８上に作成しているが、第１の記憶装置１３や第２の記憶装置１４上に作成してもかまわない。
【００７１】
（実施の形態５）
図６は、本発明の実施の形態５におけるデバッグ装置の構成を示すブロック図である。図６において、実施の形態１の図１におけるのと同じ符号は同一構成要素を指している。本実施の形態に特有の構成は、次のとおりである。
【００７２】
デバッガＡは、プログラム制御部２とブレーク命令設定部１に加えて、ローダ５よりロード完了の通知を受理したときにアクセスブレークを設定するアクセスブレーク設定部７を備えている。アクセスブレークとは、プログラム実行中に指定のアドレスにアクセスしたときにプログラムを停止させる機能である。その他の構成については、実施の形態１と同様であるので説明を省略する。
【００７３】
次に、上記のように構成された本実施の形態のデバッグ装置の動作を説明する。
【００７４】
ローダ５は、プログラムのロードを完了したときに、ロード完了をアクセスブレーク設定部７に通知する。ロード完了の通知を受け取ったアクセスブレーク設定部７は、アクセスブレークの設定を行う。アクセスブレークとは、プログラム実行中に指定したメモリ番地にデータを読む、または書き込んだときにプログラムを停止させる機能である。これは、ブレーク命令設定部１が行う処理とは異なり、ターゲットＢにおけるハードウェアの機能を利用するものである。アクセスブレークにおいては、ブレーク命令の場合のようにロード処理のためにブレーク命令が消去されることはない。アクセスブレークは、ロード時にロード先のアドレスが決定する場合に有効である。また、他のプログラムのロード中に、同じアドレスをデータ領域として使用してもブレークさせないことで、デバッグ作業者は自分がデバッグするプログラムのみに注目してブレーク命令の書き込みを行えばよい。
【００７５】
（実施の形態６）
図７は、本発明の実施の形態６におけるデバッグ装置の構成を示すブロック図である。図７において、実施の形態１の図１におけるのと同じ符号は同一構成要素を指している。本実施の形態に特有の構成は、次のとおりである。
【００７６】
デバッガＡは、プログラム制御部２とブレーク命令設定部１に加えて、デバッグ対象のプログラム１０から識別子とシンボル情報を読み込み、シンボル情報管理表９に登録し、続けて別のプログラムから識別子とシンボル情報を読み込み、シンボル情報管理表９に追加登録するシンボル情報読み込み部８を備えている。シンボル情報は、プログラム１０より関数名やグローバル変数名、ソースコードファイル名などである。シンボル情報は、プログラムのコンパイル時にコンパイラによってプログラムファイルに組み込まれている。シンボル情報読み込み部８は、複数のプログラムのシンボル情報を読み込み、シンボル情報管理表９でまとめて管理する。図８にシンボル情報管理表９の内容を示す。
【００７７】
シンボル情報管理表９は、プログラム識別子、ファイル名、シンボル名、アドレスの４つのデータを１組として管理する。アドレスは、プログラムのロード先が組み込み時に決まっている場合は第２の記憶装置４上のアドレスであり、ロード先が決まっていない場合はプログラムの先頭からの相対アドレスである。デバッグ作業者が関数名（シンボル名）を用いてブレークポイントを設定する場合、デバッガＡはシンボル情報管理表９を参照してアドレス値に変換して、ブレークポイント管理表を作成する。図８における“Func_a”のようにシンボル名が重複する場合は、デバッグ作業者が識別子またはファイル名を併せて指定する。指定しない場合は、デバッガＡが候補を出力し、識別子の指定を促す。
【００７８】
本実施の形態によれば、複数のプログラムがある場合に、一度にまとめてシンボル情報を読み込むことができ、ターゲットＢの起動中に実行するプログラムが変わっても、シンボル情報を再取得する必要はなく、ブレーク命令の書き込みもターゲットの起動前に可能になり、デバッグ作業の効率を上げることができる。
【産業上の利用可能性】
【００７９】
本発明のデバッグ装置は、起動中にプログラムをロードして実行するシステムのデバッグに有効である。
【図面の簡単な説明】
【００８０】
【図１】本発明の実施の形態１におけるデバッグ装置の構成を示すブロック図
【図２】本発明の実施の形態１におけるブレーク命令設定部の動作を示すフローチャート
【図３】本発明の実施の形態２におけるブレーク命令設定部の動作を示すフローチャート
【図４】本発明の実施の形態３におけるデバッグ装置の構成を示すブロック図
【図５】本発明の実施の形態４におけるデバッグ装置の構成を示すブロック図
【図６】本発明の実施の形態５におけるデバッグ装置の構成を示すブロック図
【図７】本発明の実施の形態６におけるデバッグ装置の構成を示すブロック図
【図８】本発明の実施の形態６におけるシンボル情報管理表の説明図
【符号の説明】
【００８１】
Ａ  デバッガ
Ｂ  ターゲット
１  ブレーク命令設定部
２  プログラム制御部
３  第１の記憶装置
４  第２の記憶装置
５  ローダ
６  ロード監視部
７  アクセスブレーク設定部
８  シンボル情報読み込み部
９  シンボル情報管理表
１０  デバッグ対象のプログラム
１１  ブレークポイント登録部
１２  プログラム制御部
１３  第１の記憶装置
１４  第２の記憶装置
１５  ローダ
１６  ロード処理部
１７  ブレーク命令設定部
１８  第３の記憶装置
【図１】
2008052533.tif 000003
【図２】
2008052533.tif 000004
【図３】
2008052533.tif 000005
【図４】
2008052533.tif 000006
【図５】
2008052533.tif 000007
【図６】
2008052533.tif 000008
【図７】
2008052533.tif 000009
【図８】
2008052533.tif 000010