(57)【要約】【課題】  プログラム実行時にエラーが発生した際に、そのエラーが発生した時点におけるメソッド呼び出しの履歴をスタックトレースとして表示することが出来るシステムにおいて、スタックトレース中にエラーの直接の原因でない呼び出し情報、例えばシステム標準のクラスにおける呼び出し履歴が表示され、迅速な問題解決の妨げとなる。【解決手段】  上記課題を解決するため、スタックトレース優先度情報付加部（１０４）、外部記憶装置内に保持されているパッケージ情報（１０５）、スタックトレース出力制御部（１０７）から構成されるアプリケーション開発・実行システムにより、スタックトレース中の重要な情報に高い優先度をつけた出力を表示させる。【選択図】  図１
2005346317.tif 000002
【特許請求の範囲】
【請求項１】
プログラム実行時にエラーが発生した際に、そのエラーが発生した時点におけるメソッド呼び出しの履歴をスタックトレースとして表示することが出来るシステムにおいて、そのコードが属するクラスの種類の違いに応じ、スタックトレースの各行の表示形態を変更、あるいはスタックトレースの特定の行の表示を抑止することを特徴とするアプリケーションプログラム開発・実行システム。
【請求項２】
請求項１のアプリケーションプログラム開発・実行システムにおいて、システムコードに属するクラス群のリストをあらかじめ提供することにより、アプリケーション開発者による事前の設定を必要とすることなく、スタックトレース表示における優先度に関する情報を設定する方法。
【請求項３】
請求項１のアプリケーションプログラム開発・実行システムにおいて、アプリケーション開発者が、スタックトレースへの表示を抑止したいクラス群がある場合に、その抑止対象となるクラス群のリストを作成することにより、スタックトレース表示における優先度に関する情報を設定する方法。
【請求項４】
請求項１のアプリケーションプログラム開発・実行システムにおいて、請求項２および請求項３に示す方法により付加情報がつけられたスタックトレースを用いて、複数の出力形式によるスタックトレースの出力を実施する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はアプリケーションプログラムを開発・実行するための方法およびそのシステムに関するものである。
【背景技術】
【０００２】
近年のプログラミング言語およびその実行システムでは、プログラム実行時にエラーが発生した際に、そのエラー発生箇所、およびその時点でのメソッド呼び出しの履歴をスタックトレースとして表示する機能を持つのが一般的となっている。そのような機能を備えた言語およびシステムとしては、Ｓｕｎ Ｍｉｃｒｏｓｙｓｔｅｍｓ社のＪａｖａ（登録商標）や、Ｍｉｃｒｏｓｏｆｔ社の．ＮＥＴなどがある。
【０００３】
スタックトレースはエラー発生に至るまでの呼び出し履歴すべてを記録・表示するために、一般に多数の行にまたがって表示されることが多い。しかしそのほとんどはエラー発生の直接原因でない箇所、例えばアプリケーション開発者の管理下にない、システムが標準提供するクラス群における呼び出し履歴の記録である。プログラム開発途中の状況では、実行時エラーの発生箇所の特定とその解決のためにスタックトレースを参照するが、その多くは先に延べたようにエラー発生の直接原因でない、無用な情報であることから、作業効率の低下を招いている。
【０００４】
一方、プログラム実行時にトレース情報を用いてエラー発生箇所の特定と解決を行う手段に関しては、特開平８−６９３９０号「関数呼出トレース情報採取装置」および特開平８−１３７７１７号「デバッグ方法及び装置」がある。しかしこれら既存技術は、そのトレース情報を取得する手段について主に述べたものであり、エラー発生時にスタックトレースを出力する手段を既に持つ実行システムに対し、その表示情報を制御することによって作業効率の解決を主眼とした方式については説明していない。
【０００５】
また、マイクロプロセッサやマイクロコンピュータにおいて、デバッグ上必要な情報のみをトレースメモリに記憶させる手段に関しては、特開平６−１８７１９３号「プログラムデバッグ装置およびマイクロコンピュータ」および特開２００３−２６３３４０号「デバッグ装置」がある。しかし特開平６−１８７１９３号「プログラムデバッグ装置およびマイクロコンピュータ」では、プログラム中における分岐命令を、デバッグ情報か否かの判断基準としている。また特開２００３−２６３３４０号「デバッグ装置」では、プロセッサ情報に基づいたトレース情報を指定する方式である。どちらの方式も上記に述べた、スタックトレース中の無用な呼び出し情報の抑止を実現するものではない。
【０００６】
以上の通り、上記いずれの既存技術も、エラー発生時にスタックトレースを出力する手段を既に持つ実行システムについて、システムが提供するクラス群に関する呼び出し情報が余分な情報として表示される問題に対する解決策を提示するものではない。また、システム以外のクラス群に関する余分な呼び出し情報がある場合にも、その表示形態の変更、あるいは抑止方法を提供するものではない。
【０００７】
【特許文献１】特開平８−６９３９０号公報
【特許文献２】特開平８−１３７７１７号公報
【特許文献３】特開平６−１８７１９３号公報
【特許文献４】特開２００３−２６３３４０号公報
【非特許文献１】http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html#printStackTrace()
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明が解決しようとする課題は、実行時エラーにおいて発生するスタックトレースにおいて、そのエラーが発生した直接の原因を容易に発見可能とすることである。その具体的な方法として、システムの提供するコードとユーザが提供するコードの自動判別に基づき、スタックトレースの各行の表示形態の変更、または特定の行の表示を抑止することを特徴とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、システムの提供するクラス群の名称を記述した、パッケージリストをあらかじめ提供し、これを用いることにより、出力されるスタックトレースの行が優先的に表示すべきものか否かを自動的に判別する機能を備える。また、アプリケーション作成者がクラス群の名称を指定することにより、システムの提供する以外のクラスについても同様にスタックトレースにて優先的に表示すべきか否かの判別をする機能を備える。さらに、判別した結果に基づき、スタックトレースの各行に付加情報を設定する機能を備える。また、付加情報の加えられたスタックトレースを入力とし、適切な書式のスタックトレースを出力する機能を備えるものである。
【発明の効果】
【００１０】
本発明によれば、アプリケーションプログラム・開発実行システムにおいて、実行時エラーにより出力されたスタックトレースのうち、その発生原因となったアプリケーションプログラム上の不良箇所をスタックトレースからただちに発見することが可能となる。これによりプログラム開発時の不良修正の効率化が図れることとなる。また、本発明に示す方式では、システムの提供するライブラリクラス群であるか否かの判別を自動的に行うことによって、アプリケーションプログラム開発者があらかじめ特別な設定を行わずにその機能を利用することが可能となる。また、必要に応じ、ユーザが指定するクラス群についてその機能を利用することも可能となる。さらに、スタックトレースに付加情報を加える部分と付加情報に基づき出力を制御する部分を分離することにより、多数の出力形式に対応することが可能となるという特徴を持つ。
【発明を実施するための最良の形態】
【００１１】
以下、本発明を実施するための最良の形態を図面に基づいて詳細に説明する。
【００１２】
図１は、本発明における一実施例であるアプリケーションプログラム開発・実行システムの構成（１００）を示すものである。本実施例は、アプリケーションプログラム開発・実行システム（１０１）とスタックトレース情報表示システム（１０９）の二つの構成要素に大きく分けられる。アプリケーションプログラム開発・実行システム（１０１）は、開発対象となるアプリケーションプログラム（１０２）、スタックトレース優先度情報付加部（１０４）、外部記憶装置内に保持されているパッケージ情報（１０５）、スタックトレース出力制御部（１０７）から構成されている。アプリケーションプログラム（１０２）にて実行時エラーが発生した場合、スタックトレース（１０３）はスタックトレース優先度情報付加部（１０４）に渡る。スタックトレース優先度情報付加部（１０４）は、パッケージ情報（１０５）を参照し、優先度情報付きスタックトレース（１０６）を生成する。生成された優先度情報付きスタックトレース（１０６）は、スタックトレース出力制御部に渡り（１０７）、ここでスタックトレース情報表示システム（１０９）に適した表示情報付きスタックトレース（１０８）が生成される。スタックトレース出力制御部（１０７）は、開発しようとするアプリケーションプログラムの用途に応じて、さまざまな種類の実装を選択し、利用することができる。スタックトレース情報表示システム（１０９）は通常、既存のログブラウザや、Ｗｅｂブラウザを、スタックトレース表示部（１１０）として使用する。スタックトレース情報表示システム（１０９）はアプリケーションプログラム開発・実行システム（１０１）とは別のマシン・あるいはプロセスに存在しても、または同一のマシン・あるいはプロセスに存在しても良い。
【００１３】
図２は、スタックトレース（１０３）の内容について具体的に説明する図（２００）とである。スタックトレース（１０３）は、複数の行に分かれるテーブル考えることが出来る。各行には、実行時エラーが発生したときの呼び出し履歴が、呼び出しを行ったクラス名（２０１）、メソッド名（２０２）、およびその行番号（２０３）が記録されている。これらの各行は、呼び出す側が下の行に、呼び出される側が上の行に配置される形式で保持されている。
【００１４】
図３は、パッケージ情報（１０５）の構成とその内容について説明する図（３００）である。パッケージ情報は、システムパッケージリスト（３０１）と、ユーザパッケージリスト（３０２）に分けられる。システムパッケージリスト（３０１）は、システムが標準で用意しているクラスが属するプログラム単位（パッケージ）の一覧が列挙されたファイルであり、アプリケーションプログラム開発・実行システムがあらかじめ提供する。ユーザパッケージリスト（３０２）は、必要に応じユーザが新たに作成、追加するリストであり、ユーザがスタックトレースへの表示を抑止したいクラスあるいはパッケージを列挙する。パッケージリストに記述される項目は、クラス名そのものが記述されている形態と、「＊」記号を含む形態の二つをとることができる。「＊」記号を含む形態の場合には、その位置に任意の種類、および数の文字列を含むクラスが、スタックトレースへの表示の抑止の対象となる。例えば、「ｊａｖａ（登録商標）．＊」と記述されている項目の場合、先頭に「ｊａｖａ（登録商標）．」と記述されているクラスはすべて、スタックトレースへの表示の抑止の対象となる。
【００１５】
図４は、スタックトレース優先度情報付加部（１０４）の実行アルゴリズムについて説明したフローチャート（４００）である。スタックトレース優先度情報付加部（１０４）は、スタックトレース（１０３）をアプリケーションプログラム（１０１）から受けると、まずスタックトレース（１０３）中の一つの行を取得し（ステップ４０１）その中のクラス名の項目（２０１）を、システムパッケージリスト（３０１）とユーザパッケージリスト（３０２）の各行と比較（ステップ４０２）する。比較を実行した結果（ステップ４０３）、トレース行のパッケージ部分に対応するものがある場合には、該当するトレース行の優先度フラグを０に設定する（ステップ４０４）。一方、対応するものが無い場合には、該当するトレース行の優先度フラグを１に設定する（ステップ４０５）。次にスタックトレースの末尾であるかの判定を行い（ステップ４０６）末尾である場合には実行を終了し、そうでない場合にはステップ４０１に移動する。
【００１６】
図５は、スタックトレース優先度情報付加部（１０４）により優先度フラグが付加された、優先度情報付きスタックトレース（１０６）の具体的な内容を示す図（５００）である。クラス名（５０１）、メソッド名（５０２）、行番号（５０３）は、図２に示すスタックトレースの内容（２００）中の、クラス名（２０１）、メソッド名（２０２）、行番号（２０３）と同じものが格納される。優先度情報付きスタックトレース（１０６）では、これらに加え、優先度フラグ（５０４）が、フローチャート４００に示すアルゴリズムによって、各行に追加されている。各行において、優先度フラグ（５０４）が１と設定されているものは最終的に表示対象となり、優先度フラグが０と設定されているものは非表示対象となる。
【００１７】
図６は、スタックトレース出力制御部（１０７）の詳細な内容について説明した図（６００）である。スタックトレース出力制御部（１０７）は、複数の出力フォーマットを出力可能とするために、内部に具体的な出力形式に応じた複数の制御部を保持する。本図においては、ログ出力用制御部（６０１）と、ＨＴＭＬ出力用制御部（６０３）がそれに当たる。ログ出力用制御部（６０１）は、アプリケーションプログラム開発・実行環境（１０１）が提供するログ出力用ライブラリ（６０２）を使用してログファイル形式の表示情報付きスタックトレース（６０５）を出力する。また、ＨＴＭＬ出力用制御部（６０３）は、同じくアプリケーションプログラム開発・実行環境（１０１）が提供するＨＴＭＬ出力用ライブラリ（６０４）を使用してＨＴＭＬ形式の表示情報付きスタックトレース（６０６）を出力する。これらは最終的にスタックトレース情報表示システム（１０９）に送られる。スタックトレース出力制御部（１０７）は、ログ出力用制御部（６０１）とＨＴＭＬ出力用制御部（６０３）を両者とも有効とし、二種類の表示情報付きスタックトレースを同時に出力することも、あるいはいずれかだけを有効とし、一種類の表示情報付きスタックトレースを出力することもできる。また、新たな出力形式が必要となった場合にはスタックトレース出力制御部（１０７）内に、新たな出力制御部を追加し、これを有効にすることで対応することが可能となる。
【００１８】
図７は、ログ出力用制御部（６０１）の実行アルゴリズムについて説明したフローチャート（７００）である。ログ出力用制御部は、優先度情報付きスタックトレース（１０６）を受け取ると、その先頭行から１行を読み込む（ステップ７０１）。次に読み込んだ行における優先度フラグ（５０４）が１であるかを判定し（ステップ７０２）、もし１である場合には、ログ出力レベルを「ＥＲＲＯＲ」とし、ログ出力用ライブラリ（６０２）に対し、スタックトレースの１行を出力する（ステップ７０３）。もし０である場合には、ログ出力レベルを「ＩＮＦＯ」とし、ログ出力用ライブラリ（６０２）に対し、スタックトレースの１行を出力する（ステップ７０４）。その後、現在の行が優先度情報付きスタックトレース（１０６）の末尾であるかを判定し（ステップ７０５）、もしそうである場合には終了する。もしそうでない場合にはステップ７０１に移動し、処理を継続する。
【００１９】
図８は、ログ出力用制御部（６０１）を経由して出力されたログ形式のスタックトレースの一例を示す図（８００）である。まず８０１に示すログ形式のスタックトレースでは、時刻、ログ出力レベル、具体的な表示内容の順に記述されたログの一部としてスタックトレースが出力されている。この図においては、「ＥＲＲＯＲ」レベルの方が「ＩＮＦＯ」レベルよりも重要度が高い情報であるものとする。これを一般的なログ閲覧に使用される、ログブラウザと呼ばれるプログラムにて、優先度の低い出力、（本例では「ＩＮＦＯ」レベル）を自動的に抑止するよう設定を行うと、８０２に示すように、スタックトレース中にて優先度の高い行だけが表示され、そうでない行の表示は抑止される。
【００２０】
また、アプリケーション実行環境にて、優先度の低いログ出力を実施しないよう、ログ出力用ライブラリを設定することもある。その場合も、８０２に示すような結果が得られることとなる。
【００２１】
図９は、ＨＴＭＬ出力用制御部（６０３）の実行アルゴリズムについて説明したフローチャート（９００）である。ＨＴＭＬ出力用制御部（６０３）は、優先度情報付きスタックトレース（１０６）を受け取ると、その先頭行から１行を読み込む（ステップ９０１）。次に読み込んだ行における優先度フラグ（５０４）が１であるかを判定し（ステップ９０２）、もし１である場合には、ＨＴＭＬ出力ライブラリ（６０４）に対し、その行を強調するようなＨＴＭＬ指示文を付加したスタックトレースの１行を出力する（ステップ９０３）。強調の方法としては、その行のフォントサイズを拡大する、太字表示をさせる、赤などの目立つ色を使用するなどの方式が適用される。読み込んだ行における優先度フラグが０である場合には、ＨＴＭＬ出力ライブラリ（６０４）に対し、その行を目立たなくするようなＨＴＭＬ指示文を付加したスタックトレースの１行を出力する（ステップ９０４）。目立たなくさせるために具体的な方法としては、その行のフォントサイズを縮小する、灰色などの目立たない色を使用するなどの方式が適用される。その後、現在の行が優先度情報付きスタックトレース（１０６）の末尾であるかを判定し（ステップ９０５）、もしそうである場合には終了する。もしそうでない場合にはステップ９０１に移動し、処理を継続する。
【００２２】
図１０は、ＨＴＭＬ出力用制御部（６０３）から出力された、ＨＴＭＬ形式の表示情報付きスタックトレース（６０６）を、Ｗｅｂブラウザ（１００１）にて表示した様子を示した図（１０００）である。ＨＴＭＬ出力用制御部（６０３）にて設定されたＨＴＭＬ指示文に従い、Ｗｅｂブラウザ（１００１）はスタックトレース中優先度の高い部分を強調表示し、そうでない部分を目立たないように表示している。
【図面の簡単な説明】
【００２３】
【図１】本発明における一実施例であるアプリケーションプログラム開発・実行システム（１００）の構成を示すものである。
【図２】スタックトレース（１０３）の内容について具体的に説明する図である。
【図３】パッケージ情報（１０５）の構成とその内容について説明する図である。
【図４】スタックトレース優先度情報付加部（１０４）の実行アルゴリズムについて説明したフローチャートである。
【図５】スタックトレース優先度情報付加部（１０４）により優先度フラグが付加された、優先度情報付きスタックトレース（１０６）の具体的な内容を示す図である。
【図６】スタックトレース出力制御部（１０７）の詳細な内容について説明した図である。
【図７】ログ出力用制御部（６０１）の実行アルゴリズムについて説明したフローチャートである。
【図８】ログ出力用制御部（６０１）を経由して出力されたログ形式のスタックトレースの一例を示す図である。
【図９】ＨＴＭＬ出力用制御部（６０３）の実行アルゴリズムについて説明したフローチャートである。
【図１０】ＨＴＭＬ出力用制御部（６０３）から出力された表示情報付きスタックトレース（６０６）を、Ｗｅｂブラウザ（１００１）にて表示した様子を示した図である。
【符号の説明】
【００２４】
１００…本発明における一実施例であるアプリケーションプログラム開発・実行システムの構成、１０１…アプリケーションプログラム開発・実行システム、１０２…アプリケーションプログラム、１０３…スタックトレース、１０４…スタックトレース優先度情報付加部、１０５…パッケージ情報、１０６…優先度情報付きスタックトレース、１０７…スタックトレース出力制御部、１０８…表示情報付きスタックトレース、１０９…スタックトレース情報表示システム、１１０…スタックトレース表示部、２００…スタックトレースの内容の具体的説明図、２０１…スタックトレースの「クラス名」欄、２０２…スタックトレースの「メソッド名」欄、２０３…スタックトレースの「行番号」欄、３００…パッケージ情報（１０５）の構成とその内容の説明図、３０１…システムパッケージリスト、３０２…ユーザパッケージリスト、５００…優先度情報付きスタックトレースの内容の具体的説明図、５０１…優先度情報付きスタックトレースの「クラス名」欄、５０２…優先度情報付きスタックトレースの「メソッド名」欄、５０３…優先度情報付きスタックトレースの「行番号」欄、５０４…優先度情報付きスタックトレースの「優先度フラグ」欄、６００…スタックトレース出力制御部の詳細な内容の説明図、６０１…ログ出力用制御部、６０２…ログ出力用ライブラリ、６０３…ＨＴＭＬ出力用制御部、６０４…ＨＴＭＬ出力用ライブラリ、６０５…ログファイル形式の表示情報付きスタックトレース、６０６…ＨＴＭＬ形式の表示情報付きスタックトレース、８００…ログ出力用制御部を経由して出力されたログ形式のスタックトレースの一例、８０１…ログ出力レベルが付加されたログ形式スタックトレース、８０２…ログブラウザあるいはアプリケーション実行環境にて優先度の低い出力を抑止した場合のログ形式スタックトレース、１０００…ＨＴＭＬ形式の表示情報付きスタックトレースを、Ｗｅｂブラウザにて表示した様子、１００１…Ｗｅｂブラウザ。
【図１】
2005346317.tif 000003
【図２】
2005346317.tif 000004
【図３】
2005346317.tif 000005
【図４】
2005346317.tif 000006
【図５】
2005346317.tif 000007
【図６】
2005346317.tif 000008
【図７】
2005346317.tif 000009
【図８】
2005346317.tif 000010
【図９】
2005346317.tif 000011
【図１０】
2005346317.tif 000012