JP2683274B2 - Function trace output method - Google Patents
Function trace output methodInfo
- Publication number
- JP2683274B2 JP2683274B2 JP1068050A JP6805089A JP2683274B2 JP 2683274 B2 JP2683274 B2 JP 2683274B2 JP 1068050 A JP1068050 A JP 1068050A JP 6805089 A JP6805089 A JP 6805089A JP 2683274 B2 JP2683274 B2 JP 2683274B2
- Authority
- JP
- Japan
- Prior art keywords
- trace
- function
- program
- instruction
- output
- 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.)
- Expired - Fee Related
Links
Landscapes
- Debugging And Monitoring (AREA)
Description
【発明の詳細な説明】 〔概要〕 情報処理装置におけるトレース方式にかかり,特にプ
ログラムを構成するサブルーチン(C言語では関数)の
呼び出し関係,すなわち,ある関数か他の関数を呼び出
し,逆にある関数から呼び出し元の関数に復帰する様子
を示す関数トレースデータの出力方式に関し, トレース処理において,大きな支障を生じることなく
トレースデータ出力量を縮小することを目的とし, プログラムの実行をトレースし,プログラムを構成す
る関数から他の関数の呼び出し又は復帰がおこるたびに
それぞれ呼び出された関数,復帰先の関数の名前と呼び
出しの深さを出力するトレース処理において,呼び出し
の深さを監視し,呼び出しの深さが一定の値以上になる
とトレースの出力を抑止し,その後復帰が行われて上記
一定の値に戻った時点よりトレースの出力を再開するよ
う制御する構成をもつ。DETAILED DESCRIPTION OF THE INVENTION [Outline] A trace method in an information processing apparatus, particularly a calling relationship of a subroutine (a function in C language) that constitutes a program, that is, a function or another function is called and a function that is the other way around is called. Regarding the output method of the function trace data that shows how to return from the function to the calling function, trace the execution of the program to reduce the amount of trace data output without causing a big trouble in the trace processing. Each time a constituent function calls or restores another function, the function that is called, the name of the function to restore to and the depth of the call are output in the trace process. When the value exceeds a certain value, the trace output is suppressed, and then a recovery is performed and the above It has a configuration that controls to restart the trace output from the point when the value returns to the value of.
本発明は情報処理装置におけるトレース方式にかか
り,特にプログラムを構成するサブルーチン(C言語で
は関数)の呼び出し関係,すなわち,ある関数から他の
関数を呼び出し,逆にある関数から呼び出し元の関数に
復帰する様子を示す関数トレースデータの出力方式に関
する。The present invention relates to a trace method in an information processing apparatus, and particularly, a calling relationship of a subroutine (a function in C language) that constitutes a program, that is, one function calls another function, and conversely a function returns to a calling function. The present invention relates to an output method of function trace data showing how to do.
また,本発明は,プログラムの命令実行ステップ数を
関数の呼び出しと復帰により区分し,各区分された部分
での実行ステップ数を,実行されている関数と,その時
の呼び出しの深さを示す情報とともに出力するトレース
にも適用できる。Further, according to the present invention, the number of instruction execution steps of a program is divided by calling and returning a function, and the number of execution steps in each divided portion is information indicating the function being executed and the depth of the call at that time. It can also be applied to the trace output with.
第10図に,従来の情報処理装置におけるトレース処理
機構の概略を示す。Figure 10 shows an outline of the trace processing mechanism in a conventional information processing device.
第10図において,1はCPU,2はMS,3はOS,4はトレースプ
ログラム,5は被トレースプログラム,6はディスク装置,7
は被トレースプログラム5のロードモジュール,8はトレ
ース出力用のフアイル領域である。In Fig. 10, 1 is CPU, 2 is MS, 3 is OS, 4 is trace program, 5 is traced program, 6 is disk device, 7
Is a load module of the traced program 5, and 8 is a file area for trace output.
動作において,トレースプログラム4は指定されたロ
ードモジュール7をローティングし,被トレースプログ
ラム5として動作可能にする。In operation, the trace program 4 loads the specified load module 7 to enable it to operate as the traced program 5.
トレースプログラム4は,OS2の助けを借りて,被トレ
ースプログラム5の関数入口と関数からの復帰先にブレ
ークポイント命令を設定して,その実行時に停止するこ
とを利用して関数呼び出しや復帰を検出し,トレースデ
ータを採取してファイル領域に出力する。With the help of OS2, the trace program 4 sets a breakpoint instruction at the function entrance of the traced program 5 and the return destination from the function, and detects the function call or return by using the stop at the execution time. Then, the trace data is collected and output to the file area.
ブレークポイント命令は,関数呼び出しの深さには関
係なく,全ての関数入口とその復帰先とに設定され,ト
レースデータの採取が行われる。Breakpoint instructions are set at all function entrances and their return destinations regardless of the depth of the function call, and trace data is collected.
トレース情報をとりながら,プログラムを実行する際
に起る1つの問題は,トレース情報を出力するファイル
領域についてのものである。これはトレースされる処理
の実行時間が長くなるとそれにほぼ比例してトレース出
力量が増大し,そのため用意されているファイル領域で
は不足するという問題である。一般にトレース処理の開
始時点ではトレース出力量を予測することができない場
合が多く,そのため,処理の途中でファイル領域が不足
しトレースを打切らなければならないという都合が生じ
ることがあった。One problem that occurs when executing a program while collecting trace information is the file area for outputting the trace information. This is a problem that as the execution time of the traced process increases, the trace output amount increases almost in proportion to it, and thus the prepared file area becomes insufficient. In general, it is often impossible to predict the trace output amount at the start of the trace processing, so there was a case where the file area became insufficient during the processing and the trace had to be aborted.
本発明は,順次実行されていく関数について,その関
数名と呼び出しの深さを示すトレース情報を出力してい
くトレース処理において,大きな支障を生じることなく
トレースデータ出力量を縮小することを目的としてい
る。An object of the present invention is to reduce the amount of trace data output without causing a big trouble in the trace processing of outputting the trace information indicating the function name and the calling depth for the functions that are sequentially executed. There is.
本発明は,一般に多重に関数呼び出しが行われる場合
には,その呼び出される関数がシステムに用意されてい
るライブラリ関数である場合が多く,トレース採取者に
とって関心が薄いものであることに着目し,被トレース
プログラムの実行中における関数呼び出しの深さ(レベ
ル)を監視して,予め定められた深さを超えた関数呼び
出しについてはトレースデータの出力を抑制することに
より,トレースデータ量を削減するものである。In the present invention, in general, when multiple function calls are made, the function to be called is often a library function prepared in the system, which is of little interest to the trace collector, The amount of trace data is reduced by monitoring the depth (level) of function calls during execution of the traced program and suppressing the output of trace data for function calls that exceed a predetermined depth. Is.
第1図は本発明の原理図であり,11はCPU,12は主記憶M
S,13はOS,14はトレースプログラム,15は被トレースプロ
グラム,16は呼び出された関数からの復帰先命令を退避
させるトレーススタック,17はスタックポインタ,18はデ
ィスク装置,19はトレースデータを格納するファイル領
域である。FIG. 1 is a principle diagram of the present invention. 11 is a CPU, 12 is a main memory M
S, 13 is the OS, 14 is the trace program, 15 is the traced program, 16 is the trace stack that saves the return instruction from the called function, 17 is the stack pointer, 18 is the disk device, and 19 is the trace data storage This is the file area to be used.
被トレースプログラム15は,メインルーチンmainとサ
ブルーチン(関数)sub1,sub2,sub3を含み,たとえばma
inはsub1を呼び出し,sub1はsub2,sub3を呼び出す。The traced program 15 includes a main routine main and subroutines (functions) sub1, sub2, and sub3.
in calls sub1, and sub1 calls sub2 and sub3.
トレーススタック16には,関数呼び出しが行われるた
びに呼び出し元への復帰先命令とそのアドレスが格納さ
れ,そして復帰が行われたときスタックから取り去られ
る。スタックポインタ17は,現在処理中のサブルーチン
のスタック位置をポイントしている。スタックポインタ
17の値は,スタックの深さすなわち関数呼び出しの深さ
を表わしている。The trace stack 16 stores a return destination instruction to the caller and its address each time a function call is made, and is removed from the stack when the return is made. The stack pointer 17 points to the stack position of the subroutine currently being processed. Stack pointer
The value of 17 represents the stack depth, that is, the function call depth.
第1図において,トレースプログラム14は,被トレー
スプログラム15において関数呼び出しが行われるたびに
そのトレースデータを採取するが,スタックポインタ17
を監視して,その深さがある一定値以下のときにのみフ
ァイル領域19へのトレースデータの出力を行う。In FIG. 1, the trace program 14 collects the trace data each time a function call is made in the traced program 15, but the stack pointer 17
Is monitored and trace data is output to the file area 19 only when the depth is below a certain value.
たとえばスタックポインタ17が深さ3以上の値を示し
ている間は,関数トレースデータを採取しても,これも
ディスク装置18のファイル領域19へは格納しない。For example, while the stack pointer 17 indicates a value of 3 or more in depth, even if the function trace data is collected, this is also not stored in the file area 19 of the disk device 18.
第2図はトレースプログラムの中に設けられる関数入
口テーブルの構成を示す。これは被トレースプログラム
を構成する全関数について,その関数名,主記憶上の入
口アドレス,入口の命令(旧命令),そして旧命令に置
き換えられる新命令のブレークポイントを設定した形で
の命令(ブレークポイント命令の命令長はOSによって決
まる設定可能単位より短いので旧命令上に重ねると旧命
令の右側部分が残っている)が格納されている。FIG. 2 shows the structure of the function entry table provided in the trace program. This is an instruction that sets the function name, the entry address in main memory, the entry instruction (old instruction), and the breakpoint of the new instruction that replaces the old instruction for all functions that make up the traced program ( Since the instruction length of the breakpoint instruction is shorter than the settable unit determined by the OS, the right part of the old instruction remains when it is overlaid on the old instruction) is stored.
またこの例では,被トレースプログラムはmain,sub1,
sub2,sub3の4つから構成される。In this example, the traced program is main, sub1,
It consists of four sub2 and sub3.
第3図はトレースプログラムの中に設けられるトレー
ススタックである。はじめにメインルーチンmainの実行
が始まった直後は最も上の1行のみが使われ,スタック
ポインタは1をさしている。mainがsub1を呼び出した直
後にスタックポインタは2となり,また,2行目にsub1に
関する情報が書き込まれる。関数が他の関数を呼び出す
とスタックポインタは+1され,またその行に新たに呼
び出された関数に関する情報が書き込まれる。FIG. 3 shows a trace stack provided in the trace program. Immediately after the execution of the main routine main begins, only the topmost line is used and the stack pointer points to 1. Immediately after main calls sub1, the stack pointer becomes 2, and information about sub1 is written on the second line. When a function calls another function, the stack pointer is incremented by 1, and information about the newly called function is written in that line.
関数から呼び出し元に復帰すると,スタックポインタ
は−1される。1とスタックポインタの値の間(両端を
含む)だけが有効な値である。When returning from the function to the caller, the stack pointer is decremented by one. Only valid values between 1 and the stack pointer value (inclusive).
第4図は,各関数の処理を他の関数呼び出し処理に限
って示したものである。FIG. 4 shows processing of each function limited to other function calling processing.
第5図は,mainの実行中におけるトレーススタックの
内容の変化を示したものである。FIG. 5 shows changes in the contents of the trace stack during execution of main.
第6図(a)は,トレースデータ出力例を示し,従来
と同様にトレース出力の最大出力深さを指定しない場合
のものである。この場合,全ての関数呼び出しの経過の
トレースデータが出力される。FIG. 6 (a) shows an example of trace data output, where the maximum output depth of trace output is not designated as in the conventional case. In this case, trace data of the progress of all function calls is output.
第6図(b)は別のトレース出力例で,トレース出力
の最大出力深さを2と指定した場合である。ここではト
レース出力はmainとsub1の2段階に限定されている。FIG. 6 (b) shows another example of trace output, in which the maximum output depth of trace output is specified as 2. Here, the trace output is limited to two stages, main and sub1.
第7図は,トレースプログラムが実行する初期処理を
示す。関数入口テーブルを生成するのが主目的である。FIG. 7 shows the initial processing executed by the trace program. The main purpose is to create a function entry table.
第7図のフローを説明すると,トレースプログラム
は,まず被トレースプログラムロードをOSに依頼し,ロ
ードモジュールのロードを行わせる。このときロードモ
ジュール情報もロードされる。Explaining the flow in FIG. 7, the trace program first requests the OS to load the traced program and loads the load module. At this time, the load module information is also loaded.
次にトレースプログラムは,OSからロードされた被ト
レースプログラムの開始アドレスを求め,ロードモジュ
ール情報を読んで,被トレースプログラムの全関数につ
いてその入口アドレスを求める(実アドレスによる)。Next, the trace program obtains the start address of the traced program loaded from the OS, reads the load module information, and obtains the entry address of all the functions of the traced program (by the real address).
次に被トレースプログラムの各関数入口の旧命令を第
2図の関数入口テーブルに退避し,代りにブレークポイ
ント命令を設定する。またこのとき関数入口テーブルに
ブレークポイント命令を格納する。Next, the old instruction at each function entry of the traced program is saved in the function entry table of FIG. 2 and a breakpoint instruction is set instead. At this time, the break point instruction is stored in the function entry table.
そしてトレーススタックを初期化する。 Then the trace stack is initialized.
第8図のフローを説明する。 The flow of FIG. 8 will be described.
トレースプログラムは,被トレースプログラムが実行
を停止すると,OSに依頼して停止原因を調べ,ブレーク
ポイント命令の実行により停止であった場合,ブレーク
ポイント命令の直前の実行命令を調べ,それが関数呼び
出しのJsr命令であった場合(yes)には関数呼び出し時
のトレース処理を行い,他の場合(no)には関数からの
復帰時のトレース処理を行う。When the traced program stops its execution, the trace program requests the OS to check the cause of the stop, and if it was stopped due to the execution of the breakpoint instruction, it checks the execution instruction immediately before the breakpoint instruction and calls that function call. If it is a Jsr instruction of (yes), the trace processing at the time of function call is performed, and in other cases (no), the trace processing at the time of returning from the function is performed.
関数呼び出し時のトレース処理では,まず関数入口テ
ーブルから,停止原因となったブレークポイント命令の
アドレスに一致する関数入口を探索し,呼び出し元のJs
r命令の次にある本来の命令(旧命令となる)とそのア
ドレスを第3図のトレーススタックに退避する。ここで
スタックポインタは+1される。In the trace processing at the time of function call, first, the function entry that matches the address of the breakpoint instruction that caused the stop is searched from the function entry table, and the Js of the calling source is searched.
The original instruction (becomes the old instruction) next to the r instruction and its address are saved in the trace stack of FIG. Here, the stack pointer is incremented by +1.
次に退避した旧命令のアドレスにブレークポイント命
令を設定する。Next, set a breakpoint instruction at the address of the saved old instruction.
それからスタックポインタの値を,指定されているト
レース出力の最大深さの値と比較し,許容されている場
合トレースデータを出力する。The stack pointer value is then compared to the specified maximum trace output depth value, and trace data is output if allowed.
一方,関数からの復帰時のトレース処理では,まず復
帰先となる命令のアドレス(ブレークポイント命令のア
ドレス)をOSに依頼して求める。On the other hand, in the trace processing when returning from a function, the address of the instruction (breakpoint instruction address) to be restored is first requested from the OS.
次にそのアドレスとトレーススタック中で一致するア
ドレスを求め,あれば(スタックポインタの値のスタッ
ク位置の1つ前にある),そのアドレスの内容のブレー
クポイント命令を旧命令に戻し,スタックポインタを−
1する。Next, if the address that matches that address in the trace stack is found (if it is one position before the stack position of the value of the stack pointer), the breakpoint instruction of the contents of that address is returned to the old instruction, and the stack pointer is set. −
Do one.
その後,スタックポインタの深さがトレース出力が許
容されているかどうかを調べ,許容されていればトレー
スデータを出力する。Then, it is checked whether the trace output is permitted for the depth of the stack pointer, and if it is permitted, the trace data is output.
第9図は,トレース途中における被トレースプログラ
ムのブレークポイントの設定状況を示す。FIG. 9 shows the setting status of break points in the traced program during the trace.
これはmainがsub1を,sub1がsub2を呼び出して,sub2が
実行中のときの状態である。斜線部分 は,ブレークポイントが設定されている場所を示す。This is the state when main calls sub1, sub1 calls sub2, and sub2 is executing. The shaded area Indicates where the breakpoint is set.
本発明によれば,被トレースプログラムに応じてトレ
ース出力のために関数呼び出しレベルを任意に指定する
ことにより,トレース出力量を適切な規模に抑制するこ
とができ,ファイル領域の不足によるトレース処理の途
中停止を回避することができる。According to the present invention, by arbitrarily specifying the function call level for the trace output according to the traced program, the trace output amount can be suppressed to an appropriate scale, and the trace processing due to the lack of the file area can be suppressed. Stopping on the way can be avoided.
第1図は本発明の原理図,第2図は本発明実施例に用い
る関数入口テーブルの構成図,第3図は本発明実施例に
用いるトレーススタックの構成図,第4図は関数の呼び
出し処理の説明図,第5図はトレーススタックの内容変
化の説明図,第6図はトレースデータ出力例の説明図,
第7図はトレースプログラムの初期処理の実施例フロー
図,第8図はトレース処理の実施例フロー図,第9図は
ブレークポイント命令の設定状態の説明図,第10図はト
レース処理機構の概略図である。 第1図中, 11:CPU 12:主記憶MS 13:OS 14:トレースプログラム 15:被トレースプログラム 16:トレーススタック 17:スタックポインタ 19:ファイル領域FIG. 1 is a principle diagram of the present invention, FIG. 2 is a configuration diagram of a function entry table used in the embodiment of the present invention, FIG. 3 is a configuration diagram of a trace stack used in the embodiment of the present invention, and FIG. 4 is a function call. 5 is an explanatory diagram of processing, FIG. 5 is an explanatory diagram of changes in the contents of the trace stack, FIG. 6 is an explanatory diagram of an example of trace data output,
FIG. 7 is a flow chart of an example of the initial processing of the trace program, FIG. 8 is a flow chart of the example of the trace processing, FIG. 9 is an explanatory view of the setting state of the breakpoint instruction, and FIG. 10 is an outline of the trace processing mechanism. It is a figure. In Figure 1, 11: CPU 12: Main memory MS 13: OS 14: Trace program 15: Traced program 16: Trace stack 17: Stack pointer 19: File area
Claims (1)
ムを構成する関数から他の関数の呼び出し又は復帰がお
こるたびにそれぞれ呼び出された関数,復帰先の関数の
名前と呼び出しの深さを出力するトレース処理におい
て,呼び出しの深さを監視し,呼び出しの深さが一定の
値以上になるとトレースの出力を抑止し,その後復帰が
行われて上記一定の値に戻った時点よりトレースの出力
を再開するよう制御することを特徴とする関数トレース
出力方式。1. A trace that traces the execution of a program and outputs the name of each called function, the function to which the function is restored, and the depth of the call each time another function is called or restored from a function that constitutes the program. In the processing, monitor the call depth, suppress the trace output when the call depth exceeds a certain value, and restart the trace output from the point when the call is restored and returns to the above certain value. A function trace output method that is controlled as follows.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP1068050A JP2683274B2 (en) | 1989-03-20 | 1989-03-20 | Function trace output method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP1068050A JP2683274B2 (en) | 1989-03-20 | 1989-03-20 | Function trace output method |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH02245944A JPH02245944A (en) | 1990-10-01 |
JP2683274B2 true JP2683274B2 (en) | 1997-11-26 |
Family
ID=13362572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP1068050A Expired - Fee Related JP2683274B2 (en) | 1989-03-20 | 1989-03-20 | Function trace output method |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2683274B2 (en) |
-
1989
- 1989-03-20 JP JP1068050A patent/JP2683274B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH02245944A (en) | 1990-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6308318B2 (en) | Method and apparatus for handling asynchronous exceptions in a dynamic translation system | |
US5369770A (en) | Standardized protected-mode interrupt manager | |
US6041425A (en) | Error recovery method and apparatus in a computer system | |
EP0319034A2 (en) | Method of recovering failure of online control program | |
JP2683274B2 (en) | Function trace output method | |
US6820153B2 (en) | Interrupt processing and memory management method in an operation processing device and a device using the same | |
EP0417916B1 (en) | Procedure state descriptor system for digital data processors | |
US5586320A (en) | High speed synchronous processing system for executing parallel processing of programs having loops | |
JPH0594353A (en) | Database management system | |
EP1011045B1 (en) | Object-oriented job scheduler | |
CN110109775B (en) | Virtual machine recovery method and device, terminal equipment and storage medium | |
JP2633874B2 (en) | Extension processing method | |
JP2885907B2 (en) | Online processing time analysis method | |
JP2795676B2 (en) | Program trace device | |
EP3923136A1 (en) | Hardware-accelerated computing system | |
JP2500804B2 (en) | calculator | |
JPH06250889A (en) | Fault processing system in data processing system | |
JP3330767B2 (en) | Information processing apparatus and trace acquisition method in information processing apparatus | |
JP2575761B2 (en) | Job management method | |
JP3079238B2 (en) | Debug device | |
JP2840539B2 (en) | Debug device | |
JPH06187217A (en) | System for synchronization between data base and normal file | |
JPH02216550A (en) | System for controlling mains storage area | |
JPH02234237A (en) | Trace start system for trace program | |
JPH0772874B2 (en) | Interrupt receiving device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |