(57)【要約】【課題】不要なプロセッサでのブレークを回避し、リアルタイム性を損なわずにプログラムをデバッグできるようにすること。【解決手段】プログラムデバッグ装置は、コンパイラから出力されたシンボル情報またはセクション情報と、シンボル情報またはセクション情報に相当するメモリ領域にアクセス可能なプロセッサを示す領域情報とを関連付けて保持する第１の情報テーブルと、プロセッサおよびブレークポイントの種類ごとに設定可能な残数を示す残り設定可能数を保持する第２の情報テーブルとを備え、ユーザが設定したブレークポイント設定アドレスを含むシンボル情報またはセクション情報を第１の情報テーブルから抽出し、抽出したシンボル情報またはセクション情報に関連付けられた領域情報が示すプロセッサに対して、第２の情報テーブルを参照して設定可能な種類のブレークポイントを設定する。【選択図】図１
2012216134.tif 000002
【特許請求の範囲】
【請求項１】
コンパイラから出力されたシンボル情報またはセクション情報と、該シンボル情報または該セクション情報に相当するメモリ領域にアクセス可能なプロセッサを示す領域情報とを関連付けて保持する第１の情報テーブルと、
プロセッサおよびブレークポイントの種類ごとに設定可能な残数を示す残り設定可能数を保持する第２の情報テーブルと、
ユーザが設定したブレークポイント設定アドレスを含むシンボル情報またはセクション情報を前記第１の情報テーブルから抽出し、抽出したシンボル情報またはセクション情報に関連付けられた領域情報が示すプロセッサに対して、前記第２の情報テーブルを参照して設定可能な種類のブレークポイントを設定する振り分け条件用情報収集部と、を備えていることを特徴とするプログラムデバッグ装置。
【請求項２】
前記領域情報は、複数のプロセッサのうちのいずれか、または、複数のプロセッサのすべてを示すことを特徴とする、請求項１に記載のプログラムデバッグ装置。
【請求項３】
前記シンボル情報は、シンボルの識別子、属性、アドレスおよびサイズを示すことを特徴とする、請求項１または２に記載のプログラムデバッグ装置。
【請求項４】
前記セクション情報は、シンボルの識別子、オフセット、データサイズおよびデータタイプを示すことを特徴とする、請求項１または２に記載のプログラムデバッグ装置。
【請求項５】
前記第２の情報テーブルは、ブレークポイントの種類として、ハードウェアブレークおよびソフトウェアブレークを含むことを特徴とする、請求項１ないし４のいずれか１項に記載のプログラムデバッグ装置。
【請求項６】
コンパイラから出力されたシンボル情報またはセクション情報と、該シンボル情報または該セクション情報に相当するメモリ領域にアクセス可能なプロセッサを示す領域情報とを関連付けて第１の情報テーブルに格納する工程と、
プロセッサおよびブレークポイントの種類ごとに設定可能な残数を示す残り設定可能数を第２の情報テーブルに格納する工程と、
ユーザが設定したブレークポイント設定アドレスを含むシンボル情報またはセクション情報を前記第１の情報テーブルから抽出する工程と、
抽出したシンボル情報またはセクション情報に関連付けられた領域情報が示すプロセッサに対して、前記第２の情報テーブルを参照して設定可能な種類のブレークポイントを設定する工程と、を含むことを特徴とするプログラムデバッグ方法。
【請求項７】
前記領域情報は、複数のプロセッサのうちのいずれか、または、複数のプロセッサのすべてを示すことを特徴とする、請求項６に記載のプログラムデバッグ方法。
【請求項８】
前記シンボル情報は、シンボルの識別子、属性、アドレスおよびサイズを示すことを特徴とする、請求項６または７に記載のプログラムデバッグ方法。
【請求項９】
前記セクション情報は、シンボルの識別子、オフセット、データサイズおよびデータタイプを示すことを特徴とする、請求項６または７に記載のプログラムデバッグ方法。
【請求項１０】
前記第２の情報テーブルは、ブレークポイントの種類として、ハードウェアブレークおよびソフトウェアブレークを含むことを特徴とする、請求項６ないし９のいずれか１項に記載のプログラムデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムデバッグ装置およびプログラムデバッグ方法に関し、特に、ブレークポイントを設定してマルチプロセッサシステム用のプログラムをデバッグするプログラムデバッグ装置およびプログラムデバッグ方法に関する。
【背景技術】
【０００２】
半導体集積回路は、多くの製品に搭載され、複雑な制御を行なっている。半導体集積回路の処理能力を向上させるために、１つの半導体集積回路に複数のプロセッサを実装したマルチプロセッサシステムが採用されている。マルチプロセッサシステムにより、複数のプロセッサを実装することによる処理能力の向上、および、複数のプロセッサを１つにすることによる消費電力の削減が期待される。
【０００３】
マルチプロセッサシステムにおいては、複数のプロセッサが同時にプログラムを実行する。したがって、マルチプロセッサシステムを制御するプログラムを開発するための開発支援装置におけるデバッグ作業において、プログラム実行中の動作を把握することが困難になっている。
【０００４】
一般に、マルチプロセッサシステム用のプログラムを開発する場合には、単一のプロセッサが実装されているプロセッサシステム用のプログラムを、変換ツールを用いて変換し、マルチプロセッサでも使えるようなプログラムを生成する。この際、最適なタイミングで効率良く動作をするように、プログラムやデータはプロセッサ領域や共用領域に割り当てられる。すると、デバッグ作業者（以下「ユーザ」という。）は、プログラム構造を理解し、どのプロセッサがプログラム実行中かを把握して、ブレークポイントを設定することが困難となる。したがって、マルチプロセッサシステムにおいても、ブレークポイントを簡単に設定し、ユーザが意図する箇所で確実にブレークさせることが要求される。
【０００５】
特許文献１には、デバッグ専用の特別なハードウェアを付加することなく、複数のブレークポイントを設定でき、デバッグ効率を向上させることを目的としたマルチプロセッサシステムが記載されている。
【０００６】
図１２は、特許文献１に記載されたマルチプロセッサシステムの構成、および、当該システムの共有メモリに設定（ないし格納）される情報や領域を示す図である。
【０００７】
図１２は、マルチプロセッサシステムであり、オペレーティングシステムおよび主要なアプリケーションプログラムが実行されるメインプロセッサ（以下、「メインＣＰＵ」という。）１０２と、メインＣＰＵ１０２に制御信号１０９により接続された複数（ｎ個）のサブプロセッサ（以下、「サブＣＰＵ」という。）１０３ａ〜１０３ｄと、これらのＣＰＵ１０２、１０３ａ〜１０３ｄと共有バス１０８により接続されるメモリコントローラ（非図示）と、メモリコントローラに接続された共有メモリ１０６とを備えている。
【０００８】
マルチプロセッサシステム内の各ＣＰＵは、メモリコントローラを介して、共有メモリ１０６に対し情報の書き込みと読み出しの機能を持っており、共有メモリ１０６を介して情報交換を行う。また、マルチプロセッサシステムの動作手順を定めるプログラムは共有メモリ１０６内に記憶され、メインＣＰＵ１０２はそのプログラムに従い、制御信号１０９を介して複数のサブＣＰＵ１０３ａ〜１０３ｄの制御を行いながら動作する。マルチプロセッサシステムで実行されるプログラムのデバッグは、メインＣＰＵ１０２にデバッガ制御部１０４を介して接続されたデバッガ端末１０５を用いて行う。
【０００９】
なお、マルチプロセッサシステム内のメインＣＰＵ１０２とサブＣＰＵ１０３ａ〜１０３ｄとは異なるタイプのプロセッサである。
【００１０】
すなわち、メインＣＰＵ１０２は、オペレーティングシステムやアプリケーションプログラムを実行するための高性能なプロセッサで構成される。メインＣＰＵ１０２からは、制御信号１０９を介して複数のサブＣＰＵ１０３ａ〜１０３ｄの起動・停止・再開といった制御が可能である。
【００１１】
複数のサブＣＰＵ１０３ａ〜１０３ｄはすべて、同一タイプのプロセッサで構成され、マルチプロセッサシステム内にある機能モジュール間の通信制御など、限られた目的で使用される専用プロセッサである。
【００１２】
共有メモリ１０６内には、メインＣＰＵ１０２で実行されるデバッグ対象プログラム２０１、デバッガプログラム２０２、デバッガインタフェース２０３、コマンドインタフェース２０４、ブレークポイント設定テーブル２１５、ブレークポイント履歴テーブル２０６、命令退避領域２０７、レジスタ退避領域２０８が設定されている。
【００１３】
ここで、デバッガインタフェース２０３は、デバッガプログラム２０２とデバッグ対象プログラム２０１との間の情報交換に使用される。コマンドインタフェース２０４は、デバッガ端末１０５からオペレータにより入力されるコマンドを受け付け、デバッガプログラム２０２に情報を受け渡すのに使用される。また、コマンドインタフェース２０４は、デバッガプログラム２０２からの情報をデバッガ端末１０５に表示し、オペレータに対してデバッグ情報を通知するのに使用される。ブレークポイント設定テーブル２１５は、デバッグ対象プログラム２０１を中断させるためのブレークポイントを設定するためのテーブルである（図１３を参照して後述）。ブレークポイント履歴テーブル２０６は、発生したブレーク要因の履歴を格納するテーブルである（図１４を参照して後述）。命令退避領域２０７は、ブレークポイント発生条件を示す命令がトラップ命令などに置換される場合、元の命令の退避格納領域として使用される。レジスタ退避領域２０８は、デバッグ対象プログラム２０１の実行が中断され、デバッガプログラム２０２が呼び出され実行されるときに、各ＣＰＵのレジスタ内容を退避させ、格納しておくための退避格納領域として使用される。
【００１４】
次に、ブレークポイントの設定について説明する。
【００１５】
ここで、メインＣＰＵ１０２上においてアプリケーションプログラムが実行され、メインＣＰＵ１０２の制御の下で、サブＣＰＵ１０３ａ〜１０３ｄが同時並列的にマルチプロセッサシステム内の機能モジュール間の通信制御プログラムを実行しているものとする。このような状態において、メインＣＰＵ１０２上で実行されているアプリケーションプログラムをデバッグ対象プログラム２０１としてデバッグを行う場合、オペレータは、予めプログラムを中断してレジスタやメモリの情報を調べるためのブレークポイントを、デバッガ端末１０５からコマンドを入力して設定する。オペレータがデバッガ端末１０５から入力したコマンドは、コマンドインタフェース２０４を介してデバッガプログラム２０２で受け付けられる。デバッガプログラム２０２は、コマンドを解析し、デバッガインタフェース２０３を介して、共有メモリ１０６内のブレークポイント設定テーブル２１５にブレークポイントを設定する。
【００１６】
図１３は、従来のマルチプロセッサシステムにおけるブレークポイント設定テーブル２１５の記載内容を示す図である。
【００１７】
メインＣＰＵ１０２とｎ個のサブＣＰＵ１０３ａ〜１０３ｄとに対してブレークポイント発生条件をそれぞれ設定し、各ＣＰＵでブレークポイント発生条件が満たされたときトラップを発生し、デバッグ対象プログラムを中断させるために、ブレークポイント設定テーブル２１５は、１つのブレークポイントに対し複数個の設定フィールド（図１３に示すテーブルの各行）を持っている。
【００１８】
各フィールドは、ＣＰＵ−ＩＤが記載される列２１５ａと、ブレークポイント発生条件が記載される列２１５ｃと、その条件を有効にするか否かを示すフラグが記載される２１５ｂとを含む。ブレーク要因を発生させる対象となるすべてのＣＰＵについて、ブレークポイント設定テーブル２１５に、ＣＰＵ−ＩＤとブレークポイント発生条件と有効フラグとを設定することで、デバッグ対象プログラム２０１に対するブレークポイントの設定が終了する。
【００１９】
列２１５ａに記載されるＣＰＵ−ＩＤは、各ＣＰＵに一意に付与されている個別の識別子であり、マルチプロセッサシステム内に同一のＣＰＵ−ＩＤを持つＣＰＵが複数存在することはない。列２１５ｃに記載されるブレークポイント発生条件として、対応のＣＰＵが実行する命令の中で、対象となる１つの命令の命令アドレスが設定される。列２１５ｂに記載される有効フラグは、対応のブレークポイント発生条件が有効であるか、すでにそのブレーク要因が発生して無効になっているかを示す。
【００２０】
なお、ブレーク要因を発生させるＣＰＵは複数である必要はない。また、ブレークポイント発生条件が１つしか設定されていなくてもよい。ブレーク要因を発生させる対象とならないＣＰＵに関しては、フィールドを設定する必要はない。
【００２１】
また、ブレークポイント発生条件として設定された命令アドレスに対応する命令は、デバッガプログラム２０２によりトラップ命令に置換される。置換される前の命令は、命令退避領域２０７に退避して格納される。
【００２２】
ブレークポイント設定テーブル２１５は、図１３では１つのみ示しているが、ブレークポイント設定テーブル２１５は、異なるブレークポイントごとに設けられ、したがって、共有メモリ１０６内に複数格納されることもある。
【００２３】
オペレータが所望のブレークポイントの設定を終了すると、デバッガプログラム２０２からデバッグ対象プログラム２０１に制御を移し、デバッグ対象プログラム２０１を始動させる。
【００２４】
図１４は、特許文献１に記載されたマルチプロセッサシステムにおけるブレークポイント履歴テーブル２０６の記載内容を示す図である。
【００２５】
ブレークポイント履歴テーブル２０６には、トラップ命令を検知したＣＰＵのＣＰＵ−ＩＤが記載される列２０６ａと、該ＣＰＵのプログラムカウンタの値が記載される列２０６ｂと、システムタイマの値が記載される列２０６ｃとが設けられ、トラップ命令の検知ごとに１行ずつ記載が行なわれる。
【００２６】
図１５は、一般的なマルチプロセッサシステムにおける、プログラムの分割とメモリの構成およびアクセス属性を示す模式図である。マルチプロセッサシステムでは、ＣＰＵをＣＰＵ単独でなく、プロセッサエレメント（ＰＥ：Ｐｒｏｃｅｓｓｏｒ  Ｅｌｅｍｅｎｔ）、すなわち、ＣＰＵとそのＣＰＵ固有の各周辺装置一式を単位として扱う。
【００２７】
図１５を参照すると、ＰＥ１で使用するプログラムおよびデータは、メモリのＰＥ１領域に配置される。ＰＥ２は、ＰＥ１領域に配置されたプログラムおよびデータにソフトウェア的にアクセスすることができない。同様に、ＰＥ２で使用するプログラムおよびデータは、メモリのＰＥ２領域に配置される。ＰＥ１は、ＰＥ２領域に配置されたプログラムおよびデータにソフトウェア的にアクセスすることができない。一方、すべてのＰＥで使用するプログラムおよびデータは、メモリの共用領域に配置される。ＰＥ１およびＰＥ２は、いずれも、メモリの共有領域に配置されたプログラムおよびデータにアクセスすることができる。
【００２８】
一般に、ＰＥ１領域、ＰＥ２領域、共用領域という区別は、ユーザがコンパイラでソフトウェア的に領域を割り当てたものである。なお、本発明は、ソフトウェア的に領域を割り当てた場合に限定されず、ハードウェア的に領域を割り当てた場合も含む。
【００２９】
マルチプロセッサシステム用プログラムの作成方法として、多数の方法が知られている。ここでは、既存のコード資産を生かしつつ、マルチコア対応ソフトウェアを開発する一般的な方法について説明する。
【００３０】
一般的な作成方法の手順は、次のとおりである。まず、既存のシングルコア用プログラムに対して、マルチコア・プロセッサに合わせた最適な並列処理のプログラムへ分割するマルチコア分割支援ツールを適用する。これにより、プログラムが並列化され、コードおよびデータがマルチプロセッサシステムのＲＯＭおよびＲＡＭのＰＥ１領域、ＰＥ２領域および共用領域に分割されたコードが出力される。次に、分割されたコードを言語系でコンパイルし、実行可能モジュールに変換する。最後に、プログラムがマルチプロセッサシステムで最適なタイミングで効率よく動作をするように、プログラムの関数をＲＯＭのＰＥ１領域、ＰＥ２領域および共用領域に割り当て、プログラムの変数をＲＡＭのＰＥ１領域、ＰＥ２領域および共用領域に割り当てる。
【００３１】
次に、マルチプロセッサシステムで使用できるブレーク機能について説明する。使用できるブレーク機能として、ＣＰＵ内蔵のブレーク機能と、マルチプロセッサデバッグ用に拡張されたＣＰＵ外のブレーク機能がある。
【００３２】
ＣＰＵ内蔵のブレーク機能は、従来のシングルプロセッサシステムのブレーク機能と同様であり、ハードウェアブレーク（実行前、アクセス）機能とソフトウェアブレーク（実行前）機能がある。一方、ＣＰＵ外のブレーク機能には、ＰＥ内に内蔵された拡張ハードウェアブレーク（実行後、アクセス）機能があり、ＰＥ外に拡張ソフトウェアブレーク（実行前）機能がある。なお、各ブレーク機能はオプションであり、搭載されるか否かはデバッグシステムによって異なる。したがって、必ずしも、すべてのブレーク機能が搭載されているわけではない。
【００３３】
次に、マルチプロセッサシステムにおけるブレーク機能の特徴について説明する。ＣＰＵ内、ＰＥ内のハードウェアブレーク機能とソフトウェアブレーク機能は、設定したＰＥだけがブレークする。したがって、すべてのＰＥをブレークさせるには、すべてのＰＥにブレークポイントを設定しなければならない。一方、拡張ソフトウェアブレーク機能はすべてのＰＥでブレークする。したがって、共用領域へ設定する場合には１回のブレーク設定ですべてのＰＥをブレークさせることができる。
【先行技術文献】
【特許文献】
【００３４】
【特許文献１】特開２００５−３５２５９１号公報（図１〜図３、図６）
【発明の概要】
【発明が解決しようとする課題】
【００３５】
以下の分析は、本発明者によってなされたものである。
【００３６】
特許文献１に記載されたデバッグ方法では、設定されたブレークポイントでブレークをさせ、ブレーク要因をすべてのプロセッサの履歴と比較する。このとき、ＰＥ毎にリアルタイムで実行する必要があるプログラムをデバッグすることができないという問題がある。
【００３７】
その理由として、ブレークポイント設定テーブル２１５に設定された条件より、トラップ命令に置き換えられるソフトウェアブレークポイントをすべてのプロセッサに対して設定し、いずれかの条件でブレークした後に、ブレークポイント履歴テーブル２０６により、すべてのプロセッサのブレーク要因をブレーク条件と比較しなければならず、必ずすべてのプロセッサをブレークをさせる必要があるためである。
【００３８】
そこで、マルチプロセッサシステム用のプログラムをデバッグする際、不要なプロセッサでのブレークを回避し、リアルタイム性を損なわずにプログラムをデバッグできるようにすることが課題となる。
【課題を解決するための手段】
【００３９】
本発明の第１の視点に係るプログラムデバッグ装置は、
コンパイラから出力されたシンボル情報またはセクション情報と、該シンボル情報または該セクション情報に相当するメモリ領域にアクセス可能なプロセッサを示す領域情報とを関連付けて保持する第１の情報テーブルと、
プロセッサおよびブレークポイントの種類ごとに設定可能な残数を示す残り設定可能数を保持する第２の情報テーブルと、
ユーザが設定したブレークポイント設定アドレスを含むシンボル情報またはセクション情報を前記第１の情報テーブルから抽出し、抽出したシンボル情報またはセクション情報に関連付けられた領域情報が示すプロセッサに対して、前記第２の情報テーブルを参照して設定可能な種類のブレークポイントを設定する振り分け条件用情報収集部と、を備えている。
【００４０】
本発明の第２の視点に係るプログラムデバッグ方法は、
コンパイラから出力されたシンボル情報またはセクション情報と、該シンボル情報または該セクション情報に相当するメモリ領域にアクセス可能なプロセッサを示す領域情報とを関連付けて第１の情報テーブルに格納する工程と、
プロセッサおよびブレークポイントの種類ごとに設定可能な残数を示す残り設定可能数を第２の情報テーブルに格納する工程と、
ユーザが設定したブレークポイント設定アドレスを含むシンボル情報またはセクション情報を前記第１の情報テーブルから抽出する工程と、
抽出したシンボル情報またはセクション情報に関連付けられた領域情報が示すプロセッサに対して、前記第２の情報テーブルを参照して設定可能な種類のブレークポイントを設定する工程と、を含む。
【発明の効果】
【００４１】
本発明に係るプログラムデバッグ装置およびプログラムデバッグ方法によると、マルチプロセッサシステム用のプログラムをデバッグする際、不要なＰＥでのブレークを回避し、リアルタイム性を損なわずにプログラムをデバッグすることができる。
【図面の簡単な説明】
【００４２】
【図１】実施形態に係るプログラムデバッグ装置の構成を示すブロック図である。
【図２】実施形態におけるブレークポイント情報テーブルの初期化のフローチャートである。
【図３】実施形態におけるブレークポイント設定テーブル作成のフローチャートである。
【図４】実施形態における振り分け条件用情報収集のフローチャートである。
【図５】実施形態におけるブレークポイント振り分けのフローチャートである。
【図６】実施形態における関数ブレーク用ブレークポイント振り分けのフローチャートである。
【図７】実施形態における変数ブレーク用ブレークポイント振り分けのフローチャートである。
【図８】実施形態におけるコンパイラ情報マージ部より生成されるテーブルである。
【図９】本実施形態におけるブレークポイント設定テーブルである。
【図１０】実施形態におけるブレークポイント情報テーブルである。
【図１１】実施形態における振り分け条件テーブルである。
【図１２】特許文献１に記載されたマルチプロセッサシステムの共有メモリに設定格納される情報や領域を示す図である。
【図１３】特許文献１に記載されたマルチプロセッサシステムにおけるブレークポイント設定テーブルの記載内容を示す図である。
【図１４】特許文献１に記載されたマルチプロセッサシステムにおけるブレークポイント履歴テーブルの記載内容を示す図である。
【図１５】一般的なマルチプロセッサシステムにおける、プログラムの分割とメモリの構成およびアクセス属性を模式的に示す図である。
【発明を実施するための形態】
【００４３】
はじめに、本発明の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００４４】
図１を参照すると、プログラムデバッグ装置（５００）は、コンパイラから出力されたシンボル情報またはセクション情報と、該シンボル情報または該セクション情報に相当するメモリ領域にアクセス可能なプロセッサを示す領域情報とを関連付けて保持する第１の情報テーブル（シンボル情報テーブル４０１またはセクション情報テーブル４０２）と、プロセッサおよびブレークポイントの種類ごとに設定可能な残数を示す残り設定可能数を保持する第２の情報テーブル（ブレークポイント情報テーブル３０２）と、ユーザが設定したブレークポイント設定アドレスを含むシンボル情報またはセクション情報を第１の情報テーブル（４０１または４０２）から抽出し、抽出したシンボル情報またはセクション情報に関連付けられた領域情報が示すプロセッサに対して、第２の情報テーブル（３０２）を参照して設定可能な種類のブレークポイントを設定する振り分け条件用情報収集部（４０３）と、を備えている。
【００４５】
図８を参照すると、領域情報（４０１ｄまたは４０２ｄ）は、複数のプロセッサのうちのいずれか、または、複数のプロセッサのすべてを示す。また、図８上段を参照すると、シンボル情報は、シンボルの識別子（ないし名前）、属性（４０１ａ）、アドレス（４０１ｂ）およびサイズ（４０１ｃ）を示す。一方、図８下段を参照すると、セクション情報は、シンボルの識別子（ないし名前）、オフセット（４０２ａ）、データサイズ（４０２ｂ）およびデータタイプ（４０２ｃ）を示す。
【００４６】
図１０を参照すると、第２の情報テーブル（３０２）は、ブレークポイントの種類として、ハードウェアブレークおよびソフトウェアブレークを含むことが好ましい。
【００４７】
本発明に係るプログラムデバッグ装置によると、マルチプロセッサシステム用のプログラムをデバッグする際、不要なＰＥでのブレークを回避し、リアルタイム性を損なわずにプログラムをデバッグすることができる。
【００４８】
（実施形態）
実施形態に係るプログラムデバッグ装置について、図面を参照して説明する。図１は、本実施形態のプログラムデバッグ装置５００の構成を示すブロック図である。
【００４９】
図１を参照すると、プログラムデバッグ装置５００は、マルチプロセッサシステム７０１と、マルチプロセッサシステム７０１用のプログラムをコンパイルするためのコンパイラ８０１と、コンパイルしたプログラムをデバッグするためのデバッガ部５０１と、プログラムを実行するためのＩＣＥ（Ｉｎ−Ｃｉｒｃｕｉｔ  Ｅｍｕｌａｔｏｒ）６０１とを備えている。
【００５０】
コンパイラ８０１は、ソースコードおよびリンク指示ファイルを入力とする。コンパイラ８０１は、シンボル情報、領域情報およびセクション情報を有し、これらの情報をデバッガ部５０１に渡す。
【００５１】
ＩＣＥ６０１は、ＣＰＵの動作をエミュレーションするデバッグ用のハードウェアである。ＩＣＥ６０１は、デバッガ部５０１からデバッグコマンドが入力されると、マルチプロセッサシステム７０１から情報を入力してデバッグ用の情報を生成してデバッガ部５０１に出力するとともに、マルチプロセッサ７０１の機能を使うためのコマンドを出力する。
【００５２】
マルチプロセッサシステム７０１は、デバッグ対象ハードウェアであり、ＰＥ１、ＰＥ２、Ｉ／Ｏ、メモリ、レジスタ等を搭載している。マルチプロセッサシステム７０１は、ＩＣＥ６０１からのコマンドを入力とし、コマンド実行結果の情報をＩＣＥ６０１に出力する。
【００５３】
デバッガ部５０１は、ＧＵＩ部５０２、実行制御部５０３、ブレークリソース管理部５０４、ブレークポイント設定部５０５、ブレークポイント履歴テーブル２０６、命令退避領域２０７、レジスタ退避領域２０８、および、ブレークポイント振り分け処理部３０１を備えている。
【００５４】
ＧＵＩ部５０２は、デバッガ部５０１の外部装置（非図示）から情報を入力し、表示装置（非図示）に出力する。
【００５５】
実行制御部５０３は、ＩＣＥ６０１と情報の入出力を行い、実行の制御をする。
【００５６】
ブレークリソース管理部５０４は、ブレークポイント振り分け処理部３０１からの要求を入力とし、ＩＣＥ６０１に使用可能なブレークポイントの種類と残り設定可能数の取得コマンドを出力して、取得した情報をブレークポイント情報テーブル３０２に出力する。また、ブレークリソース管理部５０４は、ブレークポイント設定部５０５からの要求を入力とし、ＩＣＥ６０１に使用可能なブレークポイントの種類と残り設定可能数の取得コマンドをブレークポイント設定部５０５に出力する。
【００５７】
ブレークポイント設定部５０５は、ＧＵＩ部５０２、または、ブレークポイント振り分け処理部３０１を介してブレークポイント設定テーブル２０５から、ブレークポイント設定情報を入力とし、ＩＣＥ６０１にブレークポイント設定コマンドを出力することで、ブレークポイントを設定する。
【００５８】
ブレークポイント履歴テーブル２０６には、発生したブレーク要因の履歴が格納される。
【００５９】
命令退避領域２０７は、ブレークポイント発生条件を示す命令がトラップ命令などに置換される場合、元の命令の退避格納領域として使用される。
【００６０】
レジスタ退避領域２０８は、デバッグ対象プログラム２０１の実行が中断され、デバッガプログラム２０２が呼び出されて実行されるときに、各ＣＰＵのレジスタ内容を退避させ、格納しておくための退避格納領域である。
【００６１】
ブレークポイント振り分け処理部３０１は、ブレークポイント設定テーブル２０５、ブレークポイント情報テーブル３０２、振り分け条件テーブル３０３、シンボル情報テーブル４０１、セクション情報テーブル４０２、振り分け条件用情報収集部４０３、ブレークポイント振り分け部４０４、および、コンパイラ情報マージ部４０５を備えている。
【００６２】
ブレークポイント設定テーブル２０５は、振り分け条件用情報収集部４０３からＣＰＵ−ＩＤ２０５ａと有効フラグ２０５ｂの値を入力し、ブレークポイント振り分け部４０４からブレークポイント種類２０５ｄの値を入力し、ユーザからＧＵＩ部５０２を介してブレークポイント設定アドレス２０５ｃの値を入力し、これらのブレークポイント設定情報をブレークポイント設定部５０５へ出力する。
【００６３】
ブレークポイント情報テーブル３０２は、ブレークリソース管理部５０４からブレークポイント種類３０２ａとブレーク使用数（ＰＥ１／ＰＥ２）３０２ｃとブレーク使用数（共用）３０２ｄと使用可能３０２ｅの値を入力し、振り分け条件用情報収集部４０３から残り設定可能数３０２ｂの値を入力し、ブレークポイントの情報をブレークポイント振り分け部４０４へ出力する。
【００６４】
ブレークポイント情報テーブル３０２を初期化する図２の制御フローチャートと、ブレークポイント設定テーブル２０５を作成する図３のフローチャートは、ブレークポイント情報テーブル３０２内に位置する。
【００６５】
振り分け条件テーブル３０３は、振り分け条件用情報収集部４０３から、変数アクセスブレーク３０３ａとブレークポイント設定アドレスが含まれる領域情報３０３ｂの値をそれぞれ入力とし、振り分け条件情報をブレークポイント振り分け部４０４に出力する。
【００６６】
シンボル情報テーブル４０１は、コンパイラ情報マージ部４０５が生成するシンボル情報と領域情報をマージした情報を入力とし、シンボル情報を振り分け条件用情報収集部４０３に出力する。
【００６７】
セクション情報テーブル４０２は、コンパイラ情報マージ部４０５が生成するセクション情報と領域情報をマージした情報を入力とし、シンボル情報を振り分け条件用情報収集部４０３に出力する。
【００６８】
振り分け条件用情報収集部４０３は、ブレークポイント設定アドレス２０５ｃとシンボル情報テーブル４０１とブレークリソース管理部５０４から取得したすべてのブレークポイントの残り設定数の値を入力とし、ＣＰＵ−ＩＤ２０５ａにブレークさせるＣＰＵ−ＩＤの値（“１”もしくは“２”、または、ブレークポイント設定アドレスが共用領域の場合にどのＣＰＵが通ってもブレークするようにすべてのＣＰＵ−ＩＤの値を設定するために“１、２”とする）、有効フラグ２０５ｂにＹＥＳの値、残り設定可能数３０２ｂにブレークリソース管理部５０４から取得したブレークポイントの残り設定数、変数アクセスブレーク３０３ａに“ＹＥＳ”または“ＮＯ”の値、ブレークポイント設定アドレスが含まれる領域情報３０３ｂに“ＰＥ１”、“ＰＥ２”または“共用”の文字列をそれぞれ出力する。
【００６９】
ブレークポイント振り分け部４０４は、残り設定可能数３０２ｂとブレークポイント設定アドレスが含まれる領域情報３０３ｂの値をそれぞれ入力とし、振り分けたブレークポイントの名称をブレークポイント種類２０５ｄに出力する。
【００７０】
コンパイラ情報マージ部４０５は、コンパイラ８０１から出力されるシンボル情報と領域情報（ＰＥ１、ＰＥ２、または、共用）とセクション情報をそれぞれ入力とし、入力情報のシンボル情報と領域情報をマージしてシンボル情報テーブル４０１を生成し、セクション情報と領域情報をマージしてセクション情報テーブル４０２を生成する。
【００７１】
図８（ａ）、図８（ｂ）は、コンパイラ情報マージ部４０５によって生成されるテーブルを示す。
【００７２】
図８（ａ）は、コンパイラ情報マージ部４０５が生成するシンボル情報テーブル４０１であり、シンボルの名前とシンボルの属性４０１ａとシンボルのアドレス４０１ｂとサイズ４０１ｃとプロセッサの領域情報４０１ｄとを１組として、シンボルの数分を有する。コンパイラにより、他の情報を追加することもできる。
【００７３】
図８（ｂ）は、コンパイラ情報マージ部４０５が生成するセクション情報テーブル４０２であり、シンボルの名前とシンボルのオフセット４０２ａとデータサイズ４０２ｂとデータタイプ４０２ｃとプロセッサの領域情報４０２ｄとを１組として、セクションの数分を有する。コンパイラにより、他の情報を追加することもできる。
【００７４】
図８（ａ）、図８（ｂ）の領域情報４０１ｄ、４０２ｄは、ブレークポイント設定アドレスがＰＥ１、ＰＥ２、共用のどの領域に含まれるかを調べるための情報である。
【００７５】
図９は、ブレークポイント設定テーブル２０５を示す。
【００７６】
ブレークポイント設定テーブル２０５は、ブレークさせたいＣＰＵのＩＤ番号を表すＣＰＵ−ＩＤ２０５ａと、ブレークポイント設定部５０５でブレークを設定するか否かを表す有効フラグ２０５ｂと、ブレークポイントを設定するアドレスを表すブレークポイント設定アドレス２０５ｃと、どのブレークポイントを使用するかを表すブレークポイント種類２０５ｄとを１組として、ユーザのブレークポイント設定要求の数分を有する。
【００７７】
図１０は、ブレークポイント情報テーブル３０２を示す。
【００７８】
ブレークポイント情報テーブル３０２は、ブレークポイントの名称を表すブレークポイント種類３０２ａと、残りいくつのブレークポイントを設定できるかを表す残り設定可能数３０２ｂと、ＰＥ１領域またはＰＥ２領域にいくつブレークポイントを設定すればＰＥ１またはＰＥ２がブレークするかを表すブレーク使用数（ＰＥ１／ＰＥ２）３０２ｃと、共用領域にいくつブレークポイントを設定すればＰＥ１またはＰＥ２が必ずブレークするかを表すブレーク使用数（共用）３０２ｄと、デバッガ部５０１でサポートされており、デバッグに使用可能か否かを表す使用可能３０２ｅとを１組として、設定したブレークの数分を有する。
【００７９】
ブレークポイント種類３０２ａと残り設定可能数３０２ｂとブレーク使用数（ＰＥ１／ＰＥ２）３０２ｃとブレーク使用数（共用）３０２ｄは、デバッグシステムに依存する。
【００８０】
ブレーク使用数（共用）３０２ｄは、すべてのＣＰＵでブレークさせる必要があるため、拡張ソフトウェアブレーク以外はＣＰＵの数だけ消費する。
【００８１】
使用可能３０２ｅは、ブレークポイント種類３０２ａのブレーク機能が、現在のデバッグシステムで使える場合にはＹＥＳ、使えない場合にはＮＯになる。
【００８２】
図１１は、振り分け条件テーブル３０３である。
【００８３】
振り分け条件テーブル３０３は、どのブレークポイントを優先して使用するかを判断するための情報であり、設定するブレーク機能が変数へのアクセスブレークであるかをチェックした結果を設定する変数アクセスブレーク３０３ａと、ブレーク設定アドレスがどの領域に含まれるかをチェックした結果を設定するブレークポイント設定アドレスが含まれる領域情報３０３ｂとを有する。
【００８４】
図２は、ユーザがデバッグ作業を開始した直後に、デバッガ部５０１の初期化処理の中で呼ばれる、ブレークポイント情報テーブル３０２の初期化の制御フローチャートである。図３は、ユーザがデバッグ作業中にブレークポイントを設定する際にブレークポイント設定部５０５から呼ばれる、作業を開始する際のブレークポイント設定テーブル作成処理の制御フローチャートである。図２および図３を参照して、図１に示したプログラムデバッグ装置の動作を説明する。
【００８５】
図２は、ブレークポイント情報テーブル３０２の初期化の制御フローチャートである。
【００８６】
ブレークポイント振り分け処理部３０１は、ブレークリソース管理部５０４から、ブレークポイント種類３０２ａ、ブレーク使用数（ＰＥ１／ＰＥ２）３０２ｃ、ブレーク使用数（共用）３０２ｄ、および、使用可能３０２ｅの値を取得し、ブレークポイント情報テーブル３０２に情報を設定する（ステップＳ１００）。
【００８７】
図３は、ブレークポイント設定テーブル２０５の作成処理の制御フローチャートである。
【００８８】
ブレークポイント振り分け処理部３０１は、ブレークポイント設定テーブル２０５に新しい行を追加する（ステップＳ２００）。
【００８９】
ユーザは、ＧＵＩ部５０２を介して、ブレークポイントを設定するアドレスをブレークポイント設定アドレス２０５ｃに設定する（ステップＳ２０１）。
【００９０】
振り分け条件用情報収集部４０３は、ブレークポイントを振り分けるための判断材料となる情報を、作成または収集して取得するために、図４に示す関数を実行する（ステップＳ２０２）。
【００９１】
ブレークポイント振り分け部４０４は、ステップＳ２０２で取得した情報を元にブレークポイントを振り分けるために、図５〜７に示す関数を実行する（ステップＳ２０３）。
【００９２】
ブレークポイント振り分け処理部３０１は、ＧＵＩ部５０２を介してユーザにブレークポイントを他にも設定するかを問い合わせ（ステップＳ２０４）、ユーザが他のブレークポイントを設定する場合には（ステップＳ２０４のＹＥＳ）、ステップＳ２００へ進み、ユーザが他のブレークポイントを設定しない場合には（ステップＳ２０４のＮＯ）、初期化フローチャートを終了する。
【００９３】
図４は、振り分け条件用情報収集部４０３の制御フローチャートである。
【００９４】
振り分け条件用情報収集部４０３は、シンボル情報テーブル４０１の一番上のフィールド（行）を取得する（ステップＳ３００）。
【００９５】
振り分け条件用情報収集部４０３は、フィールドの中身を調べ（ステップＳ３０１）、フィールドがなければ（ステップＳ３０１のＹＥＳ）、ブレークポイント設定アドレス２０５ｃが含まれるシンボル情報が見つからなかったのでステップＳ３０２に進み、フィールドがあれば（ステップＳ３０１のＮＯ）、ステップＳ３０５に進む。
【００９６】
ブレークポイント設定アドレス２０５ｃが含まれるシンボル情報が見つからなかったということは、アクセスブレークを設定すべき変数がみつからないことを意味し、変数へのアクセスブレークではないので、振り分け条件用情報収集部４０３は、変数アクセスブレーク３０３ａをＮＯに設定する（ステップＳ３０２）。
【００９７】
ブレークポイント設定アドレス２０５ｃが含まれるシンボル情報が見つからなかった場合には、どのブレークポイントを設定するべきかを判断することができないため、ＰＥ１でもＰＥ２でもブレークするブレーク機能を選ぶ必要がある。したがって、振り分け条件用情報収集部４０３は、ブレークポイント設定アドレスが含まれる領域情報３０３ｂを共用に設定する（ステップＳ３０３）。
【００９８】
ブレークポイント設定アドレス２０５ｃが含まれるシンボル情報が見つからなかった場合には、どのＣＰＵにブレークポイントを設定するべきかを判断できないため、ＣＰＵ１でもＣＰＵ２でも対象とする。したがって、振り分け条件用情報収集部４０３は、ＣＰＵ−ＩＤ２０５ａに、ＣＰＵ１を示す１とＣＰＵ２を示す２との両方を表す、１と２を設定する（ステップＳ３０４）。
【００９９】
振り分け条件用情報収集部４０３は、ブレークポイント設定アドレス２０５ｃがフィールド（行）のアドレス４０１ｂ〜（アドレス４０１ｂ＋サイズ４０１ｃ）内に含まれているかを判断し（ステップＳ３０５）、領域内に含まれる場合には（ステップＳ３０５のＹＥＳ）、ステップＳ３０７に進み、領域内に含まれない場合には（ステップＳ３０５のＮＯ）、ステップＳ３０６に進む。
【０１００】
振り分け条件用情報収集部４０３は、次のフィールド（行）を取得し（ステップＳ３０６）、ステップＳ３０１に戻り、処理を繰り返し実行する。
【０１０１】
振り分け条件用情報収集部４０３は、フィールド（行）の属性４０１ａが変数かを判断し（ステップＳ３０７）、変数ならば（ステップＳ３０７のＹＥＳ）、変数アクセスブレーク３０３ａをＹＥＳに設定して（ステップＳ３０８）、ステップＳ３１０に進み、変数でなければ（ステップＳ３０７のＮＯ）、変数アクセスブレーク３０３ａをＮＯに設定して（ステップＳ３０９）、ステップＳ３１０に進む。
【０１０２】
振り分け条件用情報収集部４０３は、フィールド（行）の領域情報４０１ｄがＰＥ１かを判断し（ステップＳ３１０）、ＰＥ１ならば（ステップＳ３１０のＹＥＳ）、ステップＳ３１１に進み、ＰＥ２か共用であれば（ステップＳ３１０のＮＯ）、ステップＳ３１３に進む。
【０１０３】
振り分け条件用情報収集部４０３は、ブレークポイント設定アドレスが含まれる領域情報３０３ｂをＰＥ１に設定する（ステップＳ３１１）。また、振り分け条件用情報収集部４０３は、ＣＰＵ−ＩＤ２０５ａに１を設定する（ステップＳ３１２）。
【０１０４】
振り分け条件用情報収集部４０３は、フィールド（行）の領域情報４０１ｄがＰＥ２かを判断し（ステップＳ３１３）、ＰＥ２ならば（ステップＳ３１３のＹＥＳ，）ステップＳ３１４に進み、共用であれば（ステップＳ３１３のＮＯ）、ステップＳ３１６に進む。
【０１０５】
振り分け条件用情報収集部４０３は、ブレークポイント設定アドレスが含まれる領域情報３０３ｂをＰＥ２に設定する（ステップＳ３１４）。また、振り分け条件用情報収集部４０３は、ＣＰＵ−ＩＤ２０５ａに２を設定する（ステップＳ３１５）。
【０１０６】
振り分け条件用情報収集部４０３は、ブレークポイント設定アドレスが含まれる領域情報３０３ｂを共用に設定する（ステップＳ３１６）。また、振り分け条件用情報収集部４０３は、ＣＰＵ−ＩＤ２０５ａに１と２を設定する（ステップＳ３１７）。
【０１０７】
振り分け条件用情報収集部４０３は、有効フラグ２０５ｂをＹＥＳに設定する（ステップＳ３１８）。
【０１０８】
振り分け条件用情報収集部４０３は、ブレークリソース管理部５０４からすべてのブレークポイントの残り設定数を取得する（ステップＳ３１９）。振り分け条件用情報収集部４０３は、取得したブレークポイントの残り設定数を残り設定可能数３０２ｂにすべて設定する（ステップＳ３２０）。
【０１０９】
図５は、ブレークポイント振り分け部４０４の制御フローチャートである。
【０１１０】
ブレークポイント振り分け部４０４は、変数アクセスブレーク３０３ａの設定が変数アクセスブレークかを判断し（ステップＳ４００）、変数アクセスブレークであれば（ステップＳ４００のＹＥＳ）、ステップＳ４０１に進み、変数アクセスブレークでなければ（ステップＳ４００のＮＯ）、ステップＳ４０２に進む。
【０１１１】
変数アクセスブレークの場合（ステップＳ４００のＹＥＳ）、変数アクセスブレーク用振り分けフローチャートを実行する（ステップＳ４０１）。
【０１１２】
一方、変数アクセスブレークでない場合（ステップＳ４００のＮＯ）、関数ブレーク用振り分けフローチャートを実行する（ステップＳ４０２）。
【０１１３】
図６は、関数ブレーク用ブレークポイント振り分け（図５のステップＳ４０２）の制御フローチャートである。
【０１１４】
ブレークポイント振り分け部４０４は、ブレークポイント設定アドレスが含まれる領域情報３０３ｂに共用が設定されているか判断し（ステップＳ５００）、共用であれば（ステップＳ５００のＹＥＳ）、ステップＳ５０１に進み、ＰＥ１またはＰＥ２であれば（ステップＳ５００のＮＯ）、ステップＳ５０２に進む。
【０１１５】
ブレークポイント振り分け部４０４は、ブレーク使用数（共用）３０２ｄが最小のブレークポイントをブレークポイント種類２０５ｄに設定し（ステップＳ５０１）、処理を終了する。
【０１１６】
ブレークポイント振り分け部４０４は、ブレークポイント設定アドレスが含まれる領域情報３０３ｂにＰＥ１が設定されているか判断し（ステップＳ５０２）、ＰＥ１であれば（ステップＳ５０２のＹＥＳ）、ステップＳ５０８に進み、ＰＥ２であれば（ステップＳ５０２のＮＯ）、ステップＳ５０３に進む。
【０１１７】
ブレークポイント振り分け部４０４は、ＣＰＵ２に内蔵されているハードウェアブレーク機能（以下、「ＣＰＵ２コア内蔵ハードウェアブレーク」という。）とＰＥ２に内蔵されている拡張ハードウェアブレーク（以下、「ＰＥ２拡張ハードウェアブレーク」という。）の残り設定可能数３０２ｂがそれぞれ０であるかを判断し（ステップＳ５０３）、０であれば（ステップＳ５０３のＹＥＳ）、ステップＳ５０４に進み、０以外であれば（ステップＳ５０３のＮＯ）、ステップＳ５０５に進む。
【０１１８】
ブレークポイント振り分け部４０４は、ＣＰＵ２に内蔵されているソフトウェアブレーク機能（以下、「ＣＰＵ２コア内蔵ソフトウェアブレーク」という。）を振り分けたブレーク機能であるとし、“ＣＰＵ２コア内蔵ソフトウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ５０４）、処理を終了する。
【０１１９】
ブレークポイント振り分け部４０４は、ＣＰＵ２コア内蔵ハードウェアブレークとＰＥ２拡張ハードウェアブレークとの間で、残り設定可能数３０２ｂの大小を比較し（ステップＳ５０５）、ＣＰＵ２コア内蔵ハードウェアブレークの方が大きいか等しい場合には（ステップＳ５０５のＹＥＳ）、ステップＳ５０７に進み、小さい場合には（ステップＳ５０５のＮＯ）、ステップＳ５０６に進む。
【０１２０】
ブレークポイント振り分け部４０４は、ＰＥ２拡張ハードウェアブレークを振り分けたブレーク機能であるとし、“ＰＥ２拡張ハードウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ５０６）、処理を終了する。
【０１２１】
ブレークポイント振り分け部４０４は、ＣＰＵ２コア内蔵ハードウェアブレークを振り分けたブレーク機能であるとし、“ＣＰＵ２コア内蔵ハードウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ５０７）、処理を終了する。
【０１２２】
ブレークポイント振り分け部４０４は、ＣＰＵ１に内蔵されているハードウェアブレーク機能（以下、「ＣＰＵ１コア内蔵ハードウェアブレーク」という。）とＰＥ１に内蔵されている拡張ハードウェアブレーク（以下、「ＰＥ１拡張ハードウェアブレークという。）の残り設定可能数３０２ｂがそれぞれ０かを判断し（ステップＳ５０８）、０であれば（ステップＳ５０８のＹＥＳ）、ステップＳ５０９に進み、０以外であれば（ステップＳ５０８のＮＯ）、ステップＳ５１０に進む。
【０１２３】
ブレークポイント振り分け部４０４は、ＣＰＵ１に内蔵されているソフトウェアブレーク機能（以下、「ＣＰＵ１コア内蔵ソフトウェアブレーク」という。）を振り分けたブレーク機能であるとし、“ＣＰＵ１コア内蔵ソフトウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ５０９）、処理を終了する。
【０１２４】
ブレークポイント振り分け部４０４は、ＣＰＵ１コア内蔵ハードウェアブレークとＰＥ１拡張ハードウェアブレークの残り設定可能数３０２ｂの大小を比較し（ステップＳ５１０）、ＣＰＵ１コア内蔵ハードウェアブレークが大きいか等しい場合には（ステップＳ５１０のＹＥＳ）、ステップＳ５１２に進み、小さい場合には（ステップＳ５１０のＮＯ）、ステップＳ５１１に進む。
【０１２５】
ブレークポイント振り分け部４０４は、ＰＥ１拡張ハードウェアブレークを振り分けたブレーク機能であるとし、“ＰＥ１拡張ハードウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ５１１）、処理を終了する。
【０１２６】
ブレークポイント振り分け部４０４は、ＣＰＵ１コア内蔵ハードウェアブレークを振り分けたブレーク機能であるとし、“ＣＰＵ１コア内蔵ハードウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ５１２）、処理を終了する。
【０１２７】
図７は、変数ブレーク用ブレークポイント振り分け（図５のステップＳ４０１）の制御フローチャートである。
【０１２８】
ブレークポイント振り分け部４０４は、ブレークポイント設定アドレスが含まれる領域情報３０３ｂの内容が共用かを判断し（ステップＳ６００）、共用であれば（ステップＳ６００のＹＥＳ）、ステップＳ６０１に進み、ＰＥ１かＰＥ２であれば（ステップＳ６００のＮＯ）、ステップＳ６０２に進む。
【０１２９】
ブレークポイント振り分け部４０４は、ブレーク使用数（共用）３０２ｄが最小のブレークポイントを選び出し、ブレークポイント種類２０５ｄに設定する（ステップＳ６０１）。
【０１３０】
ブレークポイント振り分け部４０４は、ブレークポイント設定アドレスが含まれる領域情報３０３ｂの内容がＰＥ１かを判断し（ステップＳ６０２）、ＰＥ１であれば（ステップＳ６０２のＹＥＳ）、ステップＳ６０６に進み、ＰＥ２であれば（ステップＳ６０２のＮＯ）、ステップＳ６０３に進む。
【０１３１】
ブレークポイント振り分け部４０４は、ＣＰＵ２コア内蔵ハードウェアブレークとＰＥ２拡張ハードウェアブレークとの間で、残り設定可能数３０２ｂの大小を比較し（ステップＳ６０３）、ＣＰＵ２コア内蔵ハードウェアブレークが大きいか等しい場合には（ステップ６０３のＹＥＳ）、ステップＳ６０５に進み、小さい場合には（ステップＳ６０３のＮＯ）、ステップＳ６０４に進む。
【０１３２】
ブレークポイント振り分け部４０４は、ＰＥ２拡張ハードウェアブレークを振り分けたブレーク機能であるとし、“ＰＥ２拡張ハードウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ６０４）、処理を終了する。
【０１３３】
ブレークポイント振り分け部４０４は、ＣＰＵ２コア内蔵ハードウェアブレークを振り分けたブレーク機能であるとし、“ＣＰＵ２コア内蔵ハードウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ６０５）、処理を終了する。
【０１３４】
ブレークポイント振り分け部４０４は、ＣＰＵ１コア内蔵ハードウェアブレークとＰＥ１拡張ハードウェアブレークの残り設定可能数３０２ｂの大小を比較し（ステップＳ６０６）、ＣＰＵ１コア内蔵ハードウェアブレークが大きいか等しい場合には（ステップＳ６０６のＹＥＳ）、ステップＳ６０８に進み、小さい場合には（ステップＳ６０６のＮＯ）、ステップＳ６０７に進む。
【０１３５】
ブレークポイント振り分け部４０４は、ＰＥ１拡張ハードウェアブレークを振り分けたブレーク機能であるとし、“ＰＥ１拡張ハードウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ６０７）、処理を終了する。
【０１３６】
ブレークポイント振り分け部４０４は、ＣＰＵ１コア内蔵ハードウェアブレークを振り分けたブレーク機能であるとし、“ＣＰＵ１コア内蔵ハードウェアブレーク”という文字列をブレークポイント種類２０５ｄに設定し（ステップＳ６０８）、処理を終了する。
【０１３７】
本実施形態においては、図８上段に示したシンボル情報テーブル４０１を用いて、図４の振り分け条件用情報収集部４０３内のステップＳ３０５とステップＳ３０７の条件分岐の判断を行った。一方、図８下段に示したセクション情報テーブル４０２を使用することも可能である。
【０１３８】
コンパイラ情報マージ部４０５より生成される図８の情報テーブルと、図１０のブレークポイント情報テーブルを参照して、図２〜図７の動作を説明する。説明において、ブレークポイントを０ｘ３０１０（１６進数）番地に設定する。
【０１３９】
ブレークポイント振り分け処理部３０１は、図２のブレークポイント情報テーブル３０２の作成処理を実行し、ブレークリソース管理部５０４から、ブレークポイント種類３０２ａ、ブレーク使用数（ＰＥ１／ＰＥ２）３０２ｃ、ブレーク使用数（共用）３０２ｄ、および、使用可能３０２ｅの値を取得し、図１０のブレークポイント情報テーブル３０２に情報を設定する。
【０１４０】
次に、ブレークポイント振り分け処理部３０１は、図３のブレークポイント設定テーブル作成処理の制御フローチャートを実行し、０ｘ３０１０番地に設定するのに最適なブレーク機能を、ブレークポイント種類３０２ａの中から選択して、ブレークポイント種類２０５ｄに文字列として設定する。
【０１４１】
まず、ユーザは、ＧＵＩ部５０２を介して、ブレークポイント設定アドレス２０５ｃに０ｘ３０１０を設定する。
【０１４２】
次に、ブレークポイント振り分け処理部３０１は、振り分け条件用情報収集部４０３を実行する。ブレークポイント振り分け処理部３０１は、シンボル情報テーブル４０１のあるフィールド（行）において、名前が“Ｆｕｎｃ１”、属性４０１ａが“関数”、アドレス４０１ｂが“０ｘ３０００”、サイズ４０１ｃが“０ｘ３００”、領域情報４０１ｄが“ＰＥ１”である場合、ブレークポイント設定アドレス０ｘ３０１０は、関数Ｆｕｎｃ１内にあるため、変数アクセスブレーク３０３ａはＮＯとなり、ブレークポイント設定アドレスが含まれる領域情報３０３ｂにＰＥ１が設定される。
【０１４３】
次に、ブレークポイント振り分け処理部３０１は、ブレークポイント振り分け部４０４を実行すると、変数アクセスブレーク３０３ａがＮＯであるため（図５のステップＳ４００のＮＯ）、図６に示す関数ブレーク用振り分け関数処理に分岐し、ブレークポイント設定アドレスが含まれる領域情報３０３ｂがＰＥ１であるため（図６のステップＳ５００のＮＯ、ステップＳ５０２のＹＥＳ）、ＰＥ２拡張ハードウェアブレークとＣＰＵ２コア内蔵ハードウェアブレークとＣＰＵ２コア内蔵ソフトウェアブレークは使用しない。ＣＰＵ１コア内蔵ハードウェアブレークとＰＥ１拡張ハードウェアブレークの残り設定可能数３０２ｂをそれぞれ“４”、“６”とすると、０でないことから（図６のステップＳ５０８のＮＯ）、ＣＰＵ１コア内蔵ソフトウェアブレークは使用しない。
【０１４４】
ＰＥ１拡張ハードウェアブレークは、ＣＰＵ１コア内蔵ハードウェアブレークよりも、残り設定可能数３０２ｂが大きいため（ステップＳ５１０のＮＯ）、ＰＥ１拡張ハードウェアブレークに振り分ける。
【０１４５】
この結果、ＰＥ１拡張ハードウェアブレークがブレークポイント種類２０５ｄに設定され（ステップＳ５１１）、振り分けられたブレーク機能となる。
【０１４６】
本実施形態のプログラムデバッグ装置（５００）は、特定の条件等でプログラムを停止（ブレーク）させマルチプロセッサシステムの検証をするプログラムデバッグ装置であって、マルチプロセッサシステム上で実行するプログラム開発時に、コンパイラが出力する複数の情報をマージして情報テーブル（４０１または４０２）を生成するコンパイラ情報マージ部（４０５）と、ブレーク条件が設定可能かを判断するため、情報テーブル（４０１または４０２）等より情報を収集してブレークポイント情報テーブル（３０２）を作成または追加する振り分け条件用情報収集部（４０３）と、それぞれの情報テーブルの情報を元に、ブレークポイント設定テーブル（２０５）に設定するブレーク条件の振り分けを行なうブレークポイント振り分け部（４０４）と、を備えブレーク条件を設定する際に、前記情報テーブルより領域等を判断して、ブレークポイント情報テーブル（３０２）から各プロセッサのブレーク設定状態を判断して、設定可能な条件を前記ブレークポイント設定テーブルに設定する。
【０１４７】
このように、本実施形態では、ブレークポイント振り分け処理部３０１においてブレークポイントを振り分けることにより、不要なＰＥでのブレークを回避し、リアルタイム性を損なわずにプログラムのデバッグをすることができる。
【０１４８】
なお、上記の特許文献等の先行技術文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１４９】
１０２    メインＣＰＵ（プロセッサ）
１０３ａ〜１０３ｄ    サブＣＰＵ（プロセッサ）
１０４    デバッガ制御部
１０５    デバッガ端末
１０６    共有メモリ
１０８    共有バス
１０９    制御信号
２０１    デバッグ対象プログラム
２０２    デバッガプログラム
２０３    デバッガインタフェース
２０４    コマンドインタフェース
２０５、２１５    ブレークポイント設定テーブル
２０６    ブレークポイント履歴テーブル
２０７    命令退避領域
２０８    レジスタ退避領域
３０１    ブレークポイント振り分け処理部
３０２    ブレークポイント情報テーブル
３０３    振り分け条件テーブル
４０１    シンボル情報テーブル
４０２    セクション情報テーブル
４０３    振り分け条件用情報収集部
４０４    ブレークポイント振り分け部
４０５    コンパイラ情報マージ部
５００    プログラムデバッグ装置
５０１    デバッガ部
５０２    ＧＵＩ部
５０３    実効制御部
５０４    ブレークリソース管理部
５０５    ブレークポイント設定部
６０１    ＩＣＥ
７０１    マルチプロセッサシステム
８０１    コンパイラ
【図１】
2012216134.tif 000003
【図２】
2012216134.tif 000004
【図３】
2012216134.tif 000005
【図４】
2012216134.tif 000006
【図５】
2012216134.tif 000007
【図６】
2012216134.tif 000008
【図７】
2012216134.tif 000009
【図８】
2012216134.tif 000010
【図９】
2012216134.tif 000011
【図１０】
2012216134.tif 000012
【図１１】
2012216134.tif 000013
【図１２】
2012216134.tif 000014
【図１３】
2012216134.tif 000015
【図１４】
2012216134.tif 000016
【図１５】
2012216134.tif 000017