JPH03260742A - プログラムのトレース表示方法 - Google Patents

プログラムのトレース表示方法

Info

Publication number
JPH03260742A
JPH03260742A JP2057923A JP5792390A JPH03260742A JP H03260742 A JPH03260742 A JP H03260742A JP 2057923 A JP2057923 A JP 2057923A JP 5792390 A JP5792390 A JP 5792390A JP H03260742 A JPH03260742 A JP H03260742A
Authority
JP
Japan
Prior art keywords
module
display
execution
program
arguments
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
JP2057923A
Other languages
English (en)
Inventor
Toshihisa Aoshima
青島 利久
Noriyuki Takechi
武市 宣之
Tatsuya Izumi
達也 泉
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2057923A priority Critical patent/JPH03260742A/ja
Publication of JPH03260742A publication Critical patent/JPH03260742A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、プロゲラ11のテス1〜やデバッグ作業の支
援に関し、特に、プログラムの実行状況の監視・検証、
及びプログラム実行後の実行状況の履歴を検索表示する
方法に関する。
〔従来の技術〕
プログラムの動作の検証やエラー原因の追跡の一方法と
して、実行したモジュール(L I S PやC言語の
場合は関数)の引数と戻り値の内容を取得(トレース)
して、表示する方法が広く使われている。
特にLISPやC言語のように関数の組合わせで、記述
されるプログラムでは、関数の引数と戻り値を調べるこ
とは、プログラムの動作の把握やエラー箇所の絞り込み
に特に有効である。
従来、プログラマは、実行した関数の引数と戻り値の表
示を、次の場合に行っている。
(1)プログラムの関数単位の逐次実行時に表示する。
(2)予め指定した関数の実行状況を見るため、括実行
の過程で画面に出力する。
(3)エラーやブレークポイント(中断点)でプログラ
ムが停止、またはプログラムの完了後に、実行中に取得
した引数・戻り値を表示・検索する。
上記いずれの場合においても、引数・戻り値の情報は、
実行された順番に表示されるものであった。このため、
例えば(1) 、 (3)において、プログラムの、実
行が、中間の階層レベルの段階にある時、通常、実行保
留(戻り待ち)の状態にある関数名とその引数の並び、
及び実行が終了した部分の最上位の関数の引数と戻り値
をまず参照したいことが多いが、それぞれのタイミング
で、注目したい範囲の情報だけを表示する機能は実現さ
れていなかった。
ユーザは、実行の途中でプログラムが停止したとき、処
理系が持っているスタック領域の内容を参照するバック
トレース機能をしばしば使用するが、実行が終了した関
数の情報についてはスタック領域に残っていないため、
バックトレース機能では参照できない。
第3図(b)は、同図(a)に示す整数nの階乗(nり
を計算するL I−8Pプログラムを実行したときの、
従来のトレース結果の表示例を示したものである。先に
述べたように関数factが呼ばれたときの引数と、実
行が終ったときの戻り値が、実行した順番にすべて表示
されている。それぞれの行は、呼出しの階層レベルによ
って、段下げが行われている。同名の関数が複数箇所で
実行されたとき、段下げによって示した階層レベルによ
って、ある程度、全体構造での位置付けがわかるが、必
ずしも十分ではない。
先願(特願平1−92840)では、モジュール(関数
)の呼出し系統図を表示して、モジュール系統図で指定
したモジュールのトレース情報(引数・戻り値の情報を
含む)を表示する方法を提案している。
〔発明が解決しようとする課題〕
上記従来技術による、実行したプログラムの引数・戻り
値の表示方法は、しばしば大量のトレース情報を検索・
表示することになり、エラー原因の追求や誤りの発生箇
所の絞り込みに時間がかかる問題があった。特に同一の
階層レベルで隣り合うモジュールの引数・戻り値であっ
ても、実行順に並べると離れた場所に存在し、トップダ
ウンで階層的にトレース情報を検索することは、容易で
はなかった。
また、先願のモジュールの呼出し系統図を介したトレー
ス情報の検索・表示方法は、現在注目しているモジュー
ルから直接呼出された下位モジュールのトレース情報を
一度に展開したり、調べ終った下位モジュールのトレー
ス情報を、−括消去(表示の省略)するような手段がな
く、トレース検索の操作性に霞があった。
本発明の目的は、実行状況に応じ、ユーザが注目したい
範囲のトレース情報の表示を簡単な操作で行なえるよう
にして、プログラムの動作の検証と、エラー原因の絞り
込みを効率化することにある。
〔課題を解決するための手段〕
上記目的は、プログラムの実行過程における各モジュー
ルの実行状況に応じたトレース表示と。
プログラムの実行中断または完了後、ユーザの指定によ
るプログラムの呼出し階層単位に、トレース表示の展開
1表示を省I8(縮退)することにより達成される。
まずプログラムの実行過程においては、表示画面上の第
1の表示領域に、モジュール(関数)の呼出し系統図を
表示し、プログラムの実行位置を該系統図上に識別表示
する。同時に第2の表示領域に、呼出された関数の引数
と実行が終了した関数の戻り値をシーケンシャルに表示
する。
ここで、多重に呼出された関数の実行が完了する都度核
関数の下位の関数のトレース情報の表示を、第2の表示
領域から削除(省#)する。
また同時に、実行が完了した該関数の下位の呼出し系統
図の一部分の表示を、第1の表示領域から省略する。
プログラムの実行時、モジュールの呼出し経路(パス情
報)を、モジュール名の並び(リスト)によって記憶す
る。
上記のモジュール系統図を構成するための情報は、TR
EEテーブルに記憶する。該TREEテーブルには、呼
出されたモジュールごとに、最上位から該モジュールま
でのモジュール名を並べた呼出しパス情報、階層レベル
、名枝のモジュール名の配置座標、各枝の表示可否情報
を保持する。
上記のトレース情報は、各モジュール(関数)の実行時
に引数と戻り値を取得して、プログラム実行後の検索・
表示のためにTRACEデータ領域に格納される。LI
SPの場合はインタプリタ言語のため、各関数の実行ご
とにインタプリタ(解釈ルーチン)が動作して、関数の
呼出し時に引数を、関数の処理が終了して上位の関数に
戻る時に戻り値を取得できる。コンパイルコードで実行
するときは、コンパイル時に引数・戻り値のデー、夕を
出力するコー1くをコンパイルコードに追加挿入する。
該TRΔCEデータ領域には、引数・戻り値の発生順を
表すトレースデータの通番、モジュールの実行開始ごと
にカウント・アップさせるモジュールの通番、最上位か
ら現在までの呼出しモジュール名を並べた呼出しパス情
報、階層レベルと、引数あるいは戻り値を記憶する。
また、画面に表示するトレースデータは別途、表示用T
RACEデータ領域に記憶する。
内容は、前記TRACEデータ領域の表示範囲のコピー
したものである。
該TRE Eテーブルと、該表示用TRACEデータの
内容を処理装置の表示プログラムに転送することにより
、モジュール系統図とトレースデータがそれぞれの表示
領域に表示される。
〔作用〕
プログラムの実行時に取得されるモジュールの呼出し経
路を表すパス情報によって、モジュール系統図上での実
行位置、及びトレースデータの対応がとられる。
モジュール系統図として、ソーステキストから抽出した
静的なモジュール系統図を表示するときは、プログラム
の実行前にあらかしめ前記TREEテーブルが作成済で
あり、モジュールの呼出しパス情報との比較一致により
、実行位置を識別表示することができる。
一方、動的なモジュール系統図を表示するときは、モジ
ュールの新たな呼出しに伴って、該TREEテーブルを
更新することにより、該モジュール系統図の表示を更新
される。
また前記TRACEデータ領域の個々のトレースデータ
に、該呼出し経路を表すパルス情報を記憶しており、モ
ジュール系統図との対応を正しくとることができる。
またモジュールの実行完了に伴って、下位のモジュール
のトレース・データの表示を省略(削除)するには、戻
り値のトレース・データを表示用TRACEデータに格
納した時点で、表示用TRACEデータ中の、同番号の
モジュール通番の引数のトレース・データを見つけ、そ
の間のトレース・データを削除することにより実現され
る。
このように、プログラムの実行状況に応じ、ユーザが注
目したい範囲のトレース情報をコンパクトに表示するこ
とによって、プログラム動作の検証が容易になる。
また、プログラムの実行中断、完了後、指定したトレー
スデータの下位の1−レースデータの展開表示は、指定
のトレースデータのパス情報をキーとして、前記のTR
ACEデータ領域を検索して一致する引数と戻り値のペ
アの間に存在する階層レベルが1だけ大きいTRACE
データをすへて抽出して、表示用T RA CEデータ
にコピーすることにより実現する。下位モジュールのト
レースデータの削除方法は、前記の実行時の省略表示と
同様である。
このようなトップダウン的な階層検索によって、エラー
発生箇所の絞り込みが効率化する。
〔実施例〕
第1図は、本発明のプログラムのトレース表示を実施す
るシステムの構成を示したもので、通常のワークステー
ションやパソコンで実現できる。
第1図の符号11は本体である情報処理装置で、その中
のメモリ12にはモジュールの呼出し系統図(T RE
 Eテーブル)生成、プログラムの解釈・実行を行い、
引数・戻り値のトレースデータを取得し、それらを表示
したり、検索したりする処理を行うプログラムが格納さ
れている。符号17のハードディスクには、トレースの
対象となるユーザのソース・プログラム13.ソース・
プログラム13のモジュール系統図の情報を記憶したT
 、RE Eテーブル14.プログラム13の実行時の
引数・戻り値を記憶するTRACEデータ15゜TRA
CEデータ15から表示される部分を抽出した表示用T
RACEデータ16が格納されている。符号13〜15
のデータは1通常ハードディスク17に格納されている
が、トレースの実行時には、必要に応じてメモリ12に
取り込まれる。
符号18はデイスプレィで、引数や戻り値のトレース表
示や実行したモジュールの系統図等を表示する。
19はキーボード、20はマウスで、これらは、プログ
ラムの実行制御のコマンド(指令)、トレース表示の制
御指令、ソースプログラムの入力。
編集等に用いる。
次に1本発明の一実施例として、簡単なプログラムを例
に、プログラムのトレースデータの表示方法を説明する
第4図は、LISP言語で記述したソースプログラムの
例で、3つの関数定義(foo、 bar、 fact
)が示されている。関数fooは、nの階乗n!を計算
する関数を実行したあと、nとn!の結果を引数として
、関数barを実行するように記述されている。その結
果、関数fooは全体として、n!/nを計算する関数
として定義されている。
第5図は、LISP言語のプログラムの実行画面の表示
例で、51のウィンドウは、LISPの式の入力と実行
を行う対話用のウィンドウで、51Aに示すように関数
fooに、引数として整数3を与えて実行した結果、戻
り値(return value)が2であったことを
示す。同図52は、今実行した関数の呼出し関係を表わ
すモジュール系統図である。入力した式(I NPUT
−FORM)は、関数fooを実行し、fooから関数
factとbarが直接呼ばれ、factからは更にf
actが呼ばれていることを示す。ここで括弧が付いて
いる関数名factは、その上位レベルで同名の関数の
呼出しが存在することを示しており、ここでは直接の再
帰呼出しとなっている。
ところでモジュール系統図には2種類あり、プログラム
の実行に先だって、ソースプログラムを辿って、参照し
ているモジュール名を抽出して作る方法と、実行時に、
呼出された関数名をつなぎあわせて作る方法がある。こ
こでは、前者の系統図を静的なモジュール系統図、後者
の系統図を動的なモジュール系統図と呼ぶ。動的なモジ
ュール系統図では、再帰呼出しの部分も省略しないで、
実際に呼出された個数分の階層を展開して表示すること
も可能である。同図52は、静的なモジュール系統図を
表示した例を示す。同図53は、実行した関数の引数と
戻り値を、実行に追随して逐次出力した表示例である。
各行のデータは呼出しの深さに和尚するドツトの表示に
よって段下げを行っている。先頭のムマは、当行の関数
より下位の呼出しのトレースデータの表示があることを
示し、マは関数の開始時、ムは終了時のトレースデータ
であることを意味する。トレースデータの表示出力がウ
ィンドウの最下行をこえるときは、順番に1行ずつ上に
スクロールするように表示する。
ここでは実行したすべての関数のトレース結果を表示し
ているが、実行に先立ってモジュール系統図上の指定の
枝の範囲だけのトレースに限定することもできる。なお
52のモジュール系統図上には、プログラムの実行位f
!t (]R在位置)を、54のように識別表示する。
第6図は第1の実施例に示すプログラムの実行途中の、
トレース表示方法をもう一つの例を示す。
第6図(a)は、関数fooから呼出された関数fac
tの再帰実行の途中で、3回目の再帰開始の直後のトレ
ース表示例である。同図左側61のウインドウの中の系
統図には、再帰呼出し関係を表わすために、63の部分
のように再帰元の関数の識別とその右肩に再帰の深さを
示す数字を示し、現在実行位置は64の部分のように識
別表示される。
65の関数barの枝は、まだ実行されていない部分で
、動的なモジュール系統図では表示されない部分である
次に第6図(b)は、関数fact(nの階乗)の処理
が終了して、次の関数barの開始直後のトレース表示
例である。このとき、66の系統図で、現在の実行位置
の識別表示は、68に示すように関数barの位置に移
動している。このとき、67のTRACEデータのウィ
ンドウの表示は、69の部分に示すように、関数fac
tのトレースデータの結果出力を、2行に縮退表示する
。即ち一連の再帰過程の表示をその中の最上位の引数と
戻り値にまとめる。このような表示は一般的に、実行完
了の該モジュールから直接呼び出された下位モジュール
の引数・戻り値の表示部分を、先のトレース表示から削
除することをくり返すことによって実現する。また、6
9の先頭の記号69aは、それより下位の呼出しのトレ
ースデータの表示が省略されていることを示す。このよ
うに、通常何10行〜何100行と続くトレース表示を
コンパクトにまとめて表示することにより、現在実行中
または実行保留(戻り待ち)の関数と同じ階層レベルの
実行状況の把握がきわめて容易となる。
なお省略された表示部分の再展開については後述する。
更に第7図(、)(b)は、前述第6図(a)(b)で
示したプログラム実行時のトレース表示に対応する、も
う一つのトレース表示例で、第7図左側のウィンドウ7
1.74の系統図として、動的なモジュール(関数)系
統図を表示した場合の例である。
右側のウィンドウ72.75は、それぞれ第6図の62
.67と同しである。
ウィンドウ71では、関数factの呼出された個数に
対応して、系統図の技を展開表示する。73は、現在の
実行位置の識別表示である。
ウィンドウ74は、関数factの処理が終了して、次
の関数barの開始直後の系統図の表示で、既に実行が
終了した関数から直接呼出された関数に対応する系統図
の枝を削除した(刈取った)表示を行っている。即ちf
actの一連の呼出しを示す枝は、呼出されたfact
の処理の終了の都度、終了したfactの中で呼出され
た関数の枝を次々に削除した結果、76に示す一つのf
actの枝に縮退される。
実際には下位の呼出しがあったことを示す記号76aを
当該関数名の所に付記して示す。
このような縮退(省518)表示により、多重のくり返
し呼出しのような間伸びした呼出し系統図の表示を避け
ることが可能となる。またかなり複雑な構成のプログラ
ムでも、現在実行中と同じ階層とその上位の階層の系統
図部分が、通常同一ウィントウの中にまとまるので、現
在の位置付けの把握が容易になる。
同図77は、先の実施例通りの現在位置の識別表示を施
した所である。
なお、先述の76に示した記号76aをマウスでピック
(選択指定)することにより、下位の呼出し部分を1段
ごとに展開表示することは、容易に実現できる。
第8図は、第2の実施例でプログラムのトレースデータ
を、プログラムの実行完了後に検索して表示する方法に
ついて説明する。
第8図(a)は、直前に実行完了したプログラムの関数
系統図を81のウィン1−ウに表示して、その中で関数
名fooを、マウスでクリックして選択指定し、選択指
定された関数のトレースデータを抽出して、82のウィ
ンドつに表示した例である。このとき該呼出しが複数存
在したときは、複数のトレースデータを一度に展開表示
する。
同図81A、82Aは、双方の対応を示すために、同色
で識別表示する。
ここで82のウィンドウに表示した関数fooのトレー
スデータの先頭には、記号82aを付記して、下位の呼
出しのトレースデータの表示が省略(pack)されて
いることを示している。
次に該記号82a部分をマウスでピックすることにより
、第8図(b)の84のようなトレース表示を行う。即
ち82で選択された関数fooからの呼出しに関するト
レースデータを1階層分展開表示する。同図84Aが該
展開された部分で、関数factと、barの引数・戻
り値の組が抽出されている。ここで関数factは、更
に下位の呼出しのトレースデータが存在していることを
示す記号84ak先頭に付記している。
関数fooのトレースデータについては、下位のトレー
スデータが展開表示されたので、先頭の記号は、84B
のようにマおよびムに変更する。
ここでウィンドウ83の表示は81と同じである。
更に84Aの先頭の記号84aをマウスでピックすると
、指定されたfactの下位1段分のトレースデータを
、第8図(c)のウィンドウ86の中の86Aのように
展開表示する。
ここでマウスで指定したfactの部分に注目点(現在
位置)が移動したことを示す表示を86Bのように行う
。また該注目点に対応する系統図上の位置に、ウィンド
ウ85の85Aのように対応表示を施す。
また展開表示されたトレースデータのマまたはムの記号
の場所を、マウスでクリックすることにより、元の省略
された表示(pack状態の表示)に戻すことができる
。例えば、第8図(0)の関数fooのトレースデータ
の先頭マまたはムの部分をマウスでピックすると、第8
図(a)の表示に戻る。
このように、実行したプログラムの多量のトレースデー
タの中から、調べたい部分のトレースデータを階層的に
検索することを容易に行うことができる。特に特定の関
数から呼ばれた複数の関数のトレースデータを同じレベ
ルで一括して展開できる手段は、トレースデータを辿っ
て、実行不良の場所の絞り込みにきわめて有効である。
次に、以上述べてきたトレース表示を実現している内部
の処理について説明する。
第2図は、前記第1及び第2の実施例におけるプログラ
ムの実行、トレースデータの取得、トレースの階層検索
表示の全般の処理フローを示したものである。
ここで記述される処理は、第1図のシステム構成の中の
11の処理装置にあるプロゲラ11によって実行される
処理100は、検証・デバッグの対象となるユーザプロ
グラム(LISPの場合、関数)の実行式を入力する(
前述41A)。式の入力は第1図19のキーボードを使
って行われる。
処理101は、入力した関数に関する呼出し関係を、あ
らかじめ主記憶(第1図12)にロードされたソースプ
ログラムを辿って抽出する。LISPのプログラムは、
第3図に示したように括弧付きのリスト形式で表現され
ており、実行式は(関数名 引数、・・・引数n)のよ
うに、リストの第1要素に呼出しの関数名が現われる。
各引数は、更に実行式の入れ子の形で表現されることも
ある。実行式から抽出された関数のうち、組込み関数以
外のユーザが定義したユーザ関数の呼出しのみをピック
アップし、該ユーザ関数の定義プログラムを順次検索し
て、ユーザ関数の呼出しがなくなるまで、呼出し関係の
抽出処理をくり返す。ユーザ関数の定義は第3図の例の
ように(defun関数名引数リスト 実行式)の形式
となっている。
第5図で入力した実行式(foo 3)について、第4
図に示すユーザ関数の定義を辿ることにより、関数の呼
出し関係として(foo  (fact (fact)
)(bar ) )というリストが抽出される。
処理102は、該抽出のリストから、第9図に示す形式
のTREEテーブルを生成する。
TREEテーブルは、前述のモジュール(関数)系統図
を表示するための情報を記憶するもので、系統図の各校
(要素)に対応して、最上位から該関数に至るまでの関
数の呼出し経路(パス)91、呼出し階層レベル92.
各校の関数名の表示位置93、各関数の実行状態(実行
終了−1,実行中1、未実行0)94.表示可否フラグ
(1:表示0:省略(縮退)を示す)を保持する。第9
図のTREEテーブルの内容が、第5図の系統図に展開
表示される。
処理103は、実行の中断点(ブレークポイント)や実
行履歴のトレースを行う範囲を、前述の関数系統図上で
指定したり、関数を一括実行するか、ユーザ関数単位の
逐次実行かを選択して起動する。
処理104から処理112は、LISP処理系の中で各
関数の呼出し、実行ごとにくり返される処理である。処
理104は、実行対象の式のアドレスを取得する。
処理105,106,111は、実行対象の式が、ユー
ザ関数のときのみ実行される。
処理105は、実際に呼出された関数の呼出し経路(パ
ス)を、TREEテーブルに記憶された呼出し経路(パ
ス)との−数比較により、系統図上での実行位置を取得
する。ここで該テーブルの実行状況の値を更新すると共
に、前述第1の実施例のように実行中にトレース表示を
行う場合には、ここで系統図の表示とその中に現在の実
行位置の識別表示を行う。
処理106は、呼出されて実行対象となったユーザ関数
の実引数を取得する。
取得した引数を含む関連データは、第10図に示す形式
のTRACEデータに格納する。
記録された情報は、実行順の番号10A、新たに呼出さ
れた関数に付けられた関数の通番10B。
呼出し経路1.0 C、呼出し階層レベル10D、引数
あるいは戻り値10Eである。
なお、実行中のトレース表示を行う場合には、このTR
ACEデータに新たに記録した内容は、そのまま表示用
TRACEデータ(形式は第11図に示すようにTRA
CEデータに論理的に表示行番号を付加したもの)に転
送することによって表示される。
処理107は、現在の実行位置が、処理103で設定し
た中断点か否か、実行モードが逐次実行指定か否かを判
定する。該当するときは、処理108において、実行制
御あるいはそれまでに実行した履歴情報の検索等のコマ
ンド入力を受付け。
該当処理を分岐する。
処理109で、現在対象の式の解釈・実行を行う。実行
式の引数が更に実行式であるならば、処理110の分岐
によって、処理104からの一連の処理が再帰呼出しさ
れる。
処理111は、実行が終了したユーザ関数の戻り値を、
前述のTRACEデータに書込む処理を行う。ここでも
、実行中のトレース表示を行っている場合には、TRA
CEデータへの書込み情報を同じ内容を、表示用TRA
CEデータに転送して、トレース表示を更新する。多重
(入れ子)に呼出されたすべての関数の実行が終了した
とき、処理104〜処理109のくり返し処理が終り、
該再帰のループを抜ける。
第10図のTRACEデータは、本実施例の実行履歴デ
ータである。
処理112は、プログラムの実行完了後、履歴検索の要
求指定があるか否かを判定し、有のとき処理113〜1
16を行う。
処理113において、まず直前に実行した関数の系統図
を表示す(ウィンドウ81)。
先の実行中、トレース表示を行っている場合には、既に
画面上に系統図の表示が存在しているので本処理をスキ
ップする。
処理114では、ユーザによる系統図上での関数の選択
指示を受付け、当該関数名を識別表示する(81 A)
次に処理115では、ユーザによる選択された関数のト
レース表示指定(通常、画面に表示されるコマンド・メ
ニューの選択か、キーボードからの機能キー人力)を受
付け、第10図のTRACEデータから、先に選択指示
された関数(第10図では関数の呼出し経路)と一致す
る1〜レースデータを抽出する。今の場合、ユーザの選
択した関数(呼出し経路)は(foo)であるので、T
RACEデータ上で呼出し経路の一致する実行順1と1
2が抽出され、第11図(a)に示す表示用TRACE
データに転送する。ここでは、引数と戻り値のトレース
データが実行順番号から離れているので、下位の呼出し
のトレースデータが省略されていることを示す記号82
aを、該表示データの先頭に付加する(82A)。
処理11bは、今抽出表示されたトレースデータの先頭
の記号を、ユーザがマウスで指示したときの、トレース
データの展開・縮退(省略)表示の処理を行う。
即ち第8図(a)のトレースデータの先頭がピックされ
たときは、第10図のTRACEデータの階層レベル2
のデータをすべて抽出して第11図の表示用TRACE
データに転送する(第11図(b))。各トレース表示
の先頭に付加する記号は、実行順番号の判定により、下
位関数の呼出しの有無が明らかとなるので、それにより
決定する。
また既に下位のトレースデータが展開されている場合の
マまたはムの記号の表示部分がピックされたときは、即
ち第11図(b)の階層レベルが指定された階層レベル
より上位の階層のトレースデータをすべて削除する。
階層トレース検索の表示は、ユーザにより、終了(QU
IT)指示が与えられたとき、処理112から処理11
7に分岐し、系統図とトレースデータのウィンドウが廃
棄され、処理が終了する。
以上のように、第10図、第11図に示すデータにより
容易に引数・戻り値の階層検索表示が行われる。
なお第11図のような表示用TRACEデータを別途記
憶しなくても、第9図のTREEデータの95のように
、第10図のTRACEデータに表示可否のデータ欄を
付加しても実現できる。しかし通常表示されるトレース
データに対して、元のTRACEデータの量が圧倒的に
大きいので、検索の処理効率を考慮して、別記憶とした
第12図の引数および戻り値によるエラー発生モジュー
ルの判定方法を示す。第12図はモジュールXYZから
モジュールABCを呼び出し、XYZ自身あるいは下位
のモジュールABCのいずれかでエラーが発生している
場合を示している。
符号120はエラー発生箇所、符号121,122はそ
れぞれ正しい引数および誤った引数が渡される場合を示
し、符号123,124はそれぞれ正しい戻り値および
誤った戻り値が返される場合を示す。第12図(a)は
、ABCを呼び出す前にXYZの中でエラーが発生した
ため、ABCに誤った引数が渡されて誤った戻り値が返
され、結果としてXYZが誤った戻り値を返している場
合を示す。第12図(b)は、ABCを呼び出した後に
XYZの中でエラーが発生した場合を示す。第12図(
c)は、呼び出されたABCの中でエラーが発生したた
め、結果としてXYZが誤った戻り値を返した場合を示
す。第12図(d)は、ABCを呼び出す前にXYZの
中でエラーが発生してABCに誤った引数が渡されたが
、ABCの中でもエラーが発生し偶然正しい戻り値が返
されたため、結果としてXYZが正しい戻り値を返す場
合を示す。第12図(c)のように、注目しているモジ
ュールの引数と戻り値だけでは推定できないエラーでも
、モジュール間相互の引数と戻り値の正誤を判定するこ
とによって、エラーが発生したモジュールを推定できる
デバッグ時のテストースを用いて、引数および戻り値の
正誤から当該モジュールにエラーがあるか否かを判定す
る際、各モジュールについてテストケースの引数とそれ
に対応する戻り値の組をテーブルデータとして保有し、
これを検索することによって当該モジュールの正誤を判
定できる。
すなわち、渡された引数の値がテーブルに登録された引
数の中に存在しなければ、その引数は誤りであると判定
される。正しい引数に対して返された戻り値がテーブル
に登録されたものとは異なれば、返された戻り値は誤り
であると判定される。
一つの戻り値に対していくつかの引数が対応する場合、
テーブルの引数のフィールドに格納するデータとして、
引数の範囲あるいはいくつかのデータから成、る組を用
いることにより、テーブルの大きさを節約できる。また
、上記および第12図に示した判定方法を用いることに
より、トレース情報として引数および戻り値を表示する
際、エラーに関係するモジュールの引数および戻り値の
みを自動的に選択して表示できる。一般に、プログラム
をデバッグする時はエラーに関する情報が重視されるた
め、上記の自動化によってデバッグの効率が向上する。
ところで、これまで述べたモジュールとは、プログラム
の1つの構成単位であり、LISP言語及びC言語では
、゛′関数″に対応する。特に、本実施例は関数毎の引
数・戻り値によって、プログラムの動作の大要を把握で
きる関数型の言語に有効である。
〔発明の効果〕
本発明によれば、一連のモジュールの実行履歴である引
数・戻り値のトレース表示と同時に、モジュールの呼出
し関係を示す系統図が表示され。
現在の実行位置または現在の注目点が、該トレースとの
対応を持って識別表示されるので、一連のトレースデー
タの把握・理解が容易になる。
また、実行が完了したモジュールの下位のモジュールの
トレース結果の表示が省略(縮退)されるので、多量の
トレースデータがコンパクトに表示され同じ階層レベル
のトレースデータが近接して表示されるため、実行過程
の把握がより容易になる。
更に、プログラムの実行完了後、モジュール系統図の任
意の枝を開始点にして、階層的にトレースデータを抽出
・表示し、更に必要な部分のトレースデータを展開し、
不要なトレースデータを省1113(縮退)表示するこ
とを、マウス操作で簡単に指示できるので、デバッグ作
業における不良箇所の絞り込み作業が大幅に効率化する
【図面の簡単な説明】
第1図は、本発明を実施するシステムの全体構成。 第2図は、本発明のトレース表示を実現する内部の概略
処理フロー 第3図(a)は、LISPのユーザ関数の定義例(nの
階乗を求めるプログラム)。第3図(b)は、(a)の
関数を実行したときの従来のトレースデータの表示例。 第4図は、実施例で用いるユーザ関数の定義例で、3つ
の関数foo、 bar、 factの3つの関数定義
が含まれる。関数fooは、全体でn j / nを計
算する。 第5図は、第1の実施例によるトレース表示の画面例。 第6図は、第1の実施例のトレース表示の変形例で、(
a)はは、再帰呼出しの場合、(b)は、下位の関数の
実行が終了したあとのトレースの表示例を示す。 第7図は、第1の実施例のトレース表示のもう一つの変
形例で、(a)は、動的な関数系統図を含む。(b)は
、実行が終った関数の、系統図上の省略表示例を示す。 第8図は、第2の実施例のトレース表示例で、プログラ
ム実行後のトレースデータの階層検索表示の例を示す。 第9図は、TREEテーブルで、モジュール(関数)系
統図に関する情報を保持する。 第10図は、TRACEデータで、実行した関数の引数
と戻り値に関する情報を保持する。 第11図は、表示用TRACEデータで、前述のTRA
CEデータから、画面に表示する部分を抽出したもの。 第12図は引数および戻り値によるエラー発生モジュー
ルの判定方法を示す。 11・・・処理装置、12・・メモリ、17・ハードデ
ィスク、18・・・デイスプレィ、19・ キーボード
、篤 1 図 纂 団(l:I−ジ 図  (b〕 第 因 箒 区 z 3 纂 6 図 (^p 囁 図 (b) 舅 巨 (^少 罵 図 (υ 葛 図 (b) 第 図 t Z 3 4 5 率 /ρ 区 舅 (0−) (孟) 21 CC) (む 罵 1 図 (L) 窩 1 回 (b)

Claims (1)

  1. 【特許請求の範囲】 1、入力装置と表示装置を有し、対話形式でプログラム
    の実行およびデバッグを行う情報処理装置を用いて、 プログラムを構成する各モジュールの実行に追随して、
    各モジュールの従属関係を検出して記憶手段に格納し、
    第1の表示領域に、モジュールの該従属関係を木構造で
    表現したモジュール系統図と、該モジュール系統図上で
    の実行位置を表示し、第2の表示領域に、実行したモジ
    ュールの引数および戻り値の情報を実行順に表示するこ
    とを特徴とするプログラムのトレース表示方法。 2、特許請求の範囲第1項記載の表示方法において、プ
    ログラムの実行過程で、該プログラムを構成する各モジ
    ュールの実行が終了する都度、実行終了のモジュールか
    ら直接呼び出された下位モジュールの有無をチェックし
    、下位モジュールがあれば、該下位モジュールに対する
    引数および戻り値の表示を、第2の表示領域から削除し
    て、後続の引数および戻り値の表示を詰めて表示するこ
    とを特徴とするプログラムのトレース表示方法。 3、特許請求の範囲第1項記載の表示方法において、プ
    ログラムの実行過程で、該プログラムを構成する各モジ
    ュールの実行が終了する都度、実行終了のモジュールか
    ら直接呼び出された下位モジュールの有無をチェックし
    、下位モジュールがあれば、該下位モジュールに対する
    モジュール系統図の部分木を、第1の表示領域のモジュ
    ール系統図の表示から削除して表示することを特徴とす
    るプログラムのトレース表示方法。 4、プログラム実行時に各モジュール毎の引数および戻
    り値を取得して記憶装置に格納し、指定されたモジュー
    ルの引数および戻り値の情報を該記憶装置から読出して
    表示する機能を有する情報処理装置を用いて、引数およ
    び戻り値が表示状態にあるモジュールの1つを入力装置
    を用いて指定し、該モジュールより下位の実行モジュー
    ルの引数および戻り値が表示されていない状態のとき、
    該モジュールから直接呼び出されたモジュールの引数お
    よび戻り値を、実行時に取得して格納した該記憶装置か
    ら読出し、入力装置を用いて指定した表示状態にある前
    記モジュールの引数と戻り値の間に挿入して表示するこ
    とを特徴とするプログラムのトレース表示方法。 5、特許請求の範囲第4項記載の表示方法において、 引数および戻り値が表示状態にあるモジュールの1つを
    入力装置を用いて指定し、該指定のモジュールの下位に
    属するモジュールの引数および戻り値の表示を削除し、
    これに後続する引数および戻り値のデータを詰めて表示
    することを特徴とするプログラムのトレース表示装置。 6、特許請求の範囲第4項及び第5項の表示方法におい
    て、 引数および戻り値のデータが表示状態にある各モジュー
    ルについて、それより下位のモジュールの引数および戻
    り値のデータがあつて、かつ表示状態にあるか、表示が
    省略された状態にあるかを示す識別子を、各モジュール
    毎の引数および戻り値のデータに付し、該識別子を入力
    装置で指示することにより、該識別子に対応して、下位
    モジュールの引数および戻り値のデータが表示状態にあ
    れば表示が省略された状態に、表示が省略された状態に
    あれば表示状態にすることを特徴とするプログラムのト
    レース表示方法。 7、特許請求の範囲第1項から第3項記載の表示方法に
    おいて、実行したプログラムに含まれるモジュール間の
    従属関係を表わすモジュール系統図と、プログラム実行
    中に取得した引数および戻り値の情報を記憶し、プログ
    ラム実行中断あるいは実行完了後、該第1あるいは該第
    2の表示領域に表示されている対象を入力装置を用いて
    選択することにより、選択された対象に対応する表示モ
    ジュールから直接呼び出された下位モジュールの部分木
    、及び引数と戻り値を、前記記憶情報から抽出してそれ
    ぞれ該第1、該第2の表示領域内に挿入して表示したり
    、あるいは、選択された対象に対応する該モジュールの
    下位モジュールの部分木、引数および戻り値の表示部分
    を削除して詰めて表示することを特徴とするプログラム
    のトレース表示方法。 8、入力装置と表示装置を有し対話形式でプログラムの
    実行およびデバッグを行う情報処理装置を用いて、プロ
    グラムを構成する各モジュールの実行に追随して各モジ
    ュールの従属関係を検出して記憶手段に格納し、第1の
    表示領域にモジュールの従属関係を木構造で表現したモ
    ジュール系統図と該モジュール系統図上での実行位置を
    表示し、第2の表示領域に実行したモジュールの引数お
    よび戻り値の情報を実行順に表示する際に、各モジュー
    ル毎に引数と戻り値の対応テーブルを検索して実行時の
    引数と戻り値の正誤を判定し、誤つた引数あるいは戻り
    値に関連するモジュールを選択し、該モジュールの引数
    および戻り値の情報を第2の表示領域に表示することを
    特徴とするプログラムのトレース表示方法。
JP2057923A 1990-03-12 1990-03-12 プログラムのトレース表示方法 Pending JPH03260742A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2057923A JPH03260742A (ja) 1990-03-12 1990-03-12 プログラムのトレース表示方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2057923A JPH03260742A (ja) 1990-03-12 1990-03-12 プログラムのトレース表示方法

Publications (1)

Publication Number Publication Date
JPH03260742A true JPH03260742A (ja) 1991-11-20

Family

ID=13069524

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2057923A Pending JPH03260742A (ja) 1990-03-12 1990-03-12 プログラムのトレース表示方法

Country Status (1)

Country Link
JP (1) JPH03260742A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09179753A (ja) * 1995-12-26 1997-07-11 Nec Software Ltd リターン処理を契機とするスタック情報収集方式
JP2003241998A (ja) * 2002-02-14 2003-08-29 Toshiba Corp 制御構造抽出方法、ログ整形方法とそのためのプログラム
JP2007065718A (ja) * 2005-08-29 2007-03-15 Hitachi Software Eng Co Ltd プログラム動作過程追跡支援表示方法及びシステム
JP2011008395A (ja) * 2009-06-24 2011-01-13 Renesas Electronics Corp デバッグ支援装置及びデバッグ支援方法
JP2011517823A (ja) * 2008-04-16 2011-06-16 インターナショナル・ビジネス・マシーンズ・コーポレーション 照会処理視覚化システム、照会処理を視覚化する方法及びコンピュータ・プログラム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09179753A (ja) * 1995-12-26 1997-07-11 Nec Software Ltd リターン処理を契機とするスタック情報収集方式
JP2003241998A (ja) * 2002-02-14 2003-08-29 Toshiba Corp 制御構造抽出方法、ログ整形方法とそのためのプログラム
JP2007065718A (ja) * 2005-08-29 2007-03-15 Hitachi Software Eng Co Ltd プログラム動作過程追跡支援表示方法及びシステム
JP2011517823A (ja) * 2008-04-16 2011-06-16 インターナショナル・ビジネス・マシーンズ・コーポレーション 照会処理視覚化システム、照会処理を視覚化する方法及びコンピュータ・プログラム
JP2011008395A (ja) * 2009-06-24 2011-01-13 Renesas Electronics Corp デバッグ支援装置及びデバッグ支援方法

Similar Documents

Publication Publication Date Title
JPH02272645A (ja) プログラム・デバツグ支援方法
US8935673B1 (en) System and method for debugging computer program based on execution history
EP0785510B1 (en) Program debugging system for debugging a program having a graphical user interface
US6598222B2 (en) Programming method for concurrent programs and program supporting apparatus thereof
US6003143A (en) Tool and method for diagnosing and correcting errors in a computer program
US5375125A (en) Method of displaying program execution for a computer
JP3779665B2 (ja) テスト支援プログラム
CN109189374B (zh) 基于对象引用链的对象构造代码生成方法及系统
JP4588295B2 (ja) シーケンス解析方法およびシーケンス解析装置
CN109101410B (zh) 一种风险驱动测试方法和装置以及计算机可读存储介质
US5970244A (en) Method of performing a reverse analysis of a program and its apparatus
JP6370503B1 (ja) プログラム作成装置
JP3625084B2 (ja) ソフトウエア部品の再利用システム
JPH03260742A (ja) プログラムのトレース表示方法
JP2009104252A (ja) デバッグ支援装置およびデバッグ支援方法
US7003761B2 (en) Multi-process display method in debugger system
KR960003048B1 (ko) 소프트 웨어 개발 지원 시스템에 있어서의 표시방법
JPH0934698A (ja) ソフトウェア生成方法及び開発支援方法
Stadie et al. Closing gaps between capture and replay: Model-based gui testing
JP6983976B2 (ja) コードリーディング支援装置、及び、コードリーディング支援方法、並びに、コードリーディング支援プログラム
CN117369789B (zh) 基于可视化配置工具生成代码的方法及可视化显示设备
JPH0926897A (ja) プログラム解析装置及びプログラム解析方法
CN115269550A (zh) 一种数据处理方法及装置
JP4458491B2 (ja) テストコマンドファイル作成システムと方法およびプログラム
JP4180099B2 (ja) シーケンス解析プログラムを記録した記録媒体、シーケンス解析装置およびシーケンス解析方法