JPH01166141A - デバッグ情報提供方法 - Google Patents

デバッグ情報提供方法

Info

Publication number
JPH01166141A
JPH01166141A JP63289913A JP28991388A JPH01166141A JP H01166141 A JPH01166141 A JP H01166141A JP 63289913 A JP63289913 A JP 63289913A JP 28991388 A JP28991388 A JP 28991388A JP H01166141 A JPH01166141 A JP H01166141A
Authority
JP
Japan
Prior art keywords
code
resource
web
range
user
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.)
Granted
Application number
JP63289913A
Other languages
English (en)
Other versions
JP2810675B2 (ja
Inventor
Sue A Meloy
スー・エイ・メロイ
Deborah S Coutant
デボラ・エス・クータント
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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of JPH01166141A publication Critical patent/JPH01166141A/ja
Application granted granted Critical
Publication of JP2810675B2 publication Critical patent/JP2810675B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related 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/3628Software debugging of optimised code

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔発明の技術分野〕 本発明は、最適化コンパイラを用いてコンパイルされた
コードのデバッグに関するものである。
〔従来技術およびその問題点〕
コードは、一般に高水準プログラミング言語で書かれて
いる。しばしばソース・コードと呼ばれるこの高水準言
語は、コンパイラ・プログラムによってアセンブリ言語
に翻訳される。オブジェクト・コードと呼ばれるアセン
ブリ言語の2進形式は、コンピュータによって実際に実
行されるコードの形式である。
なお、アセンブリ言語とは異なる形式への変換がなされ
る場合もあるが、以下の議論の本質には何ら影響を与え
ないので、その説明・例示は省略する。
コードゆデバッガは、プログラマがコードのエラーを見
つけ出すのを助けるプログラムである。
これは、コード・デバッグ処理の効率を改善するのに極
めて有効なツールである。コード・デバッガの多くは、
アセンブリ・コード会レベルでのコードの動作に関連し
た情報を提供するものである。
しかし、もとのコードが高水準の言語で書かれている場
合、このような形式の情報しか与えられないためにプロ
グラムのデバッグが困難になる。プログラマが高水準言
語でプログラムを書く場合、アセンブリ・コードの形で
現れるこれらのエラーを探索するのはプログラマの望む
ところではない。
この問題を回避するためには、プログラマが、そのプロ
グラムを書いたも環とのコード・レベルでプログラムの
デバッグを行なえるようにする、デバッガ参プログラム
の開発が望ましい。こうしたデバッガ拳プログラムは、
しばしば、ソース・レベル−デバッガと呼ばれる。
コード・デバッガの重要な特徴の1つは、プログラマが
コードの実行を停止し、そのコードが作用している各ユ
ーザ資源における値をチエツクすることができるように
する点にある。ユーザ資源は、通常、ソース・コードで
定義された変数である。ユーザ資源の値は、プログラム
が正しく機能しない場合に、障害の原因を示す手がかシ
を与えるものである。
コンピュータは、オブジェクト・コードによって動作す
るので1.ソース争レベル・デバッlfハ、動作時に、
ソース・コード中で名前がつけられているユーザ資源が
、コンピュータによって実際にどこに記憶されているか
を知シ、これKよって。
ユーザがユーザ資源に関する現在の値を要求すると、デ
バッグ拳プログラムがユーザ資源をどこで見出すことが
できるかを知る必要がある。通常、コンパイラはユーザ
資源がつねに記憶される。ユーザ資源についての記憶ロ
ケーションの割当てを行なう。このような場合、デバッ
ガは、ただその記憶場所に行って、ユーザ資源の値にア
クセスするだけですむ。
最適化されたコードを発生するコンパイラを用いる場合
に困難が生じる。普通、コンパイラ内のオプテイマイザ
の設計目標は、できるだけ速く走るコードを生成するこ
とである。最適化されたコードでは、ユーザ資源がいつ
も同じ場所に記憶されることがないようにするのが望ま
しいことがある。例えば、特定のコード・セクションに
おいであるユーザ資源のアクセス及び書換えの少なくと
入れておくことにより、このレジスタがアクセス/更新
され、他の記憶ロケーションが同時に更新されることが
ないようにすることができる。従って、標準的なデバッ
グ・プログラムは、この特定のセクションの実行中には
このユーザ資源にアクセスする方法を持りていない。従
りて、プログラマは、再びオブジェクト・コードに基づ
いたコードのデバッグを行なおうとするか、あるいは他
の方法を利用せざるを得なくなる。
〔発明の目的〕
本発明は上述したような最適化を行なう場合でもソース
・レベルのデバッグを可能とすることを目的とする。
〔発明の概要〕
本発明の一実施例によれば、最適化コードのシンボリツ
ク・デバッグをサポートする変数レンジを用いる方法及
び装置が提供される。ソース・コード中の各ユーザ資源
について2記述を含むデバッグ・シンボル界が構成され
る。さらに、レンジ表が作成される。レンジ表には、コ
ードが実行される間に色々なロケーションに記憶される
各ユーザ資源毎に、レンジのリストと、各レンジ毎にそ
のユーザ資源がどこにあるかに関する記述が含まれてい
る。ユーザ資源が特定のレンジにおいて定数として記憶
されている場合、その定数の値をレンジ表に記憶してお
いてもよい。デバッグ・シンボル表における各ユーザ資
源についての記述には、個々のユーザ資源について、そ
れについてのレンジのリストがレンジ表に含まれている
か否かを示すフラグが含まれている。そのリストがレン
ジ表中に含まれている場合、そのユーザ資源の記述には
、そのユーザ資源についてのレンジ・リストへのポイン
タが含まれている。このポインタは、例えば、レンジ表
の中へのインデクスで適当なリストを指示するものであ
ってよい。
〔実施例〕
第2A図では、コンパイラ42がソース・コード41を
受取り、オブジェクト・コード43を生成する。オブジ
ェクト・コードはコンピュータ44で実行される。  
  ・ 第2B図では、コンピュータ44上で走るデバッガ45
が、ソース・コード41中のエラーを発見するため、オ
ブジェクト・コード43を実行する。デバッグの際、デ
バッガ45はデバッグ・シンボル表55にアクセスする
。コンパイラ42には、被生成コード52を生成するコ
ード・ジェネレータ51が含まれているように示されて
いる。
コンパイラ42中のコード・オプテイマイザ53によっ
て、被生成コードの最適化が行なわれ、オブジェクト・
コード43が作られる。コード・オプテイマイザ53は
、マルチ・バス大域オプテイマイザである。コード・オ
プテイマイザ53は、資源表54によって記憶ロケーシ
ョンおよびレジスタについての情報を掌握している。各
記憶ロケーションおよびレジスタは、資源表54中に夫
々固有のエントリを有している。ここにおいて、記憶ロ
ケーションがメモリ資源と呼ばれ、またレジスタがレジ
スタ資源と呼ばれる場合もある。また、記憶ロケーショ
・ンとレジスタがまとめて資源と呼ばれる場合もある。
ソース・コード41内の各ユーザ資源毎に、デバッガ4
5は、デバッグ・シンボル表55にデータ構造体を保有
している。これらの構造体は、デバッグ・シンボル表5
5内のエントリである。先行技術によるデータ構造のフ
ォーマットを第3A図に示す。第3A図において、構造
体106は、32ビツトの#100〜104から構成さ
れている。
゛ 語100には、ユーザ資源に関する情報を示す各 
 −種フイールドが含まれている。1ビツト・フィール
ド107には、デバッガに対して構造体106のサイズ
・パラメータに関して知らせる情報が記憶されている。
10ビツト・フィールド108は、構造体106がどの
タイプの構造体であるかをデバッガ45に対して指示す
る。例えば、フィールド108は、構造体106に動的
変数が含まれていることをデバッガ45に指示すること
ができる。1ビツト・フィールド109は、構造体10
6によって定義される資源が、ソース・コード41中で
大域的に認識できるか否かを指示する。1ビツト・フィ
ールド110は、あるアドレスが間接アドレスであるか
直接アドレスであるかを指示する。1ビツト・フィール
ド111は、資源がレジスタ・タイプか、動的変数かを
指示する。18ビツト・フィールド112は未使用であ
る。
語101には、例えば、実際のアドレスまたはインデク
スであるポインタが含まれている。このポインタは資源
の名前が入っているメモリ・ロケーションを指示する。
この名前は、ソース・コード41中でのこの資源の指示
のし方を示す。語102には、メモリ内で資源が記憶さ
れているロケーションを指示するポインタが含まれてい
る。語103は資源のタイプについての情報が記憶され
ているロケーションを示す。語104には、C0BOL
構造に用いられる事後間接バイト・オフセットが含まれ
ている。
第3A図では、デバッガ45は、常に、構造体106に
よって定義される資源が同じロケーションで見つかるも
のと期待している。既述のように、これは、コンパイラ
42が最適化コンパイラでない場合に限って成立するこ
とである。
第3B図は、本発明の望ましい実施例に従って修正され
た構造体106を示している。語101−104は第3
A図と同じである。語100には、1ビツトのフィール
ド213と214が付加されている。フィーiv ト2
13 ハ、フィールド214がデバッガ45Vcよりも
つと好都合にアクセスできる位置に置かれるようにする
ための詰め物である。構造体106によって定義された
資源に関連するレンジ表がない場合にはフィールド21
4はリセットされる。構造体106によって定義された
資源に関連するレンジ表があれば、フィールド214が
セットされる。
さらに、第3B図には@205が付加されている。
フィールド214がセットされている場合には、飴20
5にはレンジ表へのインデクスが含まれろ。このインデ
クスは、構造体106によって定義される資源に関する
レンジの最初のものを指示している。
第1図には、本発明の望ましい実施例によるレンジ表が
示されている。デバッグ・シンボル表からの、ユーザ資
源iおよびjに関するポインタ311が、レンジ表内の
レンジを指示する。列312には、ユーザ資源iおよび
jに関するレンジの下戴が含まれている。列313には
、ユーザ資源iおよびjに関するレンジの上限が含まれ
ている。列314には、ユーザ資源iおよびjのロケー
ションが含まれている。列315には、各し゛ンジに関
する情報を示すフラグが含まれている。
例えば、ルンジ301〜303は、ユーザ責@@i”に
関する情報を提供する。プログラム・ロケーション4か
らプログラム・ロケーション100までの間は、ユーザ
資源iはレジスタ資源としてレジスタ5に記憶されてい
る。プログラム・ロケーション120からプログラム・
ロケーション136までの間では、ユーザ資源iは50
0を値とする定数として記憶されている。プログラム・
ロケーション200からプログラム・ロケーション20
4までの間では、ユーザ資源iはレジスタ資源としてレ
ジスタ31° に記憶されている。これがユーザ資源i
に関する最後のレンジである。レンジ表中にないプログ
ラム・ロケーションにおいては、ユーザ資源iの値は利
用できない。
同様に、レンジ304およびレンジ305は、ユーザ資
源“j”に関する情報を提供するものである。
プログラム・ロケーション8からプログラム・ロケーシ
ョン2Cまでの間は、ユーザ資源jはレジスタ資源とし
てレジスタ6に記憶されている。プログラム・ロケーシ
ョン100からプログラム・ロケーション200までの
間では、ユーザ資源jはメモリ・スタック中に、スタッ
ク上のロケーション   m−80に記憶されている。
これがユーザ資源jに関する最後のレンジである。レン
ジ表中にないプログラム・ロケーションではこの資源に
関する値は利用できない。
従って、データ構造体106がユーザ資源iについて記
述しているなら、そのフィールド214がセットされ、
語205にはレンジ301を指示するインデXクスが含
まれる。データ構造体106がユーザ資源jについて記
述しているなら、そのフィールド214はセットされ、
語205にはレンジ304を示すインデクスが含まれる
。未使用のフィールド112は16ビツトと短かくなっ
ている。
以下には、コード・オプテイマイザ53が被生成コード
52を最適化する際、どのようにしてレンジを計算して
いるかについて説明する。第4図に、コード・ジェネレ
ータ51が作り出した被生成コードの例が示されている
。第4図のコードには、3つのユーザ資源;ユーザ資源
x、 y、z、が含まれている。この論述の目的は、コ
ード・オプテイマイザ53が被生成コード52の最適化
を行なう際、これらのユーザ資源に関するレンジの計算
をどのようにして行なうのかについて明らかにすること
Kある。
第5図はコード・オプテイマイザによって、レジスタ使
用促進パス(register promotion 
pass )が行なわれた後の、第4図の被生成コード
52を示すものである。このコードは、4つの基本ブロ
ック501〜504に分割される。基本ブロックは、単
一の入口点と単一の出口点を有する直線的コード・シー
ケンスである。
レジスタ使用促進バスを行なっている間に、コード・オ
プテイマイザは被生成コード52で用いられている各レ
ジスタまたはメモリ・ロケーション毎に、ウェブ(we
b)  を計算する。ウェブとは、特定の資源にアクセ
スする1組の命令である。資源が特定の値を持つものと
定義されたときくウェブが開始される。その後、この資
源を利用する命令であって、この資源が新しい値を持つ
と定義されるまでのものは皆、このウェブに含まれる。
単一の資源について2つ以上のウェブが構成されること
がある。資源を定義し利用する一群の命令力入この資源
を定義し利用する他の一群の命令から完全に切シ離され
ている場合に、これが起る。
資源がメモリ・ロケーションではなくレジスタに記憶さ
れるときには、コードがよシ速く走行するので、このバ
スにおいてはコード・オプテイマイザは、レジス゛り資
源を使うように変更できるメモリ資源を探す。第5図と
第4図を詳しく比較すると明らかになるように、ユーザ
資源X、y、および2がそれぞれレジスタr9、rlO
,およびrllに「昇格」させられる。第5図から分る
ように、ユーザ資源Xに対する各記憶動作は、Vジスタ
r9に対するコピーに変更され、ユーザ資源yに対する
各記憶動作はレジスタrlOに対するコピーに変更され
、資源2に対する各記憶動作はレジスタrllに対する
コピーに変更される。
第5図のコードに関して生成されるワエプが下記の表1
に示されている: 表    1 ウェブ番号   命 令  資 源  2−f資源ポイ
ンタ webl    1.2     rl     Nu
l1web2   2.6.15   r9     
xweb3   3.4     r2    Nul
lWeb4   4.7     rlo     z
web5   6.8     r3     Nul
1web6   7.8     r4    Nul
1web7   8,12、   r5    Nul
116.17 web8   10.12    rll     y
web9   15.16    r3    Nul
lweblo   16      r6    Nu
llwebll   17.19    r9    
 x本発明の目的は、どのウェブがユーザ資源に関連し
ているかを常に掌握しておくことにある。この情報は資
源衣54内の各資源衣エントリにフィールドの形で記憶
されている。資源衣54の全ての資源について、それに
関連したユーザ資源があれば、ポインタがデバッグ・シ
ンボル表55内の  −そのユーザ資源に関するエント
リを指示する。資源衣エントリに関連したユーザ資源が
なければ、ポインタはナル・ポインタになる。表1では
、各ウェブに対するこのポインタは、′ユーザ資源ポイ
ンタ”と表示された列に示されている。
第5A図には、資源衣54の一部が示されている。ユー
ザ資源Xに関するエントリ510にはデバッグ・シンボ
ル表55中のユーザ資源Xに関するエントリな指示する
ポインタ510aが含まれている。ユーザ資源yに関す
るエンドIJ 511にはデバッグ・シンボル表55中
のユーザ資源yに関するエントリを指示するポインタ5
11aが含まれている。ユーザ資源2に関するエントリ
512にはデバッグ・シンボル表55中のユーザ資源2
に関するエントリを指示するポインタ512aが含まれ
ている。
第5B図にはレジスタ使用促進パス後における資源衣5
4が示されている。資源光54中のエンド!J 510
.511および512は前と同じである。資源衣54に
対して新しいエントリ520.521および522が追
加されている。レジスタr9に関するエントリ520に
はデバッグ・シンボル表55中のユーザ資源Xに関する
エントリを指示するポインタ510 aが含まれている
。レジスタrllに関するエンl”) 521 Kはデ
バッグ争シンボル表55中のユーザ資源yに関するエン
トリを指示するポインタ511aが含まれている。レジ
スタrlOに関するエントリ522にはデバッグ・シン
ボル表55中のユーザ資源2に関するエントリを指示す
るポインタ512aが含まれている。
さらに、レジスタ使用促進パスの間、コード・オプテイ
マイザ53は、各基本ブロックの終了時点で生きている
1組のウェブを算出する。特定の基本ブロックの終了時
点で生きているウェブと)Lウェブに関連した資源の現
在値が、その特定の基本ブロックに引き続き実行される
他の基本ブロックによって必要とされるということを意
味している。第5図のコードに関し、下記の表2に、ブ
ロック501〜504の終了時点でとのウェブが生きて
いるかを示す。
表     2 基本ブロック      活性ウェブ ブロック501    ウェブ2.ウェブ7     
   ′ブロック502     ウェブ7 ブロツク503    ウェブ7、ウェブxq   ′
ブロック504    ウェブ10 コード・オプテイマイザ53は、ウェブ間の干渉を判定
するため、もう1つのパスを行なう。パ −スの結果は
第6図に示され【いる。第6図では、各資源はそれに対
応している表1中のウェブに置  “を各命令毎に算出
する。各命令毎の11w5は、その命令の実行時におい
て、現在性きているウェブの集合である。各命令毎のl
1w5の算出は次のように行なう。コード・オプテイマ
イザ53が、ブロック501〜504のそれぞれについ
て、逆の順序で命令列を走査する。各ブロックにおける
最後の命令についてのl 1wsは、表2で与えられる
活性ウェブの集合である。各ブロックにおける逆の順序
による命令列の走査を行なっている間に、コード・オプ
テイマイザ53が現在のl 1wsにないウェブに遭遇
するとコード・オプテイマイザ53は11w5 にその
ウェブを追加する。コード・オプテイマイザ53が、あ
るウェブに対する定義(つまりこのウェブに対応する資
源への値のストア)に出くわすと、そのウェブはl l
 w sから除去される。
各命令の処理後に存在するl1w5が、第6図に示され
ている。 。
このバスを行った間に導き出される情報から、ウェブ間
の干渉、すなわち、とのウェブが、他のウェブが生きて
いる特注きているかの判定が行なわれる。下記の表3に
は、第6図のコードについてのウェブ間の干渉が示され
ている。
表     3 ウェブ  干渉ウェブ web1 web2  web3、web 41web 5%we
b 6、web7web3  web2 web 4  web2%web5 web 5  web 2.web 4web6  w
eb2.web5 web 7  web 2. web 9、weblO
eb8 web9  web7 weblOweb7 webll コード・オプテイマイザ53が干渉グラフを作成するの
に利用する同じ情報が、レンジに関する情報の算出にも
利用できる。レンジの算出は次のように行なわれる。
表Iにおいて、成るウェブには、デバッグ・シンボル表
55中のマーザ資源のエンドIJ Ic対するポインタ
がある。これらのウェブに関する情報は、これらに関連
するユーザ資源のレンジを算出するのに用いられる。こ
れらのレンジの算出に当って、高水位マークと低水位マ
ークが利用される。高水位マークはレンジの上端の前に
ある命令である。
低水位マークはレンジの下端の前にある命令である。
ブロックの末端の11w5中にウェブがまだ残っている
場合、この最後の命令はそのウェブに関連したユーザ資
源に対する高水位マークである。また、各ブロックにお
ける逆順序の命令列走査をしている間に、コード・オプ
テイマイザ53が11w5へのウェブの追加を行なうコ
ード列中の位置において、ここにある命令もやはシその
ウェブに関連したユーザ資源に対する高水位マークと考
えられる。同様に、11w5からウェブが除去される時
、そこの命令はそのウェブに関連したユーザ資源に対す
る低水位マークと考えられる。また、ブロックの上端は
任意のユーザ資源に対する低水位マークと考えてもよい
。(各ブロック内で命令列を走査することに加えて)ブ
ロック列自体を逆順序で走査すれば、上述のシステムを
改良することが可能である。この場合、次に走査すべき
ブロックの末尾における11w5中に伺らかのウェブが
存在するなら、その直前に走査したブロックの上端に低
水位マークを置く必要はない。
第6図および第7図を利用して、上述のレンジを決める
方法が第6図に示すコードに対しいかに行なわれるかに
ついて見ることができる。命令19から始めると、11
w5にはwebllが含まれている。
表1から分るように、webllにはユーザ資源xへの
ユーザ資源ポインタがある。従って、命令19はユーザ
資源Xについての高水位マークである。
命令17においてwebll  が定義される。よって
、webllは11w5から除去される。従って、命令
17はユーザ資源Xについての低水位マークである。
ユーザ資源Xについてのレンジ701の上限と下限は与
えられたこれらの高水位マークと低水位マークから求め
ることができる。
命令15においてはweb 2が用いられるが、現在1
1w5Kは含まれていない。従って、それは。
web2の最後の使用である。表1によれば、web2
にはユーザ資源Xへのユーザ資源ポインタがある。
従って、命令15はユーザ資源Xについての高水位マー
クである。命令14はブロック503の最初に位置して
いる。web2はブロック502の最後の1 Iwsに
含まれていない。従って、命令14はユーザ資源〜につ
いての低水位マークである。ユーザ資源Xについてのレ
ンジ702はこれらの高水位マークと低水位マークから
決めることができる。
命令12では、web 8が用いられているがこれは現
在の11w5には含まれていない。従ってそれはweb
 8の最後゛の使用である。表1によれば。
web 8にはユーザ資源yへのユーザ資源ポインタが
ある。従って、命令12はユーザ資源yについての高水
位マークである。命令10において、web8が定義さ
れる。従って、命令10はユーザ資源yについての低水
位マークである。ユーザ資源yについてのレンジ703
は、これらの高水位マークと低水位マークから決めるこ
とができる。
命令9はブロック501の末端である。web2はブロ
ック501の末端にある命令9の11w5に含まれてい
る。表1によれば、web2にはユーザ資源Xへのユー
ザ資源ポインタがある。従って、命令9はユーザ資源X
についての高水位マークであム命令7においてweb4
が用いられているがこのウェブはl Iwsには含まれ
ていない。従りてそれはweb4の最後の使用である。
表1によれば、web4には、ユーザ資源2への資源ポ
インタがある。
従って、命命7はユーザ資源2についての高水位マーク
である。命令4において、web 4が定義される。従
って、命令4はユーザ資源2についての低水位マークで
ある。ユーザ資源2についてのレンジ704はこれら高
水位マークと低水位マークから決めることができる。
命令2においてはweb2が定義される。従り毛命令2
はユーザ資源Xについての低水位マークである。ユーザ
賃源Xについてのレンジ705は、これら高水位マーク
と低水位マークから決めることができる。この段階で、
第7A図に示すようなレンジ表を作成することができる
第7A図のレンジ表において、マーザ資源X。
y、zの各々についてのデバッグ・シンボル表からのポ
インタ131は、レンジ表内のレンジを指示する。列1
32にはユーザ資源X%yおよび2についての各レンジ
の下限が含まれている。列133には、ユーザ資源X%
yおよび2に対する各レンジの上限が含まれている。列
134には、それぞれのレンジに対応するユーザ資源に
対するロケーションが含まれている。列135は、所与
のレンジ内に居る間に、ユーザ資源が格納されていると
ころの資源のタイプを示している。レンジについての情
報はそれぞれのウェブに関連付けられている。例えば、
この関連付けは、レジスタの割りっけを行なうコード・
オプテイマイザ53の一部(レジスタ割付はルーチンと
呼ばれる)によって構築され利用されるデータ構造体に
対して、レンジのリストを追加することによって行なう
ことができる。
割付はルーチンによって構築されたデータ構造は干渉グ
ラフと呼ばれる。各ウェブ毎に別個のエントリが備わっ
ている。各ウェブについてのレンジのりストが、干渉グ
ラフ中のウェブのエントリに加えられる。
コード・オプテイマイザ53がこのコードにおいて別の
バスを行なうと、それによってレンジの調整を行なう必
要が生じる可能性がある。例えば、コード・オプテイマ
イザ53がコピー消去(copyeliminatro
n )を行なうかもしれない。コード・オプテイマイザ
53が、2つのウェブが干渉していないが、共通のコピ
ー命令を共用していると判断したときには、コピー消去
を行なってよい。これが行なわれると、コピーが消去さ
れ、2つのウェブは、単一の複合ウェブになる。
ユーザ資源に関連したウェブが除去されると、除去され
たウェブについてのレンジのリストを複合ウェブに追加
しなければならない。第8図にはコード・オプテイマイ
ザ53がコピー消去を行った後の第7図のコードが示さ
れている。下記の表4に、コピー消去の結果必要になっ
た表1に対する修正を示す。
表     4 vrebl:web2 web2:web9 web3:web4 web4:web6 web5     6,8       r3    
  Nul1web6     7,8t3,4s4,
7   r4+r2trlOzweb7:webll web8:web7 we b 9      15 e 16 s 2 +
 6 e   r 3 + r 9 + r 1   
x15.1.2 weblo     16,19      r6  
    Nullwebll      1’L19,
8,12w   r9tr5.rll  x、y16.
17,10.12 コード・オプテイマイザ53はまた定数追出しくcon
stant 5pill)を行なうこともできる。例え
ばあるウェブが定数変数(constant vari
able) L。
か含んでいなければ、コード・オプテイマイザ53はレ
ジスタ内にその定数をずっととっておくよりも、それを
使用することになる毎にレジスタに定数を再ロードし、
これによってレジスタを解放する方が有利であると判定
するかもしれない。この場合、以前はレジスタ・レンジ
・タイプであったーレンジが、定数レンジ・タイプに変
更される。ユーザ資源のロケーションは変更され、その
定数と等しい直接値が入れられる。第9図には、コード
・オプテイマイザ53による定数追出し後に、第8図の
コードがいかに修正されているかが示されている。第9
A図には、第7A図に示すレンジ表が定数追出しの結果
、いかに修正されるかが示されている。第9図を見れば
、レジスタから追出された定数が命令中に直接値として
埋込まれそいることがわかるだろう(命令6.8等)。
この段階において、コード・オプテイマイザ53はウェ
ブに対してレジスタの割付けを行なう。第10図には、
レジスタ割付は後における第9図のコードが示されてい
る。ウェブに対するレジスタの割付けがすむと、レンジ
表にそれらのレジスタに関する情報を書込むことができ
る。第10A図にレジスタ割付は後における第9A図の
レンジ表を示す。
レジスタの割付は時、十分なレジスタがなければ、コー
ド・オプテイマイザ53がウェブの一部をメモリへ追出
す。追出されたウェブは、定義後。
メモリに記憶され、その使用前に再ロードされる。
これが行なわれる際、レンジの追出しを行なうためにレ
ンジ表のエントリが変更される。低水位マークと高水位
マークは同じままだが、ロケーシ(ンは追出し先のメモ
リ・ロケーションに変更され。
またレンジのタイプは追出しに変更される。
レンジは、別のパスを行なうことによって、しばしば拡
張されることがある。高水位マークは、基本ブロックの
末端またはユーザ資源が入っているレジスタの内容を一
部する可能性のある命令のどちらが先に起るところに移
すことができる。
これを行なうためには、各ウェブ毎に基本ブロックの最
後の命令を上述の拡張された部分の命令として掌握しな
がら、コードを再び逆頭序で走査する。1組のフラグを
用いることによって、基本ブロックの現在の命令と最後
の命令との間で定義されているレジスタを常に掌握し続
ける。レジスタの定義が見つかると、適切なレジスタに
対応するフラグがセットされ、この定義を行なりている
命令へのポインタがウェブに付加される。この定義を行
なっている命令はそのウェブに対する新しい拡張命令に
なる。
呼出しを行なう命令が見つかると、そのcoil命令は
、全てのウェブにおいて拡張命令になる。
これは、呼出しによってレジスタ中の値が一掃されるこ
とがあるからである。
ウェブを使用していることが見つかったとき、そのウェ
ブに割り付けられたレジスタが、最後の命令以前に定義
されていた場合には、その命令がそのウェブに対する拡
張命令になる。
この走査が終了した時、高水位マークが拡張命令より低
位のレンジを有するウェブについては、その拡張命令が
新しい高水位マークになシ、そのレンジはこれに従って
調整される。
最後に、コード・オプテイマイザ内の付加機能ユニット
がコードに対して作用し、既存のレンジとオーバーラツ
プするレンジを生成してよい。この場合、優先順位が最
下位のレンジを短縮しなければならない。例えば、第1
1図では、コード・オプテイマイザ53内のスケジュー
ラが、命令11と命令10の動作を逆にしている。これ
によって。
レンジ703とオーバーラツプするスケジューラ・レン
ジ119が生成されている。先に生成されたのはレンジ
703であるので、これの優先順位が最下位になる。従
って、レンジ703は短縮された。第11A図は第10
A図に示されたレンジ表がいかに修正されてレンジ70
3の短縮を反映するようになったかを示すものである。
〔発明の効果〕
以上説明したように、本発明によれば最適化を行なった
コードについてもソース・コード・レベルのシンボリッ
ク・デバッグが可能になるので、ソフトウェアの生産性
の向上に大いに有効である。
【図面の簡単な説明】
第1図は本発明の一実施例におけるレンジ表を示す図、
第2A図および第2B図は本発明を適用シ得るコンピュ
ータ・システムを説明する図、第3A図および第3B図
は夫々従来技術および本発明の一実施例において使用さ
れるデバッグ・シンボル表中の構造体を示す図、第4図
はコード・ジェネレータの出力の例を示す図、第5図は
レジスタ使用促進バス後の第4図のコードを示す図、第
5A図は資源表の構成を説明する図、第5B図はレジス
タ使用促進バス後の資源表の構成を説明する図、第6図
はウェブ間干渉を調べるためのバス後の第5図のコード
を示す図、第7図は第6図に基いて算出したレンジを示
す図、第7A図は第7図に基いて作ることのできるレン
ジ表を示す図、第8図はコピー消去後の第7図のコード
を示す図、第9図は定数散布後の第8図のコードを示す
図、第9A図は定数散布の処理にともなって修正され順
序の変更を行なった後の第10図のコードを示す図、第
11A図は命令の順序の変更の処理にともなって修正さ
れた第10A図のレンジ表を示す図である。 41:ソース・コード 42:コンパイラ 43:オブジェクト・コード 44:コンピュータ 51:コード・ジェネレータ 52:被生成コード 53:コード・オプテイマイザ 54:資源表 55:デバッグ・シンボル表 100〜104,205 :語 106:構造体 107〜112,213,214 :フィールド301
〜305:レンジ 311:ポインタ。 出願人 ヒユーレット・パラカード・カンパニー代理人
 弁理士  長 谷 川  次  男r1      
    で1 struct     DNTT−VAR(ITS ITS ITS IG publ ic     1 ;−,1Q9indir
ect:   1;(7,110type; offset; 3日 struct     DNTT−VAR(ITS ITS ITS ITS ITS l1 public      1;−、:1Q9offse
t; −onge−index;  3B 1   Ioadi   300.r118  1ns
t i9  1oad   x、r6 IG  4 IG  5 FIG  6 11ws = empty 11ws  =  webl 11ws  = web2 11ws = web2.web3 11ws = web2.web4 11ws = web2.web4 11ws =、web2.web4.web511ws
 = web2.web5.web611ws = w
eb2.web7 11ws  =  web7 11ws  =  web8 11ws  = web8 11ws  = web7 11ws = web2.web7 11ws  = web2.web7 11ws = web7.web9 11ws  = web7 11ws  =  webll 11ws  =  web11 1  1oadi  300.webIFIG  8 IG  9 FIG  10

Claims (1)

    【特許請求の範囲】
  1. ソース・コード中で使用される資源の少なくとも一部に
    ついて、コンパイルされたコードの実行中に前記資源が
    実行のどの段階でどこに存在するかを示すレンジ情報を
    保持するデバッグ方式。
JP63289913A 1987-11-16 1988-11-16 デバック方式 Expired - Fee Related JP2810675B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/121,311 US4953084A (en) 1987-11-16 1987-11-16 Method and apparatus using variable ranges to support symbolic debugging of optimized code
US121,311 1987-11-16

Publications (2)

Publication Number Publication Date
JPH01166141A true JPH01166141A (ja) 1989-06-30
JP2810675B2 JP2810675B2 (ja) 1998-10-15

Family

ID=22395855

Family Applications (1)

Application Number Title Priority Date Filing Date
JP63289913A Expired - Fee Related JP2810675B2 (ja) 1987-11-16 1988-11-16 デバック方式

Country Status (5)

Country Link
US (1) US4953084A (ja)
EP (1) EP0317080B1 (ja)
JP (1) JP2810675B2 (ja)
CA (1) CA1293810C (ja)
DE (1) DE3853981T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06242943A (ja) * 1993-02-15 1994-09-02 Nec Corp ソースコードレベルデバッグ装置

Families Citing this family (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5193190A (en) * 1989-06-26 1993-03-09 International Business Machines Corporation Partitioning optimizations in an optimizing compiler
US5048018A (en) * 1989-06-29 1991-09-10 International Business Machines Corporation Debugging parallel programs by serialization
FR2649507B1 (fr) * 1989-07-07 1994-07-08 Bull Sa Procede d'observation de l'execution d'un programme charge dans un systeme informatique et dispositif pour la mise en oeuvre dudit procede
US5394544A (en) * 1989-08-07 1995-02-28 Ricoh Co., Ltd. Software system debugger with distinct interrupt vector maps for debugging and application programs
US5274820A (en) * 1989-08-14 1993-12-28 International Business Machines Corporation Method and system for eliminating operation codes from intermediate prolog instructions
JPH03150636A (ja) * 1989-11-08 1991-06-27 Matsushita Electric Ind Co Ltd コンパイル方法
US5428793A (en) * 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
JP2978189B2 (ja) * 1989-11-16 1999-11-15 シャープ株式会社 自動フローチャート作成装置
US5029170A (en) * 1989-11-30 1991-07-02 Hansen Robert G Assembly language programming potential error detection scheme which recognizes incorrect symbolic or literal address constructs
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information
JPH0816871B2 (ja) * 1990-12-07 1996-02-21 富士ゼロックス株式会社 プログラム翻訳装置およびプログラム翻訳方法
US5511218A (en) * 1991-02-13 1996-04-23 Hughes Aircraft Company Connectionist architecture for weapons assignment
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
US5339428A (en) * 1991-09-04 1994-08-16 Digital Equipment Corporation Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register
US5488727A (en) * 1991-09-30 1996-01-30 International Business Machines Corporation Methods to support multimethod function overloading with compile-time type checking
US5535318A (en) * 1992-04-30 1996-07-09 Ricoh Company, Ltd. Debugging system for a hierarchically structured page description language
AU4598593A (en) * 1992-06-05 1994-01-04 Convex Computer Corporation Computer program debugging in the presence of compiler synthesized variables
US5371747A (en) * 1992-06-05 1994-12-06 Convex Computer Corporation Debugger program which includes correlation of computer program source code with optimized object code
JP3205406B2 (ja) * 1992-11-10 2001-09-04 富士通株式会社 参照対象変数決定処理方法および翻訳処理システム
US5555419A (en) * 1993-01-06 1996-09-10 Digital Equipment Corporation Correlation system
JP2856663B2 (ja) * 1993-01-15 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション コンパイル・コードに可視境界を定義する最適化方法および装置
US5548761A (en) * 1993-03-09 1996-08-20 International Business Machines Corporation Compiler for target machine independent optimization of data movement, ownership transfer and device control
US6178547B1 (en) 1993-06-17 2001-01-23 Metaware Incorporated Method and apparatus for generating non-redundant symbolic debug information in computer programs
US5495561A (en) * 1993-06-21 1996-02-27 Taligent, Inc. Operating system with object-oriented printing interface
US5758160A (en) * 1993-06-28 1998-05-26 Object Technology Licensing Corporation Method and apparatus for building a software program using dependencies derived from software component interfaces
US5325533A (en) * 1993-06-28 1994-06-28 Taligent, Inc. Engineering system for modeling computer programs
US5519866A (en) * 1993-06-28 1996-05-21 Taligent, Inc. Method and apparatus of incrementally linking components of a modeled computer program
US5613063A (en) * 1994-07-01 1997-03-18 Digital Equipment Corporation Method and apparatus for checking validity of memory operations
US5694539A (en) * 1994-08-10 1997-12-02 Intrinsa Corporation Computer process resource modelling method and apparatus
US5537620A (en) * 1994-09-16 1996-07-16 International Business Machines Corporation Redundant load elimination on optimizing compilers
CA2153032A1 (en) * 1994-09-16 1996-03-17 William Martin Schell Method of and apparatus for efficiently debugging programs given limited system resources
US5696973A (en) * 1995-02-17 1997-12-09 International Business Machines Corporation Index-based method for supporting multimethod function overloading with compile-time type checking and run-time dispatch
JPH1021086A (ja) * 1996-06-28 1998-01-23 Matsushita Electric Ind Co Ltd プログラム変換装置とデバッグ装置
US5758061A (en) * 1995-12-15 1998-05-26 Plum; Thomas S. Computer software testing method and apparatus
US6091896A (en) * 1995-12-22 2000-07-18 Hewlett-Packard Company Debugging optimized code using data change points
US5860008A (en) * 1996-02-02 1999-01-12 Apple Computer, Inc. Method and apparatus for decompiling a compiled interpretive code
US5764989A (en) * 1996-02-29 1998-06-09 Supercede, Inc. Interactive software development system
US5848274A (en) * 1996-02-29 1998-12-08 Supercede, Inc. Incremental byte code compilation system
US6067413A (en) * 1996-06-13 2000-05-23 Instantations, Inc. Data representation for mixed-language program development
US6249881B1 (en) * 1997-07-01 2001-06-19 National Semiconductor Corporation Method for enabling and servicing critical interrupts while running an interrupt based debug monitor
US6016556A (en) * 1997-07-17 2000-01-18 Tektronix, Inc. System for identifying an acquisition sample corresponding to a source code statement
US6016557A (en) * 1997-09-25 2000-01-18 Lucent Technologies, Inc. Method and apparatus for nonintrusive passive processor monitor
US6263489B1 (en) * 1998-04-30 2001-07-17 Hewlett-Packard Company Method and apparatus for debugging of optimized code
US6434741B1 (en) 1998-04-30 2002-08-13 Hewlett-Packard Company Method and apparatus for debugging of optimized code using emulation
US6202175B1 (en) * 1998-08-05 2001-03-13 International Business Machines Corporation Debuggin client server programs from third party workstations
US6223307B1 (en) * 1998-08-05 2001-04-24 International Business Machines Corporation Debugging client server programs from third party workstations
US6256777B1 (en) * 1998-10-09 2001-07-03 Hewlett-Packard Company Method and apparatus for debugging of optimized machine code, using hidden breakpoints
US6108659A (en) * 1998-12-22 2000-08-22 Computer Associates Think, Inc. Method and apparatus for executing stored code objects in a database
CA2368472A1 (en) * 1999-06-03 2000-12-14 Algorithmics International Corp. Risk management system and method providing rule-based evolution of a portfolio of instruments
US20020100031A1 (en) * 2000-01-14 2002-07-25 Miguel Miranda System and method for optimizing source code
US6968543B2 (en) * 2000-03-10 2005-11-22 Fujitsu Limited Information processing apparatus
JP2002108756A (ja) * 2000-09-28 2002-04-12 Hitachi Ltd ユーザインタフェース統合方法
US7293264B2 (en) * 2003-09-17 2007-11-06 Nokia Corporation Method and a device for abstracting instruction sequences with tail merging
US9111033B2 (en) 2012-04-17 2015-08-18 International Business Machines Corporation Compiling source code for debugging with user preferred snapshot locations
US8910126B2 (en) 2012-04-18 2014-12-09 International Business Machines Corporation Compiling source code for debugging with variable value restoration based on debugging user activity
US8826240B1 (en) 2012-09-29 2014-09-02 Appurify, Inc. Application validation through object level hierarchy analysis
US9015832B1 (en) 2012-10-19 2015-04-21 Google Inc. Application auditing through object level code inspection
US9113358B1 (en) 2012-11-19 2015-08-18 Google Inc. Configurable network virtualization
US9268668B1 (en) 2012-12-20 2016-02-23 Google Inc. System for testing markup language applications
US9274935B1 (en) 2013-01-15 2016-03-01 Google Inc. Application testing system with application programming interface
US9122791B2 (en) * 2013-03-05 2015-09-01 International Business Machines Corporation Identifying a storage location for a storage address requested during debugging
US9021443B1 (en) 2013-04-12 2015-04-28 Google Inc. Test automation API for host devices
US9268670B1 (en) 2013-08-08 2016-02-23 Google Inc. System for module selection in software application testing including generating a test executable based on an availability of root access
US9367415B1 (en) 2014-01-20 2016-06-14 Google Inc. System for testing markup language applications on a device
US9491229B1 (en) 2014-01-24 2016-11-08 Google Inc. Application experience sharing system
US9170922B1 (en) 2014-01-27 2015-10-27 Google Inc. Remote application debugging
US9864655B2 (en) 2015-10-30 2018-01-09 Google Llc Methods and apparatus for mobile computing device security in testing facilities
US10929216B2 (en) * 2019-01-29 2021-02-23 EMC IP Holding Company LLC Application crash analysis techniques when memory dump and debug symbols are not co-located

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4462077A (en) * 1982-06-24 1984-07-24 Bell Telephone Laboratories, Incorporated Trace facility for use in multiprocessing environment
US4567574A (en) * 1983-03-14 1986-01-28 International Business Machines Corporation Optimizing cobol object code instruction path length with respect to perform statements
US4589068A (en) * 1983-10-03 1986-05-13 Digital Equipment Corporation Segmented debugger
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
DE3678893D1 (de) * 1985-10-03 1991-05-29 Mitsubishi Electric Corp Rechnerprogrammdebugsystem.
US4782444A (en) * 1985-12-17 1988-11-01 International Business Machine Corporation Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering
US4819234A (en) * 1987-05-01 1989-04-04 Prime Computer, Inc. Operating system debugger

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
COMPILERS PRICIPLES TECHNIQUES AND TOOLS=1986 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06242943A (ja) * 1993-02-15 1994-09-02 Nec Corp ソースコードレベルデバッグ装置

Also Published As

Publication number Publication date
DE3853981D1 (de) 1995-07-20
US4953084A (en) 1990-08-28
EP0317080B1 (en) 1995-06-14
DE3853981T2 (de) 1995-10-12
EP0317080A2 (en) 1989-05-24
JP2810675B2 (ja) 1998-10-15
CA1293810C (en) 1991-12-31
EP0317080A3 (en) 1991-01-16

Similar Documents

Publication Publication Date Title
JPH01166141A (ja) デバッグ情報提供方法
US8832672B2 (en) Ensuring register availability for dynamic binary optimization
US5325531A (en) Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5313387A (en) Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
US5201050A (en) Line-skip compiler for source-code development system
US5193191A (en) Incremental linking in source-code development system
US5182806A (en) Incremental compiler for source-code development system
US5170465A (en) Incremental-scanning compiler for source-code development system
KR100518584B1 (ko) 공유 라이브러리 시스템 및 상기 시스템 구축 방법
JP3553834B2 (ja) コンピュータアーキテクチャエミュレーションシステム
US9495136B2 (en) Using aliasing information for dynamic binary optimization
US5850554A (en) Compiler tool set for efficiently generating and easily managing multiple program versions of different types
US5764989A (en) Interactive software development system
JP5851396B2 (ja) 処理方法
WO1999066396A1 (en) A method of implementing parameterized types to be compatible with existing unparameterized libraries
JPH03500463A (ja) デジタルデータ処理システム用総称コード共用化装置及び方法
US7480902B2 (en) Unwind information for optimized programs
US5301327A (en) Virtual memory management for source-code development system
Felgentreff et al. How to build a high-performance vm for squeak/smalltalk in your spare time: An experience report of using the rpython toolchain
US10459702B2 (en) Flow control for language-embedded programming in general purpose computing on graphics processing units
US10496433B2 (en) Modification of context saving functions
AU638999B2 (en) Incremental compiler for source-code development system
US6944637B2 (en) Reduced size objects headers
US6275985B1 (en) Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
JP2012103923A (ja) コンパイラ装置、コンパイル方法及びコンパイラプログラム

Legal Events

Date Code Title Description
R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080731

Year of fee payment: 10

LAPS Cancellation because of no payment of annual fees