JP2004355072A - 例外情報表示方法及び実施装置並びに処理プログラム - Google Patents
例外情報表示方法及び実施装置並びに処理プログラム Download PDFInfo
- Publication number
- JP2004355072A JP2004355072A JP2003148634A JP2003148634A JP2004355072A JP 2004355072 A JP2004355072 A JP 2004355072A JP 2003148634 A JP2003148634 A JP 2003148634A JP 2003148634 A JP2003148634 A JP 2003148634A JP 2004355072 A JP2004355072 A JP 2004355072A
- Authority
- JP
- Japan
- Prior art keywords
- exception
- exception information
- information
- sentence
- name
- 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.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
- User Interface Of Digital Computer (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】ソースプログラムの各文で起こる例外とどの様にハンドリングされるかに関する情報を提示し、プログラマのソースプログラム編集作業を支援する。
【解決手段】例外情報生成ツールを呼び出してソースプログラム中の各文に対応する例外情報を格納した例外情報ファイルの作成または更新を行うステップと、前記例外情報を解析し、ソースプログラム中の各文の位置を示す文位置情報テーブル、各文の位置に対応する例外情報を示す例外情報テーブル、前記例外情報の例外名を示す例外名テーブルをメモリ中に展開するステップと、例外情報の表示指示が行われた文の位置を前記文位置情報テーブルにより特定するステップと、前記特定された文の位置に対応する例外情報を前記例外情報テーブルから抽出するステップと、前記抽出した例外情報に対応する例外名を前記例外名テーブルから取得するステップと、前記抽出した例外情報と前記取得した例外名を例外情報ガイドに設定して表示するステップとを有するものである。
【選択図】 図1
【解決手段】例外情報生成ツールを呼び出してソースプログラム中の各文に対応する例外情報を格納した例外情報ファイルの作成または更新を行うステップと、前記例外情報を解析し、ソースプログラム中の各文の位置を示す文位置情報テーブル、各文の位置に対応する例外情報を示す例外情報テーブル、前記例外情報の例外名を示す例外名テーブルをメモリ中に展開するステップと、例外情報の表示指示が行われた文の位置を前記文位置情報テーブルにより特定するステップと、前記特定された文の位置に対応する例外情報を前記例外情報テーブルから抽出するステップと、前記抽出した例外情報に対応する例外名を前記例外名テーブルから取得するステップと、前記抽出した例外情報と前記取得した例外名を例外情報ガイドに設定して表示するステップとを有するものである。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明はプログラムで実行される例外処理の情報を表示する例外情報表示装置に関するものである。
【0002】
【従来の技術】
コンパイラの解析機能またはコンパイラの解析機能と同等の解析機能を持つツール等を利用して、プログラミングの支援を行うプログラムとしては、ブラウザと呼ばれるプログラムが存在している。ユーザはブラウザを使うことで、プログラム中の変数や関数等の定義位置や参照位置を相互に参照したり、関数等の呼び出し関係を確認したりすることができる。
【0003】
ブラウザの機能は、ソースプログラムを解析して変数名や関数名等の名前とその出現位置のリストを作成し、そのリストを基に参照関係や呼び出し関係の表や図を作成するというものである。ブラウザの機能は変数や関数等、プログラム中で名前を使って直接参照される要素に限って使用できる機能である。
【0004】
また、オブジェクト指向プログラミングにおいてプログラミングの支援を行う装置としては、COBOL言語で作成されている既存のプログラム資産を、オブジェクト指向プログラミングを用いて作成するプログラムから再利用することができるようにするオブジェクト定義自動生成装置が提案されている(例えば特許文献1参照)。
【0005】
【特許文献1】
特開平8−278887号公報
【0006】
【発明が解決しようとする課題】
言語レベルで例外処理機構を持つプログラミング言語において、ある文の実行中にどの様な例外が発生する可能性があるか、また各々の例外が発生した場合にどの様にハンドリングされるかは、ソースプログラム中の離れた箇所に書かれた複数の文からの影響を受けることがある。従って、プログラマがソースプログラムを記述する際に、自分が現在記述中の文ではどの様な例外が発生する可能性があり、発生した場合にどの様にハンドリングされることになっているかを把握することは容易ではない。
【0007】
各文で発生する可能性のある例外や各々の例外が発生した場合にどの様にハンドリングされるかに関する情報は、ソースプログラムを解析することで抽出することができる。ソースプログラムを解析することでプログラマを支援するプログラムとしては、ブラウザと呼ばれるプログラムが従来から存在していた。しかし、例外は変数や関数と異なり名前で参照されたり呼び出されたりするとは限らず、通常は文を実行中にある特定の現象が観測されたときに処理系が自動的に発生させるものである為、ブラウザの様にソースプログラム中に出現する名前を基に必要な情報の収集を行う方法は適用できない。この為、ソースプログラム中の各文で発生する例外とそのハンドリング方法についてプログラマを支援するプログラムはこれまで存在していなかった。
【0008】
その為、プログラマは、例外処理向けのコーディングが適切に記述されていることを確認する為に、ソースプログラムをコンパイルして実際に動作させてみて、その挙動を観察し、想定した例外が発生し、その例外が意図した通りにハンドリングされていることや、想定外の例外が発生していないこと等を確認するという作業を行っていた。
【0009】
本発明の目的は上記問題を解決し、ソースプログラム中の各文で起こる例外とその例外が起こった場合にどの様にハンドリングされるかに関する情報を提示し、プログラマのソースプログラム編集作業を支援することが可能な技術を提供することにある。
【0010】
【課題を解決するための手段】
本発明は、プログラムで実行される例外処理の情報を表示する例外情報表示装置において、例外情報の表示指示が行われた文の位置に対応する例外情報を例外情報テーブルから抽出して表示するものである。
【0011】
本発明では、ユーザの要求に応じて指定された文で発生する可能性のある例外とその例外が発生した場合にどの様にハンドリングされるかを示す例外情報ガイドをエディタ等により表示することで、プログラミング作業を支援する。
【0012】
例外情報ガイドの表示には例外情報生成ツールが出力する例外情報ファイルを利用する(例外情報生成ツールはエディタとは別プログラムとしても良いし、エディタに組み込まれていても良い)。例外情報生成ツールは指定されたソースプログラムを解析し、各々の例外がオブジェクトコードにおいてどの様にハンドリングされるかについての情報を例外情報ファイルに出力する(例外情報ファイルの展開される装置はメモリであっても良い)。例外情報生成ツールはコンパイラと同等な解析を行って各々の例外がどの様にハンドリングされるかを調査する。従って、例外情報生成ツールの生成する例外ハンドリングに関する情報はコンパイラが生成するオブジェクトコードの実行中に例外が発生した場合の動作と完全に一致する。これにより、ユーザはプログラムを実行して動作を観察しながら例外が意図した通りにハンドリングされているかを確認する必要がなくなる。
【0013】
エディタはユーザから要求があった時点で例外情報ファイルを参照し、指定された文で発生する可能性のある例外と各々の例外がどの様にハンドリングされるかについての情報を取得し、例外情報ガイドを表示する。
【0014】
前記の様に本発明では、上記の様な例外処理コーディング上の問題点を解決する為、ユーザの要求に応じて指定された文で発生する例外とその例外が発生した場合にどの様にハンドリングされるかを示したリスト含む例外情報ガイドを表示するエディタを提供することができる。ユーザはこのエディタを利用してソースプログラムを編集することで、任意の文に対してどの様な例外が発生し、各々の例外がどの様にハンドリングされるかを示す例外情報ガイドを表示することができ、ハンドリングが必要な例外でハンドラが未実装になっている例外が無いか、或いは自分が意図した通りにハンドリングされているかといったコーディング上の不備の有無を確認しながらコーディング作業を進めることができる様になる。
【0015】
【発明の実施の形態】
以下にプログラムで実行される例外処理の情報をエディタにより表示する一実施形態の例外情報表示装置について説明する。
【0016】
図1は本実施形態の例外情報表示処理を実装したエディタの画面イメージを示す図である。図1の画面イメージでは、エディタの画面110上にソースプログラムと例外情報ガイド117及び例外情報ガイドのサブメニュー118がどの様に表示されるかを表している。なお、エディタの画面110中に表示しているソースプログラムはCOBOL言語で書かれたソースプログラムの断片であり、以下の説明に直接関係の無い部分については省略してある。ここではソースプログラム中から例外に関する情報を抽出し、例外情報ガイド117を提示するまでの具体的な方法を示す為に、COBOL言語における例外処理プログラミングの例を用いるが、本発明の適用範囲はCOBOL言語に限定されるものではない。
【0017】
図1ではソースプログラム中の特定の文114の例外情報ガイド117及び例外情報ガイドのサブメニュー118を表示させている例を示している。すなわち、ソースプログラム中の文114にマウスポインタ115をあてている状態でコンテキストメニュー116を呼び出し、このメニュー内の例外情報ガイドというメニュー項目1161を選択することで例外情報ガイド117の表示を指示し、更に例外情報ガイド117内のEC−DATA−INCOMPATIBLEという項目を選択して例外情報ガイド117のサブメニュー118からHandler1にジャンプする為のメニュー項目1182をマウスポインタ115でポイントしている状態の画面イメージを表している。
【0018】
例外情報ガイド117には指定された文の文名1173、指定された文で発生する可能性のある例外リスト1171とリスト中の各々の例外がどの様にハンドリングされるかを示す記号リスト1172が表示される。なお、例外リスト1171に挙げられている例外は実際に発生する可能性のある例外の一部であり、説明上必要の無いものについては省略してある。
【0019】
COBOL言語において例外処理機構にかかわるソースプログラム中の要素には、例外が発生する可能性のある文114とその文に付随する文固有の条件指定部1141、各々の例外について例外チェックの有効・無効を切り替える為の指示文113、指定した例外が発生し、その例外のチェックが有効であった場合に呼び出される手続きを記述する節112、発生した例外の内、そのモジュール内では処理されないものについて呼び出し元のモジュールに処理を委譲するか否かを指示する指示文111がある。ある例外が発生するか否か、発生した場合にどの様にハンドリングされるかは、これらの文や条件指定部の有無や記述内容から決定される。
【0020】
例外リスト1171に挙げられているものを例に説明すると、文114の英数字項目bの部分参照指定が項目の領域外を指していることを意味する例外EC−BOUND−REF−MODについては指示文113により無効化されている為、例外EC−BOUND−REF−MODは発生しない(ハンドリング種別はN)、項目cの添字が有効範囲を超えたことを意味する例外EC−BOUND−SUBSCRIPTについては発生する可能性があるが、ハンドラの登録が行われていない為、発生するとこの例外が発生したときの既定の動作に従って異常終了する(ハンドリング種別はA)、参照した項目内に不正値が格納されていることを意味する例外EC−DATA−INCOMPATIBLEについては発生する可能性があり、発生するとHandler1節112に制御が移る(ハンドリング種別はD)、項目c(i)の値が0であった為に0による除算が行われたことを意味する例外EC−SIZE−ZERO−DIVIDEについては文114に付随する条件指定部1141がこの文における例外検出を無効化する為、0による除算が行われると条件指定部1141に制御が移る(ハンドリング種別はC)、といった動作になる。
【0021】
この様にソースプログラム中の様々な場所に記述された文や条件指定部等の関係により各々の例外のハンドリング方法が変わってくる為、ユーザがソースプログラムを眺めて各々の例外が発生するのかしないのか、発生した場合にどの様にハンドリングされるのかを判定することは容易ではなく、例外情報ガイド117による支援は例外処理コーディングを行う上で有益である。なお、例外のハンドリング種別についてはここで示したN、A、D、Cの他に、P、Iがあるが、これらの詳細については後述する。
【0022】
例外情報ガイド117からEC−DATA−INCOMPATIBLEをマウスポインタ115でポイントするとサブメニュー118が表示され、この例外を無効化する、或いはこの例外が発生した場合に制御が移るHandler1節にジャンプするといったコマンドが実行できる。これらの機能により、ユーザは例外情報ガイド117に表示される例外リスト1171から発生させたくない例外を見つけた場合には、サブメニュー118の無効化コマンド1181を実行して無効化する為の指示文を挿入したり、例外が発生した場合に実行される手続きを記述する為に例外が発生した際に制御が移る節にジャンプする等の編集コマンドを直ぐに実行できる。このサブメニュー118中に表示されるコマンド群は一定ではなく、例外のハンドリング種別に応じて適切なコマンドが表示される。例えば例外が無効化されている為に発生しない状態になっている例外の場合は例外を有効化する為のコマンドが表示される。
【0023】
図2は本実施形態のソフトウェア・コンポーネント群及びファイル等のリソース群、ハードウェア装置群の関連を示す図である。但し、エディタ202のテキスト編集機能や検索機能等の本発明とは直接関係が無く説明上必要の無い機能については省略してある。
【0024】
図2に示す様に本実施形態のエディタ202は、例外情報生成ツール呼び出し部2021と、例外情報ファイル解析部2022と、例外情報ガイド構成部2023とを有している。
【0025】
例外情報生成ツール呼び出し部2021は、例外情報生成ツール201を呼び出してソースファイル203中のソースプログラムの各文に対応する例外情報を格納した例外情報ファイル204の作成または更新を行う処理部である。例外情報ファイル解析部2022は、例外情報生成ツール201により作成または更新された例外情報を解析し、ソースプログラム中の各文の位置を示す文位置情報テーブル2041、各文の位置に対応する例外情報を示す例外情報テーブル2042、前記例外情報の例外名を示す例外名テーブル2043をメモリ等の記憶装置中に展開する処理部である。
【0026】
例外情報ガイド構成部2023は、例外情報の表示指示が行われた文の位置を文位置情報テーブル2041により特定し、前記特定された文の位置に対応する例外情報を例外情報テーブル2042から抽出し、前記抽出した例外情報に対応する例外名を例外名テーブル2043から取得し、前記抽出した例外情報と前記取得した例外名を例外情報ガイド117に設定して表示する処理部である。
【0027】
エディタ202を例外情報生成ツール呼び出し部2021、例外情報ファイル解析部2022及び例外情報ガイド構成部2023として機能させる為のプログラムは、CD−ROM等の記録媒体に記録され磁気ディスク等に格納された後、メモリにロードされて実行されるものとする。なお前記プログラムを記録する記録媒体はCD−ROM以外の他の記録媒体でも良い。また前記プログラムを当該記録媒体から情報処理装置にインストールして使用しても良いし、ネットワークを通じて当該記録媒体にアクセスして前記プログラムを使用するものとしても良い。
【0028】
例外情報ガイド117はユーザが入力装置205によって指示することで表示される。例外情報生成ツール201は、ソースファイル203を読み込み、構文解析部2011及び意味解析部2012で処理した結果を基に例外情報構成部2013で処理し、例外情報ファイル204を生成する。ここでソースファイル203とはソースプログラムを格納したファイルのことである。例外情報生成ツール201の構文解析部2011及び意味解析部2012はコンパイラの構文解析部及び意味解析部と同等の解析を行う為、例外情報生成ツール201によるソースファイル203の解析結果はコンパイラが出力するオブジェクトコードの動作と完全に一致する。
【0029】
例外情報ファイル204には文位置情報テーブル2041、例外情報テーブル2042、例外名テーブル2043が含まれる。これらのテーブルについては後述する。エディタ202は例外情報ファイル204を読み込み、例外情報ファイル解析部2022で解析した後、例外情報ガイド構成部2023によって例外情報ガイド117を構成し、ディスプレイ装置206に表示する。
【0030】
ユーザが例外情報ガイド117の表示を指示した際に例外情報ファイル204が存在しないか古くなっていればエディタ202の例外情報生成ツール呼び出し部2021が例外情報生成ツール201を呼び出し例外情報ファイル204を作成または更新した後、例外情報ガイド117を表示する。なお、エディタ202が例外情報ファイル204の更新・生成の要否を判定する方法については後述する。
【0031】
エディタ202は内部に編集用バッファ2024を持っており、ユーザが指定したソースファイル203の内容を読み込んでいる。ここでは説明を簡略化する為、新規にソースプログラムを作成する場合にも、内容が空のソースファイルの内容を読み込んでいるものと見倣すことにする。ユーザがエディタを介してソースプログラムの編集を行うと、この編集用バッファ2024の内容が書き換えられる。その後ユーザがソースプログラムの保存を指示すると編集用バッファ2024の内容がソースファイル203に書き出される。
【0032】
また、エディタ202は更新フラグ2025を持っている。更新フラグ2025は初期状態(ソースファイル203の読み込み直後)にはクリアされており、ユーザがエディタ202上でソースプログラムを改変するとセットされる。また、ユーザがエディタ202にソースプログラムの保存を指示して編集用バッファ2024の内容がソースファイル203に書き出されると、更新フラグ2025はクリアされる。すなわち、更新フラグ2025は編集用バッファ2024の内容がソースファイル203の内容と一致している場合にクリアの状態になり、一致していない場合にセットの状態になる。
【0033】
図3は本実施形態のCOBOL言語で書かれたソースプログラムの例を示す図である。但し、説明上必要の無い部分については省略してある。また、破線の矩形で囲まれたS01からS13までの部分には適切な文や式が記述してあるものとする。以下このプログラム例について例外情報生成ツール201が例外情報ファイル204を生成する手順を説明する。
【0034】
図4は本実施形態の文位置情報テーブル2041の構成例を示す図である。図4では例外情報生成ツール201が図3のソースプログラムを解析した結果、生成される例外情報ファイル204中に格納される文位置情報テーブル2041の構造の例を表している。
【0035】
例外情報生成ツール201はソースプログラム中の各実行文について、文の開始位置を文開始位置フィールド401に、文の終了位置を文終了位置フィールド402に、文名を文名フィールド403に記録する。これにより文位置情報テーブル2041の各レコードにはそれぞれソースプログラム中の1文が対応付けられる。なお、COBOL言語では1行に複数の文を書くこともできるので、ソースプログラム中の位置を特定する場合、実際には行番号と桁位置の2つを組み合わせて表現しなければならないが、図3のソースプログラムでは文の位置は行番号のみで特定できる様に書いてある為、図4では簡略化して行番号のみで文の開始位置・終了位置を表現してある。
【0036】
文位置情報テーブル2041の各レコードは文開始位置フィールド401の値で昇順にソートされた状態で記録される。
【0037】
図5は本実施形態の例外情報テーブル2042の構成例を示す図である。例外情報生成ツール201はソースプログラムを解析し、ソースプログラム中の各々の文の関係から、ある文で発生する例外と各々の例外が発生した場合のハンドリング方法を決定する。例外情報生成ツール201がソースプログラムを解析する方法はコンパイラがソースプログラムを解析してオブジェクトコードを生成するときの処理と同じであり、例外情報生成ツール201による解析結果はコンパイラによる解析結果と完全に一致する。
【0038】
例外情報生成ツール201は文開始位置フィールド501には文の開始位置、文終了位置フィールド502には文の終了位置を記録する。この2つのフィールドは前述の文位置情報テーブル2041との関連付けの為に利用されるフィールドであり、そのレコードがソースプログラム中のどの文に対応するものかを識別する為に使用される。更に例外情報生成ツール201は例外番号フィールド503に例外の識別番号、ハンドリング種別フィールド504にその例外が発生した場合にハンドリング方法の種別を示す記号を格納する。例外番号フィールド503には各々の例外を識別する為の番号を格納する。この例外番号は後述の例外名テーブル2043の例外番号フィールド601と対応付けられており、例外名テーブル2043を参照することで例外名を導出することができる。ハンドリング種別フィールド504には、各々の例外が、文に付随する条件指定部が優先される為に例外は発生しない(C)、例外チェックが無効化されている為に例外は発生しない(N)、例外は発生するがその例外が発生したときに制御の移る例外処理ハンドラ節が存在しない為にプログラムの実行をそのまま継続する(I)、例外が発生するとユーザがソースプログラム中に指定した例外処理ハンドラ節に制御が移る(D)、例外が発生すると現在のモジュールを呼び出したモジュールに例外の処理を委譲する(P)、例外が発生するとプログラムが異常終了する(A)、の6種類の内のいずれかを示す記号が設定される。また、ハンドラ名フィールド505にはハンドリング種別がDである例外が発生したときに制御が移る手続きの名前が設定され、行番号フィールド506にはその手続きの開始行が設定される。ハンドラ名フィールド505の値は例外情報ガイドのサブメニュー118を表示する際に利用され、行番号フィールド506の値は、このハンドラの記述位置にジャンプするコマンドが選択されたときに使用される。
【0039】
1つの文で複数の例外が発生することがある為、レコード511〜514の様に文開始位置フィールド501と文終了位置フィールド502の値の組が同一になるレコードが複数存在することもある。例外情報テーブル2042の各レコードは文開始位置フィールド501、文終了位置フィールド502、例外番号フィールド503の3つの値の組で一意に識別される。
【0040】
図6は本実施形態の例外名テーブル2043の構成例を示す図である。例外番号フィールド601には各々の例外に対応するユニークな番号が格納され、例外名フィールド602には各々の例外の名称が格納される。
【0041】
例外には言語仕様または処理系で予め定義されたものと、ユーザがソースプログラム中で定義するものの2種類がある。前者については予め決まった例外番号を与えておくことができるが、後者についてはソースプログラムを解析して適切な例外番号を付与する必要がある為、ソースプログラム解析中に付番して例外番号と例外名の組を作成する。
【0042】
図7は本実施形態の文特定アルゴリズムの処理手順を示すフローチャートである。図7ではエディタ202の例外情報ガイド構成部2023が、マウスポインタ115の位置からどの文に対する例外情報ガイド117を表示するべきかを特定する為に使用するアルゴリズムを表している。
【0043】
この手続きの目的は、文位置情報テーブル2041を走査して、sに文開始位置、eに文終了位置を取得することでマウスポインタ115の置かれた位置がどの文に属するかを特定することである。
【0044】
ステップ701は初期化手続きであり、iは文位置情報テーブル2041の先頭レコードである第1レコード411を指す様に設定される。このフローチャートでは文位置情報テーブル2041中のi番目のレコードの文開始位置フィールド401をstart(i)、文終了位置フィールド402をend(i)、マウスポインタ115の位置をp、テーブルに含まれるレコード数をNと記述してある。なお例外情報ガイド117の表示が指示された際にマウスポインタ115の位置pはソースプログラムの先頭からの相対行番号に変換されており、かつ、ソースプログラムの最大位置を超えることはないものとする。
【0045】
まず、文位置情報テーブル2041の文開始位置フィールド401について走査を行う。文位置情報テーブル2041の第(i+1)レコードの文開始位置フィールドstart(i+1)の値がマウスポインタの位置pより小さい間(ステップ702)、iをインクリメントする(ステップ703)。この2つのステップで構成されるループを終了した時点で、マウスポインタ115が第1レコードから第iレコードのいずれかの文にあることが判る。
【0046】
次に、文終了位置フィールド402について走査を行う。マウスポインタの位置pが第iレコードの文終了位置フィールドend(i)の値より大きい間(ステップ704)、iをデクリメントする(ステップ705)。これにより、ステップ704とステップ705で構成されるループを終了した時点の第iレコードが現在マウスポインタが位置付けられている文の位置情報を格納したレコードとなる。従って、sには第iレコードの文開始位置フィールドstart(i)の値、eには文終了位置フィールドend(i)の値を設定すれば良い(ステップ706)。
【0047】
図8は本実施形態の例外情報ガイド作成処理の処理手順を示すフローチャートである。ある文114で発生する例外に関する情報を調べたい場合、ユーザは、文114のどこかにマウスカーソルをおいてマウスの適切なボタンを押す等の方法でコンテキストメニュー116を呼び出し、そのコンテキストメニュー116の中に表示されている例外情報ガイドを呼び出す為のメニュー項目1161を選択することで例外情報ガイド117を呼び出すことができる。
【0048】
エディタ202は例外情報ガイド117を表示する指示を受けると、まず、図9に示す処理(後述)を実行して例外情報ファイル204を更新し、例外情報ファイル解析部2022を呼び出して例外情報ファイル204を解析し、メモリ中に文位置情報テーブル2041、例外情報テーブル2042、例外名テーブル2043を展開する。
【0049】
次に、マウスポインタ115の位置を基に、先述の図7の手順により例外情報ガイド117を表示すべき文を特定する(ステップ801)。ここで図7の手順中に得られた文名を例外情報ガイド117中の文名1173の領域にセットする(ステップ802)。
【0050】
次に、図7の手順で得られた文開始位置sと文終了位置eを基に、例外情報テーブル2042から当該行に関するレコードを抽出する。具体的には例外情報テーブル2042の各レコードの文開始位置フィールド501と文終了位置フィールド502の値がそれぞれs及びeと一致しているレコードを抽出すれば良い(ステップ803)。ここで抽出された各レコードのハンドリング種別フィールド504の値を例外情報ガイド117中の記号リスト1172の列にセットする(ステップ804)。更に、抽出された各レコードの例外番号フィールド503の値を基に、例外名テーブル2043を検索し、対応する例外名を取得して例外情報ガイド117中の例外リスト1171の列にセットする(ステップ805)。
以上の手順により、例外情報ガイド117を構成し、ディスプレイ装置206に表示することができる。
【0051】
また、例外情報ガイド117中の適切な箇所をマウスポインタ115でポイントすると、その箇所に表示されている例外名とハンドリング種別の組み合わせによっては、サブメニュー118の表示を行う。サブメニュー118中には、その内容に応じて、例外が発生した場合に呼び出されるハンドラにジャンプするコマンドをメニュー項目1182に表示する。この様なコマンドが表示される場合には、ステップ803で抽出したレコードのハンドラ名フィールド505と行番号フィールド506から表示する文字列やコマンドが選択されたときにジャンプする行番号を取得することができる様になっている。
【0052】
図9は本実施形態の例外情報ファイル更新処理の処理手順を示すフローチャートである。本実施形態において、例外情報ファイル204はソースファイルの拡張子だけを変えた名前になっているものとしている為、各々のソースファイルに対応する例外情報ファイル204はファイル名を基に探すことができる。
【0053】
エディタ202は、例外情報ガイド117の表示が指示されると例外情報ファイル204の更新の要否を調べ、必要であれば、例外情報生成ツール201を呼び出して例外情報ファイル204を生成する。
【0054】
エディタ202は、まずステップ901で、更新フラグ2025を調べ、更新フラグ2025がセットされていればソースファイル203を保存し(ステップ902)、例外情報生成ツール201を呼び出して例外情報ファイル204を生成する(ステップ905)。更新フラグ2025がクリアされていれば、そのソースファイル203に対応する例外情報ファイル204が存在するかどうかを調べる(ステップ903)。
【0055】
例外情報ファイル204が存在しない場合は、例外情報ファイル204を生成する(ステップ905)。例外情報ファイル204が存在する場合は、ソースファイル203の更新日付が例外情報ファイル204の更新日付より新しいかどうかを調べ(ステップ904)、新しい場合には例外情報ファイル204を生成する(ステップ905)。
【0056】
以上説明した様に本実施形態の例外情報表示装置によれば、例外情報の表示指示が行われた文の位置に対応する例外情報を例外情報テーブルから抽出して表示するので、ソースプログラム中の各文で起こる例外とその例外が起こった場合にどの様にハンドリングされるかに関する情報を提示し、プログラマのソースプログラム編集作業を支援することが可能である。
【0057】
【発明の効果】
本発明により、プログラマが自身でソースプログラムを解析すること無く、プログラム中の各文で発生する可能性のある例外と各々の例外が発生した場合にどの様にハンドリングされるかを知ることができる様になる。
【図面の簡単な説明】
【図1】本実施形態の例外情報表示処理を実装したエディタの画面イメージを示す図である。
【図2】本実施形態のソフトウェア・コンポーネント群及びファイル等のリソース群、ハードウェア装置群の関連を示す図である。
【図3】本実施形態のCOBOL言語で書かれたソースプログラムの例を示す図である。
【図4】本実施形態の文位置情報テーブル2041の構成例を示す図である。
【図5】本実施形態の例外情報テーブル2042の構成例を示す図である。
【図6】本実施形態の例外名テーブル2043の構成例を示す図である。
【図7】本実施形態の文特定アルゴリズムの処理手順を示すフローチャートである。
【図8】本実施形態の例外情報ガイド作成処理の処理手順を示すフローチャートである。
【図9】本実施形態の例外情報ファイル更新処理の処理手順を示すフローチャートである。
【符号の説明】
110…エディタの画面、111…指示文、112…節、113…指示文、114…文、115…マウスポインタ、116…コンテキストメニュー、117…例外情報ガイド、118…サブメニュー、1141…条件指定部、1161…メニュー項目、1171…例外リスト、1172…記号リスト、1173…文名、1181…無効化コマンド、1182…メニュー項目、201…例外情報生成ツール、202…エディタ、203…ソースファイル、204…例外情報ファイル、205…入力装置、206…ディスプレイ装置、2011…構文解析部、2012…意味解析部、2013…例外情報構成部、2024…編集用バッファ、2025…更新フラグ、2041…文位置情報テーブル、2042…例外情報テーブル、2043…例外名テーブル、2021…例外情報生成ツール呼び出し部、2022…例外情報ファイル解析部、2023…例外情報ガイド構成部、401…文開始位置フィールド、402…文終了位置フィールド、403…文名フィールド、411…レコード、501…文開始位置フィールド、502…文終了位置フィールド、503…例外番号フィールド、504…ハンドリング種別フィールド、505…ハンドラ名フィールド、506…行番号フィールド、511〜514…レコード、601…例外番号フィールド、602…例外名フィールド。
【発明の属する技術分野】
本発明はプログラムで実行される例外処理の情報を表示する例外情報表示装置に関するものである。
【0002】
【従来の技術】
コンパイラの解析機能またはコンパイラの解析機能と同等の解析機能を持つツール等を利用して、プログラミングの支援を行うプログラムとしては、ブラウザと呼ばれるプログラムが存在している。ユーザはブラウザを使うことで、プログラム中の変数や関数等の定義位置や参照位置を相互に参照したり、関数等の呼び出し関係を確認したりすることができる。
【0003】
ブラウザの機能は、ソースプログラムを解析して変数名や関数名等の名前とその出現位置のリストを作成し、そのリストを基に参照関係や呼び出し関係の表や図を作成するというものである。ブラウザの機能は変数や関数等、プログラム中で名前を使って直接参照される要素に限って使用できる機能である。
【0004】
また、オブジェクト指向プログラミングにおいてプログラミングの支援を行う装置としては、COBOL言語で作成されている既存のプログラム資産を、オブジェクト指向プログラミングを用いて作成するプログラムから再利用することができるようにするオブジェクト定義自動生成装置が提案されている(例えば特許文献1参照)。
【0005】
【特許文献1】
特開平8−278887号公報
【0006】
【発明が解決しようとする課題】
言語レベルで例外処理機構を持つプログラミング言語において、ある文の実行中にどの様な例外が発生する可能性があるか、また各々の例外が発生した場合にどの様にハンドリングされるかは、ソースプログラム中の離れた箇所に書かれた複数の文からの影響を受けることがある。従って、プログラマがソースプログラムを記述する際に、自分が現在記述中の文ではどの様な例外が発生する可能性があり、発生した場合にどの様にハンドリングされることになっているかを把握することは容易ではない。
【0007】
各文で発生する可能性のある例外や各々の例外が発生した場合にどの様にハンドリングされるかに関する情報は、ソースプログラムを解析することで抽出することができる。ソースプログラムを解析することでプログラマを支援するプログラムとしては、ブラウザと呼ばれるプログラムが従来から存在していた。しかし、例外は変数や関数と異なり名前で参照されたり呼び出されたりするとは限らず、通常は文を実行中にある特定の現象が観測されたときに処理系が自動的に発生させるものである為、ブラウザの様にソースプログラム中に出現する名前を基に必要な情報の収集を行う方法は適用できない。この為、ソースプログラム中の各文で発生する例外とそのハンドリング方法についてプログラマを支援するプログラムはこれまで存在していなかった。
【0008】
その為、プログラマは、例外処理向けのコーディングが適切に記述されていることを確認する為に、ソースプログラムをコンパイルして実際に動作させてみて、その挙動を観察し、想定した例外が発生し、その例外が意図した通りにハンドリングされていることや、想定外の例外が発生していないこと等を確認するという作業を行っていた。
【0009】
本発明の目的は上記問題を解決し、ソースプログラム中の各文で起こる例外とその例外が起こった場合にどの様にハンドリングされるかに関する情報を提示し、プログラマのソースプログラム編集作業を支援することが可能な技術を提供することにある。
【0010】
【課題を解決するための手段】
本発明は、プログラムで実行される例外処理の情報を表示する例外情報表示装置において、例外情報の表示指示が行われた文の位置に対応する例外情報を例外情報テーブルから抽出して表示するものである。
【0011】
本発明では、ユーザの要求に応じて指定された文で発生する可能性のある例外とその例外が発生した場合にどの様にハンドリングされるかを示す例外情報ガイドをエディタ等により表示することで、プログラミング作業を支援する。
【0012】
例外情報ガイドの表示には例外情報生成ツールが出力する例外情報ファイルを利用する(例外情報生成ツールはエディタとは別プログラムとしても良いし、エディタに組み込まれていても良い)。例外情報生成ツールは指定されたソースプログラムを解析し、各々の例外がオブジェクトコードにおいてどの様にハンドリングされるかについての情報を例外情報ファイルに出力する(例外情報ファイルの展開される装置はメモリであっても良い)。例外情報生成ツールはコンパイラと同等な解析を行って各々の例外がどの様にハンドリングされるかを調査する。従って、例外情報生成ツールの生成する例外ハンドリングに関する情報はコンパイラが生成するオブジェクトコードの実行中に例外が発生した場合の動作と完全に一致する。これにより、ユーザはプログラムを実行して動作を観察しながら例外が意図した通りにハンドリングされているかを確認する必要がなくなる。
【0013】
エディタはユーザから要求があった時点で例外情報ファイルを参照し、指定された文で発生する可能性のある例外と各々の例外がどの様にハンドリングされるかについての情報を取得し、例外情報ガイドを表示する。
【0014】
前記の様に本発明では、上記の様な例外処理コーディング上の問題点を解決する為、ユーザの要求に応じて指定された文で発生する例外とその例外が発生した場合にどの様にハンドリングされるかを示したリスト含む例外情報ガイドを表示するエディタを提供することができる。ユーザはこのエディタを利用してソースプログラムを編集することで、任意の文に対してどの様な例外が発生し、各々の例外がどの様にハンドリングされるかを示す例外情報ガイドを表示することができ、ハンドリングが必要な例外でハンドラが未実装になっている例外が無いか、或いは自分が意図した通りにハンドリングされているかといったコーディング上の不備の有無を確認しながらコーディング作業を進めることができる様になる。
【0015】
【発明の実施の形態】
以下にプログラムで実行される例外処理の情報をエディタにより表示する一実施形態の例外情報表示装置について説明する。
【0016】
図1は本実施形態の例外情報表示処理を実装したエディタの画面イメージを示す図である。図1の画面イメージでは、エディタの画面110上にソースプログラムと例外情報ガイド117及び例外情報ガイドのサブメニュー118がどの様に表示されるかを表している。なお、エディタの画面110中に表示しているソースプログラムはCOBOL言語で書かれたソースプログラムの断片であり、以下の説明に直接関係の無い部分については省略してある。ここではソースプログラム中から例外に関する情報を抽出し、例外情報ガイド117を提示するまでの具体的な方法を示す為に、COBOL言語における例外処理プログラミングの例を用いるが、本発明の適用範囲はCOBOL言語に限定されるものではない。
【0017】
図1ではソースプログラム中の特定の文114の例外情報ガイド117及び例外情報ガイドのサブメニュー118を表示させている例を示している。すなわち、ソースプログラム中の文114にマウスポインタ115をあてている状態でコンテキストメニュー116を呼び出し、このメニュー内の例外情報ガイドというメニュー項目1161を選択することで例外情報ガイド117の表示を指示し、更に例外情報ガイド117内のEC−DATA−INCOMPATIBLEという項目を選択して例外情報ガイド117のサブメニュー118からHandler1にジャンプする為のメニュー項目1182をマウスポインタ115でポイントしている状態の画面イメージを表している。
【0018】
例外情報ガイド117には指定された文の文名1173、指定された文で発生する可能性のある例外リスト1171とリスト中の各々の例外がどの様にハンドリングされるかを示す記号リスト1172が表示される。なお、例外リスト1171に挙げられている例外は実際に発生する可能性のある例外の一部であり、説明上必要の無いものについては省略してある。
【0019】
COBOL言語において例外処理機構にかかわるソースプログラム中の要素には、例外が発生する可能性のある文114とその文に付随する文固有の条件指定部1141、各々の例外について例外チェックの有効・無効を切り替える為の指示文113、指定した例外が発生し、その例外のチェックが有効であった場合に呼び出される手続きを記述する節112、発生した例外の内、そのモジュール内では処理されないものについて呼び出し元のモジュールに処理を委譲するか否かを指示する指示文111がある。ある例外が発生するか否か、発生した場合にどの様にハンドリングされるかは、これらの文や条件指定部の有無や記述内容から決定される。
【0020】
例外リスト1171に挙げられているものを例に説明すると、文114の英数字項目bの部分参照指定が項目の領域外を指していることを意味する例外EC−BOUND−REF−MODについては指示文113により無効化されている為、例外EC−BOUND−REF−MODは発生しない(ハンドリング種別はN)、項目cの添字が有効範囲を超えたことを意味する例外EC−BOUND−SUBSCRIPTについては発生する可能性があるが、ハンドラの登録が行われていない為、発生するとこの例外が発生したときの既定の動作に従って異常終了する(ハンドリング種別はA)、参照した項目内に不正値が格納されていることを意味する例外EC−DATA−INCOMPATIBLEについては発生する可能性があり、発生するとHandler1節112に制御が移る(ハンドリング種別はD)、項目c(i)の値が0であった為に0による除算が行われたことを意味する例外EC−SIZE−ZERO−DIVIDEについては文114に付随する条件指定部1141がこの文における例外検出を無効化する為、0による除算が行われると条件指定部1141に制御が移る(ハンドリング種別はC)、といった動作になる。
【0021】
この様にソースプログラム中の様々な場所に記述された文や条件指定部等の関係により各々の例外のハンドリング方法が変わってくる為、ユーザがソースプログラムを眺めて各々の例外が発生するのかしないのか、発生した場合にどの様にハンドリングされるのかを判定することは容易ではなく、例外情報ガイド117による支援は例外処理コーディングを行う上で有益である。なお、例外のハンドリング種別についてはここで示したN、A、D、Cの他に、P、Iがあるが、これらの詳細については後述する。
【0022】
例外情報ガイド117からEC−DATA−INCOMPATIBLEをマウスポインタ115でポイントするとサブメニュー118が表示され、この例外を無効化する、或いはこの例外が発生した場合に制御が移るHandler1節にジャンプするといったコマンドが実行できる。これらの機能により、ユーザは例外情報ガイド117に表示される例外リスト1171から発生させたくない例外を見つけた場合には、サブメニュー118の無効化コマンド1181を実行して無効化する為の指示文を挿入したり、例外が発生した場合に実行される手続きを記述する為に例外が発生した際に制御が移る節にジャンプする等の編集コマンドを直ぐに実行できる。このサブメニュー118中に表示されるコマンド群は一定ではなく、例外のハンドリング種別に応じて適切なコマンドが表示される。例えば例外が無効化されている為に発生しない状態になっている例外の場合は例外を有効化する為のコマンドが表示される。
【0023】
図2は本実施形態のソフトウェア・コンポーネント群及びファイル等のリソース群、ハードウェア装置群の関連を示す図である。但し、エディタ202のテキスト編集機能や検索機能等の本発明とは直接関係が無く説明上必要の無い機能については省略してある。
【0024】
図2に示す様に本実施形態のエディタ202は、例外情報生成ツール呼び出し部2021と、例外情報ファイル解析部2022と、例外情報ガイド構成部2023とを有している。
【0025】
例外情報生成ツール呼び出し部2021は、例外情報生成ツール201を呼び出してソースファイル203中のソースプログラムの各文に対応する例外情報を格納した例外情報ファイル204の作成または更新を行う処理部である。例外情報ファイル解析部2022は、例外情報生成ツール201により作成または更新された例外情報を解析し、ソースプログラム中の各文の位置を示す文位置情報テーブル2041、各文の位置に対応する例外情報を示す例外情報テーブル2042、前記例外情報の例外名を示す例外名テーブル2043をメモリ等の記憶装置中に展開する処理部である。
【0026】
例外情報ガイド構成部2023は、例外情報の表示指示が行われた文の位置を文位置情報テーブル2041により特定し、前記特定された文の位置に対応する例外情報を例外情報テーブル2042から抽出し、前記抽出した例外情報に対応する例外名を例外名テーブル2043から取得し、前記抽出した例外情報と前記取得した例外名を例外情報ガイド117に設定して表示する処理部である。
【0027】
エディタ202を例外情報生成ツール呼び出し部2021、例外情報ファイル解析部2022及び例外情報ガイド構成部2023として機能させる為のプログラムは、CD−ROM等の記録媒体に記録され磁気ディスク等に格納された後、メモリにロードされて実行されるものとする。なお前記プログラムを記録する記録媒体はCD−ROM以外の他の記録媒体でも良い。また前記プログラムを当該記録媒体から情報処理装置にインストールして使用しても良いし、ネットワークを通じて当該記録媒体にアクセスして前記プログラムを使用するものとしても良い。
【0028】
例外情報ガイド117はユーザが入力装置205によって指示することで表示される。例外情報生成ツール201は、ソースファイル203を読み込み、構文解析部2011及び意味解析部2012で処理した結果を基に例外情報構成部2013で処理し、例外情報ファイル204を生成する。ここでソースファイル203とはソースプログラムを格納したファイルのことである。例外情報生成ツール201の構文解析部2011及び意味解析部2012はコンパイラの構文解析部及び意味解析部と同等の解析を行う為、例外情報生成ツール201によるソースファイル203の解析結果はコンパイラが出力するオブジェクトコードの動作と完全に一致する。
【0029】
例外情報ファイル204には文位置情報テーブル2041、例外情報テーブル2042、例外名テーブル2043が含まれる。これらのテーブルについては後述する。エディタ202は例外情報ファイル204を読み込み、例外情報ファイル解析部2022で解析した後、例外情報ガイド構成部2023によって例外情報ガイド117を構成し、ディスプレイ装置206に表示する。
【0030】
ユーザが例外情報ガイド117の表示を指示した際に例外情報ファイル204が存在しないか古くなっていればエディタ202の例外情報生成ツール呼び出し部2021が例外情報生成ツール201を呼び出し例外情報ファイル204を作成または更新した後、例外情報ガイド117を表示する。なお、エディタ202が例外情報ファイル204の更新・生成の要否を判定する方法については後述する。
【0031】
エディタ202は内部に編集用バッファ2024を持っており、ユーザが指定したソースファイル203の内容を読み込んでいる。ここでは説明を簡略化する為、新規にソースプログラムを作成する場合にも、内容が空のソースファイルの内容を読み込んでいるものと見倣すことにする。ユーザがエディタを介してソースプログラムの編集を行うと、この編集用バッファ2024の内容が書き換えられる。その後ユーザがソースプログラムの保存を指示すると編集用バッファ2024の内容がソースファイル203に書き出される。
【0032】
また、エディタ202は更新フラグ2025を持っている。更新フラグ2025は初期状態(ソースファイル203の読み込み直後)にはクリアされており、ユーザがエディタ202上でソースプログラムを改変するとセットされる。また、ユーザがエディタ202にソースプログラムの保存を指示して編集用バッファ2024の内容がソースファイル203に書き出されると、更新フラグ2025はクリアされる。すなわち、更新フラグ2025は編集用バッファ2024の内容がソースファイル203の内容と一致している場合にクリアの状態になり、一致していない場合にセットの状態になる。
【0033】
図3は本実施形態のCOBOL言語で書かれたソースプログラムの例を示す図である。但し、説明上必要の無い部分については省略してある。また、破線の矩形で囲まれたS01からS13までの部分には適切な文や式が記述してあるものとする。以下このプログラム例について例外情報生成ツール201が例外情報ファイル204を生成する手順を説明する。
【0034】
図4は本実施形態の文位置情報テーブル2041の構成例を示す図である。図4では例外情報生成ツール201が図3のソースプログラムを解析した結果、生成される例外情報ファイル204中に格納される文位置情報テーブル2041の構造の例を表している。
【0035】
例外情報生成ツール201はソースプログラム中の各実行文について、文の開始位置を文開始位置フィールド401に、文の終了位置を文終了位置フィールド402に、文名を文名フィールド403に記録する。これにより文位置情報テーブル2041の各レコードにはそれぞれソースプログラム中の1文が対応付けられる。なお、COBOL言語では1行に複数の文を書くこともできるので、ソースプログラム中の位置を特定する場合、実際には行番号と桁位置の2つを組み合わせて表現しなければならないが、図3のソースプログラムでは文の位置は行番号のみで特定できる様に書いてある為、図4では簡略化して行番号のみで文の開始位置・終了位置を表現してある。
【0036】
文位置情報テーブル2041の各レコードは文開始位置フィールド401の値で昇順にソートされた状態で記録される。
【0037】
図5は本実施形態の例外情報テーブル2042の構成例を示す図である。例外情報生成ツール201はソースプログラムを解析し、ソースプログラム中の各々の文の関係から、ある文で発生する例外と各々の例外が発生した場合のハンドリング方法を決定する。例外情報生成ツール201がソースプログラムを解析する方法はコンパイラがソースプログラムを解析してオブジェクトコードを生成するときの処理と同じであり、例外情報生成ツール201による解析結果はコンパイラによる解析結果と完全に一致する。
【0038】
例外情報生成ツール201は文開始位置フィールド501には文の開始位置、文終了位置フィールド502には文の終了位置を記録する。この2つのフィールドは前述の文位置情報テーブル2041との関連付けの為に利用されるフィールドであり、そのレコードがソースプログラム中のどの文に対応するものかを識別する為に使用される。更に例外情報生成ツール201は例外番号フィールド503に例外の識別番号、ハンドリング種別フィールド504にその例外が発生した場合にハンドリング方法の種別を示す記号を格納する。例外番号フィールド503には各々の例外を識別する為の番号を格納する。この例外番号は後述の例外名テーブル2043の例外番号フィールド601と対応付けられており、例外名テーブル2043を参照することで例外名を導出することができる。ハンドリング種別フィールド504には、各々の例外が、文に付随する条件指定部が優先される為に例外は発生しない(C)、例外チェックが無効化されている為に例外は発生しない(N)、例外は発生するがその例外が発生したときに制御の移る例外処理ハンドラ節が存在しない為にプログラムの実行をそのまま継続する(I)、例外が発生するとユーザがソースプログラム中に指定した例外処理ハンドラ節に制御が移る(D)、例外が発生すると現在のモジュールを呼び出したモジュールに例外の処理を委譲する(P)、例外が発生するとプログラムが異常終了する(A)、の6種類の内のいずれかを示す記号が設定される。また、ハンドラ名フィールド505にはハンドリング種別がDである例外が発生したときに制御が移る手続きの名前が設定され、行番号フィールド506にはその手続きの開始行が設定される。ハンドラ名フィールド505の値は例外情報ガイドのサブメニュー118を表示する際に利用され、行番号フィールド506の値は、このハンドラの記述位置にジャンプするコマンドが選択されたときに使用される。
【0039】
1つの文で複数の例外が発生することがある為、レコード511〜514の様に文開始位置フィールド501と文終了位置フィールド502の値の組が同一になるレコードが複数存在することもある。例外情報テーブル2042の各レコードは文開始位置フィールド501、文終了位置フィールド502、例外番号フィールド503の3つの値の組で一意に識別される。
【0040】
図6は本実施形態の例外名テーブル2043の構成例を示す図である。例外番号フィールド601には各々の例外に対応するユニークな番号が格納され、例外名フィールド602には各々の例外の名称が格納される。
【0041】
例外には言語仕様または処理系で予め定義されたものと、ユーザがソースプログラム中で定義するものの2種類がある。前者については予め決まった例外番号を与えておくことができるが、後者についてはソースプログラムを解析して適切な例外番号を付与する必要がある為、ソースプログラム解析中に付番して例外番号と例外名の組を作成する。
【0042】
図7は本実施形態の文特定アルゴリズムの処理手順を示すフローチャートである。図7ではエディタ202の例外情報ガイド構成部2023が、マウスポインタ115の位置からどの文に対する例外情報ガイド117を表示するべきかを特定する為に使用するアルゴリズムを表している。
【0043】
この手続きの目的は、文位置情報テーブル2041を走査して、sに文開始位置、eに文終了位置を取得することでマウスポインタ115の置かれた位置がどの文に属するかを特定することである。
【0044】
ステップ701は初期化手続きであり、iは文位置情報テーブル2041の先頭レコードである第1レコード411を指す様に設定される。このフローチャートでは文位置情報テーブル2041中のi番目のレコードの文開始位置フィールド401をstart(i)、文終了位置フィールド402をend(i)、マウスポインタ115の位置をp、テーブルに含まれるレコード数をNと記述してある。なお例外情報ガイド117の表示が指示された際にマウスポインタ115の位置pはソースプログラムの先頭からの相対行番号に変換されており、かつ、ソースプログラムの最大位置を超えることはないものとする。
【0045】
まず、文位置情報テーブル2041の文開始位置フィールド401について走査を行う。文位置情報テーブル2041の第(i+1)レコードの文開始位置フィールドstart(i+1)の値がマウスポインタの位置pより小さい間(ステップ702)、iをインクリメントする(ステップ703)。この2つのステップで構成されるループを終了した時点で、マウスポインタ115が第1レコードから第iレコードのいずれかの文にあることが判る。
【0046】
次に、文終了位置フィールド402について走査を行う。マウスポインタの位置pが第iレコードの文終了位置フィールドend(i)の値より大きい間(ステップ704)、iをデクリメントする(ステップ705)。これにより、ステップ704とステップ705で構成されるループを終了した時点の第iレコードが現在マウスポインタが位置付けられている文の位置情報を格納したレコードとなる。従って、sには第iレコードの文開始位置フィールドstart(i)の値、eには文終了位置フィールドend(i)の値を設定すれば良い(ステップ706)。
【0047】
図8は本実施形態の例外情報ガイド作成処理の処理手順を示すフローチャートである。ある文114で発生する例外に関する情報を調べたい場合、ユーザは、文114のどこかにマウスカーソルをおいてマウスの適切なボタンを押す等の方法でコンテキストメニュー116を呼び出し、そのコンテキストメニュー116の中に表示されている例外情報ガイドを呼び出す為のメニュー項目1161を選択することで例外情報ガイド117を呼び出すことができる。
【0048】
エディタ202は例外情報ガイド117を表示する指示を受けると、まず、図9に示す処理(後述)を実行して例外情報ファイル204を更新し、例外情報ファイル解析部2022を呼び出して例外情報ファイル204を解析し、メモリ中に文位置情報テーブル2041、例外情報テーブル2042、例外名テーブル2043を展開する。
【0049】
次に、マウスポインタ115の位置を基に、先述の図7の手順により例外情報ガイド117を表示すべき文を特定する(ステップ801)。ここで図7の手順中に得られた文名を例外情報ガイド117中の文名1173の領域にセットする(ステップ802)。
【0050】
次に、図7の手順で得られた文開始位置sと文終了位置eを基に、例外情報テーブル2042から当該行に関するレコードを抽出する。具体的には例外情報テーブル2042の各レコードの文開始位置フィールド501と文終了位置フィールド502の値がそれぞれs及びeと一致しているレコードを抽出すれば良い(ステップ803)。ここで抽出された各レコードのハンドリング種別フィールド504の値を例外情報ガイド117中の記号リスト1172の列にセットする(ステップ804)。更に、抽出された各レコードの例外番号フィールド503の値を基に、例外名テーブル2043を検索し、対応する例外名を取得して例外情報ガイド117中の例外リスト1171の列にセットする(ステップ805)。
以上の手順により、例外情報ガイド117を構成し、ディスプレイ装置206に表示することができる。
【0051】
また、例外情報ガイド117中の適切な箇所をマウスポインタ115でポイントすると、その箇所に表示されている例外名とハンドリング種別の組み合わせによっては、サブメニュー118の表示を行う。サブメニュー118中には、その内容に応じて、例外が発生した場合に呼び出されるハンドラにジャンプするコマンドをメニュー項目1182に表示する。この様なコマンドが表示される場合には、ステップ803で抽出したレコードのハンドラ名フィールド505と行番号フィールド506から表示する文字列やコマンドが選択されたときにジャンプする行番号を取得することができる様になっている。
【0052】
図9は本実施形態の例外情報ファイル更新処理の処理手順を示すフローチャートである。本実施形態において、例外情報ファイル204はソースファイルの拡張子だけを変えた名前になっているものとしている為、各々のソースファイルに対応する例外情報ファイル204はファイル名を基に探すことができる。
【0053】
エディタ202は、例外情報ガイド117の表示が指示されると例外情報ファイル204の更新の要否を調べ、必要であれば、例外情報生成ツール201を呼び出して例外情報ファイル204を生成する。
【0054】
エディタ202は、まずステップ901で、更新フラグ2025を調べ、更新フラグ2025がセットされていればソースファイル203を保存し(ステップ902)、例外情報生成ツール201を呼び出して例外情報ファイル204を生成する(ステップ905)。更新フラグ2025がクリアされていれば、そのソースファイル203に対応する例外情報ファイル204が存在するかどうかを調べる(ステップ903)。
【0055】
例外情報ファイル204が存在しない場合は、例外情報ファイル204を生成する(ステップ905)。例外情報ファイル204が存在する場合は、ソースファイル203の更新日付が例外情報ファイル204の更新日付より新しいかどうかを調べ(ステップ904)、新しい場合には例外情報ファイル204を生成する(ステップ905)。
【0056】
以上説明した様に本実施形態の例外情報表示装置によれば、例外情報の表示指示が行われた文の位置に対応する例外情報を例外情報テーブルから抽出して表示するので、ソースプログラム中の各文で起こる例外とその例外が起こった場合にどの様にハンドリングされるかに関する情報を提示し、プログラマのソースプログラム編集作業を支援することが可能である。
【0057】
【発明の効果】
本発明により、プログラマが自身でソースプログラムを解析すること無く、プログラム中の各文で発生する可能性のある例外と各々の例外が発生した場合にどの様にハンドリングされるかを知ることができる様になる。
【図面の簡単な説明】
【図1】本実施形態の例外情報表示処理を実装したエディタの画面イメージを示す図である。
【図2】本実施形態のソフトウェア・コンポーネント群及びファイル等のリソース群、ハードウェア装置群の関連を示す図である。
【図3】本実施形態のCOBOL言語で書かれたソースプログラムの例を示す図である。
【図4】本実施形態の文位置情報テーブル2041の構成例を示す図である。
【図5】本実施形態の例外情報テーブル2042の構成例を示す図である。
【図6】本実施形態の例外名テーブル2043の構成例を示す図である。
【図7】本実施形態の文特定アルゴリズムの処理手順を示すフローチャートである。
【図8】本実施形態の例外情報ガイド作成処理の処理手順を示すフローチャートである。
【図9】本実施形態の例外情報ファイル更新処理の処理手順を示すフローチャートである。
【符号の説明】
110…エディタの画面、111…指示文、112…節、113…指示文、114…文、115…マウスポインタ、116…コンテキストメニュー、117…例外情報ガイド、118…サブメニュー、1141…条件指定部、1161…メニュー項目、1171…例外リスト、1172…記号リスト、1173…文名、1181…無効化コマンド、1182…メニュー項目、201…例外情報生成ツール、202…エディタ、203…ソースファイル、204…例外情報ファイル、205…入力装置、206…ディスプレイ装置、2011…構文解析部、2012…意味解析部、2013…例外情報構成部、2024…編集用バッファ、2025…更新フラグ、2041…文位置情報テーブル、2042…例外情報テーブル、2043…例外名テーブル、2021…例外情報生成ツール呼び出し部、2022…例外情報ファイル解析部、2023…例外情報ガイド構成部、401…文開始位置フィールド、402…文終了位置フィールド、403…文名フィールド、411…レコード、501…文開始位置フィールド、502…文終了位置フィールド、503…例外番号フィールド、504…ハンドリング種別フィールド、505…ハンドラ名フィールド、506…行番号フィールド、511〜514…レコード、601…例外番号フィールド、602…例外名フィールド。
Claims (6)
- プログラムで実行される例外処理の情報を表示する例外情報表示方法において、
例外情報生成ツールを呼び出してソースプログラム中の各文に対応する例外情報を格納した例外情報ファイルの作成または更新を行うステップと、前記例外情報を解析し、ソースプログラム中の各文の位置を示す文位置情報テーブル、各文の位置に対応する例外情報を示す例外情報テーブル、前記例外情報の例外名を示す例外名テーブルを記憶手段中に展開するステップと、
例外情報の表示指示が行われた文の位置を前記文位置情報テーブルにより特定するステップと、前記特定された文の位置に対応する例外情報を前記例外情報テーブルから抽出するステップと、前記抽出した例外情報に対応する例外名を前記例外名テーブルから取得するステップと、前記抽出した例外情報と前記取得した例外名を例外情報ガイドに設定して表示するステップとを有することを特徴とする例外情報表示方法。 - 前記例外情報ガイドに表示された例外が発生した場合に呼び出される例外処理の位置に移動し、その例外処理の内容を表示することを特徴とする請求項1に記載された例外情報表示方法。
- 例外情報の表示指示が行われた際に前記例外情報ファイルが存在しないか、ソースプログラムの更新日付が例外情報ファイルの更新日付よりも新しい場合に例外情報ファイルの作成または更新を行うことを特徴とする請求項1または請求項2のいずれかに記載された例外情報表示方法。
- 例外情報の表示指示が行われた位置と前記文位置情報テーブルに格納された文開始位置及び文終了位置とを比較し、例外情報の表示指示が行われた文の位置を特定することを特徴とする請求項1乃至請求項3のいずれか1項に記載された例外情報表示方法。
- プログラムで実行される例外処理の情報を表示する例外情報表示装置において、
例外情報生成ツールを呼び出してソースプログラム中の各文に対応する例外情報を格納した例外情報ファイルの作成または更新を行う例外情報生成ツール呼び出し部と、前記例外情報を解析し、ソースプログラム中の各文の位置を示す文位置情報テーブル、各文の位置に対応する例外情報を示す例外情報テーブル、前記例外情報の例外名を示す例外名テーブルを記憶手段中に展開する例外情報ファイル解析部と、
例外情報の表示指示が行われた文の位置を前記文位置情報テーブルにより特定し、前記特定された文の位置に対応する例外情報を前記例外情報テーブルから抽出し、前記抽出した例外情報に対応する例外名を前記例外名テーブルから取得し、前記抽出した例外情報と前記取得した例外名を例外情報ガイドに設定して表示する例外情報ガイド構成部とを備えることを特徴とする例外情報表示装置。 - プログラムで実行される例外処理の情報を表示する例外情報表示装置としてコンピュータを機能させる為のプログラムにおいて、
例外情報生成ツールを呼び出してソースプログラム中の各文に対応する例外情報を格納した例外情報ファイルの作成または更新を行う例外情報生成ツール呼び出し部と、前記例外情報を解析し、ソースプログラム中の各文の位置を示す文位置情報テーブル、各文の位置に対応する例外情報を示す例外情報テーブル、前記例外情報の例外名を示す例外名テーブルを記憶手段中に展開する例外情報ファイル解析部と、
例外情報の表示指示が行われた文の位置を前記文位置情報テーブルにより特定し、前記特定された文の位置に対応する例外情報を前記例外情報テーブルから抽出し、前記抽出した例外情報に対応する例外名を前記例外名テーブルから取得し、前記抽出した例外情報と前記取得した例外名を例外情報ガイドに設定して表示する例外情報ガイド構成部としてコンピュータを機能させることを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003148634A JP2004355072A (ja) | 2003-05-27 | 2003-05-27 | 例外情報表示方法及び実施装置並びに処理プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003148634A JP2004355072A (ja) | 2003-05-27 | 2003-05-27 | 例外情報表示方法及び実施装置並びに処理プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004355072A true JP2004355072A (ja) | 2004-12-16 |
Family
ID=34044945
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003148634A Pending JP2004355072A (ja) | 2003-05-27 | 2003-05-27 | 例外情報表示方法及び実施装置並びに処理プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004355072A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9785537B2 (en) | 2015-10-15 | 2017-10-10 | International Business Machines Corporation | Runtime exception and bug identification within an integrated development environment |
-
2003
- 2003-05-27 JP JP2003148634A patent/JP2004355072A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9785537B2 (en) | 2015-10-15 | 2017-10-10 | International Business Machines Corporation | Runtime exception and bug identification within an integrated development environment |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4619698B2 (ja) | コードセグメント作成方法及びそのシステム | |
US5513305A (en) | System and method for documenting and displaying computer program code | |
US7853924B2 (en) | Systems and methods for processing non-functional commentary of computer source code | |
EP0785510A1 (en) | Program debugging system for debugging a program having a graphical user interface | |
CN108762743B (zh) | 一种数据表操作代码生成方法及装置 | |
US20120110560A1 (en) | Data type provider for a web semantic store | |
US7562342B2 (en) | Method and apparatus for incrementally processing program annotations | |
US8250554B2 (en) | Systems and methods for generating and distributing executable procedures for technical desk-side support | |
US7305629B2 (en) | Consolidation of computer documentation | |
JP2006244195A (ja) | プログラムテスト支援装置およびその方法 | |
US8776010B2 (en) | Data type provider for a data store | |
US8701086B2 (en) | Simplifying analysis of software code used in software systems | |
EP1768034A1 (en) | Document processing device and document processing method | |
US20070198915A1 (en) | Document Processing Device And Document Processing Method | |
US20090217259A1 (en) | Building Operating System Images Based on Applications | |
JP2018156133A (ja) | コンパイラプログラム、情報処理装置およびコンパイル方法 | |
JP4328328B2 (ja) | ソフトウエア開発ツールプログラム | |
JP2009064124A (ja) | 性能データ収集・表示システム、性能データ表示装置、そのプログラム | |
JP2004355072A (ja) | 例外情報表示方法及び実施装置並びに処理プログラム | |
JP2007226685A (ja) | アプリケーションメンテナンス支援装置、アプリケーション生成装置、アプリケーションメンテナンス支援方法、およびコンピュータプログラム | |
JPH11338686A (ja) | プログラム開発支援装置及びプログラム開発支援方法並びにプログラム開発支援プログラムを記録した記録媒体 | |
JPH11338519A (ja) | プログラマブルコントローラ、プログラム作成支援装置及びプログラム作成支援方法 | |
JP2010186378A (ja) | ソフトウェアのバージョン間の差分表示システム及び方法 | |
KR100723913B1 (ko) | 구조화된 데이터 방송 어플리케이션, 그 기록 매체, 및 그동작 방법 | |
JP7086873B2 (ja) | 管理装置、方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050818 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081007 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081205 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090120 |