JP4192519B2 - 情報処理方法および装置 - Google Patents
情報処理方法および装置 Download PDFInfo
- Publication number
- JP4192519B2 JP4192519B2 JP2002214662A JP2002214662A JP4192519B2 JP 4192519 B2 JP4192519 B2 JP 4192519B2 JP 2002214662 A JP2002214662 A JP 2002214662A JP 2002214662 A JP2002214662 A JP 2002214662A JP 4192519 B2 JP4192519 B2 JP 4192519B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- exception
- intermediate language
- machine language
- translation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、実行時プログラム翻訳方法および装置に係り、特に、サーバ計算機と複数の機種の異なるクライアント計算機とがネットワークに接続されたネットワーク環境において、複数の計算機に共通に実行できる中間語プログラムをサーバ計算機から読み込んで、インタプリタのような解釈系によって実行する際に、読み込んだ中間語プログラムをクライアント計算機固有の機械語プログラムへ翻訳する実行時プログラム翻訳方法および装置に関する。
【0002】
【従来の技術】
計算機システムにおける複数機種の計算機に共通の中間語プログラムを利用する実行系においては、その性能向上を目的に、実行時に機械語プログラムへ翻訳する方法が採り入れられている。関係する従来技術として、例えば、特開平10−240546号公報等に記載された技術が知られている。
【0003】
このような実行時プログラム翻訳の使用においては、実行時プログラム翻訳におけるコンパイル処理(「実行時コンパイル」などと一般に呼称)によってCPU負荷が大きくなるとともに、中間語プログラムよりも生成する機械語プログラムの方が格納に必要なメモリサイズが大きくなることが知られている。そして、このようなCPU負荷やメモリ使用量を増やす傾向が実行時プログラム翻訳の適用の阻害要因になることが知られている。たとえば、同じくCPU負荷やメモリ使用量を増やす傾向を有する高信頼化機能、たとえばデバッガ向けの情報取得機能との併用が難しい。
【0004】
デバッガとは、コンピュータプログラム実行時のエラーの検出やデバッグに利用されるツールであり、プログラムの実行をトレースしたり、異常終了時の状態からエラー発生地点を検出する機能をもつことが知られている。このような機能の実現に寄与するのが、上述したデバッガ向けの情報(デバッグ情報)であり、一例として、プログラム翻訳して得られた機械語プログラムが翻訳前の中間語プログラムやソースプログラムのどの部分に対応するかを示す情報を含む。
【0005】
デバッグ情報の生成機能を実行時プログラム翻訳機能(実行時コンパイラ)と併用すると、ソースプログラムまたは中間語プログラムを解釈実行中に機械語プログラムへ翻訳する処理を行う際に、機械語プログラムのデバッグ情報を生成する処理が加わる。結果として、CPU負荷やメモリ使用量に対する実行時プログラム翻訳とデバッグ情報生成、双方のオーバーヘッドが累積するため、システム全体の性能低下が顕著になり双方の併用が難しくなるのである。
【0006】
また、デバッグ情報の生成がプログラム翻訳時(コンパイル時)の最適化を難しくすることも、実行時翻訳との同時サポートに不利になる。最適化とは実行時間の短縮などを目的にプログラムに対して行うコンパイル処理中の変換作業であるが、この変換が、最適化コードともとのソースコードとの対応づけに関する正確な把握を困難にするためである。
【0007】
以上の状況は、従来技術において、高速化を追求するとデバッグの支障となることを意味しており、高速化と高信頼性との両立の困難さを示している。Java(R)の実行系においても事情は同様である。
【0008】
Java(R)の実行系においては、デバッガ向けの情報取得のために、Java(R) Virtual Machine Debugger Interface (JVMDI)が存在するが、このJVMDIと、Java(R)の実行時翻訳技術として知られるジャスト・イン・タイム (Just-In-Time, JIT) コンパイラとの、同時併用を認めない仕様になっているのが一般的である。この事例は、実行時コンパイラ利用時にはエラー発生の際に得られるデバッグ情報が少なくなるためにデバッグが困難になること、すなわち、JITコンパイラなどの実行時コンパイラの適用が実行系全体としての信頼性のマイナス要因に働くことを示唆している。
【0009】
【発明が解決しようとする課題】
本発明は、JITコンパイラを伴うJava(R)実行系のように、ソースプログラムまたは中間語プログラムを解釈実行中に機械語プログラムへ翻訳する処理を有する実行系において、前述した従来技術の問題点を解決し、デバッグ情報の生成に伴う性能の低下とメモリ消費量の増大を最小限に抑制しつつ、運用者がデバッグ情報を効果的に取得することのできる実行時プログラム翻訳方法および装置を提供することを目的とする。
【0010】
【発明を解決するための手段】
本発明においては、複数の電子計算機に共通のソースプログラムまたは中間語プログラムを解釈実行すると共に、計算機固有の機械語プログラムへ翻訳する実行時翻訳方法において、ソースプログラムまたは中間語プログラムを解釈実行する解釈実行部と、前記ソースプログラムまたは中間語プログラムをモジュール単位に機械語プログラムに翻訳する実行時翻訳部とを備え、前記実行時翻訳部により解釈された前記機械語プログラム実行中に例外発生を監視する例外監視部、を備えている。前記実行時翻訳部は、デバッグ情報を生成せずに、処理速度の確保とメモリ消費量の抑制を優先させる。
【0011】
さらに、本発明においては、前記例外監視部によって例外を検知した際にその直前に実行していた機械語プログラムに相当するソースプログラムまたは中間語プログラムをモジュール単位でデバッグ情報を生成しながら機械語プログラムに翻訳しなおし、生成したデバッグ情報をもとにソースプログラムまたは中間語プログラム上での例外発生箇所を特定する例外時翻訳部を備える。
【0012】
本発明によれば、通常時はデバッグ情報を持たずに実行し、異常時にのみ必要なデバッグ情報を出力できる。すなわち、デバッグ情報の生成契機を例外発生時に限定することと、性能要求の厳しい通常運用時にはデバッグ情報を生成しないことが特徴的であり、正常運用時の処理遅延を防ぐとともに、デバッグ情報の必要性の高い例外発生時や異常発生時にはデバッグ情報を生成して運用者に現象解析などに必要な情報を提供することができる。
さらに、本発明によれば、デバッグ情報付きの機械語プログラムへの実行時プログラム翻訳を利用可能性の高い例外発生時や異常発生時に限定することによって、生成する機械語に対するデバッグ情報を保持するメモリ領域を削減できるので、メモリ消費量の増大を抑制できる。
【0013】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を詳細に説明する。
【0014】
図1は本発明の一実施形態による実行時プログラム翻訳方法を実施する装置の概略構成を示すブロック図である。図1において、110は中央処理装置、120は主記憶装置、121は基本制御部、122は中間語ファイル読み込み部、123は中間語データ解釈実行部、124は実行時翻訳部、125は機械語データ、126はデバッグ情報テーブル、127は中間語データ、128は例外監視部、129は例外時翻訳部、130は入力装置、140は表示装置、150は通信装置、160は外部記憶装置、161は中間語ファイルである。
【0015】
主記憶装置120には、基本制御部121と、中間語ファイル読み込み部122と、中間語解釈実行部123と、実行時翻訳部124とがロードされて格納される。また、主記憶装置120には、中間語ファイル読み込み部によって生成された中間語データ127、中間語解釈実行部123によって生成された実行頻度データ、実行時翻訳部124によって生成された機械語データ125が格納される。また、外部記憶装置160には、中間語ファイル161が格納される。
【0016】
基本制御部121は、本発明による方法を実施する装置全体を制御するプログラムであり、図示装置が立ち上げられたとき、中央処理装置110によって実行され、装置のハードウェアとプログラムとの基本制御を行う。そして、装置の各ハードウェアと各プログラムの例外発生を検出して、例外を検出した場合には例外監視部128に通知することも可能である。
【0017】
中間語ファイル読み込み部122は、通信装置150及びネットワークを介して外部記憶装置160から中間語ファイル161を読み込み、中間語データ127を生成するプログラムである。
【0018】
中間語解釈実行部123は、中間語データ127の解釈実行を行うインタプリタが一例であり、中間語データ127を解釈して直接実行すると共に、中間語データ127の実行途中の例外を検出し例外監視部128に通知することも可能である。
【0019】
実行時翻訳部124は、プログラム翻訳実行部であり、実行頻度データから最も実行頻度の高い中間語データ127のモジュールを選び出し、機械語データ125に変換する。処理速度の確保とメモリ消費量の抑制のために、デバッグ情報を生成しない。
【0020】
機械語データ125は、中央処理装置110に直接実行させることが可能な機械語で表現されたプログラムである。
【0021】
デバッグ情報テーブル126は、デバッグに必要な情報を格納するテーブルであり、ソース・中間語・機械語の対応づけに関わる情報を含む。図2に示すように、デバッグ情報テーブル126は、ソース・中間語・機械語対応テーブル200を含む。ソース・中間語・機械語対応テーブル200は、ソースプログラム内の名前やステートメントから機械語プログラムへの対応づけ(マッピング)を記述するものである。この対応づけの情報の用途の一例として、障害が発生するとその時点での実行位置に対応するソースの場所を決めるために使われる。また、ソースプログラムと機械語プログラムとの間の中間的なデータ構造をアクセスしたほうがソースプログラムへの対応づけが速く確実なケースを想定して、ソース・中間語・機械語対応テーブル200には、中間語プログラムとの対応づけが併記されている。
【0022】
また、ソース・中間語・機械語対応テーブル200は、本発明の一実施の形態において文情報についての情報を記載した文情報テーブル201と変数情報について記載した変数情報テーブル202とから構成される。
【0023】
中間語データ127は、中間語ファイル161を主記憶装置120に読み込んだデータであり、中間語解釈実行部123によって1命令ずつ解釈実行される。
【0024】
中間語ファイル161は、特定の計算機システムに依存しない仮想的な命令(中間語命令)で記述された中間語プログラムが格納されたファイルである。また、この中間語プログラムが或るソースプログラムを変換して得られたものである場合には、中間語プログラムの各部分が変換前のソースプログラムのどの部分に相当するかの対応づけが可能な情報が、このファイルに格納されている。
【0025】
例外監視部128は、例外の発生を検出し、主記憶装置120に存在するが図示しない例外発生フラグをオンにする。例外検出部の検出する例外は、ハードウェア例外、及び基本制御部121から通知されるソフトウェア例外の他に、中間語データ解釈実行部123の処理で発生する例外、例えばJava(R)言語における例外(Exception)クラスのオブジェクトがスローされる事が考えられる。
【0026】
例外時翻訳部129は、本発明を最も特徴付けるものであり、例外監視部128が例外の発生を検知した際に、基本制御部121を通じて起動され、その直前に実行していた機械語データ125のもとになる中間語モジュールから実行時翻訳部124が生成した機械語データ125に対応するデバッグ情報を生成する。そして、このデバッグ情報をもとに、機械語データ125と、機械語に翻訳前のソースプログラムまたは中間語プログラムとを対応づけて、例外発生時に実行していた機械語データ125に対応するソースプログラム情報を特定する。
【0027】
また、中間語ファイル読み込み部122と、中間語解釈実行部123と、実行時翻訳部124とは、基本制御部121によって、外部記憶装置160から通信装置150及びネットワークを介して主記憶装置120に読み込まれて中央処理装置110で実行される。
【0028】
図3は中間語データ127の一例を示す図である。図3において、300は中間語モジュールであり、中間語モジュール300は、中間語モジュール300のモジュール名301、この中間語モジュール300に対応するデバッグ情報テーブル126へのポインタ302、中間語モジュール300を翻訳した結果得られる機械語データ125へのポインタ303、中間語モジュール300の中間語プログラムの命令列を格納する中間語データ領域304により構成される。そして、中間語データ127は、複数の中間語モジュール300から構成される。
【0029】
図4は機械語データ125の一例を示す図である。図4において、400は機械語モジュールであり、この機械語モジュール400は、複数の機械語命令を格納したデータ領域により構成される。そして、機械語データ125は、このような複数の機械語モジュール400から構成される。
【0030】
図5は本発明の一実施の形態による翻訳方法を実行する際の基本制御部121の起動時における処理手順を説明するフローチャートである。図5に示すフローは、基本制御部121が、中間語ファイル161を読み込んだ後、中間語解釈実行部123と、実行時翻訳部124とを起動する処理を示している。このとき、中間語解釈実行部123と、実行時翻訳部124とは並行して実行される。
(1)まず、基本制御部121は、中間語ファイル読み込み部122を起動し、中間語ファイル読み込み部122の処理が完了するのを待つ(ステップ501)。
(2)基本制御部121は、中間語ファイル読み込み部122の処理の完了後、中間語解釈実行部123を起動する(ステップ502)。
(3)次に、基本制御部121は、実行時翻訳部124を起動する(ステップ503)。
(4)次に、基本制御部121は、図1には示していない例外発生フラグがオンの場合には、すなわち、例外が検出されている場合に、例外時翻訳部129を起動する(ステップ504、ステップ505)。
【0031】
図6は中間語ファイル読み込み部122の処理手順を説明するフローチャートである。図6に示すフローは、中間語ファイル読み込み部122が、中間語ファイル161を読み込み、中間語データ127を生成する処理を示している。
(1)中間語ファイル読み込み部122は、図5に説明したステップ501の処理で基本制御部121により起動されると、通信装置150及びネットワークを介して外部記憶装置160から中間語ファイル161を読み込む(ステップ601)。
(2)次に、中間語ファイル読み込み部122は、中間語データ127を生成する。ここで、生成しされた中間語データ127は、図3で説明したように、複数の中間語モジュール300により構成され、中間語ファイル読み込み部122は、各モジュール毎にモジュール名301に読み込んだモジュール名を格納し、デバッグ情報テーブル126へのポインタ302と機械語データ125へのポインタ303とを"0"で初期化し、中間語データ領域304に、読み込んだ中間語ファイル161に格納されている中間語プログラムを書き込む(ステップ602)。
【0032】
図7は中間語解釈実行部123の処理手順を説明するフローチャートである。図7に示すフローは、中間語解釈実行部123が、中間語データ127の解釈実行を繰り返す処理を示している。
(1)中間語解釈実行部123は、図5に説明したステップ502の処理で基本制御部121により起動されると、中間語データ127から1つだけ中間語モジュール300を選択する。初期状態では、"MAIN"をモジュール名301に持つ中間語モジュールを選択する(ステップ701)。
(2)次に、中間語解釈実行部123は、ステップ701で選択した中間語モジュール300が機械語プログラムへ翻訳済みか否かを判定し、翻訳済みであった場合、ステップ701で選択した中間語モジュール300に含まれる機械語データ125へのポインタ303が指し示す機械語モジュール400に格納された機械語プログラムを、基本制御部121に実行させ、実行終了後ステップ701の処理に戻る
(ステップ702、703)。
(3)中間語解釈実行部123は、ステップ701で選択した中間語モジュール300に含まれる中間語データ領域304の1命令を読み込み、その命令が終了命令か否かを判定し、終了命令である場合処理を終了する(ステップ705、706)。
(4)ステップ706の判定で読み込んだ命令が終了命令でなかった場合、中間語解釈実行部123は、ステップ705で読み込んだ命令が呼出し命令か否かを判定し、その命令が呼出し命令であった場合処理を終了し、そうでない場合、ステップ705で読み込んだ命令を直接実行した後、ステップ705の処理に戻って、次の命令の処理を続ける(ステップ707、708)。
【0033】
図8は実行時翻訳部124の処理手順を説明するフローチャートである。図8に示すフローは、中間語プログラムを機械語プログラムへ翻訳する処理に相当し、中間語モジュール300から他の中間語モジュールへの呼出し命令がある場合に、呼び出される中間語モジュール300から先に再帰的に機械語プログラムに翻訳し、機械語データ125へのポインタ303が指し示す機械語モジュール400に格納する処理を示している。
(1)実行時翻訳部124は、引数で渡される中間語モジュール300に含まれる中間語データ領域304から中間語命令を1つだけ読み出し、読み出した中間語命令が他のモジュールへの呼出し命令か否かを判定する(ステップ801、802)。
(2)ステップ802の判定で、読み出した中間語命令が他のモジュールへの呼出し命令である場合、呼出し先の中間語モジュールを引数に実行時翻訳部124を再帰的に呼び出して、その中間語モジュールに対して中間語プログラムを機械語プログラムへ翻訳する処理を開始させる(ステップ804)。
(3)ステップ802の判定で、読み出した中間語命令が他のモジュールへの呼出し命令でなかった場合、実行時翻訳部124は、ステップ801で読み出した中間語命令を機械語命令に変換し機械語モジュール400に書き込む(ステップ803)。
(4)次に、実行時翻訳部124は、ステップ801で引数として渡された中間語モジュール300に含まれる中間語モジュール300に未処理の中間語命令が残っているか判定し、残っている場合、ステップ801の処理に戻り、次の中間語命令に対する処理を続ける(ステップ805)。
(5)ステップ805の判定で、未処理の中間語命令が残っていなかった場合、実行時翻訳部124は、機械語モジュール400を指し示すポインタを、機械語データ125へのポインタ303に格納する(ステップ806)。
【0034】
次に例外時翻訳部129の処理手順を説明する。これは例外発生時の処理に相当する。例外監視部128が例外の発生を検出すると図1には示されていない例外発生フラグをオンにする。図5のフローが示すように、例外発生フラグがオンの場合には、基本制御部121が実行時翻訳部124を起動せずに例外時翻訳部129を起動する(ステップ504、ステップ505)。
【0035】
基本制御部121により起動された例外時翻訳部129は、例外発生時に処理していたモジュール名301を含む中間語ファイル161を、ソースプログラムと中間語ファイルとの対応がつくようなデバッグ情報を生成するために、再び読み込む。中間語ファイル161にはソースプログラム上での位置等を示すソース情報が含まれているので、これに基づいてソースプログラムと中間語ファイルとの対応を、ソース・中間語・機械語対応テーブル200に記録する。
【0036】
例外時翻訳部129は、次に、中間語モジュール300と機械語モジュール400との対応がつくようなデバッグ情報を生成するために中間語モジュール300を再び機械語に翻訳する。
【0037】
図9はソース・中間語・機械語対応テーブル200の一例を示した本発明の一実施の形態であり、例外時翻訳部129が生成するデバッグ情報が記録された様子を示すものであり、デバッグ情報テーブル126に含まれる。ソース・中間語・機械語対応テーブル200は、本発明の一実施の形態において(a)文情報テーブル201と(b)変数情報テーブル202とから構成される。
【0038】
図9における本発明の一実施の形態において、文情報テーブル201は、ソースプログラム文番号9011と、中間語プログラム命令アドレス9012と、機械語プログラム命令アドレス9013のフィールドを持つ。例えばエントリ9014は、ソースプログラムの文番号10の文が、中間語プログラムでは、「000060」というアドレスに位置する命令となり、機械語プログラムでは「000040」というアドレスに位置する命令となることを示している。一例として、前記中間語プログラム命令アドレス9012のフィールドには、各中間語モジュール300内の先頭からのオフセットを示す数値が記載されている。また、前記機械語命令アドレス9013のフィールドには、各機械語モジュール400内の先頭からのオフセットを示す数値が記載されている。
【0039】
本発明の一実施の形態において、変数情報テーブル202は、変数名9021と、変数種別9022と、型9023と、文番号9024、および機械語アドレス9025の5つのフィールドを持つ。変数名9026はソースプログラムにおける変数名、変数種別9022は局所変数/大域変数の区別、型9023はその変数のデータ型、文番号9024はその変数が宣言されたソースプログラム上の位置を表す。機械語アドレス9025はその変数の機械語プログラム上でのアドレス情報を示すものである。例えばエントリ9026は、変数iが、局所変数であり、型はintで、ソースプログラムの文番号4に位置し、機械語プログラム上で変数が格納される領域先頭からオフセットが−4であることを示している。なお、変数が格納される領域先頭の先頭アドレス(ベースアドレス)は、一例として、基本制御部121が保持しているフレームポインタ等のレジスタ情報の内容を読み出すことによって可能である。
【0040】
なお、コンパイル時に最適化がなされて機械語内のステートメントの移動や削除がなされた場合などにおいてソースプログラムと中間語プログラムと機械語プログラムの相互の対応づけが困難なことが知られているが、このような場合には変形例として、1対1対応でなく、文番号と複数の命令アドレスとを対応づけて示すことも本発明の趣旨を逸脱せずに実施することが可能である。
【0041】
図10は、例外時翻訳部129が実行中に例外が発生させた中間語モジュール300を対象に、中間語命令の各中間語モジュール300のオフセットとこれを変換して生成した機械語命令の各機械語モジュール400内でのオフセットとを対応づけながら機械語プログラムに翻訳しなおし、ソース・中間語・機械語対応テーブル200にデバッグ情報として記録する処理を、フローチャートにて説明するものである。
【0042】
ここで、中間語モジュール300から他の中間語モジュールへの呼び出し命令がある場合に、呼び出される中間語モジュール300から先に再帰的に機械語プログラムに翻訳する処理は行わない。
(1)例外時翻訳部129は、引数で渡される中間語モジュール300に含まれる中間語データ領域304から中間語命令を1つだけ読み出す(ステップ1001)。
(2)例外時翻訳部129は、ステップ1001で読み出した中間語命令を機械語命令に変換し、中間語モジュール300先頭からのオフセットをデバッグ情報テーブル126内の文情報テーブルの中間語プログラム命令アドレス2012欄に書き込み、機械語モジュール400先頭からのオフセットをデバッグ情報テーブル126内の文情報テーブル201の機械語命令アドレス2013欄に書き込む(ステップ1002〜ステップ1004)。
(3)次に、例外時翻訳部129は、ステップ1001で引数として渡された中間語モジュール300に含まれる中間語モジュール300に未処理の中間語命令が残っているか判定し、残っている場合、ステップ1001の処理に戻り、次の中間語命令に対する処理を続ける(ステップ1005)。
(4)ステップ1005の判定で、未処理の中間語命令が残っていなかった場合、実行時翻訳部124は、ステップ1002〜ステップ1004で生成されたデバッグ情報テーブル126を指し示すポインタを、デバッグ情報テーブル126へのポインタ302に格納する(ステップ1006)。
【0043】
さらに、例外時翻訳部129は、前記デバッグ情報テーブル126の内容を活用して、ダンプを出力したり、警告を発したりする。実行時のダンプとして出力される情報は、プログラムのデバッグに必要な、例えばプログラムカウンタ、変数の値、スタックポインタの値、及び生成スレッド数、日時などの情報で、ソース・中間語・機械語対応テーブル200を用いて取得する。例として、例外発生時にソースプログラムのどの部分(行数(文番号))を実行していたかについての情報、そして当該ソースプログラム内の変数について例外発生時の値を表示する場合を示す。
【0044】
図11に示すフローは、例外時翻訳部129が例外発生時にソースプログラムのどの部分(行数(文番号))を実行していたかについての情報を収集して出力するまでの処理手順を示している。
【0045】
例外時翻訳部129は、はじめに例外発生時に実行していた命令アドレスおよびモジュール名を取り出す(ステップ1101)。これは基本制御部121が保持しているプログラムカウンタ等の内容を読み出すことによって可能である。次に命令アドレスまたはその近傍に存在する単一または複数の機械語を取り出す(ステップ1102)。
【0046】
ついで例外時翻訳部129は、実行時翻訳部124によって生成済みの機械語モジュール400を探索し、例外発生時に実行していた機械語モジュールのなかから前記ステップ1102で取り出した機械語の所在(先頭からのオフセット)を求める(ステップ1103)。そして、求めたオフセットに対応するソース行数(文番号)を例外時翻訳部129が生成した前記デバッグ情報テーブル126の文情報テーブル201から取得する(ステップ1104)。取得した内容は表示装置140に出力する(ステップ1105)。
【0047】
ここで、変形例として、機械語が最適化されていてソースと機械語対応が単一の行(文)に限定できない場合には、代わりにモジュール内の複数の行(文)を例外発生箇所の範囲として報告(出力)してもよい。
【0048】
図12に示すフローは、例外時翻訳部129が例外発生時に実行していたソースプログラム内の変数について例外発生時の値を出力するまでの処理手順を示している。
【0049】
例外時翻訳部129は、はじめにデバッグ情報テーブル126の中間語・機械語対応テーブル200(以降、単に対応テーブルと呼ぶこともある)を参照して、前記モジュールに対応するソースプログラム上での変数を取り出す(ステップ1201)。
【0050】
ついで例外時翻訳部129は、前記変数の内容が格納されている主記憶上のアドレスに変換する(ステップ1202)。そのためには、前記変数について、変数情報テーブル202に記載のオフセットを取得し、変数が格納されている領域のベースアドレスを加算することで主記憶上のアドレスを得る。
【0051】
そして例外時翻訳部129は、ステップ1202で得られたアドレスの内容を主記憶から読み出し(ステップ1203)、読み出した内容を、変数のデータ型に従って変換し、変数命とその値を表示装置140上に出力する(ステップ1204)。
【0052】
以上、本発明の一実施形態について説明したが、本発明は上述した実施形態に限定されるものではない。本発明は、上述した説明から可能な範囲で、また、本発明の実施形態から導かれる範囲で、種々の変形例が可能である。例えば、上述した実施形態は、ソフトウエアを含むものであるが、本発明は、ハードウェアとソフトウェアとの組み合わせ、又はハードウェアのみによって実装され得るものである。本発明は、様々なプログラミング言語によって実装することができる。
【0053】
【発明の効果】
本発明では、異常が発生しプログラムの実行が停止した場合でも容易にデバッグを行え、かつ運用時の処理が高速なプログラム実行環境を提供できる。
【0054】
すなわち、本発明によれば、デバッグ情報の生成契機を例外発生時に限定すること、すなわち、性能要求が厳しくその必要性の低い通常運用時には実行時翻訳に関するデバッグ情報を生成しないことが特徴的であり、正常運用時の処理遅延を防ぎながらその必要性の高い例外発生時や異常発生時にのみ実行時翻訳に関するデバッグ情報を運用者に提供することができる。
【0055】
また、システムの運用管理者などのユーザからみれば、ソースプログラムまたは中間語プログラムを解釈実行中に機械語プログラムへ翻訳する処理を有する実行系において、実行時プログラム翻訳の性能を低下させることなく運用を行えるとともに、運用中のプログラムが異常終了した場合にはその後のデバッグ作業に必要な情報を入手することができる。
【0056】
さらに、本発明によれば、デバッグ情報付きの機械語プログラムへの翻訳を最も利用可能性の高い例外発生時や異常発生時に限定することによって、従来技術では困難であったデバッグ情報付きの実行時翻訳による使用メモリ量の増大を抑制することができ、しかも必要十分な保守性や信頼性を確保できる。
【図面の簡単な説明】
【図1】 装置の概略構成を示すブロック図である。
【図2】 デバッグ情報テーブルの構成を示す図である。
【図3】 中間語データの一例を示す図である。
【図4】 機械語データの一例を示す図である。
【図5】 基本制御部の処理を示すフローチャートである
【図6】 中間語ファイル読み込み部の処理を示すフローチャートである。
【図7】 中間語解釈実行部の処理を示すフローチャートである。
【図8】 実行時翻訳部の処理を示すフローチャートである。
【図9】 ソース・中間語・機械語対応テーブルの構成を示す図である。
【図10】 例外時翻訳部によるデバッグ情報生成の処理を示すフローチャートである。
【図11】 例外時翻訳部によるソース行数情報取得の処理を示すフローチャートである。
【図12】 例外時翻訳部による変数の値の取得処理を示すフローチャートである。
【符号の説明】
110‥中央処理装置、120‥主記憶装置、121‥基本制御部、122‥中間語ファイル読み込み部、123‥中間語解釈実行部、124‥実行時翻訳部、125‥機械語データ、126‥デバッグ情報テーブル、127‥中間語データ、128‥例外監視部、129‥例外時翻訳部、130‥入力装置、140‥表示装置、150‥通信装置、160‥外部記憶装置、161‥中間語ファイル、200‥ソース・中間語・機械語対応テーブル、201‥文情報テーブル、202‥変数情報テーブル、300‥中間語モジュール、301‥モジュール名、302‥デバッグ情報テーブル126へのポインタ、303‥機械語データ125へのポインタ、304‥中間語データ領域、400‥機械語モジュール。
Claims (4)
- 複数の電子計算機に共通の言語で記述された中間語プログラムを解釈実行する中間語解釈実行部と、
前記中間語解釈実行部の解釈実行と並行して、中間語プログラムを計算機固有の機械語プログラムへデバッグ情報を生成せずに翻訳する実行時プログラム翻訳手段と、
翻訳された前記機械語プログラムを実行する制御手段と、
前記機械語プログラム実行中に例外発生を監視する例外監視手段と、
前記例外監視手段が例外を検知した場合に、例外を検知した際に実行していた機械語プログラムの翻訳前の中間語プログラムを機械語プログラムに翻訳しなおすことによって、機械語プログラムのデバッグ情報を生成する例外時プログラム翻訳手段とを備えることを特徴とする情報処理装置。 - 中央処理装置が、複数の電子計算機に共通の言語で記述された中間語プログラムを解釈実行する中間語解釈実行工程と、
前記中間語解釈実行工程と並行して、中間語プログラムを計算機固有の機械語プログラムへデバッグ情報を生成せずに翻訳する実行時プログラム翻訳工程と、
翻訳された前記機械語プログラムを実行する実行工程と、
前記実行時プログラム翻訳工程により解釈された前記機械語実行中に例外発生を監視する例外監視工程と、
前記例外監視工程によって例外を検知した場合に、例外を検知した際に実行していた機械語プログラムの翻訳前の中間語プログラムを機械語プログラムに翻訳しなおすことによって、機械語プログラムのデバッグ情報を生成する例外時プログラム翻訳工程とを行うことを特徴とする情報処理方法。 - 請求項1において、
前記実行時プログラム翻訳手段及び前記例外時プログラム翻訳手段は、前記中間語プログラムをモジュール単位に機械語プログラムに翻訳し、
前記例外監視手段が例外を検知した場合に、例外を検知した際に実行していたモジュールを翻訳しなおし、
前記モジュールは、前記デバッグ情報へのポインタを有することを特徴とする情報処理装置。 - 請求項2において、
前記実行時プログラム翻訳工程及び前記例外時プログラム翻訳工程では、前記中間語プログラムをモジュール単位に機械語プログラムに翻訳し、
前記例外監視工程によって例外を検知した場合に、例外を検知した際に実行していたモジュールを翻訳しなおし、
前記モジュールは、前記デバッグ情報へのポインタを有することを特徴とする情報処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002214662A JP4192519B2 (ja) | 2002-07-24 | 2002-07-24 | 情報処理方法および装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002214662A JP4192519B2 (ja) | 2002-07-24 | 2002-07-24 | 情報処理方法および装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004054807A JP2004054807A (ja) | 2004-02-19 |
JP4192519B2 true JP4192519B2 (ja) | 2008-12-10 |
Family
ID=31936892
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002214662A Expired - Fee Related JP4192519B2 (ja) | 2002-07-24 | 2002-07-24 | 情報処理方法および装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4192519B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011107883A (ja) * | 2009-11-16 | 2011-06-02 | Renesas Electronics Corp | デバッグ装置 |
US8627303B2 (en) * | 2009-11-30 | 2014-01-07 | International Business Machines Corporation | Memory optimization of virtual machine code by partitioning extraneous information |
-
2002
- 2002-07-24 JP JP2002214662A patent/JP4192519B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004054807A (ja) | 2004-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8156475B2 (en) | Device and method for testing embedded software using emulator | |
US6836884B1 (en) | Method and system for editing software programs | |
US8549505B2 (en) | Profiling method, system, and recording medium having a profiling program | |
US6289446B1 (en) | Exception handling utilizing call instruction with context information | |
US8458681B1 (en) | Method and system for optimizing the object code of a program | |
US6253317B1 (en) | Method and apparatus for providing and handling traps | |
US20120331449A1 (en) | Device, method and computer program product for evaluating a debugger script | |
US20080127113A1 (en) | Method and system for implementing watchpoints | |
US20120317551A1 (en) | Post-compile instrumentation of object code for generating execution trace data | |
KR20080050118A (ko) | 임베디드용 소프트웨어의 오류 검출 방법 | |
CN101482845B (zh) | 一种调用即时调试器的方法和系统 | |
US20070103175A1 (en) | Static instrumentation macros for fast declaration free dynamic probes | |
US20060041867A1 (en) | Method, apparatus and computer program product for implementing enhanced compiled breakpoint analysis | |
US7523446B2 (en) | User-space return probes | |
US20060277371A1 (en) | System and method to instrument references to shared memory | |
US7240334B1 (en) | Methods, systems, and computer program products for deferred computer program tracing | |
US11922168B2 (en) | Stack traces using shadow stack | |
US20090100413A1 (en) | Stack Walking Enhancements Using Sensorpoints | |
US7530060B1 (en) | Methods and computer program product for optimizing binaries with coding style formalization | |
US20020073359A1 (en) | System and method for high priority machine check analysis | |
CN102722438A (zh) | 一种内核调试的方法和设备 | |
US20070150866A1 (en) | Displaying parameters associated with call statements | |
JP4192519B2 (ja) | 情報処理方法および装置 | |
US20050066312A1 (en) | Inter-job breakpoint apparatus and method | |
CN116795576A (zh) | 基于日志打印的设备驱动调试方法、装置和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040330 |
|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20060419 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070605 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070803 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070918 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071114 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080603 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080731 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20080826 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080908 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111003 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121003 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131003 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |