JP2004516574A - ソフトウェアコンパイラ用の組み込みシステム用のロバストロギングシステム - Google Patents

ソフトウェアコンパイラ用の組み込みシステム用のロバストロギングシステム Download PDF

Info

Publication number
JP2004516574A
JP2004516574A JP2002551703A JP2002551703A JP2004516574A JP 2004516574 A JP2004516574 A JP 2004516574A JP 2002551703 A JP2002551703 A JP 2002551703A JP 2002551703 A JP2002551703 A JP 2002551703A JP 2004516574 A JP2004516574 A JP 2004516574A
Authority
JP
Japan
Prior art keywords
logging
type
arguments
message
function
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
Application number
JP2002551703A
Other languages
English (en)
Inventor
ダブリュ ルウィス,ジョディ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of JP2004516574A publication Critical patent/JP2004516574A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

前処理スクリプトは、ロギング命令のメッセージカタログを解析する。たとえば、各レコードは、区別可能なログメッセージと、フォーマット文字列と、変数と説明のためのプレース・ホルダーとを含む。スクリプトは、メッセージカタログに格納された各メッセージのタイプを定義するヘッダファイルを生成する。スクリプトは、次に、メッセージのタイプ毎にマクロを定義する。プログラマがコードを記述するとき、プログラマは、標準言語フォーマットよりもマクロフォーマットを使用する。マクロは、コンパイルの際に、包括的ロギング呼び出しの特定のインスタンスに要求される引数の型及び個数に対応した関数を呼び出す。コードが最終的にコンパイルされたとき、コンパイラは、引数の個数及び型が適合しない場合にエラーメッセージを生成する。

Description

【0001】
〔発明の背景〕
−発明の分野
本発明は、コンピュータソフトウェアにおけるロギング動作を定義するメカニズムに係り、より詳細には、一定の個数及び/又は型の引数を要求するロギング命令に対して、コンパイル時に引数の個数及び型の検査が行われるメカニズムに関する。
【0002】
−背景
ロギングは、実行中のソフトウェアプロセスで発生するあらゆる形態の検査イベントを表現するため使用される総称的な用語である。ロギングのよく知られた例は、モデムを介してコンピュータに接続する際のステップの追跡である。接続の各ステップが完了すると、ロギングシステムは接続中の端末にメッセージを出力する。エラーが発生した場合、エラーによってプロセスが停止させられる前に、プロセスがどこまで進んでいたかを即座に判定することができる。一般的に、ロギングの結果としてテキストメッセージが生成され、このテキストメッセージは、後で読み出されるまでコンパクトなトークン形式で保持し、読み出す際に、トークンを読み取り可能なテキストで置換してもよい。
【0003】
ソフトウェアは、屡々、同じコードが異なる言語を使用する様々な地域のユーザのため使用できるように記述される。代替的なロギング命令を実行可能なソフトウェア自体に組み込むのではなく、メッセージカタログが代替的な言語フォーマットを保持するため使用される。ソフトウェアは、ロギング命令のコード又は標準形式だけを生成するように記述され、ロギング命令はカタログを使用して変換される。ロギング命令は、(標準出力が一時的に保持される場合には)ログ出力が読まれるときに変換されるか、或いは、標準形式が生成され、出力装置又は記憶装置へ出力された直後に変換される。
【0004】
一部のシステムでは、ロギング出力を生成するため使用される命令の引数は、個数が一定であり、型が包括的(総称的)である。たとえば、命令は、フォーマット文字列と、整数、文字列、浮動小数点値などのような多種類のいずれかの型の引数の固定長の系列をとる。このような命令は、オペレーティングシステム、又は、プログラム言語の一部に固有の命令である。引数の個数が一定である場合、たとえば、必ずしも全部の引数を使用しなくてもよい。特定のフォーマット命令が引数と適合しなくても、引数が任意の型をとり得る場合、それらの呼び出しが正確にプログラミングされることを保証することは困難である。その理由は、コンパイル中に、引数に関して、定義された特定のロギングイベントに適当な型及び/又は個数の検査が行われないからである。唯一の代案は、実行することによってロギング命令をテストすることである。しかし、これは、大変な作業であり、実施できない場合もよくある。結局、実時間テストは、ロギングエラーが発生したかどうかについて都合のよい表示を与えない。最近のオブジェクト指向(OO)言語は、ある種の解を与えるが、一部のシステム、たとえば、組み込みシステムの場合、ソフトウェアの作者は、少なくとも一部のコードに関して非オブジェクト指向言語に制限される場合がある。
【0005】
〔発明の概要〕
本発明は、言語用ではなく、多種多様なロギング命令のためのメッセージカタログに依存する前処理スクリプトを与えることによって、従来技術において生じる上述の問題を解決する。メッセージカタログはメッセージ構造体を含み、各メッセージ構造体はレコードに定義される。各レコードは、たとえば、区別可能なロギングメッセージと、フォーマット文字列と、変数及び説明のためのプレース・ホルダーと、を含む。プレース・ホルダーは、コンパイラのロギングシステムが包括的命令の形式をとり、その後に、フォーマット命令及び固定数の引数が続く場合に適切であろう。
【0006】
本発明は、レコード毎に要求される引数の個数を判定するためメッセージカタログを解析する前処理スクリプトを使ってメッセージカタログを使用する。スクリプトは、メッセージカタログに定義されたメッセージの各型に対しマクロを定義するヘッダファイルを生成する。プログラマがコードを記述するとき、プログラマは、標準言語フォーマットではなく、マクロフォーマットを使用する。マクロは、コンパイルの際に、標準言語フォーマットに呼び出し形が含まれる関数を呼び出す。しかし、関数は、特定のメッセージによって要求される引数の型及び/又は個数に特有の関数である。コードが最終的にコンパイルされたとき、前置プロセッサは、全てのマクロを、引数の個数及び/又は型に対応した関数呼び出しで置換する。この場合、コンパイラは、引数の個数及び/又は型が一致しないとき、エラーメッセージを発生する。
【0007】
以下では、本発明がよりよく理解されるように、幾つかの好ましい実施例に関して、添付図面を参照して、本発明を説明する。図面に関しては、図示されている詳細は、一例であり、本発明の好ましい実施例を例示的に説明するためのものであり、本発明の原理及び概念的な局面の最も有効で、かつ、容易に理解されるであろうと考えられる記述を提供するために提示されている。この点に関して、本発明の基本的な理解のために必要以上に詳細に本発明の構成上の細部を説明しようとしていないが、当業者は、添付図面を参照して以下の説明を読むことによって、本発明の幾つかの実施形態がはっきりと理解できるであろう。
【0008】
〔好ましい実施例の詳細な説明〕
図1を参照するに、プログラマは、新ロギング出力を生成する呼び出しを追加することによって、定期的に新しいソースコードを記述するか、又は、旧いソースコードを更新する。このようなロギング呼び出しが旧いコードに予め収容されていないタイプの呼び出しである場合、或いは、新プログラムを設計中である場合、新しいメッセージタイプが存在し(S10)、新しいメッセージカタログ若しくは更新されたメッセージカタログがステップS20で生成される。メッセージカタログは、ロギングメッセージタイプのリストである。本発明の一実施例において、メッセージカタログは以下の表に示されるようなフォーマットをもつ。
【0009】
【表1】
Figure 2004516574
メッセージの各タイプに要求される引数の個数及び/又は型を必要とする関数がステップS25で定義される。これらの関数は、ロギングメッセージタイプのクラスに包括的な関数である。たとえば、1個の引数を要求するメッセージ用の制限的な関数、2個の引数を要求するメッセージ用の関数などが存在する。或いは、引数の個数と型の組合せ毎に別々の関数を準備してもよい。
【0010】
ステップS30において、メッセージカタログが解析され、メッセージカタログにロギングメッセージのタイプ毎に(すなわち、各レコードに対して1個ずつ)マクロ定義を作成するヘッダが生成される。得られた新ヘッダファイルは、ステップS40で、新ソースコードファイルに追加されるか、又は、旧ヘッダファイルを置き換え、新メッセージタイプに基づく新ソースコードがソースコードに追加される。次に、ステップS50でコンパイラが実行され、引数の個数若しくは型の不一致によって生ずるエラーが検査され、適切な訂正動作がステップS60で行われる。
【0011】
C言語ファイルの一部分におけるヘッダの一例は、
Figure 2004516574
である。
【0012】
プログラマは、自分の作成するコードにログ呼び出しマクロを使用することができる。たとえば、以下の命令が現れる。
Figure 2004516574
で置き換えられる。
【0013】
このように、コンパイラが予備コンパイルステップ中にこれらの命令のうちの一つの命令を見つけたとき、コンパイラは、マクロテキストを、ログ呼び出しマクロ定義に規定されているような関数呼び出しで置き換える。すなわち、
Figure 2004516574
に変更され、ここで、”0xNNNN”は特定のロギングイベントのメッセージ番号を表わし、”XYZ”はマクロ命令で使用される引数を表わす。
【0014】
重要な点は、ログ呼び出し定義において、異なる関数が引数の個数に依存して使用されることに注意する必要がある。関数は、ロギング出力を生成するため要求されるステップを実際に実行する。各関数は適切なロギング命令を含むが、この関数定義内では、従来技術におけるのと同様に、命令は、引数の個数及び型に関して一致している。引数を、要求された引数の個数及び型に対応した関数へ渡すことにより、夫々の関数は、マクロ定義で要求されたログイベントの型に関連付けられ、コンパイラは、コンパイル中にマクロ命令中の引数の個数及び型をチェックできるようになる。これにより、実行時の前に不適切な構文が出現した場所が正確に示される。
【0015】
次に、関数定義のリストの一例を記載する。以下のコードは、4個の引数をとるロギング関数を定義する。
Figure 2004516574
このコード系列において、”format”はメッセージフォーマットの配列であり、”msgNumber”はフォーマット配列へのインデックスであり、”logMsg”は標準システムロギング呼び出しであり、その引数の個数は固定の7個であり、引数の型は、1番目が文字列型であり、残りの6個の引数は整数型である。
【0016】
図2及び図3を参照して、ロギング出力の作成に関する従来技術の方法と本発明による方法を比較する。従来技術の方法は図2に示され、本発明による方法は図3に示されている。
【0017】
従来技術の方法において、包括的呼び出し100は、通常のメカニズムである、オペレーティングシステム装置のような関数ライブラリ、又は、プログラミング言語に限定されない命令を用いて利用可能である。包括的呼び出し100は、多数のパラメータをもち、どのパラメータが使用されるかは、命令のインスタンスに使用される他のパラメータに依存する。
【0018】
本発明の方法では、包括的呼び出し100は、特定のロギング操作(たとえば、ロギングデータをキューに入れるような操作)に特有の引数の個数及び/又は型をもつように定義された関数150によって間接的にアクセスされる。この関数定義は、適切な包括的構文を含み、関数の引数を包括的呼び出し100の引数へ適切に渡す。適切なパラメータの組140を備えた関数呼び出し130は、プログラムの実行時に、適切なロギングイベントを作成するため、プログラマのコードで使用される。媒介する関数の結果として、引数の個数及び/又は型は、実行時ではなく、コンパイル時に検査され得る。
【0019】
図4を参照するに、関数呼び出しをマクロ経由で渡し、マクロ定義プロセスを自動化することによって、ロギングメッセージシステムは、エラー検査のため使用され得る単調な診断機能を実現できる。たとえば、ファイル名称及びライン数は、ログメッセージに条件付きで添付される。ここで、コンパイルコマンドを発行するとき、コンパイラオプションを指定することが可能である。典型的に、コンパイラオプションのうちの一つは、開発用、又は、製品発売用のコンパイルである。これは、「条件付き」によって表わされる条件である。すなわち、2組のマクロ定義が作成される。一方の組は、付加的な診断情報であるファイル名称及びライン番号を含み、他方の組は、この付加的な診断情報を含まない。2組のマクロ定義は、次に、予備コンパイラ条件付き指令、すなわち、if/then/else文によって囲まれる。コードが開発用にコンパイルされるとき、付加情報を含む組が使用される。コードが製品発売のためコンパイルされるとき、顧客は付加情報に関心が無いので、別の組が使用される。これは、前置プロセッサスクリプトを、ファイル名及びライン番号用の予備コンパイラ指令をマクロ定義に添付することによって実現され得る。たとえば、
Figure 2004516574
のように表わされる。これは、プログラマの補助が無くても実行可能であり、開発用にはオンにされ、製品用にはオフにされる。このように、メッセージカタログ200は、診断情報を含むマクロ定義を作成するため、マクロスクリプト210によって解析される。
【0020】
当業者にとって明らかであるように、本発明は、上述の説明用の実施例の詳細に限定されることはなく、本発明は、本発明の精神若しくは基本的属性を失うことなく、他の特定の形態で実施される。したがって、本発明の実施例は、全ての局面において、例示であると解されるべきであり、限定的に解釈されるべきではなく。本発明の範囲は、上述の説明によって定められるのではなく、請求項の記載によって示されるものであり、請求項に記載された事項と等価な意味と範囲に含まれるすべての変更は、本発明の範囲に包含されることが意図されている。
【図面の簡単な説明】
【図1】
本発明の一実施例によるロギング呼び出しエラー検査処理のフローチャートである。
【図2】
従来技術によるロギング呼び出し作成方法を説明するブロック図である。
【図3】
本発明の一実施例によるロギング呼び出し作成方法を説明するブロック図である。
【図4】
コンパイル時に示される診断情報を得るためマクロの自動生成を使用する本発明の一実施例によるロギング呼び出し作成方法を説明するブロック図である。

Claims (6)

  1. 最終的にロギング動作を実行する命令を含む関数を定義し、
    該関数は、引数の個数と型のうち少なくとも一方が特定のロギング動作に特有である少なくとも1個の引数を含み、
    該命令は引数の個数と型のうちの少なくとも一方に制限されない命令であり、
    プログラム中で該関数を呼び出し、該特定のロギング動作に特有である該個数と型のうちの少なくとも一方の不一致が該プログラムをコンパイルすることによって明らかにされる、
    動作をプログラミングする方法。
  2. 該動作はロギング動作である、請求項1記載の方法。
  3. 最終的に実行時にロギング動作を実行する命令を含む関数を定義し、
    該関数は、引数の個数と型のうち少なくとも一方が特定のロギング動作に特有である少なくとも1個の引数を含み、
    該命令は引数の個数と型のうちの少なくとも一方に制限されない命令であり、
    該関数を呼び出し、該特定のロギング動作に特有である該個数と型のうちの少なくとも一方の不一致がコンパイルすることによって明らかにされる、
    プログラムを記録したソフトウェア媒体。
  4. 該動作はロギング動作である、請求項3記載のソフトウェア媒体。
  5. 少なくとも引数を要求するプログラム命令に渡される引数の個数と型の少なくとも一方に対応した関数を定義する手順と、
    ロギングメッセージのクラスを含むロギングメッセージカタログを作成する手順と、
    プログラミング命令を該メッセージカタログに応じて該関数の中の対応した関数に変換するマクロを定義する手順と、
    プログラム中で該マクロを参照する手順と、
    を有するロギングスクリプトをプログラミングする方法。
  6. 該マクロを定義する手順は、ファイル名及び/又はライン番号を対応したログメッセージに条件付きで添付するマクロを定義する手順を含む、請求項5記載の方法。
JP2002551703A 2000-12-18 2001-12-10 ソフトウェアコンパイラ用の組み込みシステム用のロバストロギングシステム Pending JP2004516574A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/739,517 US20020129335A1 (en) 2000-12-18 2000-12-18 Robust logging system for embedded systems for software compilers
PCT/IB2001/002431 WO2002050674A2 (en) 2000-12-18 2001-12-10 Robust logging system for embedded systems for software compilers

Publications (1)

Publication Number Publication Date
JP2004516574A true JP2004516574A (ja) 2004-06-03

Family

ID=24972659

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002551703A Pending JP2004516574A (ja) 2000-12-18 2001-12-10 ソフトウェアコンパイラ用の組み込みシステム用のロバストロギングシステム

Country Status (6)

Country Link
US (1) US20020129335A1 (ja)
EP (1) EP1417575A2 (ja)
JP (1) JP2004516574A (ja)
KR (1) KR20030015200A (ja)
CN (1) CN1552018A (ja)
WO (1) WO2002050674A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017215636A (ja) * 2016-05-30 2017-12-07 沖電気工業株式会社 情報処理装置、及びプログラム

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7237234B2 (en) * 2001-12-13 2007-06-26 Texas Instruments Incorporated Method for selective solicitation of user assistance in the performance tuning process
US7305660B2 (en) * 2003-08-29 2007-12-04 International Business Machines Corporation Method to generate a formatted trace for an embedded device
US20080235001A1 (en) * 2007-03-22 2008-09-25 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Implementing emulation decisions in response to software evaluations or the like
US9378108B2 (en) * 2007-03-22 2016-06-28 Invention Science Fund I, Llc Implementing performance-dependent transfer or execution decisions from service emulation indications
US8874425B2 (en) * 2007-03-22 2014-10-28 The Invention Science Fund I, Llc Implementing performance-dependent transfer or execution decisions from service emulation indications
US9558019B2 (en) * 2007-03-22 2017-01-31 Invention Science Fund I, Llc Coordinating instances of a thread or other service in emulation
US8495708B2 (en) * 2007-03-22 2013-07-23 The Invention Science Fund I, Llc Resource authorizations dependent on emulation environment isolation policies
US20080235000A1 (en) * 2007-03-22 2008-09-25 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Implementing security control practice omission decisions from service emulation indications
US8438609B2 (en) * 2007-03-22 2013-05-07 The Invention Science Fund I, Llc Resource authorizations dependent on emulation environment isolation policies
US8327324B1 (en) * 2008-09-29 2012-12-04 Emc Corporation Message logging system
US8458519B2 (en) 2010-01-07 2013-06-04 International Business Machines Corporation Diagnostic data set component
US20110231820A1 (en) * 2010-03-19 2011-09-22 Aricent Inc. Exclusive logging
CN110928551A (zh) * 2019-11-29 2020-03-27 山东省国土测绘院 一种快速输入程序代码的方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5121475A (en) * 1988-04-08 1992-06-09 International Business Machines Inc. Methods of dynamically generating user messages utilizing error log data with a computer system
US5287444A (en) * 1989-08-14 1994-02-15 International Business Machines Corporation Message processing system
CA2246948C (en) * 1991-03-28 1999-09-14 Ibm Canada Limited-Ibm Canada Limitee Method and means for encoding storing and retrieving hierarchical data processing information for a computer system
US5778223A (en) * 1992-03-17 1998-07-07 International Business Machines Corporation Dictionary for encoding and retrieving hierarchical data processing information for a computer system
US5761510A (en) * 1995-11-07 1998-06-02 Microsoft Corporation Method for error identification in a program interface
US6044216A (en) * 1996-06-24 2000-03-28 Oracle Corporation Method and apparatus for implementing cursor variables for accessing data from database
US6119079A (en) * 1997-04-24 2000-09-12 Hewlett-Packard Company Method and structure for tokenized message logging system
US6009273A (en) * 1997-05-29 1999-12-28 Hewlett-Packard Company Method for conversion of a variable argument routine to a fixed argument routine
US6243862B1 (en) * 1998-01-23 2001-06-05 Unisys Corporation Methods and apparatus for testing components of a distributed transaction processing system
US6427228B1 (en) * 1999-05-12 2002-07-30 International Business Machines Corporation Combining a meta data file and java source code to dynamically create java classes and javabeans

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017215636A (ja) * 2016-05-30 2017-12-07 沖電気工業株式会社 情報処理装置、及びプログラム

Also Published As

Publication number Publication date
CN1552018A (zh) 2004-12-01
US20020129335A1 (en) 2002-09-12
EP1417575A2 (en) 2004-05-12
KR20030015200A (ko) 2003-02-20
WO2002050674A2 (en) 2002-06-27
WO2002050674A3 (en) 2004-02-26

Similar Documents

Publication Publication Date Title
US7484205B2 (en) Preprocessor-based source code instrumentation
US7937692B2 (en) Methods and systems for complete static analysis of software for building a system
JP4619698B2 (ja) コードセグメント作成方法及びそのシステム
US6687896B1 (en) Computer system to compile non incremental computer source code to execute within incremental type computer system
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
US6063133A (en) No preprocessor for embedded SQL in a 3GL
US9471282B2 (en) System and method for using annotations to automatically generate a framework for a custom javaserver faces (JSF) component
Chiba et al. Josh: an open AspectJ-like language
US20060212847A1 (en) Type checker for a typed intermediate representation of object-oriented languages
US8448152B2 (en) High-level language, architecture-independent probe program compiler
US20040083464A1 (en) Non-invasive rule-based binary analysis of software assemblies
US20050034109A1 (en) Method and system for program editing
US20040268301A1 (en) Adding new compiler methods to an integrated development environment
US20090319554A1 (en) Unified metadata for external components
JPS62164136A (ja) デ−タベ−ス・アクセス制御方式
US8776024B2 (en) Software application fine-tuning method, system, and corresponding computer program product
JP2004516574A (ja) ソフトウェアコンパイラ用の組み込みシステム用のロバストロギングシステム
US20080313208A1 (en) Apparatus, system, and method for automated context-sensitive message organization
US20090320007A1 (en) Local metadata for external components
US8918772B1 (en) Statically analyzing program correctness for a dynamic programming language
US6381736B1 (en) Method for compile-time type-checking of arguments for externally-specified format strings
US7624381B1 (en) Portable detection of start and completion of object construction
US20060009962A1 (en) Code conversion using parse trees
US6938239B2 (en) Automatic gopher program generator
JPH03118635A (ja) ソースコード発展システム用増分コンパイラ