JPH0338735A - 並列プログラム中のエラーを探す方法及び支援システム - Google Patents

並列プログラム中のエラーを探す方法及び支援システム

Info

Publication number
JPH0338735A
JPH0338735A JP2170388A JP17038890A JPH0338735A JP H0338735 A JPH0338735 A JP H0338735A JP 2170388 A JP2170388 A JP 2170388A JP 17038890 A JP17038890 A JP 17038890A JP H0338735 A JPH0338735 A JP H0338735A
Authority
JP
Japan
Prior art keywords
program
parallel
subprogram
sections
serialization
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
JP2170388A
Other languages
English (en)
Other versions
JPH0432416B2 (ja
Inventor
David Bernstein
デヴイド・ベーンステイン
Kimming So
キムイング・ソー
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH0338735A publication Critical patent/JPH0338735A/ja
Publication of JPH0432416B2 publication Critical patent/JPH0432416B2/ja
Granted 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/3604Software analysis for verifying properties of programs

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)
  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

【発明の詳細な説明】 A、産業上の利用分野 本発明は計算機システムの分野に関し、詳細には、コン
ピュータ・プログラムのデバッグに関するものである。
具体的には、選択的直列化による並列プログラムのデバ
ッグのための方法を記載する。
B、従来技術及びその課題 共用メモリ・マルチプロセッサは、潜在的に強力な計算
力を得るための安価で効率的な方法を提供する。この言
1算力を利用するためには、ソース・プログラムは並列
言語(またはマルチプロセッサ用の直列言語の拡張)で
書かなければならない。
最近、共用メモリ・マルチプロセッサ上での並列プログ
ラムの開発をサポートするため、フメートランやC言語
等の直列言語に対する多くの並列拡張が設計され、実施
されてきた。
プログラムの一般開発、特に並列プログラムの開発にお
ける1つの大きな問題は、プログラム中のエラーを見つ
け訂正すること、すなわちデバッグと呼ばれるステップ
である。直列プログラムをデバッグするための方法は周
知であるが、これらの方法は並列プログラムには容易に
適用できない。
プログラムをデバッグするための幾つかの一般的方式、
すなわち区切り点や事象追跡のどれも、並列プログラム
には容易に適用できない。
並列プログラムは、幾つかの理由で直列プログラムより
もデバッグを行なうのが難しい。第1に、実行中の処理
を制御し、これらの処理が停止する区切り点における情
報を表示するのが難しい。第2に、実行追跡情報または
状況情報を印刷するというオーバヘッドが、並列実行の
順序を変え、エラーをおおい隠し、さらには新しいエラ
ーを生じる可能性さえある。第3に、通常のデバッグ用
ツールは、プログラムの実行中に大量の情報を表示する
。並列システムをデバッグするときに表示される出力デ
ータの量は、直列システムをデバッグするときに必要な
量よりも大きくなることさえある。
さらに、エラーが、「不完全な」プログラム・5− ステートメントが実行された後でしか現れないことがよ
くある。ユーザ・プログラムにおける並列作業が並列シ
ステムにおける複数のプログラムにわたってどのように
分散されているかに関する追加の知識がないと、並列シ
ステムのデバ・ソゲは、直列システムよりも1桁難しく
なる。
本発明では、前処理プログラムまたは並列言語の並列化
コンパイラ内で走行する並列デバッグ機能をもたらす方
法を記載する。この方法は、長ったらしい追跡や区切り
点の設定を必要とせずにユーザが並列プログラムのバグ
を探し出すのを助け、したがって上記の問題を回避する
本発明の方法は、並列プログラミングに関する以下の知
見に基づくものである。
1、使用可能な並列プログラミング言語の大部分は、ユ
ーザが並列作業及び同期化を指定できるように小さな1
組の並列構造によって拡大された通常の直列言語である
。これらの言語では、並列構造は、それらがユーザ・プ
ログラムのどこで使用されていても、識別しラベルをつ
けることができる。
28通常、並列プログラムは、計算が直列セクションと
並列セクションに分離されるように編成されている。並
列セクションとは、幾つかの処理によって実行可能なプ
ログラム・セグメントである。並列Doループ及びフォ
ーク0構造は最も一般的な並列セクションである。
3、多くの並列化されたプログラムは依然として並列シ
ステムで1つの処理によって順次実行することができる
。並列プログラムを順次実行したときの結果と並列に実
行したときの結果は、同じであるか、または実質的に同
じであるほど十分に近いものである。
直列セ々ノヨンは、1台のプロセッサによってのみ実行
可能な並列セクションと見なすことができるので、プロ
グラムの任意の並列セクションを直列セクションに変更
し、依然として同様な結果を得ることが可能である。並
列実行でプログラム・エラーが発生して、誤った結果を
生じる場合、プログラムの順次実行の結果を使って、対
応する並列実行を較正することができる。
C3課題を解決するための手段 本発明は、コンパイラの直列化のためのコードの並列セ
クションの選択、及び最終的には単一プロセッサの実行
において、コンピュータ・プログラマを支援する働きを
する。−度実行されると、プログラマは単一プロセッサ
及びマルチプロセッサ環境でのコードの並列セクション
の実行の結果を準備することができる。各環境での実行
結果が異なると並列プログラミング・エラーを示し、プ
ログラマがそれを訂正することができる。
本発明の動作は以下のような一連のステップで行なわれ
る。最初に、ソース・コード中の並列構造に関する情報
を集める。この情報を使ってプログラム構造を確立し、
並列構造が含まれるコード・セクションを探し出す。次
にプログラム構造及びプログラム内の並列構造の位置が
表示される。この表示を見て、プログラマは直列化すべ
き並列構造を選択する。最後に、プログラマが入力した
直列化命令に従って、プログラムの目的コードが生成さ
れる。
直列化デバッグ機能は、プログラム中のエラーを探し出
すため、単一プロセッサで実行される並列プログラムの
並列セクションの選択において、コンピュータ・プログ
ラマを支援する働きをする。
ソース・プログラム中の並列構造に関する情報を集める
。この情報を使ってプログラム構造を確立し、並列構造
が含まれるプログラムのセクションを探し出す。次にプ
ログラム構造及びプログラム内の並列構造の位置が木グ
ラフとして表示される。
この表示を見(、プログラマは直列化すべき並列セクシ
ョンを選択する。次にプログラマが入力した直列化命令
に従って、プログラムの目的コードが生成される。−度
実行されると、プログラマは単一プロセッサ及びマルチ
プロセッサ環境でのプログラムの並列セクションの実行
の結果を比較することかできる。各環境での実行結果が
異なると、並列プログラミング・エラーを示し、プログ
ラマがそれを訂正することができる。直列化すべきプロ
グラムの異なるセクションを選択する度に、プ一 ログラマはこれらのステップを繰り返すことができる。
このようにして、プログラムのエラー・セクションの位
置を限定(局在化)シ、識別することができる。
D、実施例            、以下に、本発明
の説明で使用する用語の定義を示す。
並列プログラム:複数の処理によって実行される作業断
片を含むプログラム。個々の部分での直列実行または並
列実行を指定するようにコーディングされている。
処理:並列プログラムの並列実行に関与する論理実行ス
トリーム。並列セクションで協働的に実行される処理は
、通常それらの間で作業を分担する。
一般に、1つの処理のみを使って並列プログラムを実行
し、したがって実質的にプログラムを逐次的に実行する
ことが可能である。簡略化された形では、実行中の処理
はマルチプロセッサ・システムにおけるプロセッサ(ま
たはCPU)と1対1の対応をもつものと考えられる。
10 直列セクション:1つの処理によってのみ実行されるよ
うにコーディングされた並列プログラムのセグメント。
その実行中、他の処理は遊休状態にあるか、または作業
の別の断片を実行している。
並列セクション(parsect)  :複数の処理に
よって同時に実行されるようにコーディングされた並列
プログラムのセグメント(たとえば、並列D○ループで
は、弄なる処理がDoループのそれぞれ異なる繰返しで
働くことができる)。
並列セクションの直列化:並列言語の前処理プログラム
/コンパイラが、並列実行すべく指定された並列プログ
ラムのセクション(並列セクション)を、直列実行に適
した形式に変換できるようにする技術。
サブプログラム:プログラムのプログラム単位(たとえ
ば、サブルーチン、機能、メイン等)。
呼出しグラフ:プログラム中の各サブプログラムのため
のノードがあるグラフ。サブプログラムAの本体内から
サブプログラムBが呼び出される場合のみ、呼出しグラ
フ内に、ノードAからノードBへの有向辺がある。
計算モデル:並列プログラミング・システム内の並列プ
ログラムの処理をユーザがどんなものだと思うか。
前処理プログラム:並列プログラムを、並列実行のため
の段取りを備えた直列言語で書かれたプログラムに変換
することができるソフトウェア・ツール。
並列構造ニブログラムの並列実行に関する特定の情報(
たとえば、並列部分の始めと終り、または直列部分の始
めと終り)を保持する並列言語の構造。一般に、並列構
造はプログラムの逐次実行にとっては重要でない。
本発明による並列プログラムのデバッグ・セツションは
、以下のステップを含む。
1、並列構造を有するプログラムを、プログラム全体が
直列化されるように、1台の5プロセツサ上でコンパイ
ルし実行する。正しい結果が得られるまで、通常の方法
を使ってプログラムをデバッグする。
2、プログラムを所望の数のプロセッサ上で再コンパイ
ルし、実行する。誤った結果が得られる。
3、正しい結果と誤った結果の違いに基づいて、直列化
すべきコードの並列セクションを指定する。
コードのどの部分を直列化すべきかを決定する方法につ
いては以下に考察する。
4、プログラムを所望の数のプロセッサ上で再コンパイ
ルし実行する。ただし、ステップ3で指定されたコード
部分が直列化される。
5、プログラム・エラーが、直列化されたコードの特定
セクションに絞られるまで、ステップ3及びステップ4
を繰り返す。
6、識別された部分の元のソース・コードに注意を戻す
。このコードをこれらのセクションにエラーがあるかど
うか探索する。
ステップ3ないし6のシーケンスをサイクルと呼び、1
つまたは複数のプログラム・エラーを探し出すため、必
要な回数だけ繰り返すことができる。
3 第1図は、通常のマルチプロセッサ・コンピュータ・シ
ステムのブロック・ダイヤグラムである。
N台のプロセッサ101.102.103のグループが
、並列プログラムの異なるセクションを同時に実行する
ことができる。各プロセッサは、共用メモリ・システム
104、及び周辺装置との連絡のためにプロセッサが使
用する共用入出力バスエ05にアクセスできる。図形表
示ジェネレータ107によって駆動される図形表示装置
109を介して、情報がユーザに表示される。データは
印刷装置108を介しても得られる。ボインティング・
システム106(マウス等)を使うと、ユーザが図形表
示装置109を介してコンピュータ・システムと対話す
ることができる。ユーザはまたキーボード110を介し
てコンピュータ・システムと対話することもできる。
通常の並列プログラミング・システムの全体的構造を第
2A図に示す。この構造はフロント・エンド1005及
びバック・エンド3005を含む。
フロント・エンドでは、プログラムが走査され、4 変数名やステートメント・タイプ等の情報が集められる
。−船釣なフロント・エンド1005のアクティビティ
には、誇負分析や解析がある。バック・エンド3005
はこの情報を使って目的コードを生成する。
第2B図は、直列化デバッグ機能を含む通常の並列プロ
グラミング・システムの構成を示す。直列化デバッグ機
能は破線の矩形500内に示す。
第2B図は、通常のフロント・エンド処理と通常のバッ
ク・エンド処理の間に幾つかの追加のステップがある点
て第2A図とは異なっている。
デバッグ・システムの全体的機能は、プログラマが指定
した並列コードの特定セクションの直列化を受は入れる
ため、プログラムに関する追加情報を集めることである
。この機能を実現するため、デバッグ機能は3つの部分
に分かれている。第1のセクションは通常の並列プログ
ラミング・システムのフロント・エンド・セクション1
005に対する追加部分1000であり、第2のセクシ
ョンはデバッグ管理プログラム2000であり、第3の
セクションは通常の並列プログラミング・システムのバ
ック・エンド3005に対する追加部分3000である
前処理プログラムのフロント・エンド1005及び10
00では、並列プログラム・ソース・コード上の第1の
経路が、プログラムに関する情報を集め、編成する。こ
の情報のあるものは、以下に述べるように、そのプログ
ラム用の呼出しグラフを生成し、サブプログラムとこれ
らのサブプログラムに含まれる並列部分との間で接続を
確立するために使用される、データ構造に入れられる。
デバッグ管理プログラム2000は、ユーザとの間のす
べての対話を処理し、呼出しグラフを表示し、ユーザが
選択的な直列化情報を指定することを可能にする。最後
に、バック・エンド3000及び3005は、直列化情
報に応じて、部分的にまたは完全に逐次形式の並列プロ
グラム用の目的コードを生成する。
並列プログラミング・システムに対するフロント・エン
ド追加部分1oooでは、デバッグ機能は入力プログラ
ムを読み取り、呼出しグラフを生成するために必要な情
報を集める。このフロント・エンド追加部分は情報を2
つのデータ構造、すなわち、サブプログラム・テーブル
及び並列セクション(parsect )テーブルに入
れる。
基本的に、サブプログラム・テーブルは、プログラムの
呼出しグラフを構成するために必要な情報を含む(呼出
しグラフの一例を第12図に示す)。この呼出しグラフ
は、直列化情報を表示し、操作するための基準として働
く。サブプログラム・テーブル内のレコードの構造を第
3図に示す。このテーブルの各レコードは、特定のサブ
プログラム用のデータを保持する。フィールド301は
、サブプログラムの名前(サブルーチン、機能またはメ
インの名前)を保持する。このサブプログラムを呼び出
す(calling)サブプログラムの数が、レコード
のフィールド302に保持される。フィールド303は
、このサブプログラムを呼び出すための、サブプログラ
ム用のサブプログラム・テーブル・インデックス・アレ
イを指すポインタを保7 持する。より迅速な探索及びより簡単な作表のため、サ
ブプログラム・テーブルに呼出しサブプログラムの名前
ではなく呼出しサブプログラムのインデックスを保持す
ることが好ましい。
上記情報は、プログラム用の呼出しグラフを構成するの
に十分である。さらに、サブプログラム内のコードの並
列セクションの数を保持するフィールド305と、pa
rsect テーブル内のparsectに対するイン
デックス・アレイを指すポインタを保持するフィールド
306がある。タイプ・フィールド(フィールド304
)は、parsect の実行をもたらす可能性のある
サブプログラム(すなわち、parsectを含むか、
またはparsect を含む他のサブプログラムを呼
び出すことができるサブプログラム)を識別するために
使用される。直列フラグ(フィールド307)は、ユー
ザがサブプログラム全体の直列化を要求したことを示す
ために使用される。終了フラグ(フィールド308)は
、コードの並列セクションがあるかどうか探索されたプ
ログラムのセクションを記録するために使用8 − される。このフラグは、第1O図に関連して以下に説明
するアルゴリズムと一緒に使用される。
parsect テーブル内のレコードの構造を第4図
に示す。ラベル・フィールド(フィールド401)は、
parsectを識別する(サブルーチン・テーブル内
のサブプログラムの名前と同様な)ラベルを保持する。
このラベルは、ソース・コード・アドレス空間内のPa
rsect位置に応じて発生される。
直列フラグ(フィールド402)は、ユーザが現par
sectの直列化を要求したことを示すために使用され
る。サブプログラムに対するインデックスも維持される
。このインデックス(フィールド403)は、現par
sectが存在するサブプログラム(enclosin
g subgraph)を参照する。
第1図のフロント・エンド・ステップ1000の全体的
構造を第5図に示す。フロント・エンドでは、入力ファ
イルからのプログラム・ステートメントがi行ずつ読み
取られる(ステップ1100)。「ファイルの終り」が
検出されると、プログラム全体が読み取られたことを示
す(ステップ1106)。プログラム全体が読み取られ
ると、呼出しグラフの並列部分を見つけるアルゴリズム
が実行を開始する(ステップ1600)。このアルゴリ
ズムについては、後で第10図に関して説明する。
ステップ1106におけるステートメン)・がファイル
の終りでない場合は、それはタイプによって識別され、
当該の処置が講じられる。直列化デバッグ機能をサポー
トするため、以下のステートメント・タイプがフロント
・エンドで解析される。
5UBROUTINEステートメントやFUNCTI 
ONステートメント等、サブプログラムを開始させるス
テートメント(ステップ1l101)PROGRAステ
ートメント等、プログラムを開始させるステートメント
(ステップ1102) サブルーチンを呼び出すか、または機能ステートメント
を呼び出すステートメント(ステップ1103) parsectに属する並列構造を含むステートメント
(ステップ1104) フロント・エンドでの解析の間、現サブプログラムまた
は主プログラムを表すインデックスが維持されている。
このインデックスは、サブプログラム・テーブル内の現
在走査されているプログラム要素を参照する。
5UBROUTINEステートメント及びFUNCT 
I ONステートメントは、第6図に示すように処理さ
れる。まず(ステップ1201)サブプログラムの名前
を求めてサブプログラム・テーブルが探索される。サブ
プログラムの名前が見つかった場合は(ステップ120
2)、現サブプログラムのインデックスが見つかった項
目にセットされる(ステップ1’203)。そうでない
場合は(ステップ1204)、新しい項目がサブプログ
ラム・テーブル内で割り振られ、現サブプログラムのイ
ンデックスがセットされる。前処理プログ\ラムが当該
の5UBROUTINEステートメントまたはFUNC
TI ONステートメントに出会う前でも、特定のサブ
プログラムに対する項目が1 サブプログラム内で割り振られることがある。これは、
そのサブプログラムに対するCALLステートメント、
または機能の呼出しが別のサブルーチンまたは主プログ
ラム中で行なわれたために生じる。
PROGRAMステートメントも同様に処理される(第
7図参照)。PROGRAMステートメントは1度だけ
しか現われないので、常にサブプログラム・テーブル内
に新しい項目を発生する(ステップ1301)。この割
振りが行なわれた後、現サブプログラムのインデックス
がセットされる(ステップ1302)。
CALLステートメント(または別のステートメントに
組み込まれた機能呼出し)は、第8図に示すように処理
される。まず、呼び出されたサブプログラム(すなわち
、サブルーチンまたは機能)の名前を求めてサブプログ
ラム・テーブルが探索される(ステップ1401)。サ
ブプログラムが見つからない場合は(ステップ1402
)、サブプログラム・テーブル内にサブプログラムに対
す=22 る新しい項目が割り振られる(ステップ1403)。サ
ブプログラム・テーブル内でサブプログラムが見つかる
か、または作成された場合は、そのサブプログラムはサ
ブプログラムによって呼び出されているものとしてマー
クされる(ステップ1404)。
新しいparsect の始めに出会ったときは、第9
図に示すように処理される。まず、parsectに識
別子及びparsect テーブル内の新しい項目が割
り振られる(ステップ1501 ) o parsec
tラベルは、第2B図に示す並列プログラミング・シス
テムによって生成されるソース・コードのリストに印刷
することができる。parsectの外側のサブプログ
ラムのインデックス(第3図のρarsectテーブル
・レコードのフィールド403参照)カ、現サブプログ
ラムのインデックスにセットされる。
次に、新しいparsectが現サブプログラムに追加
される(ステップ1502)。
入力ファイル全体が処理されたとき、サブプログラム・
テーブルはプログラムの呼出しグラフを構成するのに十
分な情報を有する。ただし、parsectの実行を決
してもたらさず、したがってデバッグ機能にとって重要
でないプログラム部分がある。したがって、プログラム
のこれらの部分に対応するグラフのノードはユーザには
示されない。呼出しグラフのこれらのノードは、グラフ
を走査し、各ノードのタイプ・フィールドを適当にセッ
トすることにより識別される。
第10図は、parsectの実行をもたらす可能性が
あるプログラム部分を見つけるアルゴリズムの流れ図で
ある。この図に記述されるアルゴリズムは、この機能を
実現するために呼出しグラフを走査する好ましい方法で
ある。
第10図に示すアルゴリズムはその実行を制御するため
3つの変数、すなわちCHANGE、I及びJを使用す
る。変数CHANGEは、呼出しグラフに対してアルゴ
リズムを丸々実行しなければならない回数を制御する。
このアルゴリズムは、主プログラム内にネストされてい
るサブプログラムの各レベルごとに実行される。変数■
はプログラムの各サブルーチンを参照するために使用さ
れ、変数Jは、サブルーチンIを呼び出す各サブルーチ
ンを参照するために使用される。
このアルゴリズムはCHANGEを1に初期設定する(
ステップ1601)。ステップ1602で、CHANG
EがOの値をもつ場合は、ステップ1620が実行され
、呼出しグラフの走査が終了する。そうでない場合は、
ステップ1604が実行され、変数CHANGEがOに
セットされる。
アルゴリズムの後の部分で、CHANGEが再び1にセ
ットされる(ステップ1612)場合は、呼出しグラフ
のすべてのレベルが処理されたことを確認するため、ア
ルゴリズムが再び実行される(ステップ1602)。
ステップ1605で工が1に初期設定される。
アルゴリズムは次に各サブプログラムを次々に調べる(
呼出しサブプログラムを次々に分析するステップ160
7.1608、及び1615)。直列サブプログラムは
無視される(ステップ1608)。すへてのサブルーチ
ンが分析された場合5− (ステップ1607)、制御はステップ1602に移り
、すべての処理が完了された場合はアルゴリズムはステ
ップ1602で終了しくステ・ンプ1620) 、CH
ANGEが1にセ・ントされた場合は再び実行される。
コードの並列セクションを有し、かつ完全に処理されて
いす、したがって他の点では直列なサブプログラムによ
って呼び出される可能性があるサブルーチンは、ステッ
プ1609−1614でさらに分析される。分析中のサ
ブルーチンを呼び出す各サブプログラムに対するインデ
ックスは最初に1にセットされ(ステップ1609)、
呼出しサブプログラムがすべて処理されるまで(ステッ
プ1813)各サブプログラムごとに1ずつ増分され(
ステップ1610)、呼出しサブプログラムがすべて処
理された時点て、そのサブルーチンまたは機能は「終了
」とマークされ(ステップ1614)、次のサブルーチ
ンまたは機能が分析される(ステップ1403ないしス
テップ1601及び1f307)。並列構造を含むサブ
ルーチンま6 たは機能と出会ったとき、呼出しプログラムは並列であ
るとマークされ、変数CHANGEが1にセットされる
(ステップ1612)。このようにして、並列性の表示
が、呼出しグラフ内の呼出しサブプログラムの最高レベ
ルまで上向きに伝えられる。
デバッグ管理プログラムの流れ図を第11図に示す。第
1のステップ2100で、呼出しグラフが表示される。
呼出しグラフの1例を第12図に示す。呼出しグラフに
関連した情報を表示するための方法は多数あるが、好ま
しい実施例について説明する。
ハードウェアの好ましい実施例では(第1図)、呼出し
グラフは、Xウィンドウ(マサチューセソツエ科大学か
ら無料ライセンスで入手可能)等の図形表示ソフトウェ
ア・システムにより図形表示装置109に表示される。
図形表示ソフトウェアは、図形表示装置109上でイメ
ージを作成する図形表示ジェネレータ107を制御する
ことができる。本発明に関連した図形表示ソフトウェア
、ユーザ・コード及びプログラミングはすべて、第1図
に示すコンピュータ・システム上で走行することができ
る。
サブプログラムは、グラフのノードとして表される。p
arsect コードを含むサブプログラムを表すノー
ドは、並列コードと呼ばれる。サブプログラムXがサブ
プログラムYによって少なくとも1回呼び出された場合
、グラフで、ノードXからノードYに向かう上向きの辺
がある。サブプログラム・テーブル内の対応するサブプ
ログラムに対する項目のインデックスが、呼出しグラフ
のノード上に現れる。
たとえば、第1図に示すマウス・システム106等のポ
インティング装置を使用することにより、サブプログラ
ムの名前及びparsectに対する参照を一時的に表
示することができる。これは、たとえばマウスに関連す
るポインター図形が特定のノード上にあるとき、マウス
をクリックすることによって行なうことができる。プロ
グラマはparsect コードにしか関心がないので
、呼出しグラフの並列ノードのみが表示される。この図
形表示に加えて、サブプログラム・テーブル・インデッ
クスのリストが、対応するサブプログラム名、ラベル及
びparsect参照データと共に、印刷装置105を
介して並列プログラミング・システムにより提供される
デバッグ背伸プログラムの次のステップ(第11図のス
テップ22(’!O)は、第13図に示すようなグラフ
の直列化された部分を表示することである。最初、デバ
ッグ・セツションが開始したときは、グラフのどの部分
も直列化されていない。
したがって、第I2図と比較して、呼出しグラフ上で何
も更新されていないはずである。ユーザが直列化の照会
を出し始めると(第11図のステップ2300)、直列
化情報が直ちにグラフ上に表示される。
第I3図で、要求されたサブプログラム直列化の量の指
示が表示される。本発明の好ましい実施例では、2つの
異なる陰影を使用する。一方の陰影は、ユーザがサブプ
ログラム全体の直列化を要29− 求したときに使用する(たとえば、第13図のサブプロ
グラムS2)。もう一方の陰影は、サブプログラム内の
1つまたは複数のparsectだけが直列化されると
きに使用する(たとえば、第13図のサブプログラムS
3及び85)。ユーザが直列化情報を指定し、自分のプ
ログラムをコンパイルして実行することによりデバッグ
・セツションを続行した後、直列化情報は特別ファイル
にセーブされ(第11図のステップ2400) 、将来
のデバッグ・セツションの開始時に表示のために使用で
きる。
デバッグ・セツションの前のサイクルからの直列化情報
を有する叶出しグラフが表示されると、ユーザは情報を
調べ゛・二変更する、すなわちプログラムに直列化を加
えるか、またはプロ′F゛ラムから除去することができ
る。このことはデバッグ管理プログラム中で照会を使っ
て行なわれる(第11図のステップ2300)。種々の
照会を呼び出すためにマウス型メニュー構造を使用する
ことができる。別の方法では、第14図に示すように、
照0 会を表す一組の簡略記号をユーザが使用できるようにし
ておき、ユーザはキーボードで簡略記号をタイプするこ
とにより照会を呼び出すことができる。照会に関する説
明は次の通りである。
照会2301:名前によってサブプログラムを直列化す
る。この照会は、サブプログラム中のすべての並列構造
を直列としてマークする方法を提供する。これは、対応
する項目に対するサブプログラム内の直列フラグをセッ
トすることによって反映される(この項目は、名前をキ
ーとして使ってサブプログラム・テーブルを探索するこ
とにより見つけられる)。
照会2302:名前によってサブプログラムを直列化解
除する。この照会は、照会2301を使ってセットされ
た直列化を解除し、サブプログラム中のすべての並列構
造を並列にセットする方法を提供する。
照会2303:インデックスによってサブプログラムを
直列化する。この照会は、サブプログラム全体を直列と
してマークする方法を提供する。これは、照会中で供給
されたインデックスに対するサブプログラム・テーブル
内の直列フラグをセットすることによって反映される。
照会2304:インデックスによってサブプログラムを
直列化解除する。この照会は、照会中で供給されたサブ
プログラム・テーブルに対するインデックスに対して以
前にセットされた直列化を解除する。
照会2305 :サブプログラム・テーブル内のそのイ
ンデックスが供給されるサブプログラムの名前を表示す
る。この照会は、表示されるサブプログラムのインデッ
クスと、プログラムのソース・コードに現れる名前の関
係を確立する方法を提供する。
照会2306:ラベルによってparsectを直列化
する。この照会は、照会中でそのラベルが供給されるp
arsectを直列化する方法を提供する。
本発明のこの実施例では、parsect ラベルはソ
ース・プログラム・リストの一部として並列プログラミ
ング・システムによって提供される。
parsectは、対応する項目に対するparsec
t テーブル内の直列フラグをセットすることにより直
列化される(この項目は、ラベルをキーとして使ってp
arsect テーブルを探索することにより見つけら
れる)。
照会2307:ラベルによってparsectを直列化
解除する。この照会は、照会中でそのラベルが供給され
るparsectの直列化を解除する方法を提供する。
この照会は照会2306に類似しているが、見つかった
項目の直列フラグをクリアする。
照会2308:インデックスによってparsectを
直列化する。この照会は、照会中でparsectテー
ブル内のそのインデックスが供給される1)arsec
tの直列化を解除する方法を提供する。
照会2309:インデックスによってparsectを
直列化解除する。この照会は、照会中でparsect
テーブル内のそのインデックスが供給されるparse
ctの直列化を解除する方法を提供する。
照会2310 :  parsect テーブル内のそ
のイン33 デックスが供給されるparsectのラベルを表示す
る。この照会は、表示されるparsect テーブル
内のparsectのインテ・ソクスと、プログラムの
ソース・コード中に現れる対応するparse。Lのラ
ベルの関係を確立する方法を提供する。
照会2311:そのインデックスが照会中で供給される
サブプログラムに含まれるすべてのparsectの状
況(parsectのラベル、直列または並列)を表示
する。
照会2312:そのインデックスが照会中で供給される
サブプログラム内のすべてのparsectを直列化す
る。この照会は、サブプログラム内のすべてのpars
ectを1つずつ調べることなく、それらを直列化する
好都合な方法を提供する。
照会2313:そのインデックスが照会中で供給される
サブプログラム内のすべてのparsectを直列化解
除する。この照会は、サブプログラム内のすべてのpa
rsectを1つずつ調べることなく、それらの直列化
を解除する好都合な方法を提供する。
4 照会2314ニブログラムからすべての直列化を除去す
る。
照会2315:EXITはユーザとデバッグ管理プログ
ラムの間の連絡を終了させる。デバッグ・セツションの
流れは第11図のステップ2400に進む。
ユーザの要求がすべて入力された後(第11図のステッ
プ2300)、直列化データのファイルが将来の使用の
ため記憶される(第11図のステップ2400、第15
図参照)。
直列化デバッグ機能500は、ユーザが指定したpar
sect コードのコンパイラ直列化を指示することに
より、通常の並列プログラミング・システムの第2B図
のバック・エンド3005と共に働く。バック・エンド
処理を示す流れ図を第16図に示す。
バック・エンドは、入力プログラムをステートメントご
とに2回目に読み取ることにより動作する(第16図の
ステップ3100)。「ファイルの終り」が見つかった
場合は(第16図のステップ3101)、コードの生成
が終了する。
ステートメントPROGRAM1SUBROUTINE
またはFUNCTI○NのIつが認識された場合(それ
ぞれ第16図のボックス3102.3103.3104
)、そのステートメントはサブプログラムの始めとして
処理される(第16図のステップ3200)。どの場合
も、処理されたサブプログラムの名前によってサブプロ
グラム・テーブルが探索され、この探索は、このプログ
ラムのインデックスが見つかり(第17図のステップ3
201)、その項目の直列フラグが調べられる(第17
図のステップ3202)まで続けられる。直列フラグが
オンの場合、コンパイラから直列セクションの始めを確
立する特別な命令が出される(第17図のステップ32
03)。この命令は、parsect コードが1つの
処理によってのみ実行されるよう制限する。これは、ユ
ーザがプログラムのあるセクションの直列化を明示的に
要求するとき、通常の並列プログラミング・システムの
フロント・エンドによって出されるのと同じ命令である
。たとえば、並列実行が省略時解釈であり、直列部分が
明示的に定義されるシステムでは、コードの一セクショ
ンは以下のようになる。
10  C0DE 20 5ERIAL  BEGIN 30  C0DE 40 5ERIAL  END 50  C0DE この例では、ステートメント20及び40はコードの直
列セクションを明示的に定義する。このシステムでは、
ステップ3203で出される命令は、上記の例の行20
及び40に示す命令と同じである。
しかし、コンピュータ・システムによっては、省略時解
釈が直列コードの生成であり、並列セクションが明示的
に定義されることもある。たとえば、 10   C0DE 20   PARALLEL   END30   C
0DE 7− 40   PARALLEL   BEGIN50  
C0DE この例では、ステートメント20及び40はフードの直
列セクションを暗示的に定義する。ステップ3203で
出される命令は、上記の例の行20及び40で生成され
るコードと同じではないが、コンパイラ直列化に対して
同じ効果を生しる。この種のシステムでは、各並列終了
の前に並列開始があり、各並列開始の後に並列終了がく
るように注意する必要がある。
ENDステートメントが見つかった場合(第16図のス
テップ3105)、サブプログラムの終りが処理される
(第16図のステップ3300)。
まず、現サブプログラムのインデックスに対応するサブ
プログラムの項目が調べられる(第18図のステップ3
301)。現サブプログラムが直列である場合は(第1
8図のステップ3302)、直列セクションの終りに対
して特別な命令が作成される(第18図のステップ33
03)。現サブプログラムが直列でない場合は、何も行
なわれな38− い。
並列構造(parallel construct)が
見つかった場合は(第16図のステップ310B)、こ
れらの並列構造が処理される(第16図のステップ34
00)。まず、並列構造がparsect の始めに関
するものかどうか検査が行なわれる(第19図のステノ
ブ3401)。そうである場合は、現parsectの
インデックスが1だけ増分される(第19図のステップ
3402)。現サブプログラムまたは現parsect
が直列化されている場合は(第19図のステップ340
3及び3404)、何も行なわれない。現サブプログラ
ムまたは現parsectが直列化されていない場合は
(第19図のステップ3403及び3404)、並列構
造に対する特別な命令が作成される(第19図のステッ
プ3405)。
コンパイラはこれらの命令を使って、ソース・コードか
ら目的コードへの変換により、プログラムの実行が1台
のプロセッサ(直列実行)で行なえるか、それとも複数
のプロセッサ(並列実行)で行なえるかを判定する。目
的コードが作成された後、(任意の適当なリンカを使っ
て)リンクされ、実行される。コードの並列セクション
の並列化されたコンパイルの結果が、コードの並列セク
ションの直列化されたコンパイルと比較される。
この比較は、自動的に行なってコンピュータで違いを強
調表示することもでき、またプログラマが手動で行なう
こともできる。結果が異なる場合は、プログラマは、並
列コードに1つまたは複数のエラーがあることに気づく
。呼出しグラフを見ることにより、プログラマは並列コ
ードの特定セクションの直列化を指定し、したがってエ
ラーの位置を限定する機会をもたらすことができる。
E9発明の効果 本発明の方法を用いると、ユーザかエラーを見つけるた
めプログラムの並列セクションを選択的に直列化するこ
とができる。問題のあるコード部分が識別されると、コ
ードの検査または他の通常の方法(すなわち、区切り点
や事象追跡)によってエラーを見つけることができる。
【図面の簡単な説明】
第1図は、本発明によるデバッグ・システムをサポート
することができるコンピュータ・システムのブロック・
ダイヤグラムである。 第2A図は、従来技術によって定義された並列プログラ
ミング・システムの構造を示す流れ図である。 第2B図は、本発明の実施例を含む並列プログラミング
・システムの構造を示す流れ図である。 第3図は、第2図に示した並列プログラミング・システ
ムで使用されるサブプログラム・テーブル内のレコード
の形式を示すデータ構造図である。 第4図は、第2図に示した並列プログラミング・システ
ムで使用される並列セクションのテーブル内のレコード
の形式を示すデータ構造図である。 第5図は、第2図に概略的に示した並列プログラミング
・システムのフロント・エンド・セクション内での処理
を記述した流れ図である。 第6図は、第5図に概略的に示した5UBROUTIN
Eステートメント及びFUNCTION1 ステートメントの処理を示す流れ図である。 第7図は、第5図に概略的に示したPROGRAMステ
ートメントの処理を示す流れ図である。 第8図は、第5図に概略的に示したCALLステートメ
ントの処理を示す流れ図である。 第9図は、第5図に概略的に示したPAR3ECT  
BEGINの処理を示す流れ図である。 第10図は、呼出しグラフの生成を示す流れ図である。 第1王図は、第2図に概略的に示したデバッグ管理プロ
グラム内での処理の流れ図である。 第12図は呼出しグラフの一例を示す説明図である。 第13図は、直列化情報をどのように呼出しグラフ上に
表示することができるかについての一例を示す説明図で
ある。 第14図は、第11図゛に概略的に示したデバッグ管理
プログラムからの照会のリストである。 第15図は、構成ファイルの作成を示す流れ図である。 2− 第16図は、第2図に概略的に示した並列プログラミン
グ・システムのバック・エンド処理を示す流れ図である
。 第17図は、第16図に示したバック、エンド処理での
サブプログラムの開始を示す流れ図である。 第18図は、第16図に示したバック・エンド処理での
サブプログラムの終了を示す流れ図である。 第19図は、第16図に概略的に示した並列プログラミ
ングのバック・エンド部分での並列構造の処理を示す流
れ図である。 101.102.103・・・・プロセッサ、104・
・・・共用メモリ・システム、105・・・・入出力バ
ス、108・・・・ボインティング・システム、工07
・・・・図形表示ジェネレータ、108・・・・印刷装
置、109・・・・図形表示装置、110・・・・キー
ボード。

Claims (8)

    【特許請求の範囲】
  1. (1)並列プログラム中のエラーを探し出す方法であっ
    て、 (a)上記プログラムの同時に実行できるセクションを
    探し出すステップと、 (b)上記セクション及びそれらの相互関係を表す情報
    を表示するステップと、 (c)表示された情報に応答して、直列化のため上記セ
    クションの少なくとも1つを選択するステップと、 (d)上記の選択されたセクションの直列実行を可能と
    するプログラムの目的コードを発生するステップとを含
    む上記方法。
  2. (2)ステップbが、木グラフの形で上記セクションの
    情報及びそれらの相互関係を表わすステップを含む、特
    許請求の範囲第1項に記載の方法。
  3. (3)プログラムがサブプログラムから成り、特許請求
    の範囲第1項のステップbがさらに、 (a)サブプログラムをノードとして木グラフ上に示す
    ステップと、 (b)ノードYで表されるサブプログラムが、ノードX
    で表されるサブプログラムによって少なくとも1回呼び
    出された場合に、ノードXからノードYへの辺を表すス
    テップとを含む、特許請求の範囲第2項に記載の方法。
  4. (4)(e)並列プログラムをコンパイルして実行する
    ステップと、 (f)特許請求の範囲第1項のステップdで生成される
    目的コードを実行するステップと、(g)ステップe及
    びステップfで得られた結果を比較するステップとをさ
    らに含む、特許請求の範囲第3項に記載の方法。
  5. (5)並列コードのエラー・セクションの位置が限定さ
    れるまで特許請求の範囲第4項のステップを繰り返すス
    テップをさらに含む、特許請求の範囲第4項に記載の方
    法。
  6. (6)サブプログラム全体の直列化が要求されたときに
    表示されるノードに第1の方式で陰影をつけ、直列化の
    ためサブプログラムの特定セクションが要求されたとき
    にノードに第2の方式で陰影をつけるという、特許請求
    の範囲第5項に記載の方法。
  7. (7)マルチプロセッサ・コンピュータ・システムから
    成る、並列プログラム内のエラーの位置決定を支援する
    ためのシステムであって、 (a)上記プログラムの同時に実行できるセクションを
    探し出す手段と、 (b)上記セクション及びそれらの相互関係を表す情報
    を表示する手段と、 (c)表示された情報に応答して、直列化のため上記セ
    クションの少なくとも1つを選択する手段と、 (d)上記の選択されたセクションの直列実行を可能に
    するプログラムの目的コードを生成するための手段とを
    含む上記システム。
  8. (8)上記セクション及びそれらの相互関係を表す情報
    が木構造形式で表示される、特許請求の範囲第7項に記
    載のシステム。
JP2170388A 1989-06-29 1990-06-29 並列プログラム中のエラーを探す方法及び支援システム Granted JPH0338735A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US373953 1982-05-03
US07/373,953 US5048018A (en) 1989-06-29 1989-06-29 Debugging parallel programs by serialization

Publications (2)

Publication Number Publication Date
JPH0338735A true JPH0338735A (ja) 1991-02-19
JPH0432416B2 JPH0432416B2 (ja) 1992-05-29

Family

ID=23474605

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2170388A Granted JPH0338735A (ja) 1989-06-29 1990-06-29 並列プログラム中のエラーを探す方法及び支援システム

Country Status (4)

Country Link
US (1) US5048018A (ja)
EP (1) EP0406602B1 (ja)
JP (1) JPH0338735A (ja)
DE (1) DE69021659T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108304330A (zh) * 2018-02-26 2018-07-20 腾讯科技(深圳)有限公司 内容提取方法、装置和计算机设备

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2978189B2 (ja) * 1989-11-16 1999-11-15 シャープ株式会社 自動フローチャート作成装置
US5361352A (en) * 1989-11-27 1994-11-01 Hitachi, Ltd. Method for debugging in a parallel computer system and system for the same
US5412799A (en) * 1990-02-27 1995-05-02 Massachusetts Institute Of Technology Efficient data processor instrumentation for systematic program debugging and development
US5860009A (en) * 1994-04-28 1999-01-12 Kabushiki Kaisha Toshiba Programming method for concurrent programs and program supporting apparatus thereof
JPH0863346A (ja) * 1994-08-25 1996-03-08 Canon Inc プログラム編集方法とその装置
JP2738360B2 (ja) * 1994-09-12 1998-04-08 日本電気株式会社 マルチタスクプログラムのデバッグ方法およびデバッグシステム
US5799142A (en) * 1994-09-12 1998-08-25 Nec Corporation Debugging method and debugging system for multi-task programs
US5687375A (en) * 1994-10-14 1997-11-11 International Business Machines Corporation Debugging of High Performance Fortran programs with backup breakpoints
US5649085A (en) * 1994-12-09 1997-07-15 International Business Machines Corporation Method and system for storing and displaying system operation traces with asynchronous event-pairs
US5872909A (en) * 1995-01-24 1999-02-16 Wind River Systems, Inc. Logic analyzer for software
US5805890A (en) * 1995-05-15 1998-09-08 Sun Microsystems, Inc. Parallel processing system including arrangement for establishing and using sets of processing nodes in debugging environment
US5819024A (en) * 1995-07-11 1998-10-06 Hitachi, Ltd. Fault analysis system
US6067415A (en) * 1995-12-26 2000-05-23 Kabushiki Kaisha Toshiba System for assisting a programmer find errors in concurrent programs
US6275868B1 (en) * 1997-03-12 2001-08-14 Microsoft Corporation Script Engine interface for multiple languages
US6353923B1 (en) * 1997-03-12 2002-03-05 Microsoft Corporation Active debugging environment for debugging mixed-language scripting code
US6061517A (en) 1997-03-31 2000-05-09 International Business Machines Corporation Multi-tier debugging
US6286130B1 (en) * 1997-08-05 2001-09-04 Intel Corporation Software implemented method for automatically validating the correctness of parallel computer programs
US6757868B1 (en) 1998-06-22 2004-06-29 International Business Machines Corporation Programmatic switching of arbitrary HTML forms
US6408430B2 (en) * 1998-09-03 2002-06-18 Lucent Technologies, Inc. Interactive software testing system and method
US7117433B1 (en) 1998-09-29 2006-10-03 International Business Machines Corporation HTML mapping substitution graphical user interface for display of elements mapped to HTML files
US7882426B1 (en) * 1999-08-09 2011-02-01 Cognex Corporation Conditional cell execution in electronic spreadsheets
WO2001022228A1 (en) 1999-09-17 2001-03-29 Nortel Networks Limited System and method for producing a verification system for verifying procedure interfaces
JP2004192139A (ja) * 2002-12-09 2004-07-08 Sharp Corp デバッグ装置、デバッグ方法および記録媒体
US20050223359A1 (en) * 2004-03-30 2005-10-06 Rao Nagaraju Kodalapura N Techniques for multi-core debugging
US7673295B1 (en) * 2004-04-27 2010-03-02 Sun Microsystems, Inc. System and method for compile-time non-concurrency analysis
US8266600B2 (en) * 2005-03-28 2012-09-11 Nec Laboratories America, Inc. Model checking of multi threaded software
US8185874B2 (en) * 2006-11-07 2012-05-22 Microsoft Corporation Automatic and systematic detection of race conditions and atomicity violations
US9317636B1 (en) * 2006-12-11 2016-04-19 Synopsys, Inc. System and method for stopping integrated circuit simulation
JP4908363B2 (ja) * 2007-09-25 2012-04-04 株式会社東芝 情報処理装置、並列処理最適化方法およびプログラム
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8776030B2 (en) * 2008-04-09 2014-07-08 Nvidia Corporation Partitioning CUDA code for execution by a general purpose processor
GB2459353A (en) * 2008-04-09 2009-10-28 Nvidia Corp Translating a program for a multi core graphical processor to run on a general purpose processor
US8156476B2 (en) * 2008-06-10 2012-04-10 Microsoft Corporation Debugging support for tasks in multithreaded environments
US9846628B2 (en) 2010-06-15 2017-12-19 Microsoft Technology Licensing, Llc Indicating parallel operations with user-visible events
US9043761B2 (en) * 2010-09-01 2015-05-26 International Business Machines Corporation Fault localization using condition modeling and return value modeling
US8898640B2 (en) * 2012-06-06 2014-11-25 Microsoft Corporation Exception handling for a distributed runtime
US9753835B2 (en) 2015-11-10 2017-09-05 National Instruments Corporation Debugging parallel graphical program code
CN106201874B (zh) * 2016-07-06 2018-12-28 华为技术有限公司 并行程序的mhp分析方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4502116A (en) * 1982-11-17 1985-02-26 At&T Bell Laboratories Multiple processor synchronized halt test arrangement
JPH0756636B2 (ja) * 1985-12-11 1995-06-14 株式会社日立製作所 データ処理方法
US4803683A (en) * 1985-08-30 1989-02-07 Hitachi, Ltd. Method and apparatus for testing a distributed computer system
DE3752280T2 (de) * 1986-07-30 2000-02-03 Hitachi Ltd Mustergenerator
US4953084A (en) * 1987-11-16 1990-08-28 Hewlett-Packard Company Method and apparatus using variable ranges to support symbolic debugging of optimized code

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108304330A (zh) * 2018-02-26 2018-07-20 腾讯科技(深圳)有限公司 内容提取方法、装置和计算机设备

Also Published As

Publication number Publication date
JPH0432416B2 (ja) 1992-05-29
EP0406602A2 (en) 1991-01-09
EP0406602B1 (en) 1995-08-16
DE69021659T2 (de) 1996-05-02
US5048018A (en) 1991-09-10
DE69021659D1 (de) 1995-09-21
EP0406602A3 (en) 1991-12-27

Similar Documents

Publication Publication Date Title
JPH0338735A (ja) 並列プログラム中のエラーを探す方法及び支援システム
JP7090778B2 (ja) 影響分析
EP0688448B1 (en) Incremental build system
US5956479A (en) Demand based generation of symbolic information
US6954747B1 (en) Methods for comparing versions of a program
Hennessy Symbolic debugging of optimized code
US5671416A (en) Apparatus and a method for searching and modifying source code of a computer program
Hall Managing interprocedural optimization
US5325533A (en) Engineering system for modeling computer programs
US5680622A (en) System and methods for quickly detecting shareability of symbol and type information in header files
US5187789A (en) Graphical display of compiler-generated intermediate database representation
US6014518A (en) Terminating polymorphic type inference program analysis
US7028291B2 (en) Debugging method and debugging device
US20010011370A1 (en) Interactive software testing system and method
Copperman Debugging optimized code without being misled
JPH05508494A (ja) ソフトウェア開発のためのコンピュータプログラムの統合階層表示
US20080163184A1 (en) System for creating parallel applications
Marceau et al. The design and implementation of a dataflow language for scriptable debugging
WO2013184952A1 (en) Method for automatic extraction of designs from standard source code
JP2001166946A (ja) 階層の平坦化によりソースコードをコンパイルする方法及び装置
Livadas et al. System dependence graphs based on parse trees and their use in software maintenance
GB2420638A (en) Method of substituting code fragments in Internal Representation
Nilsson A declarative approach to debugging for lazy functional languages
Hendren et al. Intererence analysis tools for parallelizing programs with recursive data structures
Holloway et al. A User’s Guide to the Optimization Programming Interface