JP2006012193A - コンピュータプログラムをテストし、デバッグするための再配置可能計測タグ - Google Patents

コンピュータプログラムをテストし、デバッグするための再配置可能計測タグ Download PDF

Info

Publication number
JP2006012193A
JP2006012193A JP2005259199A JP2005259199A JP2006012193A JP 2006012193 A JP2006012193 A JP 2006012193A JP 2005259199 A JP2005259199 A JP 2005259199A JP 2005259199 A JP2005259199 A JP 2005259199A JP 2006012193 A JP2006012193 A JP 2006012193A
Authority
JP
Japan
Prior art keywords
tagging
value
computer
source code
variable
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
JP2005259199A
Other languages
English (en)
Inventor
Sidney R Maxwell
アール. マックスウェル シドニー
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.)
NXP USA Inc
Original Assignee
Metrowerks Corp
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 Metrowerks Corp filed Critical Metrowerks Corp
Publication of JP2006012193A publication Critical patent/JP2006012193A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】 コンピュータプログラムをテストし、デバッグするための再配置可能計測タグを作成すること。
【解決手段】 タグはオフセットとベースを組み合わせたものに等しい値をもつ。タグオフセットの値が最初に判断され、次にタグは計測されるソースコード内の関心のあるエリアに挿入される。ベース値はコンピュータプログラムのオブジェクトコードがリンクされて実行可能コードが作られるときセットされる。ベース値は各タグが他のどのタグに対してもユニークな値をもつように解決される。タグ付けステートメントで計測されるソースコードは2つ以上のコンピュータに置いておくことが可能である。計測されたソースコードは2つ以上のコンピュータ上でコンパイルすることが可能である。各タグ付けステートメントに関連づけられたユニークな値は計測データベースに記録され、計測されたプログラムをその実行中に容易に観察できる。
【選択図】 図8

Description

本発明はテストとデバッグのためにコンピュータプログラムを計測することに関し、さらに具体的にはタグ付けステートメントを使用してコンピュータプログラムを計測することに関する。
ソフトウェア開発プロセスは、多数のソースコード・モジュールが集まって完全なコンピュータプログラムを構成しているソースコード・モジュールを独立に作成することからなっているのが代表的である。そのあと、これらのソースコード・モジュールはコンパイルされ、1つにリンクされて実行可能なコンピュータプログラムが作られている。複数のソフトウェア開発者はこれらのソースコード・モジュールの1つまたは2つ以上を書いていることがあるので、ソースコード・モジュールまたはそのコンパイル済みバージョンは単一のコンピュータに転送されてからリンクされているのが代表的である。実行可能コンピュータプログラムが生成されると、ソフトウェア開発者は標準のテストとデバッグ手法を使用してコンピュータプログラムをテストし、デバッグすることができる。
ソースコード・モジュールは非常に多数であるため、その結果のコンピュータプログラムは非常に複雑化することがよくある。コンピュータプログラムをテストしてからデバッグすることは、どのソフトウェア開発プロセスにおいても重要なステップであり、これらのステップは複雑なコンピュータプログラムではますます重要になっている。事実、このようにデバッグを行うこと(つまり、エラーを見つけて訂正すること)はコンピュータプログラムの最終ユーザが受領する前の契約上の要件となっている場合さえある。コンピュータプログラムをテストし、デバッグする難しさは、プログラムが複雑化すると共に増加するのが一般的であり、このことは驚く程のことではない。また、複雑なコンピュータプログラムをテストするときの困難性はソフトウェア開発者が多くなると増加することがよくある。
コンピュータプログラムをテストするとき、ソフトウェア開発者は各ソースコード・モジュールが相互に独立して、その意図する機能を正しく実行するかを確かめる共に、すべてのソースコード・モジュールを含んでいるコンピュータプログラムもその意図する機能を正しく実行するかを確かめる必要があるのが一般的である。コンピュータプログラムを正しくデバッグするためには、ソフトウェア開発者はコンピュータプログラムの実行をトレース(追跡)する必要があるのが代表的である。実行をトレースすると、コンピュータプログラムのどのステップが実行されたか、さらに、これらのステップが実行された順序を正確に知ることができる。
ソースコード計測は実行可能なタグ付け割り当てステートメント、つまり、「タグ」を各所のタグ付けポイントでコンピュータプログラムのソースコード・モジュールの中に挿入してから、そのソースコード・モジュールをコンパイルすることからなっているのが代表的である。タグ付けポイントとは、機能への入口点や出口点、選択ステートメントの代替ブランチ、およびループ・ステートメントの実行といったように、ソフトウェア開発者がその実行中にコンピュータプログラムのステート(状態)を知りたいと思っている、ソースコード・モジュール内の関心のある場所のことである。各タグ付けポイントで、タグ付け割り当てステートメントはタグ付け変数にユニークな値を割り当てているのが代表的である。計測データベース (instrumentation database - "IDB") は各タグ付けポイントでタグ付け変数に割り当てられたタグ付け値のような、タグ付けポイントに関するデータ、およびタグ付けポイントでのソースコード・モジュールに関する情報を収めている。
そのあと、ソフトウェア開発者は、計測されたコンピュータプログラムを実行し、タグ付け変数の現在値をモニタしながらコンピュータプログラムの実行をトレースすることができる。コンピュータプログラムの実行中に得られたタグ付け値をセーブしておくと、コンピュータプログラムの実行をトレースすることができる。コンピュータプログラムが実行されたあと、これらのタグ付け値を参照すると、コンピュータプログラム内のタグ付けポイントを知ることができる。従って、タグはコンピュータプログラムの特定のフラグメント(断片)の実行を知る手段となっている。
計測は「アドレス別 (byaddress)」または「値別 (by value)」方式を使用して実行できるのが代表的である。アドレス別計測方式では、ユニークなアドレスをもつユニークなメモリ・ロケーションは各タグ付けポイント用に予約されており、タグ付けステートメントはタグ付け値をそのユニークなロケーションにストアしている。例えば、単一のタグ付け値が使用でき、そのタグ付け値がユニークなロケーションに書かれていれば、ソフトウェア開発者はコンピュータプログラム内の対応するタグ付けポイントが実行されたと推量することができる。値別計測方式では、異なるタグ付け値が単一のメモリ・ロケーションに書かれ、そのロケーション自体ではなく、そのロケーションに書かれたタグ付け値がコンピュータプログラム内の特定のタグ付けポイントに対応している。専用プローブはこれらのタグ付け値をインターセプトし、それらをファイルに書くのが一般であるので、ソフトウエア開発者はそれを調べて、コンピュータプログラムをデバッグするときのツールとして使用することができる。
表1はタグで計測される前のソースコード・モジュールの例を示したものである。ソースコード・モジュール1は、表1に示すように、変数”A”への2つの変数割り当てステートメント(In.4 と In.8)、"While" ループ(In.5)、関数コール(In.7)、および "if-then-else" ステートメント(Ins.10-16) の擬似コードを含んでいる。ソースコード・モジュール1はタグを含んでいないので、その実行可能コードはタグ付け値を発行しない(つまり、タグ付け割り当てステートメントを実行しない)。従って、ソフトウェア開発者はソースコード・モジュール1の発行タグ付け値の参照テーブルにアクセスできないので、例えば、"function_!" (In.7) がこのソースコード・モジュールによって実行されたかどうかを確かめることができない。
Figure 2006012193
表2は値別計測方式においてタグで計測した後のソースコード・モジュール1の例を示したものである。インスツルメンタ (instrumenter) はタグ付け変数 "AMC_Control_Port" (In.2) の宣言をソースコード・モジュール1に挿入している。(アドレス別計測方式では、インスツルメンタは複数のタグ付け変数の宣言を挿入するのが代表的である。)また、インスツルメンタは表1に示す擬似コードを含んでいるソースコード・モジュール1内の各所のタグ付けポイント (Ins. 7, 11, 15, 19, 21, 25) でタグ付け割り当てステートメントを挿入している。計測されたソースコード・モジュール1を含んでいる実行可能コンピュータプログラムは実行中にタグを発行する。従って、ソフトウェア開発者は発行タグ付け値のテーブルにアクセスして、ソースコード・モジュール1のどのステップが実行されたかを確かめることができる。例えば、ソフトウェア開発者は値として "0"(In. 7) をもつタグ付け変数が発行タグ付け値のテーブルにストアされていることを確かめることによって、ソースコード・モジュール1内の "function_1" (In. 8) が実行されたかどうかを確かめることができる。"0" がストアされていれば、ソフトウェア開発者は "function_1" が実行されたと推量することができ、"0" がストアされていなければ、ソフトウェア開発者は "function_1" が実行されなかったと推量することができる。
Figure 2006012193
図1は、値別ソースコード計測方式で使用される代表的なモニタリングシステムを示す図である。コンピュータプログラムがタグ付け割り当てステートメントで計測されると、専用テスト機器はコンピュータプログラムの実行をモニタする。コンピュータプログラムがCPU 100内で実行されているとき、専用ハードウェア103はメモリ102内の特定のロケーションへのライト(write) を検出する。値別計測方式では、この専用ハードウェアはタグ付け変数のアドレスを知っている。コンピュータプログラムが実行されているとき、データはアドレス・データバス101を通してCPUとメモリの間で受け渡しされる。プローブ105はアドレスバスをモニタし、タグ付け変数のアドレス・ロケーションへのデータ・ライトを探し出す。プローブはタグ付け変数へのライトを見つけると、プローブはデータバス・コネクション104からタグ付け値をコピーする。そのあと、プローブはタイムスタンプをタグ付け値に付けてから、タグ付け値をコネクション106経由でデータリダクション・プロセッサ (data reduction processor) 107に渡す。データリダクション・プロセッサはどのタグ付けポイントが追加処理が必要であるかを判断する。例えば、データリダクション・プロセッサは関数入口と出口タグ付け変数をペアにし、タイムスタンプの差を計算してそれぞれの関数の実行中に消費された時間量を判断できるようにする。そのあと、データリダクション・プロセッサはレポートを作成するが、このレポートには、タグ付け値とそれぞれのタイムスタンプのリスト、「パフォーマンス」統計と共にタグ付け値で示された実行済み関数のリストおよびその実行を示す実行済みタグ付け値の圧縮リスト(例えば、「カバレッジマップ」)を含めることが可能である。また、このレポートには、他の情報を含めることもできる。データリダクション・プロセッサはこのレポートをワークステーションに転送し、そこからレポートはグラフィカルユーザインタフェース (graphical user interface - "GUI") 108に渡される。GUI 108はデータリダクション・プロセッサからのレポートに入っている、タグ付け値に対応するタグ付けポイントを、IDB 109にストアされているデータを使用して判別する。そのあと、GUI 108は実行のフローを示すタグ付けポイントの判別のほかに、追加情報を含めることができる複数のレポートのどれかを作成する。レポートされる各タグ付けポイントに頻繁に付加される追加情報としては、タグ付け割り当てステートメントがそこから実行されたソースコード・モジュールの名前、タグ付け割り当てステートメントを含んでいる関数の開始と終了の行番号、およびタグ付けポイントの性質を示す他の情報がある。ソフトウェア開発者はGUIからの実行トレースレポートをモニタして、コンピュータプログラムが期待パラメータの範囲内で実行されているかどうかを判断する。
あるコンピュータプログラムがその実行中にタグ付け値を出すためには、そのコンピュータプログラムは、まず、タグ付け割り当てステートメントを備えていなければならない。インスツルメンタはタグ付け割り当てステートメントを、ソースコード・モジュールのコンパイルに先立って行われる計測パス期間にコンピュータプログラムのソースコード・モジュールに挿入するのが普通である。値別タグ付け方式を使用するときは、タグ付け割り当てステートメントは "AMC_control_port = 0x12345678"のように単純形式になっているのが通常で、そこでは、モニタされたタグ付け変数 "AMC_control_port" はユニークなタグ付け値 "0x12345678" が割り当てられている。図2はタグ付け値形式の例を示している。この例では、値は32ビットの整数になっている。計測パス期間に、インスツルメンタは挿入されたタグの各々のロケーションに関する関係情報を記録し、この情報は実行期間中のコンピュータプログラムの挙動を解釈するためにあとで使用することができる。上述したように、プローブはタグ付け変数が書かれるアドレスをモニタする。例えば、特定のタグが"read_data" と名づけた関数への入口を表しているとすると、実行時にコンピュータプログラムがこのタグで割り当てられた特定のタグ付け値を発行していれば、ソフトウェア開発者はコンピュータプログラムが関数"read_data" への入口にあるステートメントで実行されたものと推量することができる。
従来の計測方式では、コンピュータプログラムを表すソースコード・モジュールは最初にコンパイラのプリプロセッサによって前処理されている。このプリプロセッサはマクロを展開し、コメントを除去し、インクルードファイルを展開している。そのあと、インスツルメンタはこれらの前処理されたソースコート・モジュールを受け取り、タグ付け割当ステートメントを追加している。コンパイラは計測されたソースコード・モジュールからオブジェクトコードを生成し、そのあとリンカはオブジェクトコードを結合して実行可能コードを作っている。
コンピュータプログラムのすべてのソースコード・モジュールが同時に計測されるときは、インスツルメンタは各タグ付けポイントにユニークなタグ付け値を割り当てることができる。しかし、種々のソースコード・モジュールが(例えば、異なるソフトウェア開発者によって)異なる時間に計測され、コンパイルされる場合は、問題が発生することになる。具体的には、インスツルメンタは2つの異なるタグ付けポイントで同じタグ付け値を割り当てることがある。その結果、コンパイラがこのタグ付け値を出したとき、これはタグ付けポイントをユニークに識別していないので、ソフトウェア開発者は実行フローをトレースすることが困難になる場合がある。
表3は表2に示す、計測されたソースコード・モジュール1を示し、表4は計測されたソースコード・モジュール2を示している。これらのソースコード・モジュールはどちらも、異なる時間期間で計測を行うと起こるように、他方に割り当てられたタグ付け値を無視して計測されている。従って、これらのソースコード・モジュールの両方を含んでいるコンピュータプログラムが、例えば、実行中に値が"0" であるタグを出したとすると、ソフトウェア開発者はプログラムがソースコード・モジュール1の function_1 (In. 8) へのコールを実行したのか、あるいはプログラムがソースコード・モジュール2の "if" ステートメント(In. 6) を実行したのか分からないことになる。実際には、ソースコード・モジュール1は10個のタグ付け値をソースコード・モジュール2と共有している。従って、コンピュータプログラムの実行中に出されたどのタグも、それがソースコード・モジュール1で出されたものかを確認することができず、10番目のタグに続く、ソースコード・モジュール2内のタグだけがユニークな値を出すことになる。
Figure 2006012193
Figure 2006012193
いくつかのインスツルメンタは、これから生成されるコンピュータプログラムのバージョンでも使用される、コンピュータプログラムの以前バージョンからソースコード・モジュールに対して生成されたIDBを参照するためのメソッドを用意している。ソースコード・モジュールがコンピュータプログラムの以前バージョン以後に変更されていなければ、計測プロセスは変更されなかったソースコード・モジュールを再計測しないことで効率化されている。しかし、コンピュータプログラムの新バージョンの計測プロシージャで割り当てられたタグ付け値がそのコンピュータプログラムの新バージョンでも使用される、コンピュータプログラムの以前バージョンで割り当てられたタグ付け値と矛盾していないことを確かめる注意が必要である。
いくつかの従来システムは、上記に提示したこの効率化された増分計測プロシージャをサポートしている。このアプローチでは、変更されたソースコード・モジュールが1つだけであれば、そのソースコード・モジュールだけを再計測し、コンパイルするだけでコンピュータプログラム全体をリンクし直している。しかし、これらの従来システムには、ソフトウェア開発者が開発サイクルのその時点までに割り当てられたすべてのタグ付け値を含んでいるIDBのセットを、インスツルメンタに指示しなければならないという制約がある。構成マネージャがソフトウェア開発者と協力してソースコード・モジュールの制御を調整しているような集中化コンパイル環境では、この制約はそれほど制限的ではない。このような集中化環境のソフトウェア開発者は制御化されたプロシージャでソースコード・モジュール、オブジェクトコード・ファイル、およびIDBの特定バージョンを見つけることができるので、コンピュータプログラムの以前バージョンからのIDBを識別することは比較的簡単であることが想像される。しかし、このメカニズムは最近の多くのソフトウェア開発プロジェクトの典型である、大規模な非集中化環境では挫折している。ソフトウェア開発者グループが分散化すると、各グループは多数のプロジェクトで、あるいは同一プロジェクトに属する種々ソフトウェア開発者グループのために使用されるオブジェクトコードのダイナミックリンクライブラリまたはコンパイルライブラリの構築を担当することになる。コンピュータ・プログラムの新バージョンの作成に対する制御が集中化されていないと、これらのライブラリの各々は独立に計測されることになるので、インスツルメンタによって割り当てられたタグ付け値に矛盾が起こることになる。実行時には、これらの矛盾するタグ付け値は、同一タグ付け値が複数のソースコード・モジュールを指すことがあるため分析プロセスを混乱させ、また、コンピュータプログラムのモニタリングツールはどのタグ付け値がどのソースコード・モジュールを表しているのかが分からなくなる。
さらに、集中化コンパイルモデルはコンピュータプログラムのバージョンのパラレル作成をサポートしていない。最近のソフトウェアプロジェクトは非常に大規模であることが頻繁であるために、コンピュータプログラムのコンパイルとリンクを1台のマシンで行うことは実用目的に合っていない。ネットワーク環境では、コンパイルプロセスは多くのマシンに分散されているので、これらのマシンがソースコード・モジュールをパラレルにコンパイルすることが可能で、コンパイルは全時間の数分の1で完了し、代表例として全時間の1/n(ただし、nはコンパイルに関与するマシンの台数)で完了している。従って、コンピュータプログラムのあるバージョンが1000個のソースコード・モジュールからなり、ソースコード・モジュールの100個が10台のマシンでコンパイルされるとすれば、開発者はコンパイルが行われる10台のマシンの各々でも計測を行う必要がある。タグ付け値の解決がこれらのマシン間で正しく調整されていないと、その結果のコンピュータプログラムは種々のソースコード・モジュールに挿入されたタグ付け値に無数の矛盾を含むことになる。
本発明の実施例は、複数のソースコード・モジュールからなるコンピュータプログラムを、タグ付け割り当てステートメントを使用して計測する方法およびシステムを提供している。各タグ付け割り当てステートメントにおけるタグ付け変数のユニークな値は、オフセット値とベース値を組み合わせたものに等しい値をタグ付け変数に割り当てることによって得られる。本発明のオフセット・タグ付けインスツルメンタはタグ付け割り当てステートメントで計測しようとする各ソースコード・モジュールごとにユニークなベース変数を生成する。そのあと、オフセット・タグ付けインスツルメンタはソースコード・モジュールを調べ、計測ポイントの個所にタグ付け割り当てステートメントを挿入する。挿入されたタグ付け割り当てステートメントはオフセット値と、そのソースコード・モジュールの生成されたベース変数とを組み合わせたものに等しい値にタグ付け変数をセットする。オフセット・タグ付けインスツルメンタは、ソースコード・モジュール内の各タグ付け割り当てステートメントごとにユニークなオフセット値を生成する。コンパイラは計測されたソースコード・モジュールからオブジェクトコードを生成する。ベース値リゾルバは、生成されたオフセット値と生成されたベース変数の値の各組み合わせが各計測ポイントをユニークに識別するように、各生成されたベース変数ごとにユニークな値を割り当てるソースコード・ステートメントを生成する。コンパイラは生成されたソースコード・ステートメントをコンパイルする。リンカはコンパイルされた計測済みソースコード・モジュールをコンパイルされた生成済みソースコード・ステートメントとリンクし、リンクされたプログラムを作り、このリンクされたプログラムの実行期間に、タグ付け変数が各計測ポイントでユニークな値にセットされるようにする。各生成済みベース変数のベース値の判断はリンク時まで延期されるので、ベース値リゾルバは各モジュール内の各タグ付け割り当てステートメントがタグ付け変数を、リンクされたすべてのモジュール間でユニークである値にセットしているかを確かめることができる。
本発明の実施例によれば、複数のコンピュータでタグ付けによるパラレル計測をサポートする計測タグ付け方法および装置が提供されている。本発明の実施例によれば、タグ付け値が以前に計測されたソースコード・モジュールと、または異なるコンピュータシステムで計測されたソースコード・モジュールと矛盾することなく、1つまたは2つ以上の変更されたソースコード・モジュールの計測を可能にするオフセット・タグ付けインスツルメンタが提供されている。従来のタグ付け割り当てステートメントを修正すれば、これらの計測機能を拡張することが可能である。
オフセット・タグ付けインスツルメンタは、タグ付け値をタグ付けポイントに実際に関連づけるのを、計測されたプログラムが実行されるまで延期することによって各タグ付けポイントにユニークなタグ付け値が割り当てられることを確かめる。オフセット・タグ付けインスツルメンタは、タグ付けベース変数とタグ付けオフセットを組み合わせてタグ付け変数のタグ付け値を作るようにするタグ付け割り当てステートメントを採用している。各ソースコード・モジュールはユニークなタグ付けベース変数をもち、各タグ付けポイントはソースコード・モジュール内でユニークであるタグ付けオフセット値をもっている。計測時に、オフセット・タグ付けインスツルメンタは一定のタグ付けオフセット値をソースコード・モジュールのベース変数と組み合わせるタグ付け割り当てステートメントを挿入する。リンク時に、タグ付けベース値リゾルバは各タグ付けベース変数ごとにユニークなベース値を生成し、各タグ付け割り当てステートメントがユニークなタグ付け値を生成するようにする。そのあと、タグ付けベース値リゾルバは各タグ付け変数をそのユニークな値に初期化することを実行する。実行時に、タグ付け割り当てステートメントが実行されると、ソースコード・モジュールのタグ付けベース変数に割り当てられた値はタグ付け割り当てステートメントに割り当てられた一定のタグ付けオフセット値と組み合わされて、全モジュール間でユニークであるタグ付け値が作られる。そのあと、タグ付け変数はユニークなタグ付け値に等しい値にセットされる。このようにすると、異なる時間に計測されるソースコード・モジュールはタグ値に矛盾を引き起こすことなく、ひとつにリンクすることができる。これらのタグ付け割り当てステートメントがリンク時「再配置可能」と呼ばれるのは、特定のステートメントに割り当てられたタグ付け値の範囲がリンク時に変化することがあるためである。
ユニークなタグ付け値はタグ付けオフセット値とタグ付けベース変数の値を組み合わせたものである。一実施例では、各ソースコード・モジュールのオフセット値は"0" の値で始まっている。そのあと、オフセット・タグ付けインスツルメンタは、オフセット・タグ付けインスツルメンタが新しいタグ付け割り当てステートメントをソースコード・モジュールに追加するたびに、タグ付けオフセット値を1ずつインクリメントしていく。従って、10個のタグ付け割り当てステートメントを含んでいるソースコード・モジュールは0から9までのタグ付け値の範囲と次のタグ付けオフセット値10をもつことになる。次のタグ付けオフセット値は別のタグ付け割り当てステートメントをソースコード・モジュールに挿入する必要が起こったとき使用されるタグ付けオフセット値を示している。各ソースコード・モジュールはユニークなベース変数をもっている。一実施例では、リンク時に判断されるときの、第1モジュールのタグ付けベース変数の値は0になっている。第2モジュールのタグ付けベース変数の値は第1モジュールの次のタグ付けオフセット値に第1モジュールのタグ付けベース値を加えたものである。例えば、第1モジュールの次のタグ付けオフセット値が10であれば、第2モジュールのタグ付けベース値は10(つまり、10 + 0)の値をもつことになる。第3モジュールのタグ付けベース変数の値は第2モジュールの次のタグ付けオフセット値に第2モジュールのタグ付けベース値を加えたものである。例えば、第2モジュールの次のタグ付けオフセット値が12であれば、第3モジュールのタグ付けベース値は22(つまり、12 + 10)である。それ以降のモジュールのタグ付けベース値は先行モジュールの次のタグ付けオフセット値の和に等しく、これは先行モジュールのベース値と次のタグ付けオフセット値の和と等価である。このようにすると、結果のタグ付け値はタグ付けオフセット値がタグ付けベース変数の値に加えられるとき、各タグ付け割り当てステートメントごとにユニークになる。図3はリンク時再配置可能タグ付け値の生成を示している。
図4は本発明の実施例に関連するIDBのサンプルを示す図である。これらのIDBはタグ付け値および計測に必要な他の情報を収めている。各IDBは1つのソースコード・モジュールを表すことができる。IDB1 301は計測されたソースコード・モジュールのタグ付けポイント0から9までを表すデータを収めている。IDB1はタグ付けベース変数をもち、その値はタグ付けベース変数リゾルバによってリンク時に設定され、0になっており、さらに次のタグ付けオフセット値10をもっている。IDBはタグ付けベース変数の名前を含んでいるので、タグ付けベース変数レゾルバはあるタグ付けベース変数に関連するIDBを見つけることができ、このタグ付けベース変数はIDBがリンク時再配置可能タグを含むタイプであることを示すのに役立っている。オフセット・タグ付けインスツルメンタはタグ付けポイントのデータと次のタグ付けオフセット値をストアする。同様に、IDB2 302は12個のタグ付けポイントを表すデータと次のタグ付けオフセット値12を収めている。IDB1は次のタグ付けオフセット値10をもっているので、タグ付けベース値リゾルバによって最終的にIDB2に割り当てられたタグ付けベース変数の値は10になっている。同様に、IDB3 303のタグ付けベース値が22であるのは、IDB1の次のタグ付けオフセット値が10であり、IDB2の次のタグ付けオフセット値が12であるためである(例えば、0から21までのユニークな値はIDB1とIDB2ではすでに選択されている)。もちろん、前述したように、タグ付けベース値はそれぞれのオブジェクトコード・モジュールがリンクされて実行可能コードが作られるまでは生成されず、ユニークなタグ付け値自体は各タグ付け割り当てステートメントが実行されるまでは実際には生成されない。さらに、本発明のいくかの実施例では、2つ以上のタグ付けベース変数を任意のIDBにストアすることが可能であり、各タグ付けベース変数は異なるタイプのタグ付けステートメントを示している。しかし、このようなタグ付け方式はここで説明している方式を単に拡張したものにすぎない。
表5、表6、および表7は計測されたソースコード・モジュール1、2、および3を示しており、これらはそれぞれ図4のIDB1、IDB2およびIDB3に対応している。表5において計測されたソースコード・モジュールを表す擬似コードの先頭に示すように、オフセット・タグ付けインスツルメンタはタグ付け変数の宣言ステートメントを挿入しており、その宣言ステートメントは、この例では、"AMC_control_port" (In. 3)と名づけた external volatile unsigned long変数になっている。オフセット・タグ付けインスツルメンタはIDB1とソースコード・モジュール1に関連づけられたタグ付けベース変数である、"IDB1_base" (In. 4) の宣言も挿入している。そのあと、オフセット・タグ付けインスツルメンタはソースコード・モジュールを調べ、9行目のように関心のあるポイントにタグ付け割り当てステートメントを挿入する。この特定タグ付け割り当てステートメントはfunction_1 (In. 10) へのコールが実行されることをソフトウェア開発者に警告する。オフセット・タグ付けインスルメンタによって挿入されたタグ付け割り当てステートメントはタグ付けベース変数値にタグ付けオフセット値を加えたものからなり、 "AMC_control_port =タグ付けベース変数 + 0x12345678" と類似の形式になっている。オフセット・タグ付けインスツルメンタはその終わりに到達するまで、このソースコード・モジュール内の関心のあるタグ付けポイントを継続する。表5に示すように、ソースコード・モジュール内の最後のタグ付けポイントはそのソースコード・モジュールの終わりに置かれており、タグ付け値 UDB1_baseにタグ付けオフセット値9 (In. 27)を加えた値をもつタグ付け割り当てステートメントによって表されている。オフセット・タグ付けインスツルメンタはこれらのタグ付け割り当てステートメントに関係するデータも、前述したようにIDB1に挿入する。
同様に、計測されたソースコード・モジュール2も、表6に示すように、タグ付け変数の宣言ステートメント "AMC_control_port" (In. 31)と変数の宣言 "IDB2_base" (in. 4) を含んでおり、これは計測されたソースコード・モジュール2のタグ付けベース変数を表している。そのあと、オフセット・タグ付けインスツルメンタはソースコード・モジュール2を調べ、関心のある各所のポイントでタグ付け割り当てステートメントをソースコード・モジュールに挿入する。例えば、"AMC_control_port = IDB2_base + 1" (In. 11) で表されたタグ付け割り当てステートメントは実行されると、"if"ステートメント ("A 12"(In. 8))の"then" 部分が実行されたことを示している。もっと正確には、このタグ付けステートメントのロケーションは変数 "A"に "A - 10" (In. 12) の値が割り当てられたことも示している。ソースコード・モジュール内の最後のタグ付けポイントは "AMC_control_port = IDB2_base + 11" (In. 22) である。オフセット・タグ付けインスツルメンタは、ソースコード・モジュール2がタグ付け割り当てステートメント0から11までと次のタグ付けオフセット値12をもつことを示すデータをIDB2にストアする。
最後に、オフセット・タグ付けインスツルメンタは表7に示すソースコード・モジュール3を調べる。前の2ソースコード・モジュールと同じように、オフセット・タグ付けインスツルメンタは"AMC_control_port"変数 (In. 3) の宣言を挿入する。オフセット・タグ付けインスツルメンタはタグ付け変数 "IDB2_base"(In. 4) の宣言も挿入する。そのあと、オフセット・タグ付けインスツルメンタはタグ付け割り当てステートメントの使用によって、このソースコード・モジュール内の関心のあるタグ付けポイントを継続する。最後のタグ付け割り当てステートメント "AMC_control_port = IDB3_base + 6"(In. 10) はソースコード・モジュール3の終わりに置かれている。
Figure 2006012193
Figure 2006012193
Figure 2006012193
図5は本発明の実施例によるソースコード・モジュールの計測のためのフローチャートを示している。オフセット・タグ付けインスツルメンタは各ソースコード・モジュールを選択し、宣言ステートメントとタグ付け割り当てステートメントを選択したモジュールに挿入し、データをIDBにストアする。最初に、オフセット・タグ付けインスツルメンタは計測を必要とするソースコード・モジュールがまだ残っているかどうかを判断する(ステップ401)。計測を必要とするソースコード・モジュールが残っていなければ、オフセット・タグ付けインスツルメンタは終了する。しかし、計測を必要とするソースコード・モジュールがまだ残っていれば、オフセット・タグ付けインスツルメンタは次に計測するソースコード・モジュールを選択する(ステップ402)。次に、オフセット・タグ付けインスツルメンタはタグ付けオフセット値を0にリセットする(ステップ403)。オフセット・タグ付けインスツルメンタは新しい計測データベースをオープンし、その新IDBの名前を選択する(ステップ404)。また、オフセット・タグ付けインスツルメンタはこの選択した名前を使用して、計測すべきソースコード・モジュールに挿入する新しいタグ付けベース変数の名前を生成する。そのあと、オフセット・タグ付けインスツルメンタはソースコード・モジュールを調べることを開始する(ステップ405〜411)。オフセット・タグ付けインスツルメンタはタグ付変数の宣言をソースコード・モジュールに挿入し(ステップ405)、そのあと、このソースコード・モジュールのタグ付けベース変数の宣言を挿入する(ステップ406)。これらの宣言はAMC_control_port、IDB1_ba se、IDB2_base 、およびIDB3_base の表5、表6、および表7に示す宣言に似ている。そのあと、オフセット・タグ付けインスツルメンタはループし、タグ付け割り当てステートメントを挿入する(ステップ407〜411)。オフセット・タグ付けインスツルメンタはタグ付けポイントがソースコード・モジュールに残っているかどうかを判断する(ステップ407)。タグ付けポイントが残っていれば、オフセット・タグ付けインスツルメンタはソースコード・モジュール内の次のタグ付けポイントを見つける(ステップ408)。次のタグ付けポイントを見つけると、オフセット・タグ付けインスツルメンタはタグ付け割り当てステートメントを挿入する(ステップ409)。このタグ付け割り当てステートメントは前述したように、"AMC_control_base = タグ付けベース変数プラス現タグ付けオフセット値" の形式になっているのが代表的である。さらに、タグ付けエントリが該当のIDBに作られる(ステップ411)。このタグ付けエントリはそのタグ付けポイントのタグ付けオフセット値、タグ付けポイントでのソースコードの情報、およびインクリメントされたオフセットへの次のタグ付けオフセット値のセット状態を収めているのが普通である。そのあと、オフセット・タグ付けインスツルメンタはループし(ステップ407へ)、次のタグ付けオフセットを処理する。このソースコード・オブジェクトの計測を終えると、このソースコード・モジュールのIDBはクローズされる(ステップ412)。そのあと、オフセット・タグ付けインスツルメンタはループし(ステップ401へ)、計測の必要があるソースコード・モジュールがほかにあるかどうかを判断する。
前述したように、タグ付けベース変数は計測プロシージャ期間または計測されたソースコード・モジュールのコンパイル時に値が割り当てられていない。タグ付けベース変数の値はリンク時に割り当てられるので、リンク・プロシージャだけを集中化する必要がある。従って、このプロシージャはコンピュータプログラムの新バージョンの代表的パラレルコンパイルをサポートしている。実行可能コンピュータプログラムをリンクするのと同じように、一実施例における計測リンカはタグ付けベース値リゾルバを含んでおり、このリゾルバは最終タグ付け値の間に矛盾が残らないように、各タグ付けベース変数に必要な値と各オブジェクトコード・ファイルが必要とするタグ付け値範囲を解決する。このプロセスはパラレルにコンパイルできる数千のソースコード・モジュールを含む巨大なコンピュータプログラムの計測をサポートするので、大量の時間が節減される。オブジェクトコード・ファイルのリンクが単一コンピュータで行われるときは、コンピュータプログラムの実行時に割り当てられる実際のタグ付け値を最終化する計測リンクプロセスも同じである。従って、変数 IDB1_base、IDB2_base およびIDB3_base は、図4および表5、表6、表7を参照して上述したように、コンピュータプログラムを表すオブジェクトコード・ファイルのリンク前は固定した値をもっていない。表8に示すように、計測リンカは解決されたタグ付けベース変数のソースコード・ステートメントを準備し、これはそのあとコンパイルされ、計測されたソースコード・モジュールのオブジェクトコード・ファイルとリンクされる。表8に示すように、計測リンカはIDB1のタグ付けベース変数 IDB1_baseを0の値(In. 3) にセットするソースコードを準備する。同様に、IDB2のタグ付けベース変数 (IDB2_base)は値が10 (In. 5) になり、IDB3のタグ付けベース変数 (IDB3_base)は値が22 (In. 7) になる。
Figure 2006012193
タグ付けベース値リゾルバはある範囲のタグ付け値を回避することができる。この機能はそのいくつかを以下で説明するが、さまざまな異なるコンテキストでソフトウェア開発者のために計測プロセスを単純化する。
第一に、コンピュータプログラムはめったに変化しない多数のソースコード・モジュールを含むことが可能であり、この中には、ソースコード・モジュールライブラリなどの形態のレガシコードが含まれる。(レガシコードには、タグ付け変数を定数値にセットし、従ってリンク時再配置可能タグ付け値の使用と互換性のないタグ付け割り当てステートメントで計測されたコードが含まれる。)計測プロシージャはソースコード・モジュールが変更されない限り、ソフトウェア開発者がそのモジュールを一度計測するだけで済むならば、より効率的になることは明らかである。
第二に、ソフトウェア開発者はオフセット・タグ付けインスツルメンタを使用して計測されていないソースコード・モジュールのためにある範囲のタグ付け値を残しておきたい場合がある。例えば、ソフトウェア開発者は特にエラーを起こしやすいソースコード・モジュールを手作業で計測し、オフセット・タグ付けインスツルメンタで通常挿入されるよりも、はるかに多いタグ付け割り当てステートメントを挿入することを望んでいる場合がある。そのような場合には、ソフトウェア開発者は挿入されたタグ付け割り当てステートメントに値を割り当てるだけにしておき、そのタグ付け値がそのコンピュータプログラムの他のソースコード・モジュールのために解決されるとき、その範囲のタグ付け値を避けるようにタグ付けベース値リゾルバに指示することができる。
第三に、いくつかのソースコード・モジュールはコンピュータプログラムのあるバージョンから次のバージョンまでに変更されないことがある。これらのソースコード・モジュールは以前に計測されたことがあり、それぞれのタグ付け値はまだユニークである場合がある。従って、ソフトウェア開発者はこれらの以前に計測され、現在未変更であるソースコード・モジュールに割り当てられた範囲のタグ付け値を残しておき、変更された後でコンピュータプログラムの最新バージョンで再計測されたソースコード・モジュールだけの新タグ付け値を判断するようにタグ付けベース値リゾルバに指示するだけで、より効率的なアクションコースがとれることを望んでいる場合がある。
第四に、上記の第3の例はコンピュータプログラムのあるバージョンでの次のタグ付けオフセット値を、追加のタグ付け割り当てステートメントがタグ付けベース変数の再計算を必要としないで、コンピュータプログラムの以後のバージョンで挿入できるようにセットするようにすると、さらに改善することができる。例えば、表5を参照して上述したように、計測されたソースコード・モジュール1の次のタグ付けオフセット値は10までの値にセットすると、ユニークなタグ付け値が保証されることになる。しかし、計測されたソースコード・モジュール1の次のタグ付けオフセット値が10でなく、12にセットされていれば、2つの追加タグ付け割り当てステートメントを、どのベース変数(例えば、IDB2_base)の再計算も必要としないでコンピュータプログラムの以後のバージョンでソースコード・モジュールに追加することが可能になり、しかも、コンピュータプログラムのユニークなタグ付け値が保証されることになる。
第五に、本発明のいくつかの実施例は、コンピュータプログラムの第1バージョンのときに、計測リンカがコンピュータプログラムの計測されたソースコード・モジュールのタグ付けベース変数を判断するだけでなく、各タグ付け割り当てステートメントの実際のタグ付け値も判断するように構成することができる。(前述したように、実際のタグ付け値はコンピュータプログラムの実行時に判断されるのが代表的である。)この実施例では、そのあと計測リンカは、各計測されたソースコード・モジュールのそれぞれのIDBにその値範囲を保存しておくといったように、その実際のタグ付け値範囲を保存しておく。コンピュータプログラムの以後のバージョンの計測プロシージャでは、オフセット・タグ付けイスツルメンタは各計測されたソースコード・モジュールを調べて、その計測されたソースコード・モジュールがコンピュータプログラムの以前バージョンから変更されたかどうかを判断する。あるソースコード・モジュールが変更されていなければ、オフセット・タグ付けインスツルメンタはそのソースコード・モジュールの実際のタグ付け値範囲をリトリーブし、「タグ付け変数=ベース変数およびタグ付けオフセット値」形式のタグ付け割り当てステートメントを「タグ付け変数=実際のタグ付け値」形式のタグ付け割り当てステートメントで置き換える。未変更のソースコード・モジュールに対してこの単純化されたタグ付け割り当てステートメントを使用すると、それぞれのタグ付け値範囲をコンピュータプログラムの実行時にではなく、コンパイルプロセス時に割り当てることが可能になる。もちろん、この実施例が正しく動作するためには、タグ付けベース値リゾルバは予約されたタグ付け値範囲を受け取って、それぞれのタグ付け値範囲が予約タグ付け値にオーバラップしないようにタグ付けベース変数を解決できなければならない。
図6および図7は本発明の実施例のためのタグ付けベース変数値解決プロシージャのフローチャートを示す図である。このプロシージャは各モジュールを選択し、予約値範囲が使用されないようにして、選択したモジュールのタグ付けベース変数の値を割り当てる。最初のステップとして、プロシージャはコンピュータプログラムのこのバージョンで旧IDBがリンクされるかどうかをチェックする(ステップ501)。このような旧IDBが存在することはそのタグ付け値がリンク時再配置可能でない、計測されたソースコード・モジュールであること表しているのが一般である。上述した理由により、これらの旧IDBはすでにタグ付け値が割り当てられているので、必要なことはそのタグ付け値範囲用にスペースが予約されることだけである。旧IDBが存在していれば(ステップ502)、プロシージャはこれらの旧IDBを選択する(ステップ503)。プロシージャは各IDB用に予約するタグ付け値範囲のレコードを作成する(ステップ504)。プロシージャは旧IDBが存在すると、予約フラグ値を真にセットする(ステップ505)。プロシージャはスペースを予約する必要のある旧IDBがなくなるまで続行する。必要なスペースすべてが予約されると、プロシージャは累積タグ付けオフセット値をゼロにセットする(ステップ506)。そのあと、プロシージャはループして、リンク時再配置可能タグ付け値を使用する各モジュールごとにタグ付けベース値を割り当てる(ステップ507−516)。プロシージャは次の新IDBを選択する(ステップ507)。新IDBのすべてがすでに選択されていれば、プロシージャは終了する(ステップ508)。そうでなければ、プロシージャはタグ付けベース変数を累積タグ付けオフセット値に等しい値セットする(ステップ509)。次に、プロシージャはこのIDBの次のタグ付けオフセット値をリトリーブする(ステップ510)。そのあと、プロシージャはタグ付けベース変数の提案値とこのIDBの次のタグ付けオフセット値をチェックし、その提案タグ付け値範囲が予約タグ付け値のどれかと矛盾しているかどうかを判断する。もちろん、このステップは予約値フラグが真にセットされたことがなければスキップすることができる(ステップ511)。提案範囲に矛盾がなければ、タグ付けベース値リゾルバは提案値をタグ付けベース変数に割り当てるソースコード・ステートメントを準備する(ステップ514)。タグ付けベース変数のために提案値を使用すると矛盾が起こる場合は、タグ付けベース値リゾルバはタグ付けベース変数用に別の値を選択し、このIDB用のタグ付け値範囲が予約されたタグ付け値範囲と矛盾しないようにする(ステップ513)。タグ付けベース変数用の値が判断されると、タグ付けベース値リゾルバはそのIDBのタグ付け値をマスタIDBにストアし、このマスタIDBは最終的にはコンピュータプログラムのすべてのタグ付け値を収容することになり、プログラム実行時にワークステーションGUI(例えば、図1のワークステーションGUI)によって参照することができる(ステップ515)。次に、プロシージャは累積タグ付けオフセット値を最後にリトリーブした次のタグ付けオフセット値だけインクリメントする(ステップ516)。そのあと、プロシージャはループし(ステップ507へ)次のIDBを選択する。従って、タグ付けベース値リゾルバはIDBのすべてからの情報を合体しているマスタIDBを作成することも可能である。このマスタIDBは旧スタイルのIDBのフォーマットになっている(例えば、タグ付けベース変数の名前を収めていないIDB)。代替実施例として、タグ付けベース値リゾルバは値がそのタグ付けベース変数に割り当てられた後で、各IDB用に旧スタイルのIDBを作成するが可能である。
図8は本発明の実施例の計測プロセスを示す図である。4個のソースコード・モジュール600a、600b、600c、および600dは計測前のコンピュータプログラムを表している。ソースコード・プリプロセッサ601はコメントを取り除き、これらのソースコード・モジュールからのマクロを展開する。オフセット・タグ付けインスツルメンタは、次に、ソースコード・モジュールを検査し、図5に示すように該当のタグ付けポイントを探し出す。オフセット・タグ付けインスツルメンタはその検査プロシージャ期間にIDB 603a、603b、603c、および603dを作成する。代表例として、オフセット・タグ付けインスツルメンタは図8に示すように、各ソースコード・モジュールごとに1つのIDBを作成する。別の例として、複数のソースコード・モジュールのデータを1つのIDBにストアすることも可能である。オフセット・タグ付けインスツルメンタは計測されたソースコード・モジュール604も作成する。代替実施例では、オフセット・タグ付けインスツルメンタは検査された各ソースコード・モジュールごとに計測済みソースコード・モジュールを作成することもできる。コンパイラ605は計測されたソースコードからオブジェクトコードを生成する。リンカ606のタグ付けベース値リゾルバは図6および図7に示すようにタグ付けベース変数の値を判断し、タグ付けベース変数を初期化するソースコード・ステートメントを生成する。生成されたソースコード・ステートメントはコンパイルされ、コンパイル済みコードとリンクされて実行可能コード610が作られる。その結果の実行可能コード610はコンピュータプログラムをテストするために使用できる。
図9はソースコード・モジュールが2台以上のコンピュータで計測され、コンパイルされるようした本発明の実施例を示す図である。第1ソースコード・モジュール701aはコンピューティングマシン1上に置かれている。オフセット・タグ付けインスツルメンタ702aはこのソースコードを使用してIDB 704aとコンパイル済みコード705aを作成する。同じように、コンピューティングマシン2には、2つのソースコード・モジュール701bと701cが置かれている。これらのソースコード・モジュールはオフセット・タグ付けインスツルメンタ702a用に用意されたもので、IDB2 704bとIDB3 704cをコンパイル済みコード705cと一緒に作成する。同様に、コンピューティングマシン3では、オフセット・タグ付けインスツルメンタはソースコード・モジュール4 701dを使用してIDB4 704dとコンパイル済みコード705cを作成する。コンパイル済みコードを表すオブジェクトファイルの各々はコンピューティングマシンNに渡される。このコンピューティングマシンNはどの該当コンピューティングマシンにすることも可能であり、前述の3コンピューティングマシンの1つであっても構わない。同様に、3コンピューティングマシンで作成されたIDBのすべてはコンピューティングマシンNに渡される。リンカ710は各コンピューティングマシンで作成されたオブジェクトコードを使用して実行可能コード711を生成する。リンカのタグ付けベース値リゾルバは前述したように、IDBで表されたタグ付け値の各々ごとにタグ付けベース変数の値を解決し、その結果の実行可能コードがユニークなタグ付け値を含むようにする。
最後に、図10は本発明の代替実施例を示す図である。オフセット・タグ付けインスツルメンタがIDBを作成するとき、あらかじめ決めたパッディング範囲を組み込むことも可能である。IDB 800、801および803は各々がそのようなパッディング範囲が組み込まれている。このパッディング範囲を使用すると、追加のタグ付け割り当てステートメントを、そのIDBで表されたタグ付け値の最大範囲を変更することなく特定のIDBに組み入れることが可能になる。大きなコンピュータプログラムが以前に計測された種々のソースコード・モジュールのすべてを含んでいて、ソフトウェア設計者が最初のソースコード・モジュールに1行分のコードだけを追加したため、タグ付け割り当てステートメントが1つ追加されたときは、このIDBと他のすべてのIDB用のタグ付けベース変数の値は、この新しいタグ付け割り当てステートメントがパッディング値で与えられた範囲内にまだ収まっているので、変更されることがない。従って、このプロシージャを使用すると、計測・リンクプロセスが高速化する。
図11は本発明によって提供されるタグ付け値の代替実施例を示し、タグ付けオフセット値と連結されたタグ付けベース変数からなっている。上述したタグ付け値はタグ付けベース変数プラスタグ付けオフセット値を含んでいる。代替実施例では、タグ付け値はタグ付けオフセット値に連結されたタグ付けベース変数を含んでいる。例えば、タグ付け値は64ビットにすることができる。最初の32ビットはタグ付けオフセット値を表し、次の32ビットはタグ付けベース変数を表すことができる。この実施例でも、タグ付けオフセット値とタグ付けベース変数の値は前述したように判断することができる。しかし、前記実施例で上述したように2つの値を加えるのではなく、2つの値は連結されるようになっている。従って、リンカは各ソースコード・モジュールにユニークなタグ付けベース値を割り当てるだけでよく、これらの値は各ソースコード・モジュール内のタグ付け割り当てステートメントの数に基づく必要がない。このようにして作成されたタグ付け値はユニークのままであるので、コンピュータプログラマはその結果のコンピュータプログラムの実行をトレースすることができる。
上述した説明から理解されるように、本発明の理解を容易にするために特定実施例を説明してきたが、これらの実施例は本発明の精神と範囲を逸脱しない限り種々態様に変更することが可能である。例えば、リンカを変更すれば、タグ付け値をリンク時に計算させ、タグ付け割り当てステートメントでタグ付け変数に割り当てられるタグ付け値を定数としてストアすることが可能になる。コンパイラはオブジェクトコード内の各タグ付け割り当てステートメントのロケーションの標識を出力することが可能になる。そのあと、リンカは各タグ付け割り当てステートメント内のユニークな定数値をストアし、定数値とタグ付けポイントとのマッピングをIDBにストアしておくことができる。また、ここで言うモジュールという用語はコンピュータプログラムの任意の部分を意味し、ここには、完全なソースコード・ファイル、ソースコード・ファイルの一部、関数、プロシージャまたはコンピュータプログラムを形成するその他のステートメントの集まりが含まれる。従って、本発明は特許請求の範囲に記載されている事項にのみ限定されるものである。
ソフトウェアのテストとデバッグのための計測タグ付け方式に関連する代表的なモニタリングシステムを示す図である。 計測データベースに挿入されている従来のタグ付け値を示す図である。 本発明の実施例によって提供される新規のタグ付け値を示す図であり、そこではタグ付け値はタグ付けベース変数プラスタグ付けオフセット値から構成されている。 本発明の実施例に関連する代表的な計測データベースを示す図である。 本発明の実施例によるソースコード・モジュールの計測フローチャートを示す図である。 本発明の実施例に関連するタグ付けベース変数値解決プロシージャのフローチャートである。 本発明の実施例に関連するタグ付けベース変数値解決プロシージャのフローチャートである。 本発明の実施例に関連する計測プロシージャの例を示す図である。 ソースコード・モジュールが2代以上のコンピュータで計測されるようにした本発明の実施例による計測プロシージャの例を示す図である。 本発明で使用されるIDBの代替実施例を示す図である。 本発明の実施例によって提供されるタグ付け値の代替実施例を示す図であり、そこではタグ付け値はタグ付けオフセットに連結されたタグ付けベース変数からなっている。
符号の説明
600 ソースコード・モジュール
601 ソースコード・プリプロセッサ
603 計測データベース(IDB)
604 計測されたソースコード・モジュール
605 コンパイラ
606 リンカ
610 実行可能コード
701 ソースコード・モジュール
702 オフセット・タグ付けインスツルメンタ
704 IDB
705 コンパイル済みコード
710 リンカ
711 実行可能コード

Claims (22)

  1. コンピュータシステムにおいて複数のソースコード・モジュールからなるコンピュータプログラムを計測する方法であって、コンピュータシステムのプロセッサにより実行される前記方法は、
    コンピュータ読み取り可能媒体に収められた各ソースコード・モジュールごとに
    前記コンピュータ読み取り可能媒体からソースコード・モジュールを読み出し、
    コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するオフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、ソースコード・モジュールにユニークである名前をもつベース変数を生成し、
    読み出されたソースコード・モジュール内の各計測ポイントごとに、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、
    読み出されたソースコード・モジュール内で計測ポイントにユニークであるオフセット値を生成し、
    タグ付け変数を生成されたオフセット値とベース変数の値を組み合わせたものにセットするための、タグ付け割り当てステートメントを計測ポイントの個所に挿入し、
    コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するコンパイラ・ソフトウェア・モジュールの命令を実行することにより、タグ付け割り当てステートメントが挿入された計測済みソースコード・モジュールをコンパイルし、
    各生成されたベース変数ごとに、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、生成されたオフセット値とベース変数の値を組み合わせたものが各計測ポイントをユニークに識別するようにベース変数をユニークな値にセットするソースコード・ステートメントを生成し、
    コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記コンパイラ・ソフトウェア・モジュールの命令を実行することにより、生成されたソースコード・ステートメントをコンパイルし、
    コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するリンク・ソフトウェア・モジュールの命令を実行してコンパイルされた計測済みソースコード・モジュールをコンパイルされた生成済みソースコード・ステートメントとリンクしてリンク済みプログラムを作成し、かつリンク済みプログラムをコンピュータ読み取り可能媒体に収めることにより、リンク済みプログラムの実行中にタグ付け変数が各計測ポイントでユニークな値にセットされるようにすることを特徴とする方法。
  2. 請求項1に記載の方法において、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、生成済みベース変数のための宣言ステートメントを読み出された各ソースコード・モジュール内に挿入することをさらに含み、前記宣言ステートメントは生成済みベース変数がソースコード・モジュールの外部に定義されていることを示していることを特徴とする方法。
  3. 請求項1に記載の方法において、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、タグ付け変数のための宣言ステートメントを読み出された各ソースコード・モジュール内に挿入することをさらに含み、前記宣言ステートメントはタグ付け変数がソースコード・モジュールの外部に定義されていることを示していることを特徴とする方法。
  4. 請求項1に記載の方法において、コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、生成済みベース変数の名前を情報データリポジトリにストアすることをさらに含むことを特徴とする方法。
  5. 請求項1に記載の方法において、ユニークな値をベース変数に割り当てることは、各計測ポイントでのタグ付け変数のユニークな値があらかじめ決めた値範囲を回避するように値をベース変数に割り当てることを含むことを特徴とする方法。
  6. 複数のソースコード・モジュールからなるコンピュータプログラムを複数のタグ付け割り当てステートメントで計測するシステムであって、各タグ付け割り当てステートメントはオフセット値をベース値と組み合わせることによってタグ付け変数に対してユニークな値を指定するためのものであるものにおいて、該システムは、
    コンピュータ読み取り可能媒体に収められたオフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールおよびベース値リゾルバ・ソフトウェア・モジュールを読み出す手段と、
    前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行して、コンピュータ読み取り可能媒体からコンピュータプログラムのソースコード・モジュールを読み出し、タグ付け割り当てステートメントを読み出されたソースコード・モジュールの中に挿入し、各タグ付け割り当てステートメントごとにオフセット値を生成し、かつオフセット値をコンピュータ読み取り可能媒体に収める手段と、
    前記ベース値リゾルバ・ソフトウェア・モジュールの命令を実行して、タグ付け変数の値が各タグ付けステートメントでユニークになるように、複数のソースコード・モジュールの各ソースコード・モジュールごとにベース値を生成し、かつベース値をコンピュータ読み取り可能媒体に収める手段とを備えたことを特徴とするシステム。
  7. 請求項6に記載のシステムにおいて、オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行する手段は第1コンピュータ上に置かれているコンピュータプログラムの第1ソースコード・モジュールに少なくとも1つのタグ付け変数割り当てステートメントを挿入し、第2コンピュータ上に置かれているコンピュータプログラムの第2ソースコード・モジュールに少なくとも1つの他のタグ付け変数割り当てステートメントを挿入することを特徴とするシステム。
  8. 請求項6に記載のシステムにおいて、タグ付けオフセット・インスツルメンタ・ソフトウェア・モジュールの命令を実行する手段は各タグ付け割り当てステートメントを計測データレポジトリに格納することを特徴とするシステム。
  9. 請求項6に記載のシステムにおいて、ベース値リゾルバ・ソフトウェア・モジュールの命令を実行する手段はタグ付け変数のための以前に割り当てられた値範囲をリトリーブし、各タグ付け変数割り当てステートメントでのタグ付け変数の値がタグ付け変数のための以前に割り当てられた値範囲を回避するようにベース値を判断することを特徴とするシステム。
  10. コンピュータプログラムを計測するために使用されるタグ付け変数のための複数のユニークな値を生成する方法であって、コンピュータのプロセッサにより実行される前記方法は、
    コンピュータ読み取り可能媒体に収められたコンピュータプログラムを読み出し、
    読み出されたコンピュータプログラム内の各計測ポイントごとに、コンピュータ読み取り可能媒体に収められ、コンピュータ上で実行するオフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、タグ付け変数をある値にセットするタグ付け割り当てステートメントを挿入し、
    コンピュータ読み取り可能媒体に収められ、コンピュータ上で実行するコンパイラ・ソフトウェア・モジュールの命令を実行することにより、挿入されたタグ付け割り当てステートメントと共にコンピュータプログラムのオブジェクトコードを生成し、
    コンピュータプログラムのオブジェクトコードがリンクされて実行可能コードが作られたとき、コンピュータ読み取り可能媒体に収められ、コンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、各タグ付け割り当てステートメントがタグ付け変数をユニークな値にセットするようにコンピュータプログラムを調整し、
    調整されたコンピュータプログラムをコンピュータ読み取り可能媒体に収めることを特徴とする方法。
  11. 請求項10に記載の方法において、プロセッサはタグ付けオフセット値をタグ付けベース値と組み合わせ、タグ付け割り当てステートメントにおいてタグ付け変数を組み合わされた値にセットすることを特徴とする方法。
  12. 請求項10に記載の方法において、コンピュータプログラムの調整はタグ付けベース値を設定することを含むことを特徴とする方法。
  13. 請求項10に記載の方法において、コンピュータプログラムは複数のモジュールを含み、プロセッサはタグ付けオフセット値をタグ付けベース値と組み合わせ、タグ付け割り当てステートメントにおいてタグ付け値を組み合わされた値にセットして、その組み合わせが各計測ポイントをユニークに識別するように値を生成し、各モジュールのベース値はコンピュータプログラムが調整されるとき設定されることを特徴とする方法。
  14. 請求項10に記載の方法において、プロセッサはタグ付け変数を定数値にセットし、コンピュータプログラムの調整は各タグ付け割り当てステートメントの定数値をユニークな値にセットすることを含むことを特徴とする方法。
  15. コンピュータシステム上で、コンピュータプログラムの複数のソースコード・モジュールをタグ付け割り当てステートメントで計測し、コンピュータプログラムのテストをサポートする方法であって、コンピュータシステムのプロセッサにより実行される前記方法は、
    コンピュータ読み取り可能媒体に収められた各ソースコード・モジュールを読み出し、
    コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するオフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、タグ付け割り当てステートメントのオフセット値をセットし、
    コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行する前記オフセット・タグ付けインスツルメンタ・ソフトウェア・モジュールの命令を実行することにより、セットされたオフセット値とベース値を組み合わせたものをタグ付け変数に割り当てるタグ付け割り当てステートメントを読み出されたソースコード・モジュールの中に挿入し、
    コンピュータ読み取り可能媒体に収められ、前記コンピュータシステム内の任意のコンピュータ上で実行するリンク・ソフトウェア・モジュールの命令を実行してコンピュータプログラムを表すオブジェクトコードがリンクされて実行可能コードが作られるときタグ付け割り当てステートメントのベース値をセットし、かつベース値をコンピュータ読み取り可能媒体に収めることを含み、ベース値はタグ付け変数割り当てステートメントの中のタグ付け変数の値がユニークになるように解決されることを特徴とする方法。
  16. 請求項15に記載の方法において、オフセット値をセットする際に、各ソースコード・モジュール内のオフセット値の最高値はあらかじめ決めた数の新しいタグ付け割り当てステートメントがあとで挿入できるように十分に大きくセットされ、コンピュータプログラム内のすべてのタグ付け割り当てステートメントの中のタグ付け変数の値がユニークに保たれるようにすることを特徴とする方法。
  17. 請求項15に記載の方法において、タグ付け割り当てステートメントのオフセット値は計測データレポジトリに格納されることを特徴とする方法。
  18. コンピュータプログラムを計測するために使用されるタグ付け変数のために複数のユニークな値をコンピュータシステムに生成させるための命令を収めているコンピュータ読み取り可能媒体であって、その生成は、
    コンピュータ読み取り可能媒体に収められたコンピュータプログラムを読み出し、
    読み出されたコンピュータプログラム内の各計測ポイントごとに、前記コンピュータ読み取り可能媒体からの命令を実行するプロセッサにより、タグ付け変数をある値にセットするタグ付け割り当てステートメントを挿入し、
    前記コンピュータ読み取り可能媒体からの命令を実行するプロセッサにより、挿入されたタグ付け割り当てステートメントと共にコンピュータプログラムのオブジェクトコードを生成し、
    コンピュータプログラムのオブジェクトコードがリンクされて実行可能コードが作られるとき、前記コンピュータ読み取り可能媒体からの命令を実行するプロセッサにより、各タグ付け割り当てステートメントがタグ付け変数をユニークな値にセットするようにコンピュータプログラムを調整し、
    調整されたコンピュータプログラムをコンピュータ読み取り可能媒体に収めることによって行われることを特徴とするコンピュータ読み取り可能媒体。
  19. 請求項18に記載のコンピュータ読み取り可能媒体において、プロセッサはタグ付け割り当てステートメントにおいてタグ付けオフセット値をタグ付けベース値と組み合わせることを特徴とするコンピュータ読み取り可能媒体。
  20. 請求項18に記載のコンピュータ読み取り可能媒体において、コンピュータプログラムの調整はタグ付けベース値を設定することを含むことを特徴とするコンピュータ読み取り可能媒体。
  21. 請求項18に記載のコンピュータ読み取り可能媒体において、コンピュータプログラムは複数のモジュールを含み、タグ付け割り当てステートメントはタグ付けオフセット値をタグ付けベース値と組み合わせて、その組み合わせが各計測ポイントをユニークに識別するように値を生成し、各モジュールのベース値はコンピュータプログラムが調整されるとき設定され、これらの機能は全て前記コンピュータ読み取り可能媒体からの命令を実行するプロセッサにより実施されることを特徴とするコンピュータ読み取り可能媒体。
  22. 請求項18に記載のコンピュータ読み取り可能媒体において、プロセッサはタグ付け変数を定数値にセットし、コンピュータプログラムの調整は各タグ付け割り当てステートメントの定数値をユニークな値にセットすることを含むことを特徴とするコンピュータ読み取り可能媒体。
JP2005259199A 1998-01-29 2005-09-07 コンピュータプログラムをテストし、デバッグするための再配置可能計測タグ Pending JP2006012193A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US09/015,256 US6106571A (en) 1998-01-29 1998-01-29 Relocatable instrumentation tags for testing and debugging a computer program

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP02286099A Division JP4249309B2 (ja) 1998-01-29 1999-01-29 コンピュータプログラムをテストし、デバッグするための再配置可能計測タグ

Publications (1)

Publication Number Publication Date
JP2006012193A true JP2006012193A (ja) 2006-01-12

Family

ID=21770380

Family Applications (2)

Application Number Title Priority Date Filing Date
JP02286099A Expired - Fee Related JP4249309B2 (ja) 1998-01-29 1999-01-29 コンピュータプログラムをテストし、デバッグするための再配置可能計測タグ
JP2005259199A Pending JP2006012193A (ja) 1998-01-29 2005-09-07 コンピュータプログラムをテストし、デバッグするための再配置可能計測タグ

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP02286099A Expired - Fee Related JP4249309B2 (ja) 1998-01-29 1999-01-29 コンピュータプログラムをテストし、デバッグするための再配置可能計測タグ

Country Status (5)

Country Link
US (1) US6106571A (ja)
EP (1) EP0933707B1 (ja)
JP (2) JP4249309B2 (ja)
AT (1) ATE333677T1 (ja)
DE (1) DE69932371T2 (ja)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6311327B1 (en) * 1998-03-02 2001-10-30 Applied Microsystems Corp. Method and apparatus for analyzing software in a language-independent manner
US6308315B1 (en) * 1998-10-14 2001-10-23 Sun Microsystems, Inc. System and method for automatically and selectively promoting object variables to method fields and variables in a digital computer system
US6973417B1 (en) * 1999-11-05 2005-12-06 Metrowerks Corporation Method and system for simulating execution of a target program in a simulated target system
US6745383B1 (en) * 1999-12-29 2004-06-01 Veritas Operating Corporation Early warning mechanism for enhancing enterprise availability
US7100152B1 (en) 2000-01-31 2006-08-29 Freescale Semiconductor, Inc. Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof
US6996808B1 (en) * 2000-02-12 2006-02-07 Microsoft Corporation Function injector
AU2001234042A1 (en) * 2000-02-14 2001-08-20 Nextnine Ltd. Support network
US7409318B2 (en) * 2000-02-14 2008-08-05 Nextnine Ltd. Support network
US7076400B2 (en) * 2000-02-14 2006-07-11 Nextnine Ltd. Support network
US6715141B1 (en) 2000-06-15 2004-03-30 Bruce Hodge Multiphase single pass interpreter
WO2001097027A1 (en) * 2000-06-15 2001-12-20 Bruce Hodge Multiphase single pass interpreter
US6961927B1 (en) * 2000-11-27 2005-11-01 Microsoft Corporation Lossless, context-free compression system and method
US6993750B2 (en) * 2001-12-13 2006-01-31 Hewlett-Packard Development Company, L.P. Dynamic registration of dynamically generated code and corresponding unwind information
US6996810B2 (en) * 2001-12-13 2006-02-07 Hewlett-Packard Development Company, L.P. Lazy and precise update of unwind information for dynamically generated code
US7484205B2 (en) * 2002-12-12 2009-01-27 Microsoft Corporation Preprocessor-based source code instrumentation
US7644409B2 (en) * 2004-06-04 2010-01-05 Sun Microsystems, Inc. Techniques for accessing a shared resource using an improved synchronization mechanism
US7594234B1 (en) 2004-06-04 2009-09-22 Sun Microsystems, Inc. Adaptive spin-then-block mutual exclusion in multi-threaded processing
US7475397B1 (en) 2004-07-28 2009-01-06 Sun Microsystems, Inc. Methods and apparatus for providing a remote serialization guarantee
US8185868B1 (en) 2004-12-20 2012-05-22 The Mathworks, Inc. System and method for cell-based code editing and publishing
US7509244B1 (en) 2004-12-22 2009-03-24 The Mathworks, Inc. Distributed model compilation
US8266608B2 (en) * 2005-02-18 2012-09-11 Green Hills Software, Inc. Post-compile instrumentation of object code for generating execution trace data
US9152531B2 (en) * 2005-02-18 2015-10-06 Green Hills Sofware, Inc. Post-compile instrumentation of object code for generating execution trace data
US7357332B2 (en) * 2005-04-29 2008-04-15 International Business Machines Corporation Providing diagnostic information on the processing of variables in source code
US7996442B2 (en) * 2005-10-17 2011-08-09 Oracle International Corporation Method and system for comparing and re-comparing data item definitions
JP4860240B2 (ja) * 2005-11-11 2012-01-25 パナソニック株式会社 翻訳方法および実行通知命令の埋め込み方法
US20070250810A1 (en) * 2006-04-20 2007-10-25 Tittizer Abigail A Systems and methods for managing data associated with computer code
US8341604B2 (en) * 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8370806B2 (en) * 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
US8380966B2 (en) * 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
US8533530B2 (en) * 2006-11-15 2013-09-10 Qualcomm Incorporated Method and system for trusted/untrusted digital signal processor debugging operations
US8762956B1 (en) * 2007-01-31 2014-06-24 The Mathworks, Inc. Generating a report document from code
US8484516B2 (en) * 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
GB2451253A (en) * 2007-07-24 2009-01-28 Ezurio Ltd Indicating the position of a next declaration statement in object code when declaring a variable object code
US8381192B1 (en) * 2007-08-03 2013-02-19 Google Inc. Software testing using taint analysis and execution path alteration
US8589880B2 (en) * 2009-02-17 2013-11-19 International Business Machines Corporation Identifying a software developer based on debugging information
US8370354B2 (en) 2010-06-30 2013-02-05 International Business Machines Corporation Acceleration of legacy to service oriented (L2SOA) architecture renovations
US8978018B2 (en) 2010-12-02 2015-03-10 International Business Machines Corporation Reversibly instrumenting a computer software application
US20130179867A1 (en) * 2012-01-11 2013-07-11 International Business Machines Corporation Program Code Analysis System
US9274911B2 (en) 2013-02-21 2016-03-01 Advantest Corporation Using shared pins in a concurrent test execution environment
US9411708B2 (en) * 2013-04-12 2016-08-09 Wipro Limited Systems and methods for log generation and log obfuscation using SDKs
US9785542B2 (en) * 2013-04-16 2017-10-10 Advantest Corporation Implementing edit and update functionality within a development environment used to compile test plans for automated semiconductor device testing
US9785526B2 (en) 2013-04-30 2017-10-10 Advantest Corporation Automated generation of a test class pre-header from an interactive graphical user interface
US10269029B1 (en) 2013-06-25 2019-04-23 Amazon Technologies, Inc. Application monetization based on application and lifestyle fingerprinting
JP6481515B2 (ja) * 2015-05-29 2019-03-13 富士通株式会社 情報処理装置、コンパイル方法、及びコンパイラプログラム
US10558553B2 (en) * 2016-11-30 2020-02-11 International Business Machines Corporation Enabling non-blocking runtime application debugging for a single threaded server environment
US10346285B2 (en) * 2017-06-09 2019-07-09 Microsoft Technology Licensing, Llc Instrumentation of user actions in software applications
US10725894B2 (en) * 2017-10-04 2020-07-28 International Business Machines Corporation Measuring and improving test coverage
US20230229581A1 (en) * 2022-01-18 2023-07-20 International Business Machines Corporation Identifying regression test failures

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4144493A (en) * 1976-06-30 1979-03-13 International Business Machines Corporation Integrated circuit test structure
US4445192A (en) * 1980-11-25 1984-04-24 Hewlett-Packard Company Logic state analyzer with time and event count measurement between states
US4590581A (en) * 1983-05-09 1986-05-20 Valid Logic Systems, Inc. Method and apparatus for modeling systems of complex circuits
US5103394A (en) * 1984-04-30 1992-04-07 Hewlett-Packard Company Software performance analyzer
US4845615A (en) * 1984-04-30 1989-07-04 Hewlett-Packard Company Software performance analyzer
US4720778A (en) * 1985-01-31 1988-01-19 Hewlett Packard Company Software debugging analyzer
US4937740A (en) * 1985-09-18 1990-06-26 Cadre Technologies, Inc. Real time software analyzing system for storing selective m-bit addresses based upon correspondingly generated n-bit tags
US5047919A (en) * 1986-04-03 1991-09-10 Harris Corporation Method and apparatus for monitoring software execution in a parallel multiprocessor computer system
US5062055A (en) * 1986-09-02 1991-10-29 Digital Equipment Corporation Data processor performance advisor
US4849879A (en) * 1986-09-02 1989-07-18 Digital Equipment Corp Data processor performance advisor
GB2197506A (en) * 1986-10-27 1988-05-18 Burr Brown Ltd Providing and handling break points in a software monitor
US4811345A (en) * 1986-12-16 1989-03-07 Advanced Micro Devices, Inc. Methods and apparatus for providing a user oriented microprocessor test interface for a complex, single chip, general purpose central processing unit
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US4819233A (en) * 1987-04-08 1989-04-04 Westinghouse Electric Corp. Verification of computer software
US5329471A (en) * 1987-06-02 1994-07-12 Texas Instruments Incorporated Emulation devices, systems and methods utilizing state machines
US5006992A (en) * 1987-09-30 1991-04-09 Du Pont De Nemours And Company Process control system with reconfigurable expert rules and control modules
US4864569A (en) * 1987-11-25 1989-09-05 Westinghouse Electric Corp. Software verification and validation configuration management system
US5121489A (en) * 1988-08-02 1992-06-09 International Business Machines Corporation Tracing method for identifying program execution paths using a trace points bit map with one-to-one correspondence with embedded trace points
CN1045655A (zh) * 1988-11-23 1990-09-26 约翰弗兰克制造公司 系统自动诊断的内核测试接口和方法
US5134701A (en) * 1989-02-10 1992-07-28 Hewlett-Packard Co. Test apparatus performing runtime replacement of program instructions with breakpoint instructions for processor having multiple instruction fetch capabilities
CA1286803C (en) * 1989-02-28 1991-07-23 Benoit Nadeau-Dostie Serial testing technique for embedded memories
US5267277A (en) * 1989-11-02 1993-11-30 Combustion Engineering, Inc. Indicator system for advanced nuclear plant control complex
US5121501A (en) * 1989-12-27 1992-06-09 International Business Machines Corporation First processor inserting hooks into software and sending unique identifications to output bus and second processor associating data frames and time with these unique identifications
US5410685A (en) * 1990-06-12 1995-04-25 Regents Of The University Of Michigan Non-intrinsive method and system for recovering the state of a computer system and non-intrusive debugging method and system utilizing same
US5361351A (en) * 1990-09-21 1994-11-01 Hewlett-Packard Company System and method for supporting run-time data type identification of objects within a computer program
AU8966391A (en) * 1990-12-24 1992-06-25 Ball Corporation System for analysis of embedded computer systems
US5355369A (en) * 1991-04-26 1994-10-11 At&T Bell Laboratories High-speed integrated circuit testing with JTAG
US5321828A (en) * 1991-06-07 1994-06-14 Step Engineering High speed microcomputer in-circuit emulator
US5450586A (en) * 1991-08-14 1995-09-12 Hewlett-Packard Company System for analyzing and debugging embedded software through dynamic and interactive use of code markers
US5265254A (en) * 1991-08-14 1993-11-23 Hewlett-Packard Company System of debugging software through use of code markers inserted into spaces in the source code during and after compilation
US5259766A (en) * 1991-12-13 1993-11-09 Educational Testing Service Method and system for interactive computer science testing, anaylsis and feedback
AU4598593A (en) * 1992-06-05 1994-01-04 Convex Computer Corporation Computer program debugging in the presence of compiler synthesized variables
US5367683A (en) * 1992-06-26 1994-11-22 Digital Equipment Corporation Smart recompilation of performing matchup/difference after code generation
US5307498A (en) * 1992-12-04 1994-04-26 International Business Machines Corporation Automated method for adding hooks to software
US5408650A (en) * 1993-06-29 1995-04-18 Digital Equipment Corporation Memory analysis system for dynamically displaying memory allocation and de-allocation events associated with an application program
US5539907A (en) * 1994-03-01 1996-07-23 Digital Equipment Corporation System for monitoring computer system performance
US5553286A (en) * 1994-03-17 1996-09-03 International Business Machines Corporation System and method for preparing a computer program for execution
US5533192A (en) * 1994-04-21 1996-07-02 Apple Computer, Inc. Computer program debugging system and method
US5828884A (en) * 1996-05-23 1998-10-27 Advanced Micro Devices, Inc. Method for compiling a software program and executing on a system which converts data between different endian formats

Also Published As

Publication number Publication date
ATE333677T1 (de) 2006-08-15
EP0933707A3 (en) 2004-04-14
JPH11316696A (ja) 1999-11-16
EP0933707B1 (en) 2006-07-19
JP4249309B2 (ja) 2009-04-02
US6106571A (en) 2000-08-22
EP0933707A2 (en) 1999-08-04
DE69932371D1 (de) 2006-08-31
DE69932371T2 (de) 2006-11-30

Similar Documents

Publication Publication Date Title
JP4249309B2 (ja) コンピュータプログラムをテストし、デバッグするための再配置可能計測タグ
US6430741B1 (en) System and method for data coverage analysis of a computer program
US5956479A (en) Demand based generation of symbolic information
JP4204768B2 (ja) ユーザに固有のインスツルメンテーションを支援する方法とシステム
US7644394B2 (en) Object-oriented creation breakpoints
US9183114B2 (en) Error detection on the stack
US7500149B2 (en) Generating finite state machines for software systems with asynchronous callbacks
CN101739339A (zh) 一种基于程序动态依赖关系的软件故障定位方法
US8533683B2 (en) Stack walking enhancements using sensorpoints
US20080127119A1 (en) Method and system for dynamic debugging of software
JPH0855045A (ja) データを自己記述式に符号化するための方法および装置
US7409677B1 (en) Method and system for creation and use of embedded trace description
US20080127061A1 (en) Method and system for editing code
TWI402750B (zh) 具有軟體程式儲存於其中之電腦可讀取媒體及用以產生軟體程式的方法
US20100281240A1 (en) Program Code Simulator
CN113742215A (zh) 一种自动配置和调用测试工具进行测试分析的方法及系统
US10229029B2 (en) Embedded instruction sets for use in testing and error simulation of computing programs
US20020129336A1 (en) Automatic symbol table selection in a multi-cell environment
JP5269450B2 (ja) 試験システム及びバックアノテーション方法
JP2008052688A (ja) プログラムのパッチデータ生成装置
CN108614704B (zh) 代码编译方法及装置
JP2004287869A (ja) プログラム実行監視装置および方法
EP1151382A1 (en) Instrumentation of calls to routines for which source code is unavailable
JP3745968B2 (ja) 試験システム及び試験方法及び試験プログラム及び試験プログラムを記録した計算機で読み取り可能な記録媒体
JP2017130068A (ja) プログラマブルコントローラシステム、その開発支援装置、ターゲット装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060922

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061222

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080118