コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成する第1の生成部と、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成する第2の生成部とを含むことを特徴とするコンパイル装置。前記第1の生成部は、前記実行プログラムの生成に先立って、前記ソースプログラムを解析することにより、前記構造化データを生成することを特徴とする請求項1に記載のコンパイル装置。前記出力指示は、予め定められたコンパイル装置において実行される命令であって、前記予め定められたコンパイル装置以外のコンパイル装置においてはエラーを発生せずかつ実行されない命令であることを特徴とする請求項1に記載のコンパイル装置。前記出力指示は、前記ソースプログラムにおいて、デバッグ対象である文又は式を指定する位置であって前記文又は式に対して予め定められた関係にある位置、デバッグ対象である関数を指定する位置であって前記関数に対して予め定められた関係にある位置、又は、デバッグ対象である外部変数又は静的変数を指定する位置であって前記外部変数又は静的変数に対して予め定められた関係にある位置に含まれることを特徴とする請求項1に記載のコンパイル装置。ソースプログラムをコンパイル処理することにより実行プログラムを生成するコンパイル装置と、前記実行プログラムを実行する実行装置とを含む情報処理システムであって、前記コンパイル装置は、コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成する第1の生成部と、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成する第2の生成部とを含み、前記実行装置は、前記実行プログラムを実行することにより、前記実行プログラムの実行結果と、前記デバッグ情報出力命令を実行することにより得られる前記実行プログラムのデバッグ情報とを生成することを特徴とする情報処理システム。コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成し、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成することを特徴とするコンパイル方法。ソースプログラムをコンパイル処理することにより実行プログラムを生成するコンパイルプログラムであって、前記コンパイルプログラムは、コンピュータに、コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成する第1の生成処理と、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成する第2の生成処理とを実行させることを特徴とするコンパイルプログラム。ソースプログラムをコンパイル処理することにより実行プログラムを生成するコンパイルプログラムを記録する記録媒体であって、前記コンパイルプログラムは、コンピュータに、コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成する第1の生成処理と、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成する第2の生成処理とを実行させることを特徴とする記録媒体。デバッガによるデバッグは、関数での中断、ステップ実行、変数の値の表示や値の変更等を実行する、フルセットのデバッグである。このため、デバッグに不要な箇所のデバッグ情報も含んだ実行プログラムが必要であり、また、GDB等の外部ツールが必要不可欠である。また、デバッグ対象プログラムが大規模プログラム、長時間プログラム又は高並列プログラムである場合、ユーザの負担が大き過ぎて、対話型でのデバッグには限界がある。また、メモリリークやメモリアクセスエラー等の検出ツール等によるデバッグは、メモリに関するエラー検出を主たる目的とする。このため、エラー検出ツールのライブラリを実行プログラムに結合する必要がある。また、実行性能の問題から、デバッグに使用した実行プログラムを、そのまま実行装置であるコンピュータにおいて実際に運用することはできない。このため、デバッグに使用した実行プログラムとは別に、実際に運用する実行プログラムを生成する必要がある。また、デバッグ用コードによるデバッグにおいては、ユーザ自身が、実行プログラムのデバッグしたい箇所にデバッグ用コードを組込む。このため、デバッグ用コードをコーディングするユーザの負担が極めて大きい。例えば、ユーザが出力したい変数の値、ファイル名、関数名、行番号等を、ユーザ自身が、デバッグ対象のソースプログラムを分析して抽出し、変数の値等をコーディングの際に具体的に記述する必要がある。また、デバッグ用コードを含んだ実行プログラムを、そのまま実際に実行装置であるコンピュータにおいて運用することはできない。このため、デバッグに使用した実行プログラムとは別に、実際に運用する実行プログラムを生成する必要がある。又は、デバッグ用コードを含んだ実際に運用する実行プログラムにおいて、ユーザが、実行時オプションや環境変数等により、デバッグ用コードの実行を制御する必要がある。本発明の一側面として、デバッグ用コードの付加による負荷の増大を抑制することを目的とする。開示されるコンパイル装置は、一側面によれば、第1の生成部と、第2の生成部とを含む。第1の生成部は、コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、ソースプログラムの構造を表す構造化データに基づいて、出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成する。第2の生成部は、ソースプログラムのコンパイル処理結果として、実行プログラムの実行可否を判定する命令を含む実行プログラムを生成する。開示されるコンパイル装置の一側面によれば、デバッグコードの付加による負荷の増大を抑制することができる。図1は、コンパイル装置を含む情報処理システムの一例を示す図である。情報処理システムは、生成装置1と、コンパイル装置3と、実行装置5とを含む。生成装置1は、ユーザがコンパイル処理対象のソースプログラム2を生成するコンピュータである。コンパイル装置3は、ソースプログラム2をコンパイル処理することにより、実行プログラム4を生成するコンピュータである。実行プログラム4は、ソースプログラム2の実行形式のプログラムである。実行装置5は、実行プログラム4を実行することにより、プログラム実行結果出力6を得るコンピュータである。プログラム実行結果出力6は、実行プログラム4を実行した結果である。生成装置1は、例えばネットワークを介して、生成したソースプログラム2をコンパイル装置3に送信する。コンパイル装置3は、受信したソースプログラム2を記憶装置に格納し、格納したソースプログラム2を読み出してコンパイル処理して、実行プログラム4を生成する。コンパイル装置3は、生成した実行プログラム4を記憶装置に格納し、格納した実行プログラム4を読み出して、例えばネットワークを介して、読み出した実行プログラム4を実行装置5に送信する。実行装置5は、受信した実行プログラム4を記憶装置に格納し、格納した実行プログラム4を読み出して実行する。コンパイル装置3は、コンパイラ31と、リンカ38と、ライブラリ39とを含む。コンパイラ31は、構文意味解析部32と、最適化部35と、コード生成部36とを含む。コンパイラ31は、ソースプログラム2に基づいて、構造化データ33と、中間プログラム34と、オブジェクトプログラム37とを生成する。コンパイル装置3のコンパイラ31において、構文意味解析部32は、ソースプログラム2を記憶装置から読み出し、中間プログラム34の生成に先立って、ソースプログラム2を解析することにより、構造化データ33を生成する。具体的には、構文意味解析部32は、ソースプログラム2についての構文解析処理及び意味解析処理を実行することにより、構造化データ33を生成する。構造化データ33は、コンパイル装置3以外のコンピュータにより生成されて、コンパイル装置3に入力されるようにしても良い。構造化データ33は、記憶装置に格納される。ユーザにより作成されたソースプログラム2は、例えば、コーディング入力された複数のソースコードと、1又は複数の組込みデバッグ指示行21とを含む。組込みデバッグ指示行21は、デバッグ情報の出力指示である。具体的には、組込みデバッグ指示行21は、ユーザによって記述されることでソースプログラム2に組込まれたコードであって、デバッグ情報の収集及び出力を指示するコードである。組込みデバッグ指示行21は、ソースコードとは異なるコードであり、ソースコードとしては通常用いられないコードであって、予め定められる。デバッグ情報の収集及び出力は、実際には、実行プログラム4を実行する実行装置5に対して指示される。換言すれば、実際のデバッグ情報の収集及び出力は、実行装置5が実行プログラム4を実行することにより実行される。構文意味解析部32は、ソースプログラム2を解析することにより、中間プログラム34を生成する第1の生成部である。具体的には、構文意味解析部32は、ソースプログラム2についての構文解析処理及び意味解析処理を実行することにより、中間プログラム34を生成する。中間プログラム34は中間コードで記述される。従って、構文意味解析部32は、中間コードを生成するコード生成処理を実行するコード生成部を含む。中間プログラム34は、記憶装置に格納される。中間プログラム34は、ソースプログラム2から生成されるプログラムであると言う観点からは、実行プログラムの一形態であると考えることもできる。なお、実際には、1回の構文解析処理及び意味解析処理により、構造化データ33及び中間プログラム34が生成される。換言すれば、構造化データ33が構文解析処理に基づいて生成されるようにしても良い。中間プログラム34の生成において、構文意味解析部32は、ソースプログラム2に組込みデバッグ指示行21が含まれる場合に、組込みデバッグ指示行21に対応するデバッグ情報出力命令341を含む中間プログラム34を生成する。デバッグ情報出力命令341は、ソースプログラム2の構造を表す構造化データ33に基づいて、組込みデバッグ指示行21が指示する出力対象であるプログラム要素、換言すれば、組込みデバッグ指示行21が指示するプログラム要素を解析することにより生成される。デバッグ情報出力命令341は、デバッグ情報を出力させる命令であり、中間コードで記述される。プログラム要素は、例えば、後述するように、デバッグ対象である文又は式、デバッグ対象である文又は式において使用されている変数又は関数、デバッグ対象である関数、デバッグ対象である関数における仮引数、デバッグ対象である外部変数又は静的変数等である。最適化部35は、中間プログラム34を最適化処理して、最適化処理により得られた最適化された中間プログラム34を、コード生成部36に渡す。中間プログラム34がデバッグ情報出力命令341を含む場合、デバッグ情報出力命令341も最適化される。コード生成部36は、最適化された中間プログラム34に基づいてオブジェクトコードを生成することにより、オブジェクトプログラム37を生成する。オブジェクトプログラム37はオブジェクトコードで記述される。中間プログラム34がデバッグ情報出力命令341を含む場合、オブジェクトプログラム37は、デバッグ情報出力命令371を含む。デバッグ情報出力命令371は、デバッグ情報を出力させる命令であり、最適化されたデバッグ情報出力命令341に基づいて生成される。リンカ38は、オブジェクトプログラム37と、オブジェクトプログラム37において指定されたライブラリ39とをリンクすることにより、実行プログラム4を生成する。実行プログラム4は、実行可能なコードで記述された実行形式のプログラムである。オブジェクトプログラム37がデバッグ情報出力命令371を含む場合、実行プログラム4は、デバッグ情報出力命令41を含む。デバッグ情報出力命令41は、デバッグ情報出力命令371に基づいて生成される。換言すれば、ソースプログラム2が組込みデバッグ指示行21を含む場合、実行プログラム4は、組込みデバッグ指示行21に基づいて生成されたデバッグ情報出力命令41を含む。デバッグ情報出力命令41は、デバッグ情報の収集及び出力を指示する命令であるが、デバッガで実行されることはなく、実行装置5において実行される。換言すれば、デバッグ情報出力命令41は、実行装置5に対して、デバッグ情報の収集及び出力、換言すれば、デバッグ及びデバッグ結果の出力を指示する命令である。組込みデバッグ指示行21は、デバッグ情報出力命令41、換言すれば、実行装置5に対するデバッグ情報の収集及び出力を指示する命令を生成する命令である。また、デバッグ情報出力命令41の実行により、デバッグ及びデバッグ結果が出力される。出力されたデバッグ及びデバッグ結果に基づいて、実行プログラムが実際に実行可能なものか否かが判定される。従って、デバッグ情報出力命令41は、実行プログラムの実行可否を判定する命令であると言うことができる。以上のように、デバッグ情報出力命令41を含む実行プログラム4が、中間プログラム34から生成される。換言すれば、最適化部35、コード生成部36、リンカ38が、中間プログラム34に基づいて、実行プログラム4を生成する第2の生成部である。実行装置5は、実行プログラム4を実行することにより、実行プログラム4のプログラム実行結果出力6を得る。実行装置5は、実行プログラム4の実行において、デバッグ情報出力命令41を、デバッグ情報の収集及び出力であることを意識することなく、他の命令と同様に実行する。実行プログラム4がデバッグ情報出力命令41を含む場合、プログラム実行結果出力6は、デバッグ情報出力61を含む。デバッグ情報出力61を除くプログラム実行結果出力6は、実行プログラム4のデバッグ情報出力命令41を除く部分を実行した結果である。デバッグ情報出力61は、実行プログラム4における予め定められた1又は複数の部分をデバッグした結果である。以上のように、実行装置5は、実行プログラム4を実行することにより、実行プログラム4のプログラム実行結果出力6と、デバッグ情報出力命令41を実行することにより得られる実行プログラム4のデバッグ情報出力61とを生成する。プログラム実行結果出力6は、例えば1個のファイルとして出力される。デバッグ情報出力61を、プログラム実行結果出力6のファイルとは独立の別のファイルに出力するようにしても良い。図2は、組込みデバッグ指示行の一例を示す図である。組込みデバッグ指示行21としては、図2Aに示すように、プラグマ指令pragmaが用いられる。プラグマ指令は、C言語の規格及びC言語の規格において、各々、規定されている指令であり、コンパイラに渡される指令である。従って、プラグマ指令を用いることにより、ソースプログラム2に影響を与えることなく、コンパイラ31の動作を制御することができる。組込みデバッグ指示行21には、図2Aに示すように、statementparameterglobalの3種類がある。これにより、ソースプログラム2の殆ど全てのプログラム要素についてのデバッグ情報の収集及び出力を指示することができる。種類がstatementである組込みデバッグ指示行21は、ユーザが文や式で使われている変数や関数についてのデバッグ情報を出力したい場合に用いられる。換言すれば、種類がstatementである組込みデバッグ指示行21は、デバッグしたい、換言すれば、デバッグ対象である文又は式を指定し、指定された文又は式において使用されている変数又は関数についてのデバッグを指示する命令である。組込みデバッグ指示行21の種類がstatementである場合、構文意味解析部32は、組込みデバッグ指示行21に対応するデバッグ情報出力命令341として、指定された文又は式において使用されている変数又は関数をソースプログラム2から抽出し、抽出した変数又は関数についての情報を収集する命令を生成する。デバッグ情報出力命令341に基づいて生成されるデバッグ情報出力命令371及びデバッグ情報出力命令41も、デバッグ情報出力命令341と同様の命令である。組込みデバッグ指示行21の種類がparameter又はglobalである場合も同様である。種類がstatementである組込みデバッグ指示行21は、図2Aに示すように、例えば、pragmabuiltindebugstatement変数並びのような形式で記述される。組込みデバッグ指示行pragmabuiltindebugstatement変数並びは、例えば、デバッグ対象である文又は式の直前に組み込まれる。これにより、デバッグ対象である文又は式、更には、デバッグ対象である文又は式に記述されている変数や関数が指定される。組込みデバッグ指示行pragmabuiltindebugstatement変数並びから生成されたデバッグ情報出力命令41により、指定した文又は式に記述されている変数や関数の情報が、ソースプログラム2から収集され、デバッグ情報として出力される。例えば、ソースプログラム2がC言語で記述されている場合、メンバ関数、コンストラクタ、オペレータ関数、テンプレート関数の情報が、収集されデバッグ情報として出力される。組込みデバッグ指示行pragmabuiltindebugstatement変数並びがブロック文を指定する場合には、指定されたブロック文内に含まれる1又は複数の文又は1又は複数の式で使用されている全ての変数及び関数等のデバッグ情報が出力される。種類がparameterである組込みデバッグ指示行21は、ユーザが関数の仮引数についてのデバッグ情報を出力したい場合に用いられる。換言すれば、種類がparameterである組込みデバッグ指示行21は、デバッグ対象である関数を指定し、指定された関数における仮引数についてのデバッグを指示する命令である。組込みデバッグ指示行21の種類がparameterである場合、構文意味解析部32は、組込みデバッグ指示行21に対応するデバッグ情報出力命令341として、指定された関数における仮引数をソースプログラム2から抽出し、抽出した仮引数についての情報を収集する命令を生成する。種類がparameterである組込みデバッグ指示行21は、図2Aに示すように、例えば、pragmabuiltindebugparameter変数並びのような形式で記述される。組込みデバッグ指示行pragmabuiltindebugparameter変数並びは、例えば、デバッグ対象である関数の先頭に組み込まれる。これにより、デバッグ対象である関数、更には、デバッグ対象である関数における仮引数が指定される。組込みデバッグ指示行pragmabuiltindebugparameter変数並びから生成されたデバッグ情報出力命令41により、仮引数の情報が収集され、デバッグ情報として出力される。種類がglobalである組込みデバッグ指示行21は、ユーザが外部変数又は静的変数についてのデバッグ情報を出力したい場合に用いられる。換言すれば、種類がglobalである組込みデバッグ指示行21は、デバッグ対象である外部変数又は静的変数を指定し、指定された外部変数又は静的変数についてのデバッグを指示する命令である。組込みデバッグ指示行21の種類がglobalである場合、構文意味解析部32は、組込みデバッグ指示行21に対応するデバッグ情報出力命令341として、指定された外部変数又は静的変数をソースプログラム2から抽出し、抽出した外部変数又は静的変数についての情報を収集する命令を生成する。種類がglobalである組込みデバッグ指示行21は、図2Aに示すように、例えば、pragmabuiltindebugglobal変数並びのような形式で記述される。組込みデバッグ指示行pragmabuiltindebugglobal変数並びは、例えば、組み込まれた位置から可視の外部変数又は静的変数を指定する。組込みデバッグ指示行pragmabuiltindebugglobal変数並びよりも前の行で宣言されている変数は、コンパイラ31に対して可視になっている。これにより、デバッグ対象である可視の外部変数又は静的変数が指定される。組込みデバッグ指示行pragmabuiltindebugglobal変数並びから生成されたデバッグ情報出力命令41により、組み込まれた位置から可視の外部変数又は静的変数が収集され、デバッグ情報として出力される。組込みデバッグ指示行21においては、図2Bに示すように、変数並びを指定することができる。変数並びにおいては、1個の識別子により、変数が指定される。又は、変数並びにおいては、変数を指定する1個の識別子に続けて、更に、変数並びを記述することができる。これにより、複数の変数を指定することができる。変数並びが指定されている場合には、実行装置5による組込みデバッグ指示行21から生成されたデバッグ情報出力命令41の実行により、変数並びにより指定された変数のデバッグ情報のみが生成される。変数並びの指定は、省略することができる。変数並びが指定されていない場合には、実行装置5による組込みデバッグ指示行21から生成されたデバッグ情報出力命令41の実行により、組込みデバッグ指示行21の組み込まれた位置により定まる変数や関数等のデバッグ情報が生成される。例えば、種類がstatementである組込みデバッグ指示行21において変数並びが指定されている場合には、変数並びにおいて指定された変数又は関数のデバッグ情報のみが出力される。種類がparameterである組込みデバッグ指示行21において変数並びが指定されている場合には、変数並びにおいて指定された仮引数のデバッグ情報のみが出力される。種類がglobalである組込みデバッグ指示行21において変数並びが指定されている場合には、変数並びにおいて指定された外部変数又は静的変数のデバッグ情報のみが出力される。なお、実際には、いずれの種類の組込みデバッグ指示行21においても、以上に述べたデバッグ情報に加えて、ファイル名、カレントの関数名、行番号が、共に出力される。ファイル名、カレントの関数名、行番号は、出力しないようにしても良い。図3は、ソースプログラムの一例を示す図である。例えば、ソースプログラム2は、高級プログラム言語、例えばオブジェクト指向言語であるC言語又はC言語により記述される。また、例えば、ソースプログラム2は、3種類の組込みデバッグ指示行21を含む。具体的には、19行目、24行目、27行目に、各々、組込みデバッグ指示行21を含む。このように、組込みデバッグ指示行21をソースプログラム2に埋め込むことができるので、ソースプログラム2を把握している開発者が容易に使用することができ、また、組込みデバッグ指示行21をルートテスト用としても使用することができる。図3に示すように、1個のソースプログラム2に含まれる組込みデバッグ指示行21の数は、1個であっても良く、複数個であっても良い。組込みデバッグ指示行21の数は、デバッグ対象の数に応じて定まる。なお、図3のソースプログラム2において、左端の数字は、ソースプログラム2における行数を表す。また、ソースプログラム2の名前は、例えばsampleccである。組込みデバッグ指示行21は、予め定められたコンパイル装置3において実行される命令であって、予め定められたコンパイル装置3以外のコンパイル装置においてはエラーを発生せずかつ実行されない命令である。具体的には、組込みデバッグ指示行21としてプラグマ指令pragmaを使用することにより、ソースプログラム2の可搬性を保障することができる。換言すれば、ソースプログラム2は、コンパイラ31以外のコンパイラでコンパイルされても、エラーを発生しない。組込みデバッグ指示行21は、ソースプログラム2において、デバッグ対象である文又は式を指定する位置であって文又は式に対して予め定められた関係にある位置、デバッグ対象である関数を指定する位置であって関数に対して予め定められた関係にある位置、又は、デバッグ対象である外部変数又は静的変数を指定する位置であって外部変数又は静的変数に対して予め定められた関係にある位置に含まれる。組込みデバッグ指示行21の位置については後述する。従って、ソースプログラム2において、組込みデバッグ指示行21の記述される位置、換言すれば、組込みデバッグ指示行21が組込まれる位置は、ソースプログラム2のコーディングの際に、ユーザにより定められる。換言すれば、組込みデバッグ指示行21が組込まれる位置は、ユーザによりデバッグ対象の部分の位置に応じて定められる。これにより、ユーザは、ソースプログラム2において、自分がデバッグ対象とした箇所のみを、デバッグすることができる。19行目の組込みデバッグ指示行pragmabuiltindebugparameterは、種類がparameterの組込みデバッグ指示行21である。種類がparameterの組込みデバッグ指示行21は、前述したように、デバッグ対象である関数を指定し、指定された関数における仮引数についてのデバッグを指示する。一方、19行目の組込みデバッグ指示行pragmabuiltindebugparameterは、17行目から始まる関数funcにおいて、先頭の位置に指定されている。従って、19行目の組込みデバッグ指示行pragmabuiltindebugparameterは、17行目の関数funcを指定し、関数funcの仮引数paramのデバッグを指示するデバッグ情報出力命令であると言うことができる。24行目の組込みデバッグ指示行pragmabuiltindebugglobalは、種類がglobalの組込みデバッグ指示行21である。種類がglobalの組込みデバッグ指示行21は、前述したように、デバッグ対象である外部変数又は静的変数を指定し、指定された外部変数又は静的変数についてのデバッグを指示する。一方、24行目の組込みデバッグ指示行pragmabuiltindebugglobalからは、2行目のintdata10及び5行目のintdata20が可視である。従って、24行目の組込みデバッグ指示行pragmabuiltindebugglobalは、ソースプログラム2に含まれる可視の外部変数又は静的変数である2行目のdata10及び5行目のdata20のデバッグを指示するデバッグ情報出力命令であると言うことができる。27行目の組込みデバッグ指示行pragmabuiltindebugstatementは、種類がstatementの組込みデバッグ指示行21である。種類がstatementの組込みデバッグ指示行21は、前述したように、デバッグ対象である文又は式を指定し、指定された文又は式において使用されている変数又は関数についてのデバッグを指示する。一方、27行目の組込みデバッグ指示行pragmabuiltindebugstatementは、28行目のretclsobjdataの直前に組み込まれている。従って、27行目の組込みデバッグ指示行pragmabuiltindebugstatementは、28行目のretclsobjdataのデバッグを指示するデバッグ情報出力命令であると言うことができる。以上のように、コンパイラ31の構文意味解析部32がデバッグ情報を出力するためのコードを生成するため、ユーザは、デバッグ用のソースプログラム2をコーディングしたりコンパイルする必要がない。また、ソースプログラム2が変更された結果、デバッグ対象の変数等が増加した場合に、ユーザは、ソースプログラム2を再度コーディングする必要がなく、ソースプログラム2をリコンパイルするだけで、デバッグ対象の増加に対応したデバッグ情報を出力することができる。更に、コンパイル可能なソースプログラム2であれば、どのようなソースプログラム2でも、どのような文又は式でも、デバッグ情報を出力することができる。図4は、構造化データの一例を示す図である。コンパイラ31の構文意味解析部32は、構文解析処理に基づいて、図3に示すソースプログラム2から、図4に示す構造化データ33を生成する。具体的には、構文意味解析部32は、ソースプログラム2の名前sampleccに基づいて、sampleccというコンパイルの単位CompileUnitを抽出する。CompileUnitは、ソースプログラム2のデータ構造における最上位の階層である。更に、構文意味解析部32は、CompileUnitの1つ下位の階層として、名前空間、クラス等のタイプ、using文、関数等を抽出する。具体的には、CompileUnitの1つ下位の階層として、最初に、1行目のnamespaceNS1と3行目のとに基づいて、NS1というNamespaceが抽出される。更に、構文意味解析部32は、Namespaceの1つ下位の階層として、変数等を抽出する。具体的には、2行目のintdata10は、NS1というNamespace内に{}で囲まれている。従って、intdata10に基づいて、NS1というNamespaceの1つ下位の階層として、data10というVariableが抽出される。同様に、CompileUnitの1つ下位の階層として、4行目のnamespaceNS2と6行目のとに基づいて、NS2というNamespaceが抽出される。また、5行目のintdata20に基づいて、NS2というNamespaceの1つ下位の階層として、data20というVariableが抽出される。次に、CompileUnitの1つ下位の階層として、8行目のclassCLSと13行目のとに基づいて、CLSというTypeが抽出される。更に、構文意味解析部32は、クラス等のTypeの1つ下位の階層として、変数等を抽出する。具体的には、10行目のintmem、及び、11行目のintoperatorは、CLSというType内に{}で囲まれている。従って、10行目のintmemに基づいて、CLSというTypeの1つ下位の階層として、memというMemberが抽出される。また、11行目のintoperatorに基づいて、CLSというTypeの1つ下位の階層として、operatorというMemberが抽出される。なお、10行目と11行目は、クラスにおけるデータメンバ又はメンバ関数であり、階層構造として抽出される。また、9行目と12行目は、クラスにおけるキーワード等であり、階層構造として抽出されず、無視される。次に、CompileUnitの1つ下位の階層として、15行目のusingnamespaceNS1に基づいて、NS1というusingnamespaceが抽出される。次に、CompileUnitの1つ下位の階層として、17行目のintfunc、18行目の及び31行目のに基づいて、funcというFunctionが抽出される。19行目~31行目は、funcというFunction内に{}で囲まれている。従って、19行目~31行目は、funcというFunctionの下位の階層として抽出される。更に、構文意味解析部32は、関数の1つ下位の階層として、パラメータ、プラグマ指令、変数、文又は式等を抽出する。具体的には、funcというFunction内において、17行目のintfuncに基づいて、funcというFunctionの1つ下位の階層として、paramというParameterが抽出される。また、19行目のpragmabuiltindebugparameterに基づいて、funcというFunctionの1つ下位の階層として、builtindebugparameterというPragmaが抽出される。従って、プラグマ指令は、関数Function内において、データ構造という観点からはパラメータや変数と同列である。また、21行目のCLSclsobjに基づいて、funcというFunctionの1つ下位の階層として、clsobjというVariableが抽出される。また、22行目のintret0に基づいて、funcというFunctionの1つ下位の階層として、retというVariableが抽出される。また、24行目のpragmabuiltindebugglobalに基づいて、funcというFunctionの1つ下位の階層として、builtindebugglobalというPragmaが抽出される。また、26行目のifと29行目のとに基づいて、funcというFunctionの1つ下位の階層として、ifというStatementが抽出される。27行目~28行目は、ifというStatement内に{}で囲まれている。従って、27行目~28行目は、ifというStatementの下位の階層として抽出される。更に、ifというStatement内において、28行目のretclsobjdataに基づいて、ifというStatementの1つ下位の階層として、retclsobjdataというStatementが抽出される。また、27行目のpragmabuiltindebugstatementに基づいて、builtindebugstatementというPragmaが抽出される。27行目のpragmabuiltindebugstatementは、28行目のretclsobjdataについてのデバッグ指示行であるので、28行目の1つ下位の階層とされる。従って、27行目と28行目とでは、行の位置の上下と階層の上下とが逆転している。更に、構文意味解析部32は、ソースプログラム2がオブジェクト指向言語であるので、各階層の間における関連を抽出し、抽出した階層の間を関連付ける。具体的には、28行目から生成された階層retclsobjdataに含まれるretは、同一の名前を持つので、22行目から生成されたretである。そこで、28行目から生成された階層に含まれるretが22行目から生成されたretであることを構造的に表現するために、図4に点線で示すように、28行目から生成された階層に含まれるretと22行目から生成されたretとが関連付けられる。同様に、28行目から生成された階層に含まれるclsobjと21行目から生成されたclsobjとが、図4に点線で示すように、関連付けられる。また、28行目から生成された階層に含まれるは、加算を定義する演算子である。クラスにおいて加算に関連するデータメンバ又はメンバ関数は、11行目から生成されたoperatorである。そこで、28行目から生成された階層に含まれると11行目から生成されたoperatorとが、図4に点線で示すように、関連付けられる。また、15行目のusing文においてNS1というNamespaceを使用することを宣言しているので、28行目から生成された階層に含まれるdataは、NS1というNamespaceにおけるdata10というVariable、換言すれば、2行目から生成されたdata10である。そこで、28行目から生成された階層に含まれるdataと2行目から生成されたdata10とが、図4に点線で示すように、関連付けられる。以上のような構文意味解析部32による構文解析処理により、図3に示すソースプログラム2から、図4に示す構造化データ33が得られる。図5は、デバッグ情報出力の一例を示す図である。実行装置5は、図3に示すソースプログラム2から生成された実行プログラム4を実行して、図5に示すプログラム実行結果出力6を得る。プログラム実行結果出力6は、デバッグ情報出力61を含む。プログラム実行結果出力6において、1行目~2行目は、実行プログラム4のデバッグ情報出力命令41を除く部分を実行した結果である。3行目~12行目は、デバッグ情報出力61であり、デバッグ情報出力命令41を実行した結果である。プログラム実行結果出力6において、実行プログラム4の実行時におけるデバッグ情報出力61の出力の有無は、環境変数、換言すれば、フラグにより制御される。フラグの値は、例えば、ソースプログラム2の生成時に、ユーザにより例えばソースプログラム2において指定される。なお、ソースプログラム2のコンパイル処理に先立って、フラグの値を指定するようにしても良い。構文意味解析部32は、フラグの値が0である場合には、ソースプログラム2に含まれた組込みデバッグ指示行21をコンパイルしない。従って、中間プログラム34にはデバッグ情報出力命令341が含まれず、実行プログラム4にはデバッグ情報出力命令41が含まれず、実行装置5によりデバッグ情報出力61が出力されない。構文意味解析部32は、フラグの値が1である場合には、ソースプログラム2に含まれた組込みデバッグ指示行21をコンパイルする。従って、中間プログラム34にはデバッグ情報出力命令341が含まれ、実行プログラム4にはデバッグ情報出力命令41が含まれ、実行装置5によりデバッグ情報出力61が出力される。これにより、実行プログラム4の実行時に、デバッグ情報の出力の有無を制御することができる。従って、デバッグ用のコードである組込みデバッグ指示行21を含んだままのソースプログラム2を、フラグの値を1から0に変更するのみで実際の運用において使用することができ、また、運用時における実行速度への影響も少なくすることができる。フラグの値は、例えば、プログラム実行結果出力6において、1行目の最後尾に出力される。図5においては、フラグの値が1であるので、プログラム実行結果出力6がデバッグ情報出力61を含む状態で出力される。これにより、ユーザは、プログラム実行結果出力6に含まれるプログラム実行結果出力6以外の部分がデバッグ情報出力61であるか否かを知り、また、デバッグの結果を知ることができる。プログラム実行結果出力6の2行目には、プログラム実行結果出力6の出力先のファイルの名前が出力される。換言すれば、実行プログラム4のデバッグ情報出力命令41を除く部分を実行した結果は、aoutというファイルに出力される。構文意味解析部32は、組込みデバッグ指示行21を解析する第1の解析処理を実行し、組込みデバッグ指示行21の指示対象を解析する第2の解析処理を実行し、第1及び第2の解析処理に基づいてデバッグ情報出力命令341を生成する。例えば、デバッグ情報出力61において、3行目~4行目は、ソースプログラム2における19行目の組込みデバッグ指示行pragmabuiltindebugparameterから生成されたデバッグ情報出力命令41を実行した結果である。具体的には、ソースプログラム2の17行目の関数funcの仮引数paramのデバッグ情報が出力される。構文意味解析部32は、組込みデバッグ指示行pragmabuiltindebugparameterが、19行目に記述されていることを解析し、更に、この解析に基づいて、図3を参照して前述したように、17行目の関数funcを指定し、関数funcの仮引数paramのデバッグを指示することを解析する。そこで、以上の解析に基づいて、構文意味解析部32は、19行目の組込みデバッグ指示行pragmabuiltindebugparameterから、17行目の関数funcの仮引数paramについての全ての情報をソースプログラム2の内部から収集して出力するデバッグ情報出力命令341を生成する。これにより、実行プログラム4には、17行目の関数funcの仮引数paramについての情報を収集して出力するデバッグ情報出力命令41が含まれる。実行装置5は、19行目の組込みデバッグ指示行pragmabuiltindebugparameterから生成されたデバッグ情報出力命令41を実行することにより、17行目の関数funcの仮引数paramについての情報を収集して、デバッグ情報として出力する。次に、デバッグ情報出力61において、5行目~7行目は、ソースプログラム2における24行目の組込みデバッグ指示行pragmabuiltindebugglobalから生成されたデバッグ情報出力命令41を実行した結果である。具体的には、ソースプログラム2の2行目及び5行目の可視の外部変数又は静的変数data10及びdata10のデバッグ情報が出力される。構文意味解析部32は、組込みデバッグ指示行pragmabuiltindebugglobalが、24行目に記述されていることを解析し、更に、この解析に基づいて、図3を参照して前述したように、可視の外部変数又は静的変数である2行目のdata10及び5行目のdata10のデバッグを指示する命令であることを解析する。そこで、以上の解析に基づいて、構文意味解析部32は、24行目の組込みデバッグ指示行pragmabuiltindebugglobalから、2行目及び5行目の可視の外部変数又は静的変数data10及びdata10についての全ての情報をソースプログラム2の内部から収集して出力するデバッグ情報出力命令341を生成する。これにより、実行プログラム4には、2行目及び5行目の可視の外部変数又は静的変数data10及びdata10についての情報を収集して出力するデバッグ情報出力命令41が含まれる。実行装置5は、24行目の組込みデバッグ指示行pragmabuiltindebugglobalから生成されたデバッグ情報出力命令41を実行することにより、2行目及び5行目の可視の外部変数又は静的変数data10及びdata10についての情報を収集して、デバッグ情報として出力する。次に、デバッグ情報出力61において、8行目~12行目は、ソースプログラム2における27行目の組込みデバッグ指示行pragmabuiltindebugstatementから生成されたデバッグ情報出力命令41を実行した結果である。具体的には、ソースプログラム2の28行目のretclsobjdataのデバッグ情報が出力される。構文意味解析部32は、組込みデバッグ指示行pragmabuiltindebugstatementが、27行目に記述されていることを解析し、更に、この解析に基づいて、図3を参照して前述したように、28行目のretclsobjdataのデバッグを指示する命令であることを解析する。そこで、以上の解析に基づいて、構文意味解析部32は、27行目の組込みデバッグ指示行pragmabuiltindebugstatementから、28行目のretclsobjdataについての全ての情報をソースプログラム2の内部から収集して出力するデバッグ情報出力命令341を生成する。これにより、実行プログラム4には、28行目のretclsobjdataについての情報を収集して出力するデバッグ情報出力命令41が含まれる。デバッグ情報出力命令341の生成において、構文意味解析部32は、更に、構造化データ33を参照する。これにより、構文意味解析部32は、デバッグ対象であるretclsobjdataが、2行目の変数data、11行目のオペレータ関数CLSoperator、21行目の変数clsobj、22行目の変数retに、各々、関連付けられていることを知る。そこで、構文意味解析部32は、デバッグ情報出力命令341として、単に28行目のretclsobjdataの情報を収集して出力するのみでなく、これに加えて、変数ret、変数clsobj、変数data、オペレータ関数CLSoperatorについての情報を収集して出力する命令を生成する。実行装置5は、27行目の組込みデバッグ指示行pragmabuiltindebugstatementから生成されたデバッグ情報出力命令41を実行することにより、28行目のretclsobjdataについての情報を収集して、デバッグ情報として出力する。この時、ソースプログラム2の28行目のretclsobjdataにおいて使用されている、変数clsobj、変数ret、変数dataのデバッグ情報が出力される。ここで、変数clsobjは、クラス型のためクラス名を表示している。また、変数dataは、NS1というNamespaceとNS2というNamespaceの双方で定義されているが、15行目のusing文によりNS1というNamespaceで定義されているdataが参照されていることを表している。12行目のCLSoperatorは、CLSクラスで宣言されたオペレータ関数が使用されたことを表している。これは、clsobjdataの加算演算が、実際には、オペレータ関数CLSoperatorが使用されている、換言すれば、呼び出されているためである。なお、ソースプログラム2に含まれる複数の組込みデバッグ指示行21の中で、特定の組込みデバッグ指示行21に基づくデバッグ情報のみを出力するようにしても良い。この場合、例えば、制御用関数インタフェースが設けられ、その関数内において、例えば、charbuiltindebugtabletestc17testc26のように、ファイル名と行番号が規定の配列の初期値として指定される。これにより、特定の組込みデバッグ指示行21についてのデバッグ情報のみを出力することができる。以上のように、実行装置5がデバッグ情報出力命令41を実行することによりデバッグ情報を出力するので、デバッグ用の外部ツールやデバッグ用のライブラリ等を何ら用いることなく、デバッグ情報を収集し出力することができる。また、コンパイル装置3がデバッグ情報出力命令41を生成するので、ユーザは、デバッグ情報出力命令41をコーディングする必要がない。また、例えば、ソースプログラム2がC言語で記述されたプログラムである場合、ユーザは、識別子解決結果、関数のオーバーロード/オーバーライドの解決結果、ソースプログラム2において記述された式のコンパイラ31における解析結果や解決結果を、デバッグ情報として知ることができる。例えば、識別子解決結果は、どのネームスペースの識別子を参照したのかを示す。関数のオーバーロード/オーバーライドの解決結果は、例えばオペレータ演算子を含む。ソースプログラム2において記述された式は、例えばテンプレート関数等を含む。図6は、コンパイル装置のハードウェアの構成の一例を示す図である。CPU101は、ROM102に格納された制御プログラムに従って、コンパイル装置3を制御する。CPU101は、例えば主メモリであるRAM103上のコンパイルプログラムを実行する。これにより、コンパイラ31及びリンカ38が実現される。コンパイルプログラムは、例えば、CD-ROMやDVD等の記録媒体109に格納され、記録媒体109からハードディスク106に入力され、ハードディスク106からCD-ROMドライブやDVDドライブ等を介してRAM103にロードされる。プログラム及びデータ格納部は、例えばハードディスク106に設けられ、ソースプログラム2、構造化データ33、中間プログラム34、オブジェクトプログラム37、ライブラリ39、実行プログラム4を格納する。換言すれば、プログラム及びデータは、例えばハードディスク106に格納される。ライブラリ39は、例えば、CD-ROMやDVD等の記録媒体109に格納され、記録媒体109からCD-ROMドライブやDVDドライブ等を介してハードディスク106に入力され、必要に応じてハードディスク106からRAM103にロードされ、リンカ38により処理される。構造化データ33、中間プログラム34、オブジェクトプログラム37、実行プログラム4は、コンパイラ31又はリンカ38により生成される。入力装置104は、例えばキーボードであり、マウス等を含んでも良い。出力装置105は、例えばディスプレイであり、プリンタ等の出力装置を含んでも良い。CPU101、ROM102、RAM103、入力装置104、出力装置105、及び、ハードディスク106、ネットワーク接続部107は、バス108を介して、相互に接続される。ネットワーク接続部107は、例えば、送受信装置であり、ネットワークに接続され、ネットワークを介して他のコンピュータ、例えば生成装置1及び実行装置5に接続される。これにより、コンパイル装置3は、生成装置1及び実行装置5との間で通信を行う。ソースプログラム2は、例えば、生成装置1からネットワークを介してハードディスク106に入力され、必要に応じてハードディスク106からRAM103にロードされ、コンパイラ31及びリンカ38により処理される。実行プログラム4は、コンパイル装置3からネットワークを介して実行装置5に送信され実行される。図7は、コンパイラ31が実行するコンパイル処理フローであって、特に、ソースプログラムからデバッグ情報出力命令を含む中間プログラムを生成する処理フローを示す。コンパイル装置3において、コンパイラ31がソースプログラム2を読込むとステップS1、構文意味解析部32が、読み込まれたソースプログラム2の字句解析処理を実行しステップS2、字句解析処理の結果に基づいて、読み込まれたソースプログラム2の構文解析処理及び意味解析処理を実行するステップS3。構文解析処理及び意味解析処理により、ソースプログラム2の構造化データ33が生成される。構文意味解析部32は、ソースプログラム2の先頭から順に1行ずつコードを抽出し、抽出した行において組込みデバッグ指示行21が指定されているか否かを判断するステップS4。組込みデバッグ指示行21が指定されていない場合にはステップS4No、構文意味解析部32は、ステップS3を繰り返す。組込みデバッグ指示行21が指定されている場合にはステップS4Yes、構文意味解析部32は、組込みデバッグ指示行21の種類がstatementであるか、parameterであるか、globalであるかを判断するステップS5。次に、構文意味解析部32は、組込みデバッグ指示行21において変数並びが指定されているか否かを判断し、更に、指定されている場合には、その変数が宣言されているか否かを検査するステップS6。一方、ステップS6において、組込みデバッグ指示行21において変数並びが指定されていない場合は、構文意味解析部32は、組込みデバッグ指示行21が指定された位置に基づいて、ソースプログラム2において指定されている変数や関数を調べるステップS7。次に、構文意味解析部32は、変数や関数のデバッグ情報を収集し出力するための命令を生成し、併せてファイル名、関数名、行番号の情報出力命令も生成するステップS8。次に、構文意味解析部32は、図5に示す環境変数、換言すれば、フラグを判定条件として用いて、組込みデバッグ指示行21の中間コードであるデバッグ情報出力命令341を生成するステップS9。次に、構文意味解析部32は、ソースプログラム2における全ての行の処理を終了したか否かを判断するステップS10。全ての行の処理を終了していない場合にはステップS10No、構文意味解析部32は、ステップS3を繰り返す。全ての行の処理を終了した場合にはステップS10Yes、構文意味解析部32は、処理を終了する。以上の説明から理解されるように、以下のような実施の態様が把握される。付記1コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成する第1の生成部と、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成する第2の生成部とを含むことを特徴とするコンパイル装置。付記2前記第1の生成部は、前記出力指示を解析する第1の解析処理を実行し、前記出力指示の指示対象を解析する第2の解析処理を実行し、前記第1及び第2の解析処理に基づいて前記デバッグ情報出力命令を生成することを特徴とする付記1に記載のコンパイル装置。付記3前記第1の生成部は、前記実行プログラムの生成に先立って、前記ソースプログラムを解析することにより、前記構造化データを生成することを特徴とする付記1に記載のコンパイル装置。付記4前記出力指示は、予め定められたコンパイル装置において実行される命令であって、前記予め定められたコンパイル装置以外のコンパイル装置においてはエラーを発生せずかつ実行されない命令であることを特徴とする付記1に記載のコンパイル装置。付記5前記出力指示は、前記ソースプログラムにおいて、デバッグ対象である文又は式を指定する位置であって前記文又は式に対して予め定められた関係にある位置、デバッグ対象である関数を指定する位置であって前記関数に対して予め定められた関係にある位置、又は、デバッグ対象である外部変数又は静的変数を指定する位置であって前記外部変数又は静的変数に対して予め定められた関係にある位置に含まれることを特徴とする付記1に記載のコンパイル装置。付記6前記出力指示は、デバッグ対象である文又は式を指定し、指定された前記文又は式において使用されている変数又は関数についてのデバッグを指示する命令であることを特徴とする付記5に記載のコンパイル装置。付記7前記第1の生成部は、前記出力指示に対応する前記デバッグ情報出力命令として、前記ソースプログラムから指定された前記文又は式において使用されている変数又は関数を抽出し、抽出した前記変数又は関数についての情報を収集する命令を生成することを特徴とする付記6に記載のコンパイル装置。付記8前記出力指示は、デバッグ対象である関数を指定し、指定された前記関数における仮引数についてのデバッグを指示する命令であることを特徴とする付記5に記載のコンパイル装置。付記9前記第1の生成部は、前記出力指示に対応する前記デバッグ情報出力命令として、前記ソースプログラムから指定された前記関数における仮引数を抽出し、抽出した前記仮引数についての情報を収集する命令を生成することを特徴とする付記8に記載のコンパイル装置。付記10前記出力指示は、デバッグ対象である外部変数又は静的変数を指定し、指定された前記外部変数又は静的変数についてのデバッグを指示する命令であることを特徴とする付記5に記載のコンパイル装置。付記11前記第1の生成部は、前記出力指示に対応する前記デバッグ情報出力命令として、前記ソースプログラムから指定された前記外部変数又は静的変数を抽出し、抽出した前記外部変数又は静的変数についての情報を収集する命令を生成することを特徴とする付記10に記載のコンパイル装置。付記12前記ソースプログラムは、オブジェクト指向言語であるC言語又はC言語により記述され、前記出力指示は、前記C言語の規格及びC言語においてコンパイラに渡される指令として規定されているプラグマ指令であることを特徴とする付記1に記載のコンパイル装置。付記13ソースプログラムをコンパイル処理することにより実行プログラムを生成するコンパイル装置と、前記実行プログラムを実行する実行装置とを含む情報処理システムであって、前記コンパイル装置は、コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成する第1の生成部と、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成する第2の生成部とを含み前記実行装置は、前記実行プログラムを実行することにより、前記実行プログラムの実行結果と、前記デバッグ情報出力命令を実行することにより得られる前記実行プログラムのデバッグ情報とを生成することを特徴とする情報処理システム。付記14コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成し、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成することを特徴とするコンパイル方法。付記15ソースプログラムをコンパイル処理することにより実行プログラムを生成するコンパイルプログラムであって、前記コンパイルプログラムは、コンピュータに、コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成する第1の生成処理と、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成する第2の生成処理とを実行させることを特徴とするコンパイルプログラム。付記16ソースプログラムをコンパイル処理することにより実行プログラムを生成するコンパイルプログラムを記録する記録媒体であって、前記コンパイルプログラムは、コンピュータに、コンパイル処理対象のソースプログラムにデバッグ情報の出力指示が含まれる場合に、前記ソースプログラムの構造を表す構造化データに基づいて、前記出力指示の出力対象であるプログラム要素を解析することにより生成したデバッグ情報を出力させる命令を含む実行プログラムを生成する第1の生成処理と、前記ソースプログラムのコンパイル処理結果として、前記実行プログラムの実行可否を判定する命令を含む実行プログラムを生成する第2の生成処理とを実行させることを特徴とする記録媒体。