JPH08179940A - コンピュータ・アプリケーション・プログラムをデバッグする方法およびコンピュータ・システム - Google Patents

コンピュータ・アプリケーション・プログラムをデバッグする方法およびコンピュータ・システム

Info

Publication number
JPH08179940A
JPH08179940A JP7247074A JP24707495A JPH08179940A JP H08179940 A JPH08179940 A JP H08179940A JP 7247074 A JP7247074 A JP 7247074A JP 24707495 A JP24707495 A JP 24707495A JP H08179940 A JPH08179940 A JP H08179940A
Authority
JP
Japan
Prior art keywords
program
error
code
file
debugging
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
JP7247074A
Other languages
English (en)
Inventor
Thomas Preisler
トーマス・プレイスラー
Wayne C Gramlich
ウェイン・シイ・グラムリッチ
Eduardo Pelegri-Llopart
エドゥアルド・ペレグリ−ロパート
Terrence C Miller
テレンス・シイ・ミラー
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH08179940A publication Critical patent/JPH08179940A/ja
Pending legal-status Critical Current

Links

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/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • 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

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

(57)【要約】 【課題】 より融通性のあるプログラム・デバッグ手法
を提供する。 【解決手段】 ユーザはデバッグ・セッションを開始し
て、コード内にエラーが発見されると、ユーザがエラー
を訂正するために対応するソース・コードを編集するこ
とができ、その後デバッグ・セッションを離れることな
く「修正および継続」コマンドを実行することができる
ようにする。

Description

【発明の詳細な説明】
【0001】関連出願 本出願は、1994年1月28日出願の、Wayne
C.Gramlich、Sunnyvale、CA、A
chut Reddy、San Jose、CA、およ
びShyam Desirazu,Foster Ci
ty、CAらによる、米国特許出願第08/18908
9号の一部継続出願である。
【0002】
【発明の属する技術分野】本発明は、プログラム・エラ
ー・チェッキングおよび修正の分野に関する。より詳細
には、親出願はデバッガ内実行時間チェックについて開
示し、特許を請求しているが、本一部継続出願は、デバ
ッガ修正および継続システムの補助機能として機能拡張
コンパイラおよびダイナミック・リンカを使用して、エ
ラー検出および訂正を行う方法および装置に関するデバ
ッガにおける発明を開示し、特許を請求する。
【0003】
【従来の技術】プログラムのサイズおよび複雑さが増す
につれ、より融通性が高く精巧な検査およびデバッグ・
ツールの必要性もまた増加してきている。メモリ・アク
セス関連のエラーは、プログラムの実行および開発に際
して監視し、修正しなければならない最も重大なエラー
のひとつである。現在のデバッガのもうひとつの大きな
問題点は、特にプログラムのサイズが大きくなり複雑と
なった場合に、プログラムを完全にデバッグするのに要
する時間である。プログラムの検査およびデバッグに現
在行われている方法は、デバッグを目的とする特別命令
をコンパイラに出力させるか、あるいはオブジェクト・
ファイルを事後処理するかのいずれかである。
【0004】コンパイラを使用し、デバッグを目的とす
る特別命令を出力する手法においては、所望のパッチの
各タイプは、対応するコンパイラ・フラグによって表わ
され、適切なコードがコンパイラにより挿入される。デ
バッグを目的とする特別命令をコンパイラに出力させる
この手法には、特別命令を挿入するためにプログラムを
再コンパイルする必要があるなどの重大な欠点がある。
【0005】オブジェクト・ファイルを事後処理する手
法では、オブジェクト・ファイルを入力として扱い、こ
れらのオブジェクト・ファイルのパッチ済みバージョン
に書き換える。実行可能プログラムのためのオブジェク
ト・ファイルがすべて変更された後、オブジェクト・フ
ァイルのパッチ済みバージョンが互いにリンクされて実
行可能プログラムを形成する。パッチおよびリンクはプ
ログラム実行以前に行われる。
【0006】従来技術の手法の実施と使用には、さらに
他の欠点がある。ひとつの欠点は、一旦これらのファイ
ルがパッチされると、実行可能プログラムにファイルを
再リンクするための特別リンクを必要とすることであ
る。もうひとつの欠点は、パッチの動的なオン/オフ切
換ができないことである。従来技術の手法においては、
プログラム実行中にプログラムを追加パッチする場合、
パッチおよびリンクの全プロセスが必要であり、またコ
ンパイラを使用した手法の場合にはプログラムの再コン
パイルが必要になる。すなわち、追加パッチをするため
には常に、全プロセスを繰り返す必要がある。さらにも
うひとつの従来技術の手法の欠点は、共用ライブラリを
扱えないことである。プログラムと同時にロードされた
ライブラリばかりでなく、プログラムの初期ロードの後
プログラムが使用するかどうかわからないライブラリも
すべてパッチしなくてはならない。最後に、従来技術の
手法はまた、オブジェクト・ファイルおよびライブラリ
の独立したバージョンを必要とすること、ならびに従来
技術の2つの手法のパッチ範囲が機能や行をカバーする
のではなく、ファイルを扱うことしかできないというこ
とも含んでいる。
【0007】さらに、前述の従来技術における2つの手
法はともに、静的パッチ方法を用いて、エラー・チェッ
クを受けるプログラムをパッチする。この静的パッチ方
法では、プログラムは実行前にあらかじめパッチされ、
このようなパッチは全プログラムに及び、プログラムに
対して一回だけ行われる。プログラムが直ちに使用する
ライブラリも、またプログラムが使用することのないラ
イブラリもすべて事前パッチの目的のために認識されな
くてはならない。その上、パッチ済みオブジェクト・フ
ァイルは互いに再リンクされなければならず、そのため
特別リンクが必要となってくる。
【0008】
【発明が解決しようとする課題】以下に説明するよう
に、本発明は、従来技術の多くの欠点および限界を克服
する、より融通性のあるプログラム・デバッグ手法を提
供する。
【0009】
【課題を解決するための手段】一旦デバッグ・セッショ
ンが開始されると、目的プログラム内で検出されたエラ
ーが迅速に訂正され、全目的プログラムがデバッグされ
るまでデバッグ・セッションが繰り返し行われるように
することが望ましい。
【0010】たとえば、かつてはエラーが検出される
と、デバッグ・セッションは終了し、エラーがソース・
コード内で訂正され、ソース・コードが再コンパイルさ
れ、再コンパイル済みオブジェクト・コードが目的プロ
グラムの残されたモジュールに再リンクされて、すべて
が再ロードされるとデバッグ・セッションが再開されて
いた。大規模なプログラムにおいては、このプロセス
は、再リンク及びプログラムの再ロードに非常に長い時
間(何時間にも及ぶこともある)を要する可能性があ
る。このプロセスは、目的プログラムが「完全にデバッ
グされた」と判断されるまで、エラーが検出される度に
繰り返されてきた。したがって、大規模なプログラムを
デバッグするプロセスは、終了するのに非常に長い時間
がかかる可能性があった。
【0011】かつては、エラー訂正箇所のあるファイル
のみを編集し、そのファイルのみを再ロードし、中断し
た位置からデバッグ・セッションを再開する、といった
試みがなされた。このかつての試みの問題点は、再コン
パイル操作をバイパスしようとするために、デバッガが
編集訂正事項を翻訳する必要があることだった。この手
順は、極めて遅く、関連コンパイラの維持と同時にデバ
ッガが維持されなくてはならず、デバッガが編集訂正事
項を翻訳するためにコンパイラ自体とほとんど同程度に
複雑でなければならなかった。
【0012】本発明は「修正および継続」と称する実行
時デバッガ操作の一部である。本発明により、ユーザは
デバッグ・セッションを開始して、エラーがあった場
合、関連ソース・コードを編集しエラーを訂正してから
「修正および継続」コマンドを実行でき、しかもこれら
すべてをデバッグ・セッションを中止することなく行う
ことができる。この修正および継続コードは、コンパイ
ラを呼出して編集済みテキストを挿入したソース・コー
ド・ファイルを再コンパイルさせ、コンパイラから再コ
ンパイル済みオブジェクト・コード・ファイルを受け取
り、ダイナミック・リンカを使用し再コンパイル済みオ
ブジェクト・コードを目的アプリケーション・プログラ
ム・プロセスにリンクし、そのオブジェクト・コード・
ファイルの前のバージョンをパッチして新たに再コンパ
イル済みコードを参照し、必要な変数とレジスタをリセ
ットし、エラーが発見された時点で実行されていたコー
ドの行にプログラム・カウンタをリセットする。その後
デバッガは、デバッグ・セッションを継続し、これによ
り、通常デバッグ・セッションを中止し、目的プログラ
ムを再リンクおよび再ロードし、デバッグ・セッション
をもう一度開始するのにかかるはずの時間を節約するこ
とができる。
【0013】この「修正および継続」の発明は、機能拡
張コンパイラを使用して、正しく関連変数をセットでき
るようコンストラクタ(constructor )およびデストラ
クタ(deconstructor )を処理させるためにファイルや
データを再コンパイルする方法についての情報を提供
し、レジスタを正しくリセットさせるためのデータをも
たらし、プログラムの再リンクおよび再ロードまたは全
デバッグ・セッションを再スタートする必要なく、正し
いプログラムの再スタートを行えるように静的変数をグ
ローバル化する。「修正および継続」の発明は、様々な
フラグをユーザの選択に応じてセットする融通性に富ん
でおり、コンパイラがデバッグ情報をコードに加えるよ
う命令したり、またコンパイルされるコードの行に変更
を加えることができるようになっている。
【0014】
【発明の実施の形態】以下の詳細な説明は、主として、
コンピュータ・メモリ内のデータ・ビットに対する操作
のプロセスおよび記号表現によって表わされている。こ
れらのプロセスの説明および表現は、最も効果的にその
業務の要旨を他の当業者に伝達するために、データ処理
技術分野の当業者により使用される手段である。
【0015】本明細書によるプロセスは、一般的にも、
望ましい結果を導く、首尾一貫した一連のステップであ
ると考えられる。これらのステップは、物理的数量の物
理的操作を要するものである。必然的にではないが、通
常は、これらの数量は記憶され、転送され、結合され、
比較されるなどの操作が可能な電気的または磁気的信号
の形態をとっている。これらの信号を、ビット、値、エ
レメント、記号、文字、用語、数字などと呼ぶことは、
主として共通慣用的な理由から、時には有用である。し
かし、これらすべての類似の用語が、適切な物理的数量
に関連するものであり、これらの数量に適用される便利
なラベルに過ぎないことに留意するべきである。
【0016】さらに、行われる操作は、多くの場合、加
算または比較のように、操作員によりなされる知的操作
に一般に関連する用語で呼ばれている。本明細書に記載
され、本発明の一部を形成する操作のいずれにおいて
も、操作員のそのような能力は不要であり、またはほと
んどの場合望ましくはない。すなわち、操作は機械処理
である。本発明の操作を行うための有用な機械には、汎
用ディジタル・コンピュータまたはそれと類似の装置が
ある。あらゆる場合にコンピュータ操作における操作方
法と計算方法自体との間の違いを心得ておく必要があ
る。本発明は、電気的または他の(たとえば、機械的、
化学的)物理的信号を処理し他の望ましい物理的信号を
生成する際に、コンピュータを操作する方法ステップに
関する。
【0017】本発明はまた、これらの操作を行う装置に
も関する。この装置は、必要な目的のために特別に構成
されたものでも、またコンピュータ内に格納されたコン
ピュータ・プログラムにより選択的に起動されるか再構
成される汎用コンピュータからなるものであっても良
い。本明細書に記載するプロセスは、特定のコンピュー
タまたは他の装置に、本質的に関連するものではない。
詳細にいえば、本発明の教示に従って書かれたプログラ
ムと共に様々な汎用機が使用できるし、また、必要な方
法ステップを行うために、より専門化された装置を構成
することがより便利になる場合もある。これらの機械に
必要な構造は、以下に述べる説明から明かとなろう。
【0018】実行時チェック用動的パッチ、および迅速
な目的プログラムの訂正とデバッグ・プロセスの再開の
ための装置と方法を開示する。以下の記述においては、
説明のために、特定の命令呼出し、モジュールなどが、
本発明の完全な理解を意図して述べられる。しかし、当
業者には、これらの特定の詳説がなくとも本発明を実施
できることは明かであろう。他の例示では、本発明を不
必要に不明瞭なものにしないために、周知の回路および
装置がブロック図により示される。
【0019】本発明は「修正および継続」のシステムお
よび方法であり、編集訂正事項を含むソース・コード・
ファイルがデバッガを離れることなく迅速に再コンパイ
ルされ、その結果生じたオブジェクト・コードおよび関
連ソース情報が既存のオブジェクト・コードに動的にリ
ンクされ、そのオブジェクト・コードが前のバージョン
のオブジェクト・コードにパッチされ、目的プログラム
全体を再リンクおよび再ロードする必要なく、前のエラ
ーの位置でデバッグ・セッションを再スタートできるよ
うにプログラム・カウンタをリセットすることができ
る。修正および継続の発明と本特許願は、1994年1
月28日出願の、Wayne C.Gramlich、
Sunnyvale、CA、Achut Reddy、
San Jose、CA、およびShyam Desi
razu,Foster City、CAらによる、”
Method and Apparatus for
Run−Time Error Checking U
sing DynamicPatching”なる名称
の米国特許出願第08/189089号の一部継続出願
である。親出願はデバッガされる目的アプリケーション
・プログラムに関する実行時チェックを開示し、特許を
請求しているが、本一部継続出願は、目的アプリケーシ
ョン・プログラムのデバッグのための修正および継続エ
ラー処理システムについて開示し請求する。親出願では
動的パッチを利用してコンパイラには検出されないプロ
グラム実行時のプログラム・エラーのチェックを行う。
このような実行時エラーは、プログラムをパッチするこ
とによりチェックされる。たとえば、プログラムがメモ
リにアクセスしようとするすべての位置で、プログラム
は別の位置に分岐し、そこで、アクセスしようとしてい
たメモリ・アドレスのチェックが行われる。プログラム
がアクセスしようとしているメモリ・アドレスが無効で
ある場合、エラーが記録され、またメモリ・アドレスが
有効である場合は、プログラムは実行を継続する。実際
のパッチ・プロセスは、デバッガ内で行われる。
【0020】図1は、動的パッチを使用した実行時エラ
ー・チェック機能を備えたコンピュータ・システムを示
すシステム・ブロック図である。本発明を不明瞭なもの
にしないために、図1において、コンピュータ・システ
ムが概念的な形態で示され、コンピュータ・システムの
多くの付随的回路、装置、接続などが示されていないこ
とが理解されよう。
【0021】図1に示されるように、目的プログラム・
イメージは、入/出装置304を経てデバッガ・プログ
ラム307に読み込まれ、プログラム302のメモリ内
コピー308を供給するため、メモリ内に記憶される。
デバッガ・プログラム307内の「実行時チェック」
(RTC)モジュール309と呼ばれるモジュールは、
エラー・メッセージをプリントして、ユーザ・インター
フェースを扱い、またプログラム302のメモリ内コピ
ー308のパッチングを行う。
【0022】このプログラム302のメモリ内コピー
は、本明細書において「インストゥルメンテッド・プロ
グラム」と呼ばれるパッチ済みプログラムに変わる。パ
ッチは、プログラム302のメモリ内コピー308に対
してのみ行われ、ディスク301に記憶されたオリジナ
ル・プログラム302に対しては行われない。したがっ
て、オリジナル・ファイル302が変えられることは決
してなく、実行可能プログラムに必要なファイルのリン
クも生じることはない。さらに、プログラム302を事
前パッチする必要はない。その代わり、チェックが開始
されると、パッチが行われる。したがって、ユーザによ
る選択は、実行前から実際の実行時まで遅延される。C
PU306は、デバッガ307のプログラム実行および
308でのプログラム・テストを制御する。CPU30
6は、実行すべき次の命令をポイントするプログラム・
カウンタ(「PC」)312を含んでいる。
【0023】デバッガ・プログラム307は、ロード時
には指定されなかったライブラリを、実行時に動的にロ
ードすることができる。このようなライブラリのロード
は、デバッガ・プログラム307内で動的に行われるの
で、RTCモジュール309は、あらゆる呼出しをトラ
ップして、新たなライブラリをプログラムにロードする
ことができ、そのライブラリがロードされる直前のパッ
チを行うこともできる。このように、新しいライブラリ
もまたパッチされる。
【0024】要するに、本発明では、実行前にプログラ
ムを事前パッチする必要はない。その代わり、チェック
が開始されるとパッチが行われ、これによりユーザの選
択は実際の実行時まで遅延される。さらに、プログラム
・ソース・コードに全く変更を加えず、したがって、実
行可能プログラムを作成するためにオブジェクト・ファ
イルを再リンクする必要をなくすことによって、本発明
の方式による手法では、特別リンクを使用せずにすむ。
最後に、このようなインストゥルメンテッド・プログラ
ム内に組み込まれた完全なチェック済みインストゥルメ
ンテッド・プログラムが作成されるように、既存のプロ
グラムのメモリ内コピーにパッチがなされる。
【0025】図2を参照すると、実行時チェック用動的
パッチ方式の一般的な流れ図が示されている。メモリ・
アクセス・エラーを検出するために、スタックへのアク
セスおよびユーザ・メモリにアクセスするシステム呼出
しを含むすべてのメモリ・アクセス命令が遮断される。
このようなメモリ・アクセス命令は、命令実行を継続す
る前に、アクセスされるメモリ・アドレスの有効性に関
し検査される。
【0026】このようなエラー・チェックのために、本
発明はチェックされる機能を逆アセンブルする。次に、
パッチを要する位置がパッチ・サイトとして識別され
る。さらに、これらのパッチ・サイトにおける元の命令
は、パッチ領域命令への分岐に置き換えられる
【0027】図2に示されるように、ブロック100で
パッチ・テーブルのためのスペースが割り当てられ、パ
ッチ・テーブルおよび値が初期化される。次にブロック
110に示されるように、エラー・チェックされるプロ
グラムは、ディスク・ファイル上にあるので、初めに読
み込まれロードされる。このようなプログラムはユーザ
によりアクセスされるので、通常部分的にロードされる
(ロード・オブジェクト)。しかし、図2に示されるス
テップを経て、デバッガは本質的にすべてのプログラム
がアクセスされるようにする。したがって、この結果、
デバッガ・プログラムがそのプロセスを終了すると、す
べてのプログラムがパッチされている。このデバッガ・
プログラムは、他のプロセスを読取りおよび書込みでき
るのでメモリ内にあるプログラム・イメージを変えるこ
とができる特殊なプロセスである。図2に記載されてい
るすべての操作は、デバッガ・プログラム内のRTCモ
ジュールにより行われる。図2におけるブロック130
からわかるように、デバッガ・プログラムはロード・オ
ブジェクトのリストを作成する。ロード・オブジェクト
は、メモリ・アクセス命令を有するプログラム内にセグ
メント/機能を備えている。プログラムは、複数のこれ
らのロード・オブジェクトから構成されている。ロード
・オブジェクトの第一のタイプは、プログラムのメイン
ルーチンであり、これはプログラムのユーザに属する部
分である。またプログラムが使用する共用ライブラリも
あるが、これはロード・オブジェクトの第二のタイプで
ある。ロード・オブジェクトの2つのタイプは、プログ
ラム実行上必要なものである。デバッガ・プログラム
は、ロード・オブジェクトのリストを受け取ると、後に
パッチせよという命令を検索しながら、ロード・オブジ
ェクトを走査する。命令を1つ1つ走査する間、デバッ
ガ・プログラムが調べるロード・オブジェクトの一部だ
けが命令そのもの、すなわち、テキストであり、データ
ではない。
【0028】デバッガ・プログラムは、パッチ・サイト
を識別する一方で、パッチ・サイトのアドレス、パッチ
領域のアドレス、パッチ・タイプ(たとえば、メモリ・
アクセス命令タイプ)、特定のパッチ・サイトをパッチ
すべきか、アクセスするメモリのサイズなど、これらパ
ッチ・サイトに関する情報も蓄積する。すべてのロード
・オブジェクトは、前述のパッチ・サイト情報のテーブ
ルを有しており、各パッチ・サイトに対しテーブル内の
1項目が割り当てられている。パッチ・タイプまたはパ
ッチを目的とするメモリ・アクセス命令のタイプが、エ
ラー・チェックが行われるパッチ領域の対応するセクシ
ョンのサイズを画定する。特定のパッチ・サイトに対
し、ユーザが出したチェック・コマンドまたはアンチェ
ック・コマンドは特定のパッチ・サイトをパッチすべき
かを指示する。より詳細には、チェック・コマンドは、
特定のパッチ・サイトをエラー・チェックするよう指示
し、アンチェック・コマンドは逆に、特定のパッチ・サ
イトをエラー・チェックしないよう指示する。走査の最
終段階で、デバッガ・プログラムは、見い出したパッチ
・サイトを収容するために必要となるパッチ領域のセク
ションの総サイズを得る。1つのロード・オブジェクト
に対しパッチ・サイトの識別は1度行われるだけでよ
く、これに続く実行では、パッチ領域スペースに対応す
るセクションのスペースの位置を突き止め、パッチを行
うだけでよい。パッチ領域に必要な合計サイズが記録さ
れ、パッチ領域セクション・サイズのリストが作成され
る。パッチ領域セクションサイズのリストは、次のステ
ップであるステップ140への入力となり、ここで、メ
モリ・スペースが実際にパッチ領域に割り振られる。ス
テップ140において、デバッガ・プログラムは、パッ
チ領域セクション・サイズのリストを受け取り、そのた
めのスペースを割り振ろうとする。デバッガ・プログラ
ムはまず、どこにすべてが配置されるかを知るためにア
ドレス・スペースの初期マップを作成する。システムは
メモリ内の様々な場所にあるロード・オブジェクトをマ
ップする。このようなロード・オブジェクトのマッピン
グは必ずしも連続しているとは限らず、アドレス・スペ
ースにはホールがある。デバッガ・プログラムのジョブ
はこうしたホールを識別し、これらのホールに必要なス
ペースを要求するリストをマップすることである。
【0029】本発明の1つの実施の態様においては、各
セグメントの開始アドレスおよびサイズに加え、アドレ
ス・スペース内のすべてのセグメントのリストを取得す
るために、アドレス・スペース・データがアクセスされ
る。これらのセグメントは、テキスト、データ、スタッ
クおよび/またはヒープ・セグメントから成っている。
本明細書で「ホール」と呼ぶ、これらのセグメントの間
のスペースは、パッチ領域のセクションのためのスペー
スを割り振るのに使用される。各テキスト・セグメント
の開始アドレスおよびパッチ領域のセクションのサイズ
を含み、各テキスト・セグメントの開始アドレスの昇順
にソートされたリストは、前のステップ130から得ら
れる。ステップ140において、各ホールの開始アドレ
スによりソートされたホールの開始アドレスおよびセグ
メント・サイズを備えるホールのリストが生成される。
前述のホールは、パッチ領域の対応するセクション用パ
ッチ・サイトよりも高位のアドレス位置を有するホール
に対する最初のチェックにより必要とされるパッチ領域
のセクションのサイズと比較される。スペースが割り振
られるパッチ領域のセクションのサイズより大きいサイ
ズを有するホールが与えられ、そのホールがスタック・
セグメントの直前にない場合、パッチ領域のセクション
はホール・スペースに割り振られる。パッチ領域セクシ
ョン・サイズのリストおよびホールのリストを終了し、
パッチ領域のセクションにホールを割り振った後、生成
された割振り解除パッチ領域セクションのリストは降順
に走査される。対応するパッチ領域のセクション以上の
パッチ・サイトよりも低位アドレスにあるホールが検索
される。特定のパッチ領域のセクション以上のホール
は、そのパッチ領域のセクションに割り振られる。この
ようなパッチ領域のセクションはホールの最下部に置か
れる。対応するパッチ領域のセクションが、このステッ
プの終了時点で割り振られていないパッチ・サイトはど
れもパッチされず、ユーザにはエラー・チェック要求が
満たされていない旨の警告が出される。ステップ150
において、システムは、すべてのパッチ領域のセクショ
ンを発見した位置の情報を得て、その情報をパッチ・テ
ーブルに記憶し、これらのパッチ・テーブル内のアドレ
ス情報を更新する。
【0030】ステップ160において、パッチ領域のセ
クション用スペースが割り振られ、パッチすべき元プロ
グラム内のすべての命令が識別される。こうして、この
時点で、パッチは実際に書き改められ、この段階の完了
時にはプログラムは完璧なインストゥルメンテッド・プ
ログラムに変えられる。前述のようにパッチ・サイト情
報を含むデータのテーブル(すなわち、パッチ・サイト
アドレス、パッチ領域アドレス、パッチ・タイプ、パッ
チ・サイトをパッチすべきか、参照されるメモリ・サイ
ズを含む)は、パッチ・サイトを決定する際使用され
る。パッチ・サイトおよび対応するパッチ領域のセクシ
ョンを含むページが読み取られていない場合、それらが
読取られ、パッチ・タイプが対応するパッチ領域のセク
ションに書き込まれる。パッチ・サイト内のオリジナル
命令は、対応するパッチ領域のセクションへの分岐命令
に置換され、このような置換済みオリジナル命令は、対
応するパッチ領域のセクションに配置される。このパッ
チングは、この特定のパッチ・サイトに対しアンチェッ
ク・コマンドが発せられない限り行われる。一方、この
特定のパッチ・サイトに対しアンチェック・コマンドが
発せられた場合、その特定のパッチ・サイトはパッチさ
れない。パッチ領域のセクションは、パッチ・サイトが
更新される前に書き込まれるので、パッチ処理中は、矛
盾状態に陥ることはない。
【0031】ロード・オブジェクトへの割込みは、パッ
チ処理中はブロックされ、ロード・オブジェクトのパッ
チの間のサービスには、ロード・オブジェクトが正しく
パッチされるか、または全くパッチされないかを確かめ
ながら、そのブロックが解除される。プログラム稼動中
にユーザによりチェック・コマンドが発せられると、そ
の時点でスタック上でアクティブなロード・オブジェク
トのパッチは不可能になる。しかし、プログラム稼動中
に発せられたアンチェック・コマンドは、パッチを、ロ
ード・オブジェクトからアンインストールする。このス
テップは、プログラムが実行する直前に、プログラム上
で行われた最初のパッチングを終了させる。
【0032】基本的には、ユーザがデバッガ・プログラ
ム内でプログラムを実行しようとすると、図2における
ステップ100からステップ160のすべてのステップ
が、実行される。すなわち、ステップ100ないしステ
ップ160は、プログラムが実行開始した時点で存在し
ていたすべてのロード・オブジェクトのパッチを終了す
る。
【0033】さらに、デバッガ・プログラムは、プログ
ラムが実行開始した時点でプログラム内に存在しなかっ
た新しいロード・オブジェクトを、動的にロードするこ
ともできる。システムは新しいロード・オブジェクトへ
のすべての呼出しをトラップし、プログラムが新オブジ
ェクトをロードしようとしているのを知ると、デバッガ
・プログラムが同様の一連のステップを行う。ステップ
110、120、200、140、150、160およ
び170は、新しいロード・オブジェクトの動的ロード
を示す。このステップは、初期設定がないことを除いて
は、前述でたどったステップと同一である。グローバル
初期設定は、1度だけ行われ、その後、動的にロードさ
れる新しい各ロード・オブジェクトごとに、これらのス
テップが行われる。
【0034】ステップ175、180および185に示
されるように、デバッガ・プログラムはまた、パッチを
アンインストールし、ロード・オブジェクトを動的にア
ンロードすることができる。ステップ175において、
アンチェック操作は、セグメント、モジュール、機能ま
たは命令のいずれかのパッチのアンインストールをトリ
ガする。パッチ済み機能が与えられると、アンインスト
ールされるパッチ・サイトを含むページおよび対応する
パッチ領域のセクションを含むページが読み取られる。
次いで元の命令がパッチ領域のセクションから取得さ
れ、パッチ・サイト内のパッチ領域分岐命令は、このオ
リジナル命令によって置換される。パッチ・サイトにお
けるパッチ命令のこの置換に加え、これらのパッチ・サ
イトのユーザ・ブレイクポイントは、パッチ・サイトに
関連するブレイクポイント・データ構造内のパッチ命令
も置換する必要がある。パッチ・サイトがパッチされな
かった場合、ユーザに対し警告が発せられ、何もアンイ
ンストールされない。ユーザによりチェック・コマンド
が発せられても、ただパッチ・サイトの命令をパッチ領
域分岐命令に置換するのみである。
【0035】ステップ180において、プログラマのオ
プションにより、ロード・オブジェクト用に割り振られ
たスペースを割振り解除することもできる。アドレス・
スペースを節約するために動的に割振り解除が行われ
る。膨大な数の新しいロード・オブジェクトがロードさ
れる場合、空きアドレス・スペースがなくなる可能性も
ある。もはや必要とされないモジュールがある場合に
は、このようなスペースを潜在的利用に備えて、割振り
解除することはより有益である。最後に、ステップ19
0において、パッチ・テーブルは、パッチ領域の割振り
解除セクションに関する情報により更新される。
【0036】図3は、本発明において使用される、実行
時エラー・チェック方法のための動的パッチを示してい
る。プログラムは複数のロード・オブジェクトから構成
され、ロード・オブジェクトは複数の関数を含んでい
る。ここで関数Fooとして示される関数10は1つの
例である。このような関数は、複数のメモリ・アクセス
関連の命令を有する。命令の1つは、ロード命令40と
して示されている。実行時チェック(RTC)モジュー
ルは、パッチされるすべてのロード・オブジェクトのた
めにこのような命令をすべてパッチする。この実行時チ
ェック(RTC)モジュールは、図2のステップ130
に示されたように、パッチを要するすべての命令を1つ
1つ走査し、その後元の命令が、パッチ領域への無条件
分岐命令に置換される。パッチされる命令の位置を、
「パッチ・サイト」20と呼ぶ。したがって、ロード・
オブジェクト内の位置にロード命令がある場合、その位
置は「パッチ・サイト」20と呼ばれることになる。エ
ラー・チェックが行われるメモリ・ロケーションは「パ
ッチ領域」50と呼ばれる。パッチ領域の各セクション
60には、固有のパッチ・サイトがある。したがって、
1,000のパッチ・サイトがあれば、1,000のパ
ッチ領域セクションがあることになる。
【0037】ロード・オブジェクト内で置換される各命
令には、対応するパッチ領域セクション60への分岐命
令がある。したがって、各パッチ・サイト20の全ロー
ド・オブジェクトに割り当てられるパッチ領域50のカ
スタム・セクションがあり、各パッチ・サイト20はパ
ッチ領域50内のそれぞれのカスタム・セクションへの
分岐に置換される。これらのパッチ領域セクション60
は、基本的にメモリ内の別の領域にあるリアル・チェッ
ク・コード70を呼び出すためにセットアップされる複
数の命令で構成されている。このようにして、チェック
を行うパッチ領域50から、チェック・コードが呼び出
される。知らせるべきエラーがある場合、デバッガ・プ
ログラムはエラーを知らせるが、そうでない場合は、プ
ロセスはパッチ領域50へと戻り、それからユーザ・プ
ログラム内で実行される次の命令まで戻る。パッチされ
る命令のタイプによって、様々なパッチ領域セクション
のタイプがある。また、別個に扱わなくてはならない遅
延分岐命令のために、様々な種類のケースもある。した
がって、パッチ領域のセクションは、同一ではない。す
なわち、パッチ領域の1つのセクションは、1つの特定
のパッチのためのものである。図3は、パッチ・サイト
がパッチ領域セクションへの分岐に置換され、さらにチ
ェック・コードへの分岐に置換され、ユーザ・プログラ
ム内で実行される次の命令に戻るプロセスを示してい
る。図3における説明に変更を加えた他のケースもあ
る。たとえば、パッチされるべき命令が、遅延分岐命令
のような分岐の遅延スロット内でパッチされる場合は、
パッチ領域およびチェック・コードへの分岐の後、プロ
セスは、エラー・チェックの前に、次々と次の命令に戻
る代わりに、分岐すべきアドレス位置へと分岐しなくて
はならない。
【0038】図7に、この動的パッチ・システムの操作
上の効果が示されているが、ここでオブジェクト・コー
ドの連続バージョンは、オブジェクト・コードの元のバ
ージョンにパッチされる。図7を参照すると、オブジェ
クト・コードの元のバージョン602が複数の関数60
8、610、612を含むことが示されている。デバッ
グ・セッションが進むにしたがい、特定の関数の新しい
バージョン604、606が再コンパイルされ、元のバ
ージョン602にパッチされる。たとえば、コード・バ
ージョン1 604がデバッガにロードされると、関数
1エントリー位置618はパッチされ改訂コード622
の関数1エントリー位置へ移る。同様に、前のコード・
バージョンにおけるすべての関数エントリー位置は、改
訂コード・バージョンにおいて同じ関数の対応するエン
トリー位置をポイントするようにパッチされる。好まし
い実施の態様においては、同一のコード・セクションの
連続改訂(たとえば、606など)は、特定のホスト・
コンピュータ・システムにおいて使用可能なメモリの限
界まで、メモリ内の前のバージョンに同時に接続するこ
とができる。また、好ましい実施の態様においては、ユ
ーザは、デバッガ内で、オリジナル・コード・バージョ
ン602を、最新のコード・バージョン606に直接パ
ッチするオプションを選ぶこともできる。メモリ制約が
ある場合、または複数のコード・バージョンに複数のポ
インタを交差させる追加オーバーヘッドがクリティカル
なタイミング問題を生じさせる場合に、まれにこのモー
ドが必要になる可能性もある。
【0039】これらの動的ロードおよびパッチ機能を利
用する、デバッガのさらに独創的な態様を以下に説明
し、特許を請求する。
【0040】修正および継続 本明細書で説明される好ましい実施の態様における、
「修正および継続」の発明は、前述のSPARCwor
ks(TM)製品バージョン3.0および3.0.1の
デバッガ部分の一部である。SPARCworks(T
M)は、本発明の譲受人である、サン・マイクロ・シス
テムズ・インコーポレーテッドの製品である。図4を参
照すると、伝統的プログラム・デバッグのシナリオ40
0が示されている。この場合、デバッガ・プログラムが
ロードされ、目的プログラムがロードされ403、デバ
ッグ・セッション404が始まる、伝統的なターンアラ
ウンド・サイクル402が示されている。伝統的ターン
アラウンド・サイクル402においては、エラーが発見
されると、デバッガは中断し、ソース・コードはエラー
を訂正して編集され406、編集済みソース・コードは
デバッガの外で(通常はmakeコマンドにより)再コ
ンパイルされていた408。再コンパイル済みオブジェ
クト・コード・ファイルは目的プログラムの残り部分と
再リンクされ410、プログラムはもう一度再ロードさ
れ403、デバッグ・セッションは再スタートする40
4。次のエラーが発見されると、伝統的なターンアラウ
ンド・サイクル402は、デバッグ処理が終了するまで
繰り返されていた。この伝統的ターンアラウンド・サイ
クル402はまた、図5の流れにおけて従来技術として
示されている。「修正および継続」の発明(図4の41
2)により、ユーザは、目的アプリケーション・プログ
ラムの実行およびデバッグを行いながら、ソース・ファ
イル406に変更を加え、デバッガを離れることなくソ
ース・コード・ファイル408を再コンパイルし、デバ
ッグ・セッション内のエラーが発見された位置414か
らプログラムの実行を継続することができる。本発明を
使用すると、ユーザには、1)プログラムを再リンクす
る410必要がなく、2)デバッガにプログラムを再ロ
ードする403必要がなく、3)最後のエラーが発見さ
れた位置からデバッグ・セッションを再実行する414
ことができる、といった利点がもたらされる。
【0041】本発明の利用法 修正および継続の発明の利用方法については、本明細書
にAppendixAとして添付され、本明細書の一部
となる、”Debugging a Program”
と題する、SPARCworksマニュアルのPart
#801−5106−10、Revision A D
ecember 1993、20−235ないし20−
240ページに記載されている。
【0042】本発明の過程 本「修正および継続」の発明による、好ましい実施の態
様の操作および構成について以下で総括的に説明する。
当業者には、いかなるプログラミング言語、いかなる同
等の動的ローダを使用しても、本発明の操作を行うプラ
ットフォームとしていかなるコンピュータを使用して
も、また基本的修理および継続操作を実行するための様
々な一連の操作を行っても、本発明を実施できることが
理解されよう。動的ローダおよびリンカは、様々なコン
ピュータおよび/またはオペレーティング・システムの
テキストで説明されている。図6にFixコマンド50
0の基本的操作が示されている。デバッグの実にエラー
が発見されると、ソース・コードはエラーを訂正するた
めに編集され、ソース・コードに加えられた修正を記憶
した後、本発明によるFIXコマンドが502で実行さ
れる。これに応じて、デバッガ・プログラムはコンパイ
ラを呼出し504、ここで訂正済みソース・コード・フ
ァイルが再コンパイルされ、共用オブジェクト( .s
o)ファイルが作成される506。編集済みソース・フ
ァイルから生成された新たなオブジェクト・コード・フ
ァイルが、実行時リンカを使用して実行中の目的プログ
ラムに、動的にリンクされる508。旧バージョンのオ
ブジェクト・コードは、新たにリンクされたコードと比
較され510、スタック上の関数内のローカル変数に追
加、削除があったか、またはタイプに変更が加えられた
かを判定する512。スタック上の関数内の変数に変更
があった場合514、ユーザに対しエラー・メッセージ
が発せられ516、スタックからその関数を除去するた
めにPOPコマンドを実行することを知らせ、Fixコ
マンドは518で終了する。この場合、ユーザは、PO
Pコマンドを実行し(以下に詳細に説明する)その後F
ixコマンドを再実行することになる。ローカル変数に
変更がみられない場合520、旧バージョンのオブジェ
クト・コードは新しいコードにパッチされる522。
(このパッチされたコードの構成は図7に示されてお
り、以下で詳細に説明される)。その後、プログラム・
カウンタがリセットされ524、旧バージョンのオブジ
ェクト・コード・ファイル内で設定されていたすべての
ブレークポイントは、新しいオブジェクト・コード・フ
ァイルに移され526、エラーが前回発見された位置
で、デバッグ・セッションを再開することができる53
0。
【0043】本発明の本質的な態様は、再コンパイル済
みファイルが目的プログラム・プロセスに再リンクされ
た後にデバッグ・セッションを継続するため、プログラ
ム・カウンタを正確にリセットできる(図6の524)
ことである。プログラム・カウンタは、CPUが実行す
る次の命令のアドレスを指定する。このアドレスは、何
らかのシステムにおける実メモリ・アドレスでも、仮想
メモリを含むシステムにおける仮想アドレスであっても
よい。エラーが発見された時点におけるプログラム・カ
ウンタの値は、記憶され、修正および継続操作が、エラ
ー訂正後どの位置からデバッグ・セッションを再開する
か判断できるようになっている。したがって、修正およ
び継続システムが、デバッグ・セッションを継続するよ
うユーザに制御権を戻すと、エラーが発見されて前のセ
ッションが中止した位置と本質的に同一の位置において
セットされたプログラム・カウンタを離れなくてはなら
ない。プログラム・カウンタは、エラーが起こった前の
関数のソース・コード内の行と同じ、関数の編集済みバ
ージョン内のソース・コードの行の初めに対応するオブ
ジェクト・コード位置にリセットされるが、これはその
行を含む関数が、修正されるスタックの最上位にある場
合である。しかし、プログラムがエラーのために中止し
た同じ行を含む関数が、修正されるスタックの最上位に
ない場合は、Popコマンドが実行できる(これは以下
で詳細に説明する)が、これにより、スタックからポッ
プオフした関数への(すなわち、エラーが検出された時
点で実行されていた関数への)呼出しを行ったソース・
コード文の始めに対応する位置を含むように、効果的に
プログラム・カウンタをセットできる。前述のFixコ
マンドについての説明で示されるように(図6参照)、
本発明の好ましい実施の態様は、スタック上の関数内ロ
ーカル変数に変更がない場合は、自動的にはPOPコマ
ンドを実施しない。しかし、当業者には、これを行うこ
とが容易であることが理解されよう。
【0044】プログラム・カウンタの調整については、
触れておく必要のある基本的な問題が2つある。 1)オブジェクト指向(C++など)コンストラクタお
よびデストラクタ 2)浮動小数点レジスタ・スピル
【0045】コンストラクタおよびデストラクタ C++システムにおいては、ほとんどのオブジェクト・
クラスは、少なくとも1つの「コンストラクタ」を備え
ている。これは、そのクラスのオブジェクトが作成され
ると、暗黙で呼び出される関数である。これは、オブジ
ェクトの初期値を設定する。また、「デストラクタ」と
呼ばれる、これに対応するクリーンアップ関数もあり、
これはオブジェクトが破壊される(範囲をはずれる、ま
たはヒープに戻る)時、呼び出される。デストラクタ
は、コンストラクタほど一般的ではなく、特殊終了のニ
ーズ、不要部分の整理などを処理する。デストラクタを
適切な範囲から出ると常に同期ロックが確実に解除する
完璧な手段として使用している人々もいる。したがっ
て、デストラクタは、オブジェクトに加え、オブジェク
トにかかるロックもクリーンアップする。コンストラク
タおよびデストラクタは、どのオブジェクト思考ソフト
ウェア・コンストラクション・テキストの中でも説明さ
れている。たとえば、Bertrand Meyer
著”Object−oriented Softwar
e Construction”、Prentice
Hall 1988、ISBN0−13−629049
−3を参照されたい。
【0046】以下のコードを考察してみる。
【0047】変数「f」への代入により、コンストラク
トおよびデストラクトされる複数の「Point」の一
時インスタンス化を生じさせる。拡張コードは以下のよ
うなものになるであろう。 //この位置を「X」と呼ぶ Point temp1; //ここではコンストラクタは呼び出されていない if(foo()){ temp1=b; //temp1がコンストラクタをコピー }else{ Point temp2=d.add(e); //temp2がコンストラクタをコピー //この位置を「Y」と呼ぶ temp1=c.add(temp2); //temp1がコンストラクタをコピ ー //temp2デストラクタが呼び出される } Point f=a.add(temp1); //temp1デストラクタ呼出される
【0048】このコードにおいて、デバッガがプログラ
ム・カウンタを位置「Y」から「X」に戻す必要がある
場合(たとえば、c.add の呼出しがポップされ
る)、temp2のデストラクタが呼び出されなくては
ならない。これは、デバッガに「temp1」および
「temp2」の適切なデストラクタ・コードを呼び出
すことにより行うことができる。さらに、ユーザが、プ
ログラム・カウンタを「X」から先の「Y」に進めよう
とする場合には、適切に構成されないオブジェクトもあ
る(temp1およびtemp2)ということがユーザ
に通知されなくてはならない。したがって、効果的な修
正及び継続デバッグ・ルーチンのためには、目的プログ
ラムを前にエラーの発見された位置に近い有意の開始位
置に正しく再調整するデストラクタの知識を備え利用す
ることができなければならない。
【0049】次にとりあげるのは、デストラクタ・ツリ
ーの概念である。C++コードのいかなる所与の位置に
おいても、C++コンパイラには、デストラクトするオ
ブジェクトおよびその順序が解っている。オブジェクト
の同じセットを同じ順序でコンパイルさせるすべての位
置が、デストラクタ・ステートであるとみなされる。コ
ンパイラは、これらの各デストラクタ・ステートにゼロ
から始まる固有の数を割り当てることができる。デスト
ラクタ・ステートはツリー状に配置することができ、こ
こで各アークは1つのオブジェクトを破壊し、他のデス
トラクタ・ステートに制御を渡す。このデストラクタ・
ツリーを現デストラクタ・ステートからルートまでたど
って、すべての破壊すべき構成オブジェクトを正しい順
序で破壊する。
【0050】図10aを参照すると、コンストラクタお
よびデストラクタ800を生成するサンプル関数が示さ
れている。示されているのは、AがC++クラスである
C++関数である。左列802は行番号を示し、右列8
04は各ソース・コード行の初めに関連するデストラク
タ・ステートを示す。図10bは、関数800に対応す
るデストラクタ・ツリー850を示す。デストラクタ・
ツリーのルート851の下では、第1ノード852がオ
ブジェクト「a」に関する第1デストラクタを参照し、
コンパイラにオブジェクト「a」を破壊させるすべての
位置をポイントする「2」のデストラクタ・ステートを
有している。オブジェクト「b」のコンストラクタは、
関数内のオブジェクト「a」の後、しかもオブジェクト
「a」のデストラクタが実行される前に作成され、オブ
ジェクト「c」のコンストラクタは、関数内のオブジェ
クト「b」の後、しかもオブジェクト「a」のデストラ
クタが実行される前に作成される。したがって、デスト
ラクタ・ツリーは、「c」のデストラクタを表わすノー
ド856にリンクされる、オブジェクト「b」のデスト
ラクタを表わすノード854にリンクされる、「a」の
デストラクタを表わすノード852を有している。関数
800において、オブジェクト「b」および「c」は、
オブジェクト「d」が作成される時点ではすでに破壊さ
れてしまっているので、ツリー850内でオブジェクト
「d」のデストラクタを表わすノード858は、オブジ
ェクト「a」のデストラクタを表わすノード852に直
接接続されている。ここで図10aおよび10bの両図
を参照すると、プログラム・カウンタが行14 808
から行10 806に移動した場合、デストラクタ・ス
テートは、4 814から2 812へと変わり、ツリ
ーにしたがうと、ノード856におけるステート=4の
オブジェクト「c」、次にノード854におけるステー
ト=3のオブジェクト「b」が破壊されることになる。
同様に、プログラム・カウンタが行19 810から行
10 806にリセットされる場合、ノード858にお
けるステートは、オブジェクト「d」が破壊されること
を示している。
【0051】デバッガがプログラム・カウンタを1つの
位置から他の位置へと移動させようとする場合、新旧プ
ログラム・カウンタ位置に関連するデストラクタ・ステ
ートを判定し、デストラクタ・ツリー内を旧ステートか
ら新ステートへとアークを横切ることができる。各アー
ク横断がツリーのルートに向かう限り、正しいオブジェ
クトがデストラクトされる。ツリーのルートをそれたア
ークの横断がある場合、適切に構成されないオブジェク
トがあることを知らせるエラー警告メッセージが発せら
れる。
【0052】デバッガは、比較的安全にプログラム・カ
ウンタを動かすことができるように、デストラクタ・ツ
リーにアクセスする必要がある。このデータは、コンパ
イラによりデバッガに供給されなくてはならない。コン
パイラは通常、対応するソース・コードの属性を対応す
るオブジェクト・コードと関連づけるこのようなデータ
を供給する。好ましい実施の態様においては、コンパイ
ラからのこのようなデータは、「記号表エントリ・デー
タ」または「スタブ」の形態で供給される。
【0053】スタブ:スタブは、この種の情報を伝達す
る、受け入れられている手段である。この情報をプログ
ラムのテキスト内に埋めこむといった他の案を代用する
こともできるが、これ以上に良い解決法は見出されてい
ない。
【0054】N_SLINEスタブを、現在行のデスト
ラクタ・ステートを含むために増加させなければならな
い。さらに、各デストラクタ・ステートは、以下の事項
を指定しなければならない。 −デストラクタ・ステート番号 −コンストラクタ後続のアドレス −デストラクタ・コードの第一命令のアドレス −実行するデストラクタ・コードのバイト数 −親デストラクタ・ステートのデストラクタ・ステート
番号
【0055】いかにしてこれらすべてがスタブ内に符号
化されるかを、以下で説明する。オブジェクトの様々な
再初期設定およびクリーンアップを行う必要があること
に加え、ステートを再初期設定しなければならない他の
変数もある。これらについては、「未初期設定値」の項
で総括的に説明する。
【0056】未初期設定値 CおよびC++ともに変数を有する。プログラム・カウ
ンタが、最初に変数に値を代入するコードを経て、1つ
進められると、値は未初期設定になりそこへの後続のア
クセスはランダム値を得る。望ましい動作は、プログラ
ム・カウンタが変数初期設定より進んで調整される度に
ユーザに知らせることである。現在好ましい実施の態様
においては、本発明はこの条件を無視する。しかし、当
業者には、代替実施が可能であることが理解されよう。
究極のインターフェースは、未初期設定される変数のリ
ストを提供することであろうが、最低限容認可能な解決
法は、少なくとも1つの変数が未初期設定される度にた
だユーザに警告を発することであろう。この動作は、変
数が最初に代入される度に増加されるカウンタを、コン
パイラに維持させることにより実施することができる。
このカウンタ値をN_SLINEスタブに符号化するこ
とにより、デバッガは、カウンタ値が1つの行から他へ
替わる度に警告メッセージを発することができるであろ
う。
【0057】情報のN_SLINEstabにおける符
号化 N_SLINEスタブカウンタを符号化する基本的方法
は、N_SLINEスタブの「他の」8ビット・フィー
ルドにおいてデルタ符号化を使用することである。デル
タ符号化とは、そのエントリーの実値および前のエント
リーの実値の間の差だけを使用することである。コンパ
イラがこれらの値を生成する。 .stabsおよび .s
tabnには、実行時コンパイラ内に生成されるアセン
プラ擬似演算コードは、以下のように画定される。 .stabs "string",type,other,desc,value .stabn "type,other,desc,value
【0058】好ましい実施の態様において、「他の」フ
ィールドの符号化とは、2つの4ビット符号付き値に分
けることである。カウンタ値を計算するために、2つの
仮想カウンタがゼロに初期設定され、関数スタブの後の
最初のN_SLINEスタブから始め、4ビット符号拡
張値を使用して2つのカウンタが増加および/または減
少される。ロー4ビット・フィールドはデストラクタ・
カウンタ用に使用され、ハイ4ビット・フィールドは変
数カウンタ用に使用される。特定のスタブのカウンタ値
は、4ビット値が加えられた後に取られる。最後に、4
ビット・フィールドのいずれかがデルタ値を含むには大
きさが十分でない場合、全「他の」フィールドは255
に設定され、2つのデルタ値はスタブ・ストリング内で
コロンにより分離された2つの数として、符号化され
る。以下の例は、この概念を示すものである。 stabs "main:F(0,4)",0x24,0,0,_main !Vars:0 Destructs:0 .stabn 0104,0,15,LL1 !Vars:0 Destructs:0 .stabn 0104,1,16,LL2 !Vars:0 Destructs:1 .stabn 0104,16,17,LL3 !Vars:1 Destructs:1 .stabn 0104,0,18,LL4 !Vars:1 Destructs:1 .stabn "-1:-1",0104,255,15,LL5 !Vars:0 Destructs:0
【0059】新N・コンストラクト・スタブおよび新N
・デストラクト・スタブ 最終的にはデストラクトを要するオブジェクトをコンス
トラクトする度に、2つの新たなスタブがコンパイラに
よって作成される。N_CONSTRUCTスタブは、
以下のようになる。 .stabs "<variable>:<state>",N_CONSTRUCT,0,<end>-<s
tart>,<start>-<func> ここで<variable>は、オブジェクト変数名で
ある。これは、変数名がない場合空である。<stat
e>はデストラクタ・ステート番号である。<star
t>はデストラクタ・コードの最初の命令のアドレスで
ある。<end>はデストラクタ・コードの最後の命令
に続く命令のアドレスである。このようにして、<en
d>−<start>が、デストラクタ・コードのバイ
ト数を指定する。これを符号化するのには、16ビット
は十分なスペースであるとされている。<func>は
関数名である。したがって、<location>−<
func>は、関数相対オフセットである。
【0060】N_DESTRUCTスタブは、以下のよ
うになる。 .stabs"<state>:<parent>"N_DESTRUCT,0,<end>-<start
>,<start>-<func> ここで、<state>はデストラクタ・ステート番号
である。<parent>は親デストラクタ・ステート
番号である。0は、デストラクタ・ツリーのルートであ
る。<start>はデストラクタ・コードの最初の命
令のアドレスである。<end>はデストラクタ・コー
ドの最後の命令に続く命令のアドレスである。したがっ
て、<end>−<start>は、デストラクタ・コ
ードのバイト数を指定する。16ビットは、これを符号
化するのに十分なスペースであるとされている。<fu
nc>は関数名である。したがって、<start>−
<func>は関数相対オフセットである。
【0061】好ましい実施の態様においては、アセンブ
ラおよび/またはコード・ジェネレータがスタブ指令の
最後の引数から2番目の式を受け入れない場合は、その
ように修正されなくてはならない。
【0062】浮動小数点レジスタスピル/アンスピル CおよびC++においては、変数が「レジスタ」キーワ
ードを介してレジスタに記憶されるように指定すること
ができる。「レジスタ」指定子は、最適化されたコード
および最適化されていないコード(たとえば、−g)に
おいても作動する。さらに、レジスタ指定子は、整数お
よび浮動小数点レジスタの両方にも動作する。SPAR
Cアーキテクチャは32の整数レジスタおよび32の浮
動小数点レジスタを備えており、整数レジスタはレジス
タ・ウィンドウ機構を介して管理されるが、浮動小数点
レジスタはそうではない。最終的に、SPARCABI
は、整数レジスタが呼出し先により保管/復元され、浮
動小数点レジスタが呼出し元により保管/復元されると
いう点においては、非対称的である。浮動小数点変数の
レジスタに記憶された変数を有する最適化されていない
コードにおいては、スピルし、各ルーチン呼出しで適切
な浮動小数点レジスタを復元するコードがある。
【0063】たとえば、以下のコードがある。
【0064】「spilld」は「std」の疑似命令
コードであることに留意されたい。さらに、「spil
ld」命令は、同時に2つの浮動小数点レジスタを節約
することに留意されたい。
【0065】レジスタの浮動小数点変数の問題点は、プ
ログラム・カウンタが安全に動く前に「pop」コマン
ドが正しくその値を復元しなくてはならないことであ
る。「pop」コマンドは、「restore」命令が
起こるよう強制することにより整数レジスタを復元す
る。「pop」コマンドはまた、呼出し命令の遅延スロ
ットに続く命令をさがし、すべての%sp相対ロード命
令を実行する。
【0066】N_CMDLINEスタブ ソース・ファイルを再コンパイルする操作に入ると、デ
バッガは、N_CMDLINEスタブの内容を実行する
だけである。コマンド行スタブの内容は、次の通りであ
る。 stabs"<cwd>;<driver><options><prefix_magic>",N_CMD
LINE,0,0 ここで、N_CMDLINEは0x34である。<cm
d>はドライバからの−cwdオプションにより指定さ
れた現行作業ディレクトリである。<driver>は
ドライバへの全パスである。<option>はコンパ
イラに渡されるオプションのリストである。このリスト
は、コンパイルされるソース・ファイルだけが指定され
るように、また .oファイルを生成する−cオプション
を指定するように変更することができる。<prefi
x_magic>はドライバを介して現行大域接頭部を
フロント・エンドに戻す一式のオプション型式である。
以下の例を参照されたい。重複修正および継続の実行に
より<prefix_magic>を重複しないよう配
慮がなされていることに留意されたい。
【0067】他の場合には/bin/shによって解釈
される奇妙な文字は、バックスラッシュで囲む必要があ
る。ドル符号($)は、このような文字の1つである。
【0068】たとえば、「myfile.cc 」が次の
ようにコンパイルされた場合、 CC−I./include-g-o myprog myfile.cc N_CMDLINEのコマンドは次のようになろう。 "<path1>;<path2>/CC-I./include-g myfile.cc-c-Qopti
on ccfe-prefix−Qoption ccfe<prefix>" ここで、<path1>はファイルが当初コンパイルさ
れた作業ディレクトリへの絶対パスである。<path
2>はコンパイラ・ドライバへの絶対パスである。<p
refix>はこのファイルのコンパイルに使用された
大域接頭部である。
【0069】大域化 好ましい実施の態様において、修正および継続により再
コンパイルされる関数が、実行可能ファイル内の現行値
にアクセスできるようにするために、すべてのファイル
の静的変数を大域値に変換しなければならない。この規
則の例外は、関数内にネストされた静的変数であり、そ
れに代わり、修正サイクル中にコンパイルされると、警
告メッセージを発しなくてはならない。コンパイル操作
中に−gオプションが割込み可能になると、大域化が可
能になる。
【0070】ファイルが、初めてコンパイルされると、
コンパイラは、固有の接頭部を作成し、各ファイルの静
的変数の前に付加する。固有の記号は、インターネット
・アドレス(または0)、時刻、およびプロセスID
(16ビットのみ)で構成されている。大域接頭部は、
次の形式でN_OPTスタブに符号化される。 G=<prefix>. 大域接頭部は次の形式である。 .<internet_address><time_of_day><process_id>.
【0071】14文字として、80ビットが符号化さ
れ、各文字は6ビットの情報を含んでいる。a−z,A
−Z,0−9,_,$は、6ビットを記憶するのに使用
される。以下のルーチンを、大域接頭部を得るために使
用することができる。
【0072】以下のコードは、様々な静的変数がいかに
大域化されるかを示している。 int a; /*a static int b; /*<prefix>.b*/ foo(void) { static int e; /*<prefix>.foo.e*/ { static int f; /*修正中であれば、警告メッセージ*/ } }
【0073】C++の場合、大域化名における関数名は
意味をなさない。上記の警告メッセージは、静的変数が
再初期設定されることをユーザに知らせている。
【0074】関数埋込み 好ましい実施の態様では、本発明を含むデバッガ・シス
テムにおける修正および継続処理をサポートするため
に、すべての関数は前に4ワード付加されなくてはなら
ない。これらの4ワードは、新たにロードされたコード
へ分岐するコード・シーケンスとともにロードされる。
Nエントリー・ポイントのFORTRAN関数では、埋
込み領域はN*4ワードになる。−gが指定されるかに
はかかわりなく、埋込みはコンパイラによって行われ
る。
【0075】埋込みはスタブ・バージョン番号に暗黙的
なので、デバッガにN_OPTを介する埋込みについて
知らせる必要はない。埋込みがない場合は、デバッガは
コード・パッチのための関数の最初の4ワードを使用す
るが、関数が4ワードより少ない場合、デバッガによっ
て修正することはできず、警告メッセージが発せられ
る。
【0076】プログラム・カウンタの設定 コンストラクタとデストラクタ、静的変数、およびレジ
スタ・スピルに関する必要な情報をデバッガに伝達す
る、実行時コンパイラのための、好ましい実施の態様に
おいて使用される手法について述べてきたが、ここで、
プログラム・カウンタを設定する動作について説明す
る。図8を参照し、プログラム・カウンタ(”PC”)
リセット・プログラム700を説明する。プログラムへ
のエントリー702に際し、旧PC値(プログラムを中
止させたアプリケーション・プログラム・エラーが起こ
った時点でセーブされた値)が、取り出される704。
この旧PC値は、旧関数コードの最初の命令をポイント
するかどうかテストされる706。そうであれば70
8、PCは、対応する新しい関数コードの最初の命令に
設定され710、726に戻る。そうでない場合71
2、旧関数コードがデバッグ情報を含むかどうかがチェ
ックされる716。そうであれば722、この行をリセ
ットするデストラクタを呼び出すためにデストラクタ・
ツリーがチェックされ714、PCが新しい関数コード
内の同じ相対行を指すように設定される724、726
に戻る。そうでない場合718、PCは、新しい関数コ
ードの第1行の最初を指すように設定され720、72
6に戻る。
【0077】POPコマンドの実行 上述のように(図6の512、514および516を参
照)、Fixコマンド・ルーチンは、スタック上の関数
内のローカル変数のいずれかに変更を検出した場合、エ
ラー・メッセージを出して終了する。このエラー・メッ
セージは、ユーザが、「POP」コマンドを実行し、変
更されたローカル変数を含む関数をスタックから「ポッ
プ」することをすすめている。ここで、「POP」プロ
グラム900を図9を参照して説明する。
【0078】エントリーに際して、「POP」ルーチン
は目的フレームをみつけ902、目的ルーチンがフレー
ム・ライン・デバッグ情報を有するかどうかをチェック
する904。そうでない場合は906、「POP」ルー
チンは放棄され908、910に戻る。そうである場合
は912、ルーチンは、このフレームに現行PC、現行
関数および現在行を取得する914。PCは、この関数
のデストラクタ・ステートにマップされ916、フレー
ムはこれが目的フレームであるかどうかをテストする9
18。そうでない場合920、ルーチンは、ステップ9
16で見いだしたデストラクタ・ステートからデストラ
クタ・ツリーのルートまでのすべてのオブジェクトをデ
ストラクトし922、次のフレームに進み924、ステ
ップ914に戻って、今説明したプロセスを次のフレー
ムのために実行する。ステップ918において、フレー
ムが目的フレーム926であると判定された場合、ルー
チンは、現在行の最初のアドレスを取得し928、その
アドレスをこの関数のデストラクタ・ステートにマップ
し930、ステップ930で得られたデストラクタ・ス
テートから、ステップ916で得られたデストラクタ・
ステートに至るすべてのオブジェクトをデストラクトす
る。ルーチンはその後、浮動小数点レジスタ・スピリン
グをチェックし934、必要なリセットを行って910
に戻る。この説明において、「start fram
e」はプログラムが中止したスタック・フレームのこと
である。目的フレームは、スタックをポップしようとす
るスタック・フレームのことであり、この目的フレーム
は、スタック内の第二フレームであっても、またはスタ
ック内の数個下位のフレームであってもよい。
【0079】コード・パッチング また、前述のように(図6の522を参照)、旧コード
は、新たにコンパイル済みコードにパッチされる。この
パッチ・プロセス600を、ここで図7を参照して説明
する。関数1 608、関数2 610および関数3
612を含む目的プログラムのオブジェクト・コードの
元のバージョン602が示されている。また、最初の修
正(すなわち、編集、再コンパイルおよび再リンク)の
結果生じたプログラムのオブジェクト・コード・バージ
ョン1 604も示されている。このバージョン1のコ
ード・セットには、元のバージョン602にはなかった
関数4 628が含まれている。また、関数3 612
が消去された、バージョン”n”(ここで”n”は使用
可能なメモリによってのみ制限される任意の数でよい)
606のコードも示されている。ここで、コード・パッ
チング構造は、十分に柔軟性に富んでおり、特定のFi
xサイクルが、必要に応じて新たな関数を加えたり、旧
関数を削除したりできることが示されている。旧バージ
ョンをより新しいバージョンにパッチする時、各関数の
エントリー位置は、新しい関数のエントリー位置をポイ
ントするようにパッチされる。たとえば、図7におい
て、元のバージョンの関数1のエントリー位置618
は、コードの次のバージョンの関数1エントリー位置6
22をポイントするようにパッチされる620。同様
に、このコードのバージョン1のエントリー位置622
は、コードの次のバージョンをポイントするようにパッ
チされる624。ただし次のバージョンが関数1を削除
しないと仮定してであり、その場合、コードのバージョ
ン1のエントリー位置622はパッチされない。
【0080】当業者には、様々なコード・バージョンを
前のバージョンに関連づけるパッチ機構が、このような
用途に使用されることが理解されよう。現在好ましい実
施の態様においては、以下のようなプロセスが使用され
る。元ファイルの各関数には、新たにコンパイル済みコ
ードの修正済み関数を呼び出す一連の命令がパッチされ
る。使用可能であれば、コンパイラにより提供される埋
込み領域が使用される。SPARCにおけるパッチ命令
は(命令の順序はアーキテクチャにより異なる)次のよ
うになっている。 関数「foo」(パッチしない)の最初部分の命令はこ
のようなものである。 foo-0x10:nop foo-c :nop foo-8 :nop foo-4 :nop エントリー => foo :sethi %hi(0xfffffc00),%g1 foo+4 :add %g1,920,%g1 foo+8 :save %sp,%g1,%sp ...
【0081】この関数にFixを実行すると、関数エン
トリーに「jmp」をパッチし、新たにコンパイル済み
関数「foo」の呼出しとともに埋込み領域に3つの命
令をパッチする。 foo-0x10:save %sp,-96,%sp foo-c :call foo' foo-8 :restore foo-4 :nop エントリー => foo :ba,a.-0x10 foo+4 :add %g1,920,%g1 foo+8 :save %sp,%g1,%sp ...
【0082】埋込み領域が使用可能でない場合、関数の
最初の4つの命令が使用される。
【0083】修正および継続再コンパイルの属性 好ましい実施の態様における修正および継続の発明によ
り発行される再コンパイル・コマンドは、本来デバッグ
情報を備えていない再コンパイル・コードにデバッグ情
報を加えるため、または、再コンパイルされるコード行
を変更するために使用することができる。これは、デバ
ッガの修正および継続部分を使用し、ユーザが任意に適
切なフラグを設定することにより行われる。
【0084】修正および継続 上記の説明は、好ましい実施の態様において修正および
継続の発明を行い、使用するステップを開示する。当業
者には、様々なフラグおよびスタブの代替実施、代替コ
ード・システム、コンパイラ、リンカ、様々なディスプ
レイ・システムおよびプロセッサ・プラットフォームを
利用して、同様の発明を成し遂げることができることが
理解されよう。したがって、特定の典型的実施の態様が
詳細にわたり説明され、添付の図により示されている
が、このような実施の態様は単に例示的なものであって
広義の発明を制限するものではなく、当業者には様々な
他の変更も可能であるので、本発明は、ここに示され説
明された特定の配向および構造に制限されるものではな
いことを理解されたい。
【図面の簡単な説明】
【図1】 本発明による、動的パッチングを使用する実
行時エラー・チェック・システムの全ブロック図であ
る。
【図2】 本発明による、実行時エラー・チェック用動
的パッチングの一般的な流れ図である。
【図3】 本発明による、実行時エラー・チェック方式
用動的パッチングを示す図である。
【図4】 伝統的デバッグ修正ターンアラウンド・サイ
クルおよび本発明による修正および継続サイクルを示す
図である。
【図5】 従来技術における伝統的デバッグ修正ターン
アラウンド・サイクルを示す、ブロック図である。
【図6】 Fixコマンドにより行われるステップを示
すブロック図である。
【図7】 デバッグ・セッション開始時にロードされた
オリジナル・コード・バージョンと、その後の修正およ
び継続操作の結果生じた再コンパイル済みバージョンと
の関係を示す図である。
【図8】 修正および継続システムのプログラム・カウ
ンタ・リセット方法体系を示す流れである。
【図9】 Popコマンドの操作を示す流れである。
【図10】 コンストラクタ/デストラクタ・ツリーお
よび関連コード・セットを示す図である。
【符号の説明】
301 ディスク・ファイル 302 オリジナル・プログラム 303 コンピュータ 304 入/出装置 305 メモリ 306 CPU 307 デバッガ・プログラム 308 プログラム(メモリ内コピー) 309 実行時チェック(RTC)モジュール 310 共用ライブラリ 312 プログラム・カウンタ(PC)
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ウェイン・シイ・グラムリッチ アメリカ合衆国 94086 カリフォルニア 州・サニーヴェイル・ヘンリエッタ アヴ ェニュ・726 (72)発明者 エドゥアルド・ペレグリ−ロパート アメリカ合衆国 94040 カリフォルニア 州・マウンテンビュー・フォードハム ウ ェイ・1731 (72)発明者 テレンス・シイ・ミラー アメリカ合衆国 94025 カリフォルニア 州・メンロ パーク・オーク コート・ 169

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】 プロセッサ、プログラム・カウンタ、メ
    モリおよびプログラム命令を含むコンピュータ・システ
    ムでコンピュータ・アプリケーション・プログラムをデ
    バッグする方法において、その方法は前記プログラム命
    令により実行され、 デバッグ・セッション中に前記コンピュータ・アプリケ
    ーション・プログラム内のエラーを検出するステップ
    と、 前記デバッグ・セッションを終了することなく、前記エ
    ラーを含むプログラム・コードを修正するステップと、 前記エラーが発生した前記デバッグ・セッションを再ス
    タートすることにより、前記修正プログラムを使用して
    デバッグ・セッションを継続するステップとを有するこ
    とを特徴とするデバッグ方法。
  2. 【請求項2】 前記デバッグ・セッションを終了するこ
    となく、エラーを含むプログラム・コードを修正する前
    記ステップがさらに、 コンパイラを呼出し、前記エラーを訂正する修正事項を
    含む編集ソース・コードのファイルをコンパイラに渡す
    ステップと、 前記編集ソース・コードのファイルに対応する、再コン
    パイル済みオブジェクト・コード・ファイルを、コンパ
    イラから受け取るステップと、 前記再コンパイル済みオブジェクト・コード・ファイル
    に対応する動的ライブラリ・ファイルを作成するステッ
    プと、 前記動的ライブラリ・ファイルを、前記コンピュータ・
    アプリケーション・プログラムにリンクするステップ
    と、 コンピュータ・アプリケーション・プログラムを、前記
    動的ライブラリ・ファイルを指すようにパッチするステ
    ップと、 プログラム・カウンタをリセットするステップと、 前記再コンパイル済みオブジェクト・コード・ファイル
    へブレーク・ポイントを移動させるステップとを含むこ
    とを特徴とする請求項1に記載のコンピュータ・アプリ
    ケーション・プログラムをデバッグする方法。
  3. 【請求項3】 プロセッサ、プログラム・カウンタ、メ
    モリおよびプログラム命令を含むコンピュータ・システ
    ムでコンピュータ・アプリケーション・プログラムをデ
    バッグする方法において、その方法は前記プログラム命
    令により実行されるものであって、 前記メモリにデバッガ・コンピュータ・プログラムをロ
    ードするステップと、 前記メモリに、コンパイル済みコンピュータ・アプリケ
    ーション・プログラムのソース・コードおよびオブジェ
    クト・コードをロードするステップと、 前記デバッガ・コンピュータ・プログラムに、前記コン
    パイル済みコンピュータ・アプリケーション・プログラ
    ムのオブジェクト・コードの実行時実行を開始するよう
    要求するステップと、 エラーが発見された場合、前記デバッガ・コンピュータ
    ・プログラムにおいて修正および継続ルーチンを実行す
    るステップであって、前記エラーを含むソース・ファイ
    ルが編集され、前記エラーを含む前記ソース・コード・
    ファイルの再コンパイル済みオブジェクト・コードが、
    前記コンパイル済みコンピュータ・アプリケーション・
    プログラムの前にロードされたオブジェクト・コードに
    パッチされるステップと、 前記デバッガが、コンパイルされた編集済みコンピュー
    タ・アプリケーション・プログラム・オブジェクト・コ
    ードの前記実行時実行を再開し、前記再開が前記エラー
    の検出された前記再コンパイル済みオブジェクト・コー
    ドの領域内においてなされるステップとを有することを
    特徴とするデバッグ方法。
  4. 【請求項4】 エラーが発見された場合、前記デバッガ
    ・コンピュータ・プログラムにおける修正および継続ル
    ーチンを実行する前記ステップが、さらに、 コンパイラを呼び出し、前記エラーを訂正する修正事項
    を含む編集済みソース・コードのファイルをコンパイラ
    に渡すステップと、 前記編集済みソース・コードのファイルに対応する再コ
    ンパイル済みオブジェクト・コード・ファイルをコンパ
    イラから受け取るステップと、 前記再コンパイル済みオブジェクト・コード・ファイル
    を、対応する前記オブジェクト・コード・ファイルの前
    のバージョンにリンクするステップと、 プログラム・カウンタをリセットするステップと、 前記再コンパイル済みオブジェクト・コード・ファイル
    に、ブレーク・ポイントを移動させるステップと、 デバッグ・プロセスが継続される前記アプリケーション
    ・プログラムを、プログラム・カウンタにより指示され
    た位置で再スタートさせるステップとを含むことを特徴
    とする請求項3に記載のコンピュータ・アプリケーショ
    ン・プログラムをデバッグする方法。
  5. 【請求項5】 プログラム・カウンタ、メモリおよびプ
    ログラム命令とを有するプロセッサと、 デバッグ・セッション中に前記コンピュータ・アプリケ
    ーション・プログラムにおいてエラーを検出するように
    構成され、前記プロセッサにより前記デバッグ・セッシ
    ョンが実行される前記メモリ内のデバッガとを備え、 前記デバッガが、 前記デバッグ・セッションを終了することなく、前記エ
    ラーを含むプログラム・コードを修正するための修正サ
    ブシステムと、 前記修正済みプログラム・コードを使用して、前記エラ
    ーが発生した前記デバッグ・セッションを再スタートす
    るための継続サブシステムとを有していることを特徴と
    するコンピュータ・アプリケーション・プログラムをデ
    バッグするコンピュータ・システム。
  6. 【請求項6】 前記修正サブシステムが、 コンパイラを呼び出し、前記エラーを訂正する編集事項
    を含む編集済みソース・コードのファイルをコンパイラ
    に渡すよう構成された呼出し機構と、 前記編集済みソース・コードのファイルに対応する再コ
    ンパイル済みオブジェクト・コード・ファイルをコンパ
    イラから受け取るよう構成された通信機構と、 前記再コンパイル済みオブジェクト・コード・ファイル
    を、対応する前記オブジェクト・コード・ファイルの前
    のバージョンに連結することのできるリンク機構と、 前記プログラム・カウンタを変更できるプログラム・カ
    ウンタ制御機構と、 ブレーク・ポイントを前のオブジェクト・コード・ファ
    イルから前記再コンパイル済みオブジェクト・コード・
    ファイルに移動することのできるブレーク・ポイント配
    置機構とを含んでいることを特徴とする請求項5に記載
    のコンピュータ・アプリケーション・プログラムをデバ
    ッグするコンピュータ・システム。
  7. 【請求項7】 デバッグ・セッション中に前記コンピュ
    ータ・アプリケーション・プログラム内のエラーを検出
    する手段と、 前記デバッグ・セッションを終了することなく前記エラ
    ーを含むプログラム・コードを修正する手段と、 前記エラーの発生した前記デバッグ・セッションを再ス
    タートすることにより、前記修正プログラム・コードを
    使用したデバッグ・セッションを継続する手段とを有す
    ることを特徴とするプロセッサ、プログラム・カウン
    タ、メモリおよびプログラム命令を備えたコンピュータ
    でコンピュータ・アプリケーション・プログラムをデバ
    ッグするシステム。
  8. 【請求項8】 プロセッサ、プログラム・カウンタ、メ
    モリおよびプログラム命令を含むコンピュータ・システ
    ムで、コンピュータ・アプリケーション・プログラムを
    デバッグする方法において、その方法は前記プログラム
    命令により実行されるものであって、 デバッグ・セッション中に前記コンピュータ・アプリケ
    ーション・プログラム内のエラーを検出するステップ
    と、 前記デバッグ・セッションを終了することなく、前記エ
    ラーを含むプログラム・コードを修正し、前記修正操作
    によりユーザがデバッグ情報を加えるよう指定でき、前
    記ユーザが修正すべきコード行を変更することができる
    ステップと、 前記エラーが発生した前記デバッグ・セッションを再ス
    タートすることにより、前記修正プログラムを使用して
    デバッグ・セッションを継続するステップとを有するこ
    とを特徴とするデバッグ方法。
  9. 【請求項9】 プログラム・カウンタ、メモリおよびプ
    ログラム命令とを有するプロセッサと、 デバッグ・セッション中に前記コンピュータ・アプリケ
    ーション・プログラム内のエラーを検出するように構成
    され、前記プロセッサにより前記デバッグ・セッション
    が実行される前記メモリ内のデバッガとを備え、 前記デバッガが、 前記デバッグ・セッションを終了することなく前記エラ
    ーを含むプログラム・コードをユーザが修正でき、前記
    ユーザがデバッグ情報を加えるよう指定でき、前記ユー
    ザが修正すべきコード行を変更することができる修正サ
    ブシステムと、 前記修正済みプログラム・コードを使用して、前記エラ
    ーが発生した前記デバッグ・セッションを、ユーザが再
    スタートすることのできる継続サブシステムとを有して
    いることを特徴とするコンピュータ・アプリケーション
    ・プログラムをデバッグするためのコンピュータ・シス
    テム。
JP7247074A 1994-09-01 1995-09-01 コンピュータ・アプリケーション・プログラムをデバッグする方法およびコンピュータ・システム Pending JPH08179940A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/299720 1994-09-01
US08/299,720 US5675803A (en) 1994-01-28 1994-09-01 Method and apparatus for a fast debugger fix and continue operation

Publications (1)

Publication Number Publication Date
JPH08179940A true JPH08179940A (ja) 1996-07-12

Family

ID=23155999

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7247074A Pending JPH08179940A (ja) 1994-09-01 1995-09-01 コンピュータ・アプリケーション・プログラムをデバッグする方法およびコンピュータ・システム

Country Status (3)

Country Link
US (1) US5675803A (ja)
EP (1) EP0699996A1 (ja)
JP (1) JPH08179940A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000322251A (ja) * 1999-04-23 2000-11-24 Internatl Business Mach Corp <Ibm> アプリケーション管理方法
JP2013041546A (ja) * 2011-08-19 2013-02-28 Fujitsu Ltd デバッグ支援プログラム、デバッグ支援方法及びデバッグ支援システム
US8473903B2 (en) 2009-09-28 2013-06-25 The Bank Of Tokyo-Mitsubishi Ufj, Ltd. Code edit apparatus and recording medium
US8745597B2 (en) 2009-11-25 2014-06-03 International Business Machines Corporation Providing programming support to debuggers
JP2015072567A (ja) * 2013-10-02 2015-04-16 トヨタ自動車株式会社 情報処理装置

Families Citing this family (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0729097A1 (en) * 1995-02-07 1996-08-28 Sun Microsystems, Inc. Method and apparatus for run-time memory access checking and memory leak detection of a multi-threaded program
US6094529A (en) * 1995-09-19 2000-07-25 Jeffries; Robin Method, apparatus and computer program product for linking stack messages to relevant information
US5870587A (en) * 1996-03-20 1999-02-09 International Business Machines Corporation Information-handling system, method, and article of manufacture including a mechanism for providing an improved application binary interface
US6112025A (en) * 1996-03-25 2000-08-29 Sun Microsystems, Inc. System and method for dynamic program linking
US5905892A (en) * 1996-04-01 1999-05-18 Sun Microsystems, Inc. Error correcting compiler
US7987427B1 (en) * 1996-05-10 2011-07-26 Apple Inc. Graphical editor for program files
US5926806A (en) * 1996-10-18 1999-07-20 Apple Computer, Inc. Method and system for displaying related information from a database
US6052778A (en) * 1997-01-13 2000-04-18 International Business Machines Corporation Embedded system having dynamically linked dynamic loader and method for linking dynamic loader shared libraries and application programs
US6363436B1 (en) 1997-01-27 2002-03-26 International Business Machines Corporation Method and system for loading libraries into embedded systems
US5842020A (en) * 1997-01-31 1998-11-24 Sun Microsystems, Inc. System, method and article of manufacture for providing dynamic user editing of object oriented components used in an object oriented applet or application
US5884078A (en) 1997-01-31 1999-03-16 Sun Microsystems, Inc. System, method and article of manufacture for creating an object oriented component having multiple bidirectional ports for use in association with a java application or applet
US6496870B1 (en) 1997-01-31 2002-12-17 Sun Microsystems, Inc. System, method and article of manufacture for collaboration with an application
US5920721A (en) * 1997-06-11 1999-07-06 Digital Equipment Corporation Compiler generating functionally-alike code sequences in an executable program intended for execution in different run-time environments
JPH1115689A (ja) * 1997-06-19 1999-01-22 Nec Corp ソフトウェアのデバッグ方法及びデバッグ・プログラムを記録した記録媒体
US6442753B1 (en) * 1997-08-28 2002-08-27 International Business Machines Corporation Apparatus and method for checking dependencies among classes in an object-oriented program
US5987251A (en) * 1997-09-03 1999-11-16 Mci Communications Corporation Automated document checking tool for checking sufficiency of documentation of program instructions
US5966541A (en) 1997-12-04 1999-10-12 Incert Software Corporation Test protection, and repair through binary-code augmentation
US6110227A (en) * 1998-06-24 2000-08-29 Microsoft Corporation Systems and methods for pre-processing variable initializers
US6490721B1 (en) 1998-07-14 2002-12-03 Oc Systems Incorporated Software debugging method and apparatus
CA2246270C (en) * 1998-09-01 2003-09-23 Ibm Canada Limited - Ibm Canada Limitee Debugging multiple related processes simultaneously
US6279149B1 (en) * 1998-09-24 2001-08-21 International Business Machines Corporation Aggregate structure identification and its application to program analysis
US6502239B2 (en) * 1998-11-12 2002-12-31 Computer Associates Think, Inc Method and apparatus for round-trip software engineering
US6308321B1 (en) 1998-12-11 2001-10-23 Incert Software Corporation Method for determining program control flow
JP3522141B2 (ja) * 1999-01-28 2004-04-26 富士通株式会社 修正プログラムを継承したプログラムの自動生成方法、プログラム自動生成装置及び修正プログラムを継承したプログラムを自動生成するプログラムを記録した記録媒体
US6353924B1 (en) 1999-02-08 2002-03-05 Incert Software Corporation Method for back tracing program execution
US7032213B1 (en) * 1999-09-01 2006-04-18 Microsoft Corporation Fixing incompatible applications using a light debugger
US6745385B1 (en) * 1999-09-01 2004-06-01 Microsoft Corporation Fixing incompatible applications by providing stubs for APIs
US20110191747A1 (en) * 1999-10-05 2011-08-04 Borland Software Corporation Supporting and deploying distributed computing components
US6728668B1 (en) * 1999-11-04 2004-04-27 International Business Machines Corporation Method and apparatus for simulated error injection for processor deconfiguration design verification
US6671825B1 (en) 1999-11-19 2003-12-30 Oracle International Corporation Method and apparatus for debugging a software program
US6839894B1 (en) * 1999-11-19 2005-01-04 Oracle International Corporation Method and apparatus for debugging a software program using dynamic debug patches and copy on write views
US6748584B1 (en) * 1999-12-29 2004-06-08 Veritas Operating Corporation Method for determining the degree to which changed code has been exercised
US6745383B1 (en) * 1999-12-29 2004-06-01 Veritas Operating Corporation Early warning mechanism for enhancing enterprise availability
US6804814B1 (en) 1999-12-29 2004-10-12 Veritas Operating Corporation Method for simulating back program execution from a traceback sequence
US7010781B1 (en) * 2000-02-15 2006-03-07 Sun Microsystems, Inc. Methods and apparatus for managing debugging I/O
US6785850B2 (en) * 2000-03-02 2004-08-31 Texas Instruments Incorporated System and method for automatically configuring a debug system
US7240336B1 (en) 2000-07-25 2007-07-03 Sci Systems, Inc. Interpretive simulation of software download process
US6820258B1 (en) * 2000-08-28 2004-11-16 International Business Machines Corporation System and method for dynamically optimizing executing activations
US6820251B1 (en) * 2000-11-06 2004-11-16 Hewlett-Packard Development Company, L.P. System and method for a software recovery mechanism
US20020087876A1 (en) * 2000-12-28 2002-07-04 Larose Gordon Edward Adaptive software installation process supporting multiple layers of security-related attributes
US7031989B2 (en) * 2001-02-26 2006-04-18 International Business Machines Corporation Dynamic seamless reconfiguration of executing parallel software
US20040205720A1 (en) * 2001-04-30 2004-10-14 Robert Hundt Augmenting debuggers
EP1410181A1 (en) * 2001-07-16 2004-04-21 Yuqing Ren Embedded software update system
US7237237B2 (en) * 2001-07-24 2007-06-26 The Mathworks, Inc. Designating an object for destruction
CA2360650A1 (en) * 2001-10-31 2003-04-30 Ibm Canada Limited-Ibm Canada Limitee Algorithm to create and compare debug scenarios of a computer process
US20030115552A1 (en) * 2001-11-27 2003-06-19 Jorg Jahnke Method and system for automatic creation of multilingual immutable image files
US6978443B2 (en) * 2002-01-07 2005-12-20 Hewlett-Packard Development Company, L.P. Method and apparatus for organizing warning messages
US7134115B2 (en) * 2002-02-07 2006-11-07 Matsushita Electric Industrial Co., Ltd. Apparatus, method, and program for breakpoint setting
US7073096B2 (en) * 2002-10-18 2006-07-04 Wind River Systems, Inc. File path resolving debugger
US7814476B2 (en) * 2002-10-31 2010-10-12 Oracle America, Inc. Systems and methods for updating software
US6983456B2 (en) * 2002-10-31 2006-01-03 Src Computers, Inc. Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms
US7784044B2 (en) * 2002-12-02 2010-08-24 Microsoft Corporation Patching of in-use functions on a running computer system
US7890464B2 (en) * 2003-06-20 2011-02-15 Innopath Software, Inc. Processing software images and generating difference files
US7325227B2 (en) * 2003-11-12 2008-01-29 Siemens Product Lifecycle Management Software System, method, and computer program product for identifying code development errors
US7890946B2 (en) 2004-05-11 2011-02-15 Microsoft Corporation Efficient patching
US7559058B2 (en) * 2004-05-11 2009-07-07 Microsoft Corporation Efficient patching
GB0418306D0 (en) * 2004-08-17 2004-09-15 Ibm Debugging an application process at runtime
US7685574B2 (en) * 2004-09-29 2010-03-23 Microsoft Corporation Constrained execution regions
US7409532B2 (en) * 2005-03-24 2008-08-05 International Business Machines Corporation Method and apparatus for extending operations of an application in a data processing system
US20070006166A1 (en) * 2005-06-20 2007-01-04 Seagate Technology Llc Code coverage for an embedded processor system
US8136101B2 (en) * 2005-11-04 2012-03-13 Oracle America, Inc. Threshold search failure analysis
US7797684B2 (en) * 2005-11-04 2010-09-14 Oracle America, Inc. Automatic failure analysis of code development options
US20070168969A1 (en) * 2005-11-04 2007-07-19 Sun Microsystems, Inc. Module search failure analysis
US7716100B2 (en) * 2005-12-02 2010-05-11 Kuberre Systems, Inc. Methods and systems for computing platform
US8819641B1 (en) 2006-04-27 2014-08-26 Epic Games, Inc. Program state reversing software development tool
US9645915B2 (en) 2006-12-27 2017-05-09 The Mathworks, Inc. Continuous evaluation of program code and saving state information associated with program code
US20130024844A1 (en) * 2006-12-27 2013-01-24 The Mathworks, Inc. Continuous evaluation of program code and saving state information associated with program code
US8239832B2 (en) * 2007-05-25 2012-08-07 Microsoft Corporation In-process debugging using external debugging infrastructure
KR100871820B1 (ko) * 2007-06-27 2008-12-03 엠디에스테크놀로지 주식회사 소스 오류 선별시스템 및 그 방법
US8527961B2 (en) * 2007-11-14 2013-09-03 Oracle America, Inc. Expression-level debugging without format changes
US8266597B2 (en) * 2008-06-16 2012-09-11 International Business Machines Corporation Dynamically patching computer code using breakpoints
CN101739333B (zh) * 2008-11-25 2013-10-16 国际商业机器公司 应用程序的调试方法、调试工具及调试装置
US8438558B1 (en) 2009-03-27 2013-05-07 Google Inc. System and method of updating programs and data
US8762971B2 (en) * 2009-04-02 2014-06-24 International Business Machines Corporation Servicing a production program in an integrated development environment
US9274770B2 (en) * 2009-06-22 2016-03-01 Oracle America, Inc. Fault tolerant compilation with automatic error correction
US9207921B2 (en) * 2009-06-22 2015-12-08 Oracle America, Inc. Fault tolerant compilation with automatic optimization adjustment
US9552277B2 (en) * 2009-09-09 2017-01-24 Oracle International Corporation Synchronized java debugger
US8850399B2 (en) * 2010-11-15 2014-09-30 Microsoft Corporation Software development using code retraction and background warm up
US8566799B2 (en) * 2011-07-15 2013-10-22 International Business Machines Corporation Resuming a prior debug session
KR102013582B1 (ko) * 2012-09-07 2019-08-23 삼성전자 주식회사 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
US8930923B2 (en) * 2012-12-20 2015-01-06 International Business Machines Corporation Generating debugging extension source code utilizing debugging information
US9274911B2 (en) 2013-02-21 2016-03-01 Advantest Corporation Using shared pins in a concurrent test execution environment
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
US9164877B2 (en) * 2013-06-21 2015-10-20 Sap Se Business application inspection and modification
CN104346273A (zh) * 2013-07-29 2015-02-11 国际商业机器公司 用于调试的方法和系统
US9053228B1 (en) 2013-10-22 2015-06-09 The Mathworks, Inc. Determining when to evaluate program code and provide results in a live evaluation programming environment
US9519758B2 (en) * 2014-02-04 2016-12-13 Pegasus Media Security, Llc System and process for monitoring malicious access of protected content
US10261889B2 (en) * 2014-06-25 2019-04-16 Microsoft Technology Licensing, Llc Techniques for edit-and-continue and enhanced optimized debugging on optimized code
US9639343B2 (en) 2014-08-29 2017-05-02 Nxp Usa, Inc. Method for altering execution of a program, debugger, and computer-readable medium
US9892021B2 (en) 2015-03-18 2018-02-13 Sap Se Injection of code modifications in a two session debug scripting environment
US10635160B2 (en) * 2016-05-16 2020-04-28 Tibco Software Inc. Stepback mechanism to develop and diagnose process applications
US10922210B2 (en) 2019-02-25 2021-02-16 Microsoft Technology Licensing, Llc Automatic software behavior identification using execution record
US11249883B2 (en) 2020-01-02 2022-02-15 Bank Of America Corporation Error repair tool using sentiment analysis
US11216257B1 (en) * 2020-07-02 2022-01-04 Intrado Corporation Automated conference sessions generated to manage application development
US11677574B1 (en) 2020-07-02 2023-06-13 Intrado Corporation Automated conference sessions generated to manage application development
US11972240B2 (en) 2021-12-03 2024-04-30 Samsung Electronics Co., Ltd. Systems and methods for automapping source code to machine code
CN116340074B (zh) * 2023-05-26 2023-08-22 北京鉴智科技有限公司 硬件在环测试系统和多核处理器片上系统的测试方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61286938A (ja) * 1985-06-13 1986-12-17 Fujitsu Ltd 会話型デバツグ方式
US5459868A (en) * 1990-11-30 1995-10-17 St Computer Systems & Services Interpretive object-oriented facility which can access pre-compiled classes
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US5446898A (en) * 1992-06-22 1995-08-29 International Business Machines Corporation Method and apparatus for configuring and installing a loadable ABIOS device support layer in a computer system
US5495611A (en) * 1992-06-22 1996-02-27 International Business Machines Corporation Method and apparatus for dynamic load of an ABIOS device support layer in a computer system
US5325532A (en) * 1992-09-25 1994-06-28 Compaq Computer Corporation Automatic development of operating system boot image
US5481713A (en) * 1993-05-06 1996-01-02 Apple Computer, Inc. Method and apparatus for patching code residing on a read only memory device

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000322251A (ja) * 1999-04-23 2000-11-24 Internatl Business Mach Corp <Ibm> アプリケーション管理方法
US6718546B1 (en) 1999-04-23 2004-04-06 International Business Machines Corporation Application management
US8473903B2 (en) 2009-09-28 2013-06-25 The Bank Of Tokyo-Mitsubishi Ufj, Ltd. Code edit apparatus and recording medium
US8745597B2 (en) 2009-11-25 2014-06-03 International Business Machines Corporation Providing programming support to debuggers
US8826244B2 (en) 2009-11-25 2014-09-02 International Business Machines Corporation Providing programming support to debuggers
JP2013041546A (ja) * 2011-08-19 2013-02-28 Fujitsu Ltd デバッグ支援プログラム、デバッグ支援方法及びデバッグ支援システム
JP2015072567A (ja) * 2013-10-02 2015-04-16 トヨタ自動車株式会社 情報処理装置

Also Published As

Publication number Publication date
EP0699996A1 (en) 1996-03-06
US5675803A (en) 1997-10-07

Similar Documents

Publication Publication Date Title
JPH08179940A (ja) コンピュータ・アプリケーション・プログラムをデバッグする方法およびコンピュータ・システム
JP4398538B2 (ja) 命令セット内の命令に応答してプロセスを実行するデータ処理システムおよびその命令処理方法
EP0665496B1 (en) Method and apparatus for run-time error checking using dynamic patching
US5907709A (en) Development system with methods for detecting invalid use and management of resources and memory at runtime
US5999732A (en) Techniques for reducing the cost of dynamic class initialization checks in compiled code
US6067641A (en) Demand-based generation of symbolic information
US6317869B1 (en) Method of run-time tracking of object references in Java programs
US7784044B2 (en) Patching of in-use functions on a running computer system
US6314560B1 (en) Method and apparatus for a translation system that aggressively optimizes and preserves full synchronous exception state
Ho et al. An approach to genuine dynamic linking
US7367015B2 (en) Method and system for software program editing in common language runtime environment (CLRE)
US5615400A (en) System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers
US6247171B1 (en) Bytecode program interpreter apparatus and method with pre-verification of a data type restrictions and object initialization
US6112025A (en) System and method for dynamic program linking
US5848274A (en) Incremental byte code compilation system
US8448152B2 (en) High-level language, architecture-independent probe program compiler
JPH09506722A (ja) モデリング・システム
JP2000181725A (ja) 実行可能なコ―ドを改変し、追加機能を付与するための方法およびシステム
US6810519B1 (en) Achieving tight binding for dynamically loaded software modules via intermodule copying
US20040083467A1 (en) System and method for executing intermediate code
Kang Function call interception techniques
US6976249B1 (en) Method for embedding object codes in source codes
US6275985B1 (en) Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
Ugawa et al. Finding Errors in Registrations of Local Variables Using Coccinelle for Accurate Garbage Collection
US7337173B1 (en) Compiler having global element optimization