(57)【要約】【課題】実行時にソースプログラムまたは中間語プログラムを機械語プログラムへ翻訳する処理を有する実行系において、デバッグ情報の生成に伴う性能の低下とメモリ消費量の増大を最小限に抑制しつつ、運用者がデバッグ情報を効果的に取得することのできる実行時プログラム翻訳方法および装置を提供する。【解決手段】複数の電子計算機に共通のソースプログラムまたは中間語プログラムを解釈実行すると共に、計算機固有の機械語プログラムへ翻訳する実行時プログラム翻訳手段を備えるプログラム実行環境において、機械語プログラム実行中に例外発生を監視し、例外を検知した際に実行していた機械語プログラムの翻訳前のソースプログラムまたは中間語プログラムを機械語プログラムにデバッグ情報を生成しながら翻訳しなおすとともに、デバッグ情報をもとにソースプログラムまたは中間語プログラム上での例外発生箇所を特定する。【選択図】　図１
2004054807.tif 000002
【特許請求の範囲】
【請求項１】
複数の電子計算機に共通のソースプログラムまたは中間語プログラムを解釈実行すると共に、計算機固有の機械語プログラムへ翻訳する実行時プログラム翻訳手段を備えるプログラム実行環境において、前記機械語プログラム実行中に例外発生を監視する例外監視手段と、前記例外監視手段によって例外を検知した際に実行していた機械語プログラムの翻訳前のソースプログラムまたは中間語プログラムを機械語プログラムにデバッグ情報を生成しながら翻訳しなおすとともに、前記デバッグ情報をもとにソースプログラムまたは中間語プログラム上での例外発生箇所を特定する例外時プログラム翻訳手段とを備えることを特徴とする情報処理装置。
【請求項２】
複数の電子計算機に共通のソースプログラムまたは中間語プログラムを解釈実行すると共に、計算機固有の機械語プログラムへ翻訳する実行時プログラム翻訳工程を備えるプログラム実行方法において、前記実行時プログラム翻訳工程により解釈された前記機械語プログラム実行中に例外発生を監視する例外監視工程と、前記例外監視工程によって例外を検知した際に実行していた機械語プログラムの翻訳前のソースプログラムまたは中間語プログラムをデバッグ情報を生成しながら機械語プログラムに翻訳しなおすとともに、生成したデバッグ情報をもとにソースプログラムまたは中間語プログラム上での例外発生箇所を特定する例外時プログラム翻訳工程とを備えることを特徴とする情報処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、実行時プログラム翻訳方法および装置に係り、特に、サーバ計算機と複数の機種の異なるクライアント計算機とがネットワークに接続されたネットワーク環境において、複数の計算機に共通に実行できる中間語プログラムをサーバ計算機から読み込んで、インタプリタのような解釈系によって実行する際に、読み込んだ中間語プログラムをクライアント計算機固有の機械語プログラムへ翻訳する実行時プログラム翻訳方法および装置に関する。
【０００２】
【従来の技術】
計算機システムにおける複数機種の計算機に共通の中間語プログラムを利用する実行系においては、その性能向上を目的に、実行時に機械語プログラムへ翻訳する方法が採り入れられている。関係する従来技術として、例えば、特開平１０−２４０５４６号公報等に記載された技術が知られている。
【０００３】
このような実行時プログラム翻訳の使用においては、実行時プログラム翻訳におけるコンパイル処理（「実行時コンパイル」などと一般に呼称）によってＣＰＵ負荷が大きくなるとともに、中間語プログラムよりも生成する機械語プログラムの方が格納に必要なメモリサイズが大きくなることが知られている。そして、このようなＣＰＵ負荷やメモリ使用量を増やす傾向が実行時プログラム翻訳の適用の阻害要因になることが知られている。たとえば、同じくＣＰＵ負荷やメモリ使用量を増やす傾向を有する高信頼化機能、たとえばデバッガ向けの情報取得機能との併用が難しい。
【０００４】
デバッガとは、コンピュータプログラム実行時のエラーの検出やデバッグに利用されるツールであり、プログラムの実行をトレースしたり、異常終了時の状態からエラー発生地点を検出する機能をもつことが知られている。このような機能の実現に寄与するのが、上述したデバッガ向けの情報（デバッグ情報）であり、一例として、プログラム翻訳して得られた機械語プログラムが翻訳前の中間語プログラムやソースプログラムのどの部分に対応するかを示す情報を含む。
【０００５】
デバッグ情報の生成機能を実行時プログラム翻訳機能（実行時コンパイラ）と併用すると、ソースプログラムまたは中間語プログラムを解釈実行中に機械語プログラムへ翻訳する処理を行う際に、機械語プログラムのデバッグ情報を生成する処理が加わる。結果として、ＣＰＵ負荷やメモリ使用量に対する実行時プログラム翻訳とデバッグ情報生成、双方のオーバーヘッドが累積するため、システム全体の性能低下が顕著になり双方の併用が難しくなるのである。
【０００６】
また、デバッグ情報の生成がプログラム翻訳時（コンパイル時）の最適化を難しくすることも、実行時翻訳との同時サポートに不利になる。最適化とは実行時間の短縮などを目的にプログラムに対して行うコンパイル処理中の変換作業であるが、この変換が、最適化コードともとのソースコードとの対応づけに関する正確な把握を困難にするためである。
【０００７】
以上の状況は、従来技術において、高速化を追求するとデバッグの支障となることを意味しており、高速化と高信頼性との両立の困難さを示している。Ｊａｖａ（Ｒ）の実行系においても事情は同様である。
【０００８】
Ｊａｖａ（Ｒ）の実行系においては、デバッガ向けの情報取得のために、Ｊａｖａ（Ｒ）　Ｖｉｒｔｕａｌ　Ｍａｃｈｉｎｅ　Ｄｅｂｕｇｇｅｒ　Ｉｎｔｅｒｆａｃｅ　（ＪＶＭＤＩ）が存在するが、このＪＶＭＤＩと、Ｊａｖａ（Ｒ）の実行時翻訳技術として知られるジャスト・イン・タイム　（Ｊｕｓｔ−Ｉｎ−Ｔｉｍｅ，　ＪＩＴ）　コンパイラとの、同時併用を認めない仕様になっているのが一般的である。この事例は、実行時コンパイラ利用時にはエラー発生の際に得られるデバッグ情報が少なくなるためにデバッグが困難になること、すなわち、ＪＩＴコンパイラなどの実行時コンパイラの適用が実行系全体としての信頼性のマイナス要因に働くことを示唆している。
【０００９】
【発明が解決しようとする課題】
本発明は、ＪＩＴコンパイラを伴うＪａｖａ（Ｒ）実行系のように、ソースプログラムまたは中間語プログラムを解釈実行中に機械語プログラムへ翻訳する処理を有する実行系において、前述した従来技術の問題点を解決し、デバッグ情報の生成に伴う性能の低下とメモリ消費量の増大を最小限に抑制しつつ、運用者がデバッグ情報を効果的に取得することのできる実行時プログラム翻訳方法および装置を提供することを目的とする。
【００１０】
【発明を解決するための手段】
本発明においては、複数の電子計算機に共通のソースプログラムまたは中間語プログラムを解釈実行すると共に、計算機固有の機械語プログラムへ翻訳する実行時翻訳方法において、ソースプログラムまたは中間語プログラムを解釈実行する解釈実行部と、前記ソースプログラムまたは中間語プログラムをモジュール単位に機械語プログラムに翻訳する実行時翻訳部とを備え、前記実行時翻訳部により解釈された前記機械語プログラム実行中に例外発生を監視する例外監視部、を備えている。前記実行時翻訳部は、デバッグ情報を生成せずに、処理速度の確保とメモリ消費量の抑制を優先させる。
【００１１】
さらに、本発明においては、前記例外監視部によって例外を検知した際にその直前に実行していた機械語プログラムに相当するソースプログラムまたは中間語プログラムをモジュール単位でデバッグ情報を生成しながら機械語プログラムに翻訳しなおし、生成したデバッグ情報をもとにソースプログラムまたは中間語プログラム上での例外発生箇所を特定する例外時翻訳部を備える。
【００１２】
本発明によれば、通常時はデバッグ情報を持たずに実行し、異常時にのみ必要なデバッグ情報を出力できる。すなわち、デバッグ情報の生成契機を例外発生時に限定することと、性能要求の厳しい通常運用時にはデバッグ情報を生成しないことが特徴的であり、正常運用時の処理遅延を防ぐとともに、デバッグ情報の必要性の高い例外発生時や異常発生時にはデバッグ情報を生成して運用者に現象解析などに必要な情報を提供することができる。
さらに、本発明によれば、デバッグ情報付きの機械語プログラムへの実行時プログラム翻訳を利用可能性の高い例外発生時や異常発生時に限定することによって、生成する機械語に対するデバッグ情報を保持するメモリ領域を削減できるので、メモリ消費量の増大を抑制できる。
【００１３】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を詳細に説明する。
【００１４】
図１は本発明の一実施形態による実行時プログラム翻訳方法を実施する装置の概略構成を示すブロック図である。図１において、１１０は中央処理装置、１２０は主記憶装置、１２１は基本制御部、１２２は中間語ファイル読み込み部、１２３は中間語データ解釈実行部、１２４は実行時翻訳部、１２５は機械語データ、１２６はデバッグ情報テーブル、１２７は中間語データ、１２８は例外監視部、１２９は例外時翻訳部、１３０は入力装置、１４０は表示装置、１５０は通信装置、１６０は外部記憶装置、１６１は中間語ファイルである。
【００１５】
主記憶装置１２０には、基本制御部１２１と、中間語ファイル読み込み部１２２と、中間語解釈実行部１２３と、実行時翻訳部１２４とがロードされて格納される。また、主記憶装置１２０には、中間語ファイル読み込み部によって生成された中間語データ１２７、中間語解釈実行部１２３によって生成された実行頻度データ、実行時翻訳部１２４によって生成された機械語データ１２５が格納される。また、外部記憶装置１６０には、中間語ファイル１６１が格納される。
【００１６】
基本制御部１２１は、本発明による方法を実施する装置全体を制御するプログラムであり、図示装置が立ち上げられたとき、中央処理装置１１０によって実行され、装置のハードウェアとプログラムとの基本制御を行う。そして、装置の各ハードウェアと各プログラムの例外発生を検出して、例外を検出した場合には例外監視部１２８に通知することも可能である。
【００１７】
中間語ファイル読み込み部１２２は、通信装置１５０及びネットワークを介して外部記憶装置１６０から中間語ファイル１６１を読み込み、中間語データ１２７を生成するプログラムである。
【００１８】
中間語解釈実行部１２３は、中間語データ１２７の解釈実行を行うインタプリタが一例であり、中間語データ１２７を解釈して直接実行すると共に、中間語データ１２７の実行途中の例外を検出し例外監視部１２８に通知することも可能である。
【００１９】
実行時翻訳部１２４は、プログラム翻訳実行部であり、実行頻度データから最も実行頻度の高い中間語データ１２７のモジュールを選び出し、機械語データ１２５に変換する。処理速度の確保とメモリ消費量の抑制のために、デバッグ情報を生成しない。
【００２０】
機械語データ１２５は、中央処理装置１１０に直接実行させることが可能な機械語で表現されたプログラムである。
【００２１】
デバッグ情報テーブル１２６は、デバッグに必要な情報を格納するテーブルであり、ソース・中間語・機械語の対応づけに関わる情報を含む。図２に示すように、デバッグ情報テーブル１２６は、ソース・中間語・機械語対応テーブル２００を含む。ソース・中間語・機械語対応テーブル２００は、ソースプログラム内の名前やステートメントから機械語プログラムへの対応づけ（マッピング）を記述するものである。この対応づけの情報の用途の一例として、障害が発生するとその時点での実行位置に対応するソースの場所を決めるために使われる。また、ソースプログラムと機械語プログラムとの間の中間的なデータ構造をアクセスしたほうがソースプログラムへの対応づけが速く確実なケースを想定して、ソース・中間語・機械語対応テーブル２００には、中間語プログラムとの対応づけが併記されている。
【００２２】
また、ソース・中間語・機械語対応テーブル２００は、本発明の一実施の形態において文情報についての情報を記載した文情報テーブル２０１と変数情報について記載した変数情報テーブル２０２とから構成される。
【００２３】
中間語データ１２７は、中間語ファイル１６１を主記憶装置１２０に読み込んだデータであり、中間語解釈実行部１２３によって１命令ずつ解釈実行される。
【００２４】
中間語ファイル１６１は、特定の計算機システムに依存しない仮想的な命令（中間語命令）で記述された中間語プログラムが格納されたファイルである。また、この中間語プログラムが或るソースプログラムを変換して得られたものである場合には、中間語プログラムの各部分が変換前のソースプログラムのどの部分に相当するかの対応づけが可能な情報が、このファイルに格納されている。
【００２５】
例外監視部１２８は、例外の発生を検出し、主記憶装置１２０に存在するが図示しない例外発生フラグをオンにする。例外検出部の検出する例外は、ハードウェア例外、及び基本制御部１２１から通知されるソフトウェア例外の他に、中間語データ解釈実行部１２３の処理で発生する例外、例えばＪａｖａ（Ｒ）言語における例外（Ｅｘｃｅｐｔｉｏｎ）クラスのオブジェクトがスローされる事が考えられる。
【００２６】
例外時翻訳部１２９は、本発明を最も特徴付けるものであり、例外監視部１２８が例外の発生を検知した際に、基本制御部１２１を通じて起動され、その直前に実行していた機械語データ１２５のもとになる中間語モジュールから実行時翻訳部１２４が生成した機械語データ１２５に対応するデバッグ情報を生成する。そして、このデバッグ情報をもとに、機械語データ１２５と、機械語に翻訳前のソースプログラムまたは中間語プログラムとを対応づけて、例外発生時に実行していた機械語データ１２５に対応するソースプログラム情報を特定する。
【００２７】
また、中間語ファイル読み込み部１２２と、中間語解釈実行部１２３と、実行時翻訳部１２４とは、基本制御部１２１によって、外部記憶装置１６０から通信装置１５０及びネットワークを介して主記憶装置１２０に読み込まれて中央処理装置１１０で実行される。
【００２８】
図３は中間語データ１２７の一例を示す図である。図３において、３００は中間語モジュールであり、中間語モジュール３００は、中間語モジュール３００のモジュール名３０１、この中間語モジュール３００に対応するデバッグ情報テーブル１２６へのポインタ３０２、中間語モジュール３００を翻訳した結果得られる機械語データ１２５へのポインタ３０３、中間語モジュール３００の中間語プログラムの命令列を格納する中間語データ領域３０４により構成される。そして、中間語データ１２７は、複数の中間語モジュール３００から構成される。
【００２９】
図４は機械語データ１２５の一例を示す図である。図４において、４００は機械語モジュールであり、この機械語モジュール４００は、複数の機械語命令を格納したデータ領域により構成される。そして、機械語データ１２５は、このような複数の機械語モジュール４００から構成される。
【００３０】
図５は本発明の一実施の形態による翻訳方法を実行する際の基本制御部１２１の起動時における処理手順を説明するフローチャートである。図５に示すフローは、基本制御部１２１が、中間語ファイル１６１を読み込んだ後、中間語解釈実行部１２３と、実行時翻訳部１２４とを起動する処理を示している。このとき、中間語解釈実行部１２３と、実行時翻訳部１２４とは並行して実行される。
（１）まず、基本制御部１２１は、中間語ファイル読み込み部１２２を起動し、中間語ファイル読み込み部１２２の処理が完了するのを待つ（ステップ５０１）。
（２）基本制御部１２１は、中間語ファイル読み込み部１２２の処理の完了後、中間語解釈実行部１２３を起動する（ステップ５０２）。
（３）次に、基本制御部１２１は、実行時翻訳部１２４を起動する（ステップ５０３）。
（４）次に、基本制御部１２１は、図１には示していない例外発生フラグがオンの場合には、すなわち、例外が検出されている場合に、例外時翻訳部１２９を起動する（ステップ５０４、ステップ５０５）。
【００３１】
図６は中間語ファイル読み込み部１２２の処理手順を説明するフローチャートである。図６に示すフローは、中間語ファイル読み込み部１２２が、中間語ファイル１６１を読み込み、中間語データ１２７を生成する処理を示している。
（１）中間語ファイル読み込み部１２２は、図５に説明したステップ５０１の処理で基本制御部１２１により起動されると、通信装置１５０及びネットワークを介して外部記憶装置１６０から中間語ファイル１６１を読み込む（ステップ６０１）。
（２）次に、中間語ファイル読み込み部１２２は、中間語データ１２７を生成する。ここで、生成しされた中間語データ１２７は、図３で説明したように、複数の中間語モジュール３００により構成され、中間語ファイル読み込み部１２２は、各モジュール毎にモジュール名３０１に読み込んだモジュール名を格納し、デバッグ情報テーブル１２６へのポインタ３０２と機械語データ１２５へのポインタ３０３とを”０”で初期化し、中間語データ領域３０４に、読み込んだ中間語ファイル１６１に格納されている中間語プログラムを書き込む（ステップ６０２）。
【００３２】
図７は中間語解釈実行部１２３の処理手順を説明するフローチャートである。図７に示すフローは、中間語解釈実行部１２３が、中間語データ１２７の解釈実行を繰り返す処理を示している。
（１）中間語解釈実行部１２３は、図５に説明したステップ５０２の処理で基本制御部１２１により起動されると、中間語データ１２７から１つだけ中間語モジュール３００を選択する。初期状態では、”ＭＡＩＮ”をモジュール名３０１に持つ中間語モジュールを選択する（ステップ７０１）。
（２）次に、中間語解釈実行部１２３は、ステップ７０１で選択した中間語モジュール３００が機械語プログラムへ翻訳済みか否かを判定し、翻訳済みであった場合、ステップ７０１で選択した中間語モジュール３００に含まれる機械語データ１２５へのポインタ３０３が指し示す機械語モジュール４００に格納された機械語プログラムを、基本制御部１２１に実行させ、実行終了後ステップ７０１の処理に戻る（ステップ７０２、７０３）。
（３）中間語解釈実行部１２３は、ステップ７０１で選択した中間語モジュール３００に含まれる中間語データ領域３０４の１命令を読み込み、その命令が終了命令か否かを判定し、終了命令である場合処理を終了する（ステップ７０５、７０６）。
（４）ステップ７０６の判定で読み込んだ命令が終了命令でなかった場合、中間語解釈実行部１２３は、ステップ７０５で読み込んだ命令が呼出し命令か否かを判定し、その命令が呼出し命令であった場合処理を終了し、そうでない場合、ステップ７０５で読み込んだ命令を直接実行した後、ステップ７０５の処理に戻って、次の命令の処理を続ける（ステップ７０７、７０８）。
【００３３】
図８は実行時翻訳部１２４の処理手順を説明するフローチャートである。図８に示すフローは、中間語プログラムを機械語プログラムへ翻訳する処理に相当し、中間語モジュール３００から他の中間語モジュールへの呼出し命令がある場合に、呼び出される中間語モジュール３００から先に再帰的に機械語プログラムに翻訳し、機械語データ１２５へのポインタ３０３が指し示す機械語モジュール４００に格納する処理を示している。
（１）実行時翻訳部１２４は、引数で渡される中間語モジュール３００に含まれる中間語データ領域３０４から中間語命令を１つだけ読み出し、読み出した中間語命令が他のモジュールへの呼出し命令か否かを判定する（ステップ８０１、８０２）。
（２）ステップ８０２の判定で、読み出した中間語命令が他のモジュールへの呼出し命令である場合、呼出し先の中間語モジュールを引数に実行時翻訳部１２４を再帰的に呼び出して、その中間語モジュールに対して中間語プログラムを機械語プログラムへ翻訳する処理を開始させる（ステップ８０４）。
（３）ステップ８０２の判定で、読み出した中間語命令が他のモジュールへの呼出し命令でなかった場合、実行時翻訳部１２４は、ステップ８０１で読み出した中間語命令を機械語命令に変換し機械語モジュール４００に書き込む（ステップ８０３）。
（４）次に、実行時翻訳部１２４は、ステップ８０１で引数として渡された中間語モジュール３００に含まれる中間語モジュール３００に未処理の中間語命令が残っているか判定し、残っている場合、ステップ８０１の処理に戻り、次の中間語命令に対する処理を続ける（ステップ８０５）。
（５）ステップ８０５の判定で、未処理の中間語命令が残っていなかった場合、実行時翻訳部１２４は、機械語モジュール４００を指し示すポインタを、機械語データ１２５へのポインタ３０３に格納する（ステップ８０６）。
【００３４】
次に例外時翻訳部１２９の処理手順を説明する。これは例外発生時の処理に相当する。例外監視部１２８が例外の発生を検出すると図１には示されていない例外発生フラグをオンにする。図５のフローが示すように、例外発生フラグがオンの場合には、基本制御部１２１が実行時翻訳部１２４を起動せずに例外時翻訳部１２９を起動する（ステップ５０４、ステップ５０５）。
【００３５】
基本制御部１２１により起動された例外時翻訳部１２９は、例外発生時に処理していたモジュール名３０１を含む中間語ファイル１６１を、ソースプログラムと中間語ファイルとの対応がつくようなデバッグ情報を生成するために、再び読み込む。中間語ファイル１６１にはソースプログラム上での位置等を示すソース情報が含まれているので、これに基づいてソースプログラムと中間語ファイルとの対応を、ソース・中間語・機械語対応テーブル２００に記録する。
【００３６】
例外時翻訳部１２９は、次に、中間語モジュール３００と機械語モジュール４００との対応がつくようなデバッグ情報を生成するために中間語モジュール３００を再び機械語に翻訳する。
【００３７】
図９はソース・中間語・機械語対応テーブル２００の一例を示した本発明の一実施の形態であり、例外時翻訳部１２９が生成するデバッグ情報が記録された様子を示すものであり、デバッグ情報テーブル１２６に含まれる。ソース・中間語・機械語対応テーブル２００は、本発明の一実施の形態において（ａ）文情報テーブル２０１と（ｂ）変数情報テーブル２０２とから構成される。
【００３８】
図９における本発明の一実施の形態において、文情報テーブル２０１は、ソースプログラム文番号９０１１と、中間語プログラム命令アドレス９０１２と、機械語プログラム命令アドレス９０１３のフィールドを持つ。例えばエントリ９０１４は、ソースプログラムの文番号１０の文が、中間語プログラムでは、「００００６０」というアドレスに位置する命令となり、機械語プログラムでは「００００４０」というアドレスに位置する命令となることを示している。一例として、前記中間語プログラム命令アドレス９０１２のフィールドには、各中間語モジュール３００内の先頭からのオフセットを示す数値が記載されている。また、前記機械語命令アドレス９０１３のフィールドには、各機械語モジュール４００内の先頭からのオフセットを示す数値が記載されている。
【００３９】
本発明の一実施の形態において、変数情報テーブル２０２は、変数名９０２１と、変数種別９０２２と、型９０２３と、文番号９０２４、および機械語アドレス９０２５の５つのフィールドを持つ。変数名９０２６はソースプログラムにおける変数名、変数種別９０２２は局所変数／大域変数の区別、型９０２３はその変数のデータ型、文番号９０２４はその変数が宣言されたソースプログラム上の位置を表す。機械語アドレス９０２５はその変数の機械語プログラム上でのアドレス情報を示すものである。例えばエントリ９０２６は、変数ｉが、局所変数であり、型はｉｎｔで、ソースプログラムの文番号４に位置し、機械語プログラム上で変数が格納される領域先頭からオフセットが−４であることを示している。なお、変数が格納される領域先頭の先頭アドレス（ベースアドレス）は、一例として、基本制御部１２１が保持しているフレームポインタ等のレジスタ情報の内容を読み出すことによって可能である。
【００４０】
なお、コンパイル時に最適化がなされて機械語内のステートメントの移動や削除がなされた場合などにおいてソースプログラムと中間語プログラムと機械語プログラムの相互の対応づけが困難なことが知られているが、このような場合には変形例として、１対１対応でなく、文番号と複数の命令アドレスとを対応づけて示すことも本発明の趣旨を逸脱せずに実施することが可能である。
【００４１】
図１０は、例外時翻訳部１２９が実行中に例外が発生させた中間語モジュール３００を対象に、中間語命令の各中間語モジュール３００のオフセットとこれを変換して生成した機械語命令の各機械語モジュール４００内でのオフセットとを対応づけながら機械語プログラムに翻訳しなおし、ソース・中間語・機械語対応テーブル２００にデバッグ情報として記録する処理を、フローチャートにて説明するものである。
【００４２】
ここで、中間語モジュール３００から他の中間語モジュールへの呼び出し命令がある場合に、呼び出される中間語モジュール３００から先に再帰的に機械語プログラムに翻訳する処理は行わない。
（１）例外時翻訳部１２９は、引数で渡される中間語モジュール３００に含まれる中間語データ領域３０４から中間語命令を１つだけ読み出す（ステップ１００１）。
（２）例外時翻訳部１２９は、ステップ１００１で読み出した中間語命令を機械語命令に変換し、中間語モジュール３００先頭からのオフセットをデバッグ情報テーブル１２６内の文情報テーブルの中間語プログラム命令アドレス２０１２欄に書き込み、機械語モジュール４００先頭からのオフセットをデバッグ情報テーブル１２６内の文情報テーブル２０１の機械語命令アドレス２０１３欄に書き込む（ステップ１００２〜ステップ１００４）。
（３）次に、例外時翻訳部１２９は、ステップ１００１で引数として渡された中間語モジュール３００に含まれる中間語モジュール３００に未処理の中間語命令が残っているか判定し、残っている場合、ステップ１００１の処理に戻り、次の中間語命令に対する処理を続ける（ステップ１００５）。
（４）ステップ１００５の判定で、未処理の中間語命令が残っていなかった場合、実行時翻訳部１２４は、ステップ１００２〜ステップ１００４で生成されたデバッグ情報テーブル１２６を指し示すポインタを、デバッグ情報テーブル１２６へのポインタ３０２に格納する（ステップ１００６）。
【００４３】
さらに、例外時翻訳部１２９は、前記デバッグ情報テーブル１２６の内容を活用して、ダンプを出力したり、警告を発したりする。実行時のダンプとして出力される情報は、プログラムのデバッグに必要な、例えばプログラムカウンタ、変数の値、スタックポインタの値、及び生成スレッド数、日時などの情報で、ソース・中間語・機械語対応テーブル２００を用いて取得する。例として、例外発生時にソースプログラムのどの部分（行数（文番号））を実行していたかについての情報、そして当該ソースプログラム内の変数について例外発生時の値を表示する場合を示す。
【００４４】
図１１に示すフローは、例外時翻訳部１２９が例外発生時にソースプログラムのどの部分（行数（文番号））を実行していたかについての情報を収集して出力するまでの処理手順を示している。
【００４５】
例外時翻訳部１２９は、はじめに例外発生時に実行していた命令アドレスおよびモジュール名を取り出す（ステップ１１０１）。これは基本制御部１２１が保持しているプログラムカウンタ等の内容を読み出すことによって可能である。次に命令アドレスまたはその近傍に存在する単一または複数の機械語を取り出す（ステップ１１０２）。
【００４６】
ついで例外時翻訳部１２９は、実行時翻訳部１２４によって生成済みの機械語モジュール４００を探索し、例外発生時に実行していた機械語モジュールのなかから前記ステップ１１０２で取り出した機械語の所在（先頭からのオフセット）を求める（ステップ１１０３）。そして、求めたオフセットに対応するソース行数（文番号）を例外時翻訳部１２９が生成した前記デバッグ情報テーブル１２６の文情報テーブル２０１から取得する（ステップ１１０４）。取得した内容は表示装置１４０に出力する（ステップ１１０５）。
【００４７】
ここで、変形例として、機械語が最適化されていてソースと機械語対応が単一の行（文）に限定できない場合には、代わりにモジュール内の複数の行（文）を例外発生箇所の範囲として報告（出力）してもよい。
【００４８】
図１２に示すフローは、例外時翻訳部１２９が例外発生時に実行していたソースプログラム内の変数について例外発生時の値を出力するまでの処理手順を示している。
【００４９】
例外時翻訳部１２９は、はじめにデバッグ情報テーブル１２６の中間語・機械語対応テーブル２００（以降、単に対応テーブルと呼ぶこともある）を参照して、前記モジュールに対応するソースプログラム上での変数を取り出す（ステップ１２０１）。
【００５０】
ついで例外時翻訳部１２９は、前記変数の内容が格納されている主記憶上のアドレスに変換する（ステップ１２０２）。そのためには、前記変数について、変数情報テーブル２０２に記載のオフセットを取得し、変数が格納されている領域のベースアドレスを加算することで主記憶上のアドレスを得る。
【００５１】
そして例外時翻訳部１２９は、ステップ１２０２で得られたアドレスの内容を主記憶から読み出し（ステップ１２０３）、読み出した内容を、変数のデータ型に従って変換し、変数命とその値を表示装置１４０上に出力する（ステップ１２０４）。
【００５２】
以上、本発明の一実施形態について説明したが、本発明は上述した実施形態に限定されるものではない。本発明は、上述した説明から可能な範囲で、また、本発明の実施形態から導かれる範囲で、種々の変形例が可能である。例えば、上述した実施形態は、ソフトウエアを含むものであるが、本発明は、ハードウェアとソフトウェアとの組み合わせ、又はハードウェアのみによって実装され得るものである。本発明は、様々なプログラミング言語によって実装することができる。
【００５３】
【発明の効果】
本発明では、異常が発生しプログラムの実行が停止した場合でも容易にデバッグを行え、かつ運用時の処理が高速なプログラム実行環境を提供できる。
【００５４】
すなわち、本発明によれば、デバッグ情報の生成契機を例外発生時に限定すること、すなわち、性能要求が厳しくその必要性の低い通常運用時には実行時翻訳に関するデバッグ情報を生成しないことが特徴的であり、正常運用時の処理遅延を防ぎながらその必要性の高い例外発生時や異常発生時にのみ実行時翻訳に関するデバッグ情報を運用者に提供することができる。
【００５５】
また、システムの運用管理者などのユーザからみれば、ソースプログラムまたは中間語プログラムを解釈実行中に機械語プログラムへ翻訳する処理を有する実行系において、実行時プログラム翻訳の性能を低下させることなく運用を行えるとともに、運用中のプログラムが異常終了した場合にはその後のデバッグ作業に必要な情報を入手することができる。
【００５６】
さらに、本発明によれば、デバッグ情報付きの機械語プログラムへの翻訳を最も利用可能性の高い例外発生時や異常発生時に限定することによって、従来技術では困難であったデバッグ情報付きの実行時翻訳による使用メモリ量の増大を抑制することができ、しかも必要十分な保守性や信頼性を確保できる。
【図面の簡単な説明】
【図１】装置の概略構成を示すブロック図である。
【図２】デバッグ情報テーブルの構成を示す図である。
【図３】中間語データの一例を示す図である。
【図４】機械語データの一例を示す図である。
【図５】基本制御部の処理を示すフローチャートである
【図６】中間語ファイル読み込み部の処理を示すフローチャートである。
【図７】中間語解釈実行部の処理を示すフローチャートである。
【図８】実行時翻訳部の処理を示すフローチャートである。
【図９】ソース・中間語・機械語対応テーブルの構成を示す図である。
【図１０】例外時翻訳部によるデバッグ情報生成の処理を示すフローチャートである。
【図１１】例外時翻訳部によるソース行数情報取得の処理を示すフローチャートである。
【図１２】例外時翻訳部による変数の値の取得処理を示すフローチャートである。
【符号の説明】
１１０‥中央処理装置、１２０‥主記憶装置、１２１‥基本制御部、１２２‥中間語ファイル読み込み部、１２３‥中間語解釈実行部、１２４‥実行時翻訳部、１２５‥機械語データ、１２６‥デバッグ情報テーブル、１２７‥中間語データ、１２８‥例外監視部、１２９‥例外時翻訳部、１３０‥入力装置、１４０‥表示装置、１５０‥通信装置、１６０‥外部記憶装置、１６１‥中間語ファイル、２００‥ソース・中間語・機械語対応テーブル、２０１‥文情報テーブル、２０２‥変数情報テーブル、３００‥中間語モジュール、３０１‥モジュール名、３０２‥デバッグ情報テーブル１２６へのポインタ、３０３‥機械語データ１２５へのポインタ、３０４‥中間語データ領域、４００‥機械語モジュール。
【図１】
2004054807.tif 000003
【図２】
2004054807.tif 000004
【図３】
2004054807.tif 000005
【図４】
2004054807.tif 000006
【図５】
2004054807.tif 000007
【図６】
2004054807.tif 000008
【図７】
2004054807.tif 000009
【図８】
2004054807.tif 000010
【図９】
2004054807.tif 000011
【図１０】
2004054807.tif 000012
【図１１】
2004054807.tif 000013
【図１２】
2004054807.tif 000014