JPH1165885A - Device and method for debugging software - Google Patents

Device and method for debugging software

Info

Publication number
JPH1165885A
JPH1165885A JP9217390A JP21739097A JPH1165885A JP H1165885 A JPH1165885 A JP H1165885A JP 9217390 A JP9217390 A JP 9217390A JP 21739097 A JP21739097 A JP 21739097A JP H1165885 A JPH1165885 A JP H1165885A
Authority
JP
Japan
Prior art keywords
function
information
stack
history data
software
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
JP9217390A
Other languages
Japanese (ja)
Inventor
Masato Kato
正人 加藤
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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP9217390A priority Critical patent/JPH1165885A/en
Publication of JPH1165885A publication Critical patent/JPH1165885A/en
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

PROBLEM TO BE SOLVED: To correctly generate function call stack information even in the case of an object code, to which the optimizing processing of a compiler is performed, and to enable execution trace using a high-level language. SOLUTION: This device has a break point setting managing part 18 for setting software break to the start and end addresses of an arbitrary function and a function execution history data storage part 19 for recording the argument information or return value information of the executed function. By performing the analysis of stack data when these software break conditions occur, the function call stack information can be correctly generated even in the case of the object code, to which the optimizing processing of the compiler is performed, and the execution trace is enabled using the high-level language.

Description

【発明の詳細な説明】DETAILED DESCRIPTION OF THE INVENTION

【0001】[0001]

【発明の属する技術分野】本発明は、ソフトウェア開発
のディバッグ工程で使われるソフトウェアディバッグ装
置及び方法に関するものであり、特に、ディバッグ対象
となるオブジェクトコードがコンパイラの最適化処理を
受けていてスタックデータの解析が正しく行えない場合
にも、関数コールスタック情報を正しく生成できるよう
にするとともに、高級言語レベルでのプログラム実行ト
レースを実現するソフトウェアディバッグ装置及び方法
に関するものである。
BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention relates to a software debugging apparatus and method used in a debugging process of software development, and more particularly, to an object code to be debugged which has been subjected to a compiler optimization process. The present invention relates to a software debug apparatus and method for correctly generating function call stack information even when stack data cannot be correctly analyzed and realizing a program execution trace at a high-level language level.

【0002】[0002]

【従来の技術】関数コールスタック機能は、ある特定の
時点で、すでに呼び出された関数のうち、まだ呼び出し
側に戻っていない関数を順番にリストし、現在実行中の
関数をその先頭に置いて表示する機能で、それぞれの呼
び出しについて渡した引数名と値、返却値などを表示す
る。
2. Description of the Related Art A function call stack function sequentially lists functions that have not been returned to a caller among functions already called at a specific point in time, and places a currently executing function at the top of the list. Display function displays the argument name and value passed for each call, return value, etc.

【0003】また、従来のソースディバッガではアセン
ブラレベルでのプログラム実行トレースしかサポートさ
れていないことが多く、開発者が自分の使用したプログ
ラミング言語のレベルでディバッグ作業を行うことがで
きなかった。
[0003] In addition, conventional source debuggers often support only program execution trace at the assembler level, so that developers cannot perform debugging at the level of the programming language used by themselves.

【0004】図2は、従来のソフトウェアディバッグ装
置のブロック構成図である。図2において、ソフトウェ
アディバッグ装置は、ディバッグ用のアプリケーション
プログラムであるソースディバッガ11を含むコンピュ
ータ10と、ソースディバッガ11の制御により被試験
プログラムのエミュレーションを行うエミュレータ12
とを備える。コンパイラ25とリンカ26は、C言語ソ
ースファイル24からオブジェクトファイル27を生成
し、オブジェクトファイル27が被試験プログラムとな
る。オブジェクトファイル27は、エミュレータ12の
中のエミュレーション部15で実行され、その実行結果
はトレースデータという形でトレースデータ格納部16
に蓄積される。
FIG. 2 is a block diagram of a conventional software debug device. In FIG. 2, a software debugging apparatus includes a computer 10 including a source debugger 11 which is an application program for debugging, and an emulator 12 for emulating a program under test under the control of the source debugger 11.
And The compiler 25 and the linker 26 generate an object file 27 from the C language source file 24, and the object file 27 is a program to be tested. The object file 27 is executed by the emulation unit 15 in the emulator 12, and the execution result is stored in the form of trace data in the trace data storage unit 16.
Is accumulated in

【0005】関数コールスタック機能の実現方法につい
て説明する。被試験プログラムを任意のアドレスまで実
行し、プログラムの実行を止める。その時、ソースディ
バッガ11は、エミュレーション部15内にあるスタッ
クメモリのデータを通信インタフェース部14と通信イ
ンタフェース部13を経由して、スタック情報解析部2
3に読み込む。また、ソースディバッガ11は、オブジ
ェクトファイル27に含まれるディバッグ情報を読み込
み、シンボル情報解析部17にてシンボル情報を解析
し、その結果をスタック情報解析部23に送る。スタッ
ク情報解析部23は、シンボル情報解析部17から出力
されたシンボル情報と、エミュレーション部15から出
力されたスタックメモリのデータから、スタックメモリ
上に積まれている関数の情報を解析する。
A method for realizing the function call stack function will be described. Execute the program under test to an arbitrary address and stop the execution of the program. At this time, the source debugger 11 transfers the data of the stack memory in the emulation unit 15 to the stack information analysis unit 2 via the communication interface unit 14 and the communication interface unit 13.
Read into 3. Further, the source debugger 11 reads the debug information included in the object file 27, analyzes the symbol information in the symbol information analysis unit 17, and sends the result to the stack information analysis unit 23. The stack information analysis unit 23 analyzes information of functions loaded on the stack memory from the symbol information output from the symbol information analysis unit 17 and the data of the stack memory output from the emulation unit 15.

【0006】図3は、一般的な関数の関数呼び出し時の
スタックメモリへのデータの積み方を示したものであ
る。現在呼び出されている関数は、それぞれ図3のよう
なスタック情報をスタックメモリ上に積んでいる。これ
らを解析することにより、関数の呼び出し順序を知るこ
とができる。スタック情報解析部23で作成された関数
情報を、関数コールスタック表示部20で関数コールス
タック情報として表示する。
FIG. 3 shows how data is stored in a stack memory when a general function is called. The currently called function has the stack information as shown in FIG. 3 loaded on the stack memory. By analyzing these, it is possible to know the order of function calls. The function information created by the stack information analysis unit 23 is displayed on the function call stack display unit 20 as function call stack information.

【0007】次に、プログラム実行トレース機能の実現
方法について説明する。被試験プログラムをエミュレー
ション部15で実行すると、インストラクションの実行
結果やメモリのアクセス結果を示すデータが、トレース
データ格納部16に書き込まれる。ソースディバッガ1
1は、トレースデータ格納部16に格納されたトレース
データを通信インタフェース部14、通信インタフェー
ス部13を経由して読み出し、データを整形した後、実
行トレース表示部22に表示する。この場合、トレース
データ格納部16に格納されているトレースデータは、
アセンブラレベルのデータであるため、ソースディバッ
ガ11で特別な処理を行わない限り、実行トレースで表
示部22に表示されるデータはアセンブラレベルのデー
タとなる。
Next, a method of realizing the program execution trace function will be described. When the program under test is executed by the emulation unit 15, data indicating an instruction execution result and a memory access result is written to the trace data storage unit 16. Source debugger 1
1 reads out the trace data stored in the trace data storage unit 16 via the communication interface unit 14 and the communication interface unit 13, shapes the data, and displays the data on the execution trace display unit 22. In this case, the trace data stored in the trace data storage unit 16 is
Since the data is at the assembler level, the data displayed on the display unit 22 in the execution trace is the data at the assembler level unless special processing is performed by the source debugger 11.

【0008】また、このような従来例としては、例え
ば、特開平6−242943号公報に、「ソースコード
レベルデバッグ装置」の開示があるが、これは、コンパ
イラの最適化処理によって命令の実行順序が変更される
等ソースプログラムと逆アセンブルコードの対応がとれ
なくなる場合にもソースコードディバッグができるよう
にするためのものであり、本発明の目的や用途とは異な
るものである。
As a conventional example, Japanese Patent Laid-Open Publication No. Hei 6-242943 discloses a "source code level debugging device". This is to enable source code debugging even when the source program and the disassembled code can no longer be matched, for example, when the file is changed, and is different from the purpose and application of the present invention.

【0009】[0009]

【発明が解決しようとする課題】以下、図3を用いてス
タックデータの積み方について説明する。関数呼び出し
時には、目的の関数を呼び出す前に、呼び出し元の関数
側で、まずワーク用途で使用するレジスタの値をスタッ
クメモリ上に退避する。これがワーク用レジスタ退避領
域50である。次に引数、関数の戻りアドレスをスタッ
クメモリに積んで関数を呼び出す。呼び出された関数側
では、現在のフレームポインタ値57、レジスタ変数用
に割り当てるレジスタ値を退避し、オートマチック変数
用の領域を確保する。これらは、それぞれ引数領域5
1、戻りアドレス領域52、OLDFP領域53、レジ
スタ変数退避領域54、オートマチック変数領域55に
格納される。引数領域51は、noauto関数、no
rec関数のように引数をレジスタ渡しする関数の場合
には、引数を格納したレジスタのデータ退避領域とな
る。特殊なケースとして、コンパイラの最適化オプショ
ン指定によりフレームポインタを使用しないように指定
した場合や、noauto関数、norec関数の呼び
出し時には、OLD FP領域53は存在しない。スタ
ックフレームサイズ56は、コンパイラの出力情報であ
り、スタックポインタ(SP)とこの値を使って戻りア
ドレス領域52の位置を決定する。OLD FP領域5
3に格納された値は、現在実行中の関数を呼び出した呼
び出し元関数のスタックデータの終端57を指す。
Hereinafter, a method of stacking the stack data will be described with reference to FIG. When calling a function, before calling the target function, the caller function first saves the value of the register used for the work purpose on the stack memory. This is the work register save area 50. Next, the function and the return address of the function are loaded on the stack memory and the function is called. The called function saves the current frame pointer value 57 and the register value to be allocated for the register variable, and secures an area for the automatic variable. These are respectively the argument area 5
1. Stored in a return address area 52, an OLDFP area 53, a register variable save area 54, and an automatic variable area 55. The argument area 51 includes a noauto function, no
In the case of a function that passes an argument to a register, such as a rec function, the function is a data saving area of the register storing the argument. As a special case, the OLD FP area 53 does not exist when the use of the frame pointer is not specified by the optimization option of the compiler or when the noauto function or the norec function is called. The stack frame size 56 is output information of the compiler, and determines the position of the return address area 52 using the stack pointer (SP) and this value. OLD FP area 5
The value stored in 3 indicates the end 57 of the stack data of the caller function that called the currently executing function.

【0010】図4は、noauto,norec関数宣
言を使用したC言語ソースプログラムの一例である。プ
ログラム中で宣言されている関数は3つであり、mai
nは通常の関数、funcAはnoauto宣言した関
数、funcBはnorec宣言した関数である。プロ
グラムを図4の25行目のmain関数から実行し、1
0行目のfuncB関数を呼び出したところでブレーク
させた時のスタックメモリの状態を図5に示す。
FIG. 4 shows an example of a C language source program using noauto and norec function declarations. There are three functions declared in the program.
n is a normal function, funcA is a function declared noauto, and funcB is a function declared norec. The program is executed from the main function on the 25th line in FIG.
FIG. 5 shows the state of the stack memory when a break occurs when the funcB function on the 0th line is called.

【0011】図5の60,61,62は、funcA関
数呼び出し時にmain関数が積んだスタックデータで
あり、63,64,65は、funcB関数呼び出し時
にfuncA関数が積んだスタックデータである。現在
のプログラムカウンタ(PC)の値をエミュレータ部か
ら読み出し、シンボル情報と比較することにより、現在
実行中の関数がfuncB関数であることを特定するこ
とができる。
In FIG. 5, reference numerals 60, 61, and 62 denote stack data on which the main function is loaded when the funcA function is called, and reference numerals 63, 64, and 65 denote stack data on which the funcA function is loaded when the funcB function is called. By reading the current value of the program counter (PC) from the emulator unit and comparing it with the symbol information, it is possible to specify that the function currently being executed is the funcB function.

【0012】また、現在のSPの値から戻りアドレス領
域65に格納されている値を読み出し、funcA関数
が積んだ戻りアドレスの値を取得できる。このアドレス
がfuncA関数の範囲内にあることからfuncB関
数がfuncA関数から呼び出されたと結論付けること
ができる。更に、funcA関数の呼び出し元関数を特
定するためには、戻りアドレス領域62に格納されてい
るアドレス値を読み出さなければならない。
Also, the value stored in the return address area 65 is read from the current SP value, and the value of the return address accumulated by the funcA function can be obtained. Since this address is within the range of the funcA function, it can be concluded that the funcB function was called from the funcA function. Further, in order to specify the caller function of the funcA function, the address value stored in the return address area 62 must be read.

【0013】しかし、ワーク用レジスタ退避領域63の
サイズ情報はコンパイラの出力にはないため、戻りアド
レス領域62の位置を特定することはできず、これ以上
スタックデータを正しく解析することはできない。この
ことから、図3のOLD FP領域53がスタックメモ
リ上に積まれている場合を除いて、すなわち、コンパイ
ラの最適化オプション指定時やnoauto関数、no
rec関数使用時には、幾重にもネストした関数の呼び
出し関係をスタックデータを解析することによって調べ
ることはできないという問題があった。
However, since the size information of the work register save area 63 is not included in the output of the compiler, the position of the return address area 62 cannot be specified, and the stack data cannot be correctly analyzed any more. Therefore, except when the OLD FP area 53 of FIG. 3 is stacked on the stack memory, that is, when the optimization option of the compiler is specified, the noauto function, the no
When the rec function is used, there is a problem that the calling relation of the nested functions cannot be checked by analyzing the stack data.

【0014】先に示したように、関数スタックトレース
機能は、関数の呼び出し時にスタックメモリ上に積まれ
たスタックデータを、現在のSPの位置を頼りに、順番
に解析することによって実現されている。スタックメモ
リ上に積まれるデータとしては、関数の戻りアドレス以
外に引数の情報やレジスタの退避データなどがあり、こ
れらの解析を正しく行うことが求められる。
As described above, the function stack trace function is realized by sequentially analyzing the stack data loaded on the stack memory at the time of calling the function, depending on the current SP position. . The data stacked on the stack memory includes not only the return address of the function but also information on arguments and data saved in registers, and it is required to analyze these correctly.

【0015】プログラマはコード効率を上げるために、
コンパイル時にスタックフレームを最適化する最適化オ
プションを指定したり、コンパイラに固有の拡張機能を
使うことがある。例えば、オートマチック変数を使用し
ない関数の場合には、関数をnoauto関数として宣
言することで、スタックフレームの最適化をはかること
ができる。スタックフレームを最適化することにより、
関数呼び出しの前後処理を簡素化し、オブジェクトコー
ドの短縮と実行速度の向上を図ることができる。また、
関数自身から他の関数を呼び出さない関数に対しては、
関数をnorec関数として宣言することにより、no
auto関数と同様の効果を得ることができる。
[0015] To increase code efficiency, the programmer
The compiler may specify optimization options to optimize the stack frame at compile time, or use compiler-specific extensions. For example, in the case of a function that does not use an automatic variable, the stack frame can be optimized by declaring the function as a noauto function. By optimizing the stack frame,
It is possible to simplify the pre- and post-processing of the function call, to shorten the object code and improve the execution speed. Also,
For functions that do not call other functions from the function itself,
By declaring a function as a norec function, no
The same effect as the auto function can be obtained.

【0016】また、従来のディバッグ装置の構成で、高
級言語レベルでの実行トレース情報を提供するために
は、図2のトレースデータ格納部16に保存されている
トレースデータと、ソースディバッガ11がオブジェク
トファイル27から読み込んだシンボル情報を元に、高
級言語レベルの実行トレース情報を作成することが考え
られる。しかしこの場合、トレースデータ格納部16に
保存されるデータの中には、実行トレース情報を作成す
るのに必要なデータ以外のものが多く含まれており、実
際に有効なデータが少ない。そのため、十分な量の実行
トレース情報を作成することはできないと考えられる。
In order to provide execution trace information at the high-level language level in the configuration of the conventional debug device, the trace data stored in the trace data storage unit 16 of FIG. It is conceivable to create high-level language-level execution trace information based on the symbol information read from the object file 27. However, in this case, the data stored in the trace data storage unit 16 includes many data other than the data necessary for creating the execution trace information, and there is little actually valid data. Therefore, it is considered that a sufficient amount of execution trace information cannot be created.

【0017】また、トレースデータを格納するトレース
メモリの容量を大きくすることは、コスト的に問題があ
り有効な手段とは言えない。そのため、従来のディバッ
グ装置の構成で実用的な高級言語レベル実行トレースを
実現することは、事実上不可能であると考えられてい
る。
Increasing the capacity of the trace memory for storing the trace data is cost effective and cannot be said to be an effective means. Therefore, it is considered that it is practically impossible to realize a practical high-level language-level execution trace with the configuration of the conventional debug device.

【0018】[発明の目的]本発明の目的は、コンパイ
ラの最適化処理を受けたオブジェクトコードに対して
も、関数コールスタック情報を正しく生成できるように
することにある。
[Object of the Invention] An object of the present invention is to enable function call stack information to be correctly generated even for object code that has been subjected to compiler optimization processing.

【0019】また、高級言語レベルでの実行トレースを
実現することにある。
Another object of the present invention is to realize an execution trace at a high-level language level.

【0020】[0020]

【課題を解決するための手段】本発明は、前述した課題
を解決するための手段として、検査対象となるソースプ
ログラムをコンパイル処理によってオブジェクトコード
に変換し、前記オブジェクトコードに従う処理を順次実
行させることによって前記ソースプログラムを検証する
ソフトウェアディバッグ装置において、前記ソースプロ
グラム中の任意の関数の開始アドレスと終了アドレスに
ソフトウェアブレーク条件を設定するためのブレークポ
イント設定管理部と、前記関数の実行順に関数実行情報
を保存する関数実行履歴データ格納部と、を有し、前記
ソフトウェアブレーク条件の成立時毎にスタックメモリ
を解析することにより、前記関数実行履歴データを生成
する手段を有することを特徴とするソフトウェアディバ
ッグ装置を提供するものである。
According to the present invention, as a means for solving the above-mentioned problems, a source program to be inspected is converted into an object code by a compiling process, and a process according to the object code is sequentially executed. A software debug device that verifies the source program by executing a function in a breakpoint setting management unit for setting a software break condition at a start address and an end address of an arbitrary function in the source program; A function execution history data storage unit for storing information; and a means for generating the function execution history data by analyzing a stack memory every time the software break condition is satisfied. Provide debugging device It is intended.

【0021】また、前記関数実行履歴データ格納部に登
録された情報から、関数コールスタック情報を生成する
手段を有することを特徴とする。
[0021] Further, there is provided a means for generating function call stack information from information registered in the function execution history data storage.

【0022】また、前記関数実行履歴データ格納部に登
録された情報から、高級言語レベルの実行トレース情報
を生成する手段を有することを特徴とする。
The present invention is characterized in that there is provided a means for generating high-level language-level execution trace information from the information registered in the function execution history data storage.

【0023】また、本発明は、前述した課題を解決する
ための手段として、検査対象となるソースプログラムを
コンパイル処理によってオブジェクトコードに変換し、
前記オブジェクトコードに従う処理を順次実行させるこ
とによって前記ソースプログラムを検証するソフトウェ
アディバッグ方法において、前記ソースプログラム中の
任意の関数の開始アドレスと終了アドレスにソフトウェ
アブレーク条件を設定し、前記ソフトウェアブレーク条
件の成立時毎に、スタックメモリを解析することにより
関数実行履歴データを生成し、前記関数の実行順に関数
実行情報を保存する関数実行履歴データ格納部に格納す
ることを特徴とするソフトウェアディバッグ方法を提供
するものである。
Further, according to the present invention, as a means for solving the above-mentioned problem, a source program to be inspected is converted into an object code by a compiling process.
In a software debugging method for verifying the source program by sequentially executing processes according to the object code, a software break condition is set at a start address and an end address of an arbitrary function in the source program, and A software debugging method characterized by generating function execution history data by analyzing a stack memory each time the condition is satisfied, and storing the function execution history data in a function execution history data storage unit that stores function execution information in the order of execution of the functions. To provide.

【0024】[作用]本発明によれば、任意の関数の開
始アドレスと終了アドレスにソフトウェアブレークを設
定するためのブレークポイント設定管理部(図1の1
8)と、実行した関数の引数情報や戻り値情報を記録す
る関数実行履歴データ格納部(図1の19)を有し、ス
タックデータの解析を上記のソフトウェアブレーク条件
発生時(成立時)に行うことにより、コンパイラの最適
化処理を受けたオブジェクトコードに対しても関数コー
ルスタック情報を正しく生成することができるととも
に、高級言語レベルで実行トレースを実現することがで
きる。
[Operation] According to the present invention, a breakpoint setting management unit (1 in FIG. 1) for setting a software break at a start address and an end address of an arbitrary function.
8) and a function execution history data storage unit (19 in FIG. 1) for recording argument information and return value information of the executed function, and analyze the stack data when the above software break condition occurs (when it is satisfied). By doing so, the function call stack information can be correctly generated even for the object code that has been subjected to the optimization processing of the compiler, and the execution trace can be realized at the high-level language level.

【0025】スタックデータの解析を正確に行なうため
には、現在実行中の関数に関しては、常に正しくスタッ
クデータの解析を行うことができる。このことから、ど
のような状況においても正しく関数スタックトレースを
行うためには、個々の関数が呼び出された直後のタイミ
ングでスタックデータの解析を行えばよい。そこで、本
発明は、エミュレータのソフトウェアブレーク機能を使
って、任意の関数の開始アドレスと終了アドレスにブレ
ーク条件を設定し、関数が呼び出された直後のスタック
メモリ情報を解析することにより、コンパイラの最適化
オプション指定時や、noauto関数、norec関
数使用時にもスタックデータの解析を正しく行うもので
ある。
In order to accurately analyze the stack data, it is possible to always correctly analyze the stack data for the function currently being executed. Therefore, in order to correctly perform the function stack trace in any situation, it is only necessary to analyze the stack data at a timing immediately after each function is called. Therefore, the present invention uses the software break function of the emulator to set a break condition at the start address and end address of an arbitrary function, and analyzes the stack memory information immediately after the function is called to optimize the compiler. The stack data is correctly analyzed even when the optimization option is specified or when the noauto function or the norec function is used.

【0026】関数の開始アドレスのブレーク条件は、関
数の戻りアドレスと引数の取得に使用し、終了アドレス
のブレーク条件は、返却値の取得に使用する。取得した
戻りアドレス(関数名)、引数、返却値は、関数実行履
歴データとして関数実行履歴データ格納部に登録され
る。関数実行履歴データからは、関数コールスタック情
報を作成することができるとともに、関数のプログラム
実行トレースを高級言語の関数レベルで実現することが
できる。
The break condition at the start address of the function is used to obtain the return address and argument of the function, and the break condition at the end address is used to obtain the return value. The acquired return address (function name), argument, and return value are registered as function execution history data in the function execution history data storage unit. Function call stack information can be created from the function execution history data, and a program execution trace of a function can be realized at the function level of a high-level language.

【0027】このように、本発明は、コンパイラの最適
化処理が施されたオブジェクトコードに対しても正しく
関数コールスタック情報を生成することができること、
更には高級言語レベルでの実行トレースを実現すること
を特徴とする。
As described above, according to the present invention, function call stack information can be correctly generated even for object code that has been subjected to compiler optimization processing.
Further, the present invention is characterized in that an execution trace at a high-level language level is realized.

【0028】以下、更に、本発明の作用効果について説
明する。
Hereinafter, the function and effect of the present invention will be further described.

【0029】従来の高級言語デバッガでサポートされて
いる関数コールスタック機能では、ある特定条件下にお
いては、関数のコールスタック情報を正しく取得するこ
とができないという問題があった。
The function call stack function supported by the conventional high-level language debugger has a problem that under certain conditions, the call stack information of a function cannot be correctly obtained.

【0030】また、プログラム中で実行した関数の処理
の全体的な流れ(履歴)を追うことができなかった。
Further, the entire flow (history) of the processing of the function executed in the program cannot be followed.

【0031】これは、例えば、コンパイラの最適化オプ
ション指定時や、noauto,norec関数使用時
にはスタックデータの解析が正しく行えないからであ
る。
This is because, for example, when the optimization option of the compiler is specified or when the noauto and norec functions are used, the stack data cannot be correctly analyzed.

【0032】また、プログラム実行を停止させた(ブレ
ーク)状態で、スタックメモリの解析を行っているから
である。
The reason is that the stack memory is analyzed while the program execution is stopped (break).

【0033】そこで、本発明では、コンパイラから出力
されたシンボル情報をもとに、任意の関数の開始アドレ
スと終了アドレスにソフトウェアブレーク条件を設定す
ることにより、各関数がコールされた順序、引数の情
報、戻り値の情報をメモリ上に格納し、解析すること
で、C言語レベルでの関数のコールスタック履歴を生成
する。
Therefore, in the present invention, by setting software break conditions at the start address and end address of an arbitrary function based on the symbol information output from the compiler, the order in which each function is called and the argument By storing and analyzing information and return value information in a memory, a call stack history of functions at the C language level is generated.

【0034】noauto関数やnorec関数は、引
数をレジスタ渡しするため、この場合、引数はレジスタ
から取得する。取得した引数を関数名とともに関数実行
履歴データ格納部(図1の19)に登録する。
The noauto function and the norec function pass arguments to registers, and in this case, the arguments are obtained from the registers. The acquired argument is registered in the function execution history data storage (19 in FIG. 1) together with the function name.

【0035】すなわち、本発明では、各関数の開始アド
レスにソフトウェアブレークイベントを設定し、イベン
トブレーク時に、その関数の戻り番地にソフトウェアブ
レークイベントを設定している。開始アドレスによるブ
レーク時には引数情報を、また戻り番地によるブレーク
時には返却値情報を保存し、関数コールスタック情報を
生成する。
That is, in the present invention, a software break event is set at the start address of each function, and at the time of an event break, a software break event is set at the return address of the function. When the break is caused by the start address, the argument information is stored, and when the break is caused by the return address, the return value information is stored, and the function call stack information is generated.

【0036】本発明では、関数がコールされた直後にス
タックメモリ情報を解析しているため、noauto,
norec関数使用時や、コンパイラの最適化オプショ
ン指定時にも、常に正しいスタック情報を得ることがで
きる。
In the present invention, since the stack memory information is analyzed immediately after the function is called, noauto,
The correct stack information can always be obtained even when using the norec function or when specifying the optimization option of the compiler.

【0037】これにより、本発明によれば、いかなる条
件下でも、関数コールスタック情報を正しく生成するこ
とができる。
Thus, according to the present invention, function call stack information can be correctly generated under any conditions.

【0038】また、従来のアセンブラレベルでのトレー
ス情報ではなく、C言語等の高級言語レベルでプログラ
ムの処理の流れを追うことができるため、C言語等の高
級言語で開発しているプログラマにとっては開発効率の
向上が見込まれる。
Further, since it is possible to follow the flow of program processing at a high-level language level such as C instead of the conventional trace information at the assembler level, a programmer developing with a high-level language such as C can use Improvements in development efficiency are expected.

【0039】[0039]

【実施例】本発明の実施例について、図1を用いて説明
する。図1は、本発明を実施するソフトウェアディバッ
グ装置のブロック構成図である。図1において、ソフト
ウェアディバッグ装置は、ディバッグ用のアプリケーシ
ョンプログラムであるソースディバッガ11を含むコン
ピュータ10と、ソースディバッガ11の制御により被
試験プログラムのエミュレーションを行うエミュレータ
12とを備える。被試験プログラムであるオブジェクト
ファイル27は、C言語ソースファイル24にコンパイ
ラ25、リンカ26の処理を施して作成したものであ
る。ソースディバッガ11は、オブジェクトファイル2
7を読み込み、シンボル情報解析部17で全ての関数の
開始・終了アドレスの情報をテーブル化し、関数アドレ
ス情報テーブルを作成する。
An embodiment of the present invention will be described with reference to FIG. FIG. 1 is a block diagram showing the configuration of a software debug device for implementing the present invention. In FIG. 1, the software debug device includes a computer 10 including a source debugger 11 which is an application program for debugging, and an emulator 12 which emulates a program under test under the control of the source debugger 11. The object file 27, which is the program under test, is created by processing the C language source file 24 with the compiler 25 and the linker 26. The source debugger 11 is the object file 2
7 is read, the symbol information analysis unit 17 tabulates information on the start and end addresses of all functions, and creates a function address information table.

【0040】ソースディバッガ11は、この関数アドレ
ス情報テーブルを元に各関数の開始アドレスと終了アド
レスに対してブレークポイント設定管理部18からソフ
トウェアブレーク条件を設定する。ソフトウェアブレー
クは、エミュレータの持つ機能であり、設定可能なブレ
ークポイントの数がハードウェアブレークポイントに比
べて十分に多いことが特長である。エミュレータ12内
には、オブジェクトコードの実行をエミュレートするエ
ミュレーション部15と、インストラクションの実行結
果やメモリのアクセス結果を保持するトレースデータ格
納部16を有する。ソースディバッガ11は、エミュレ
ーション部15内のスタックメモリから読み出したスタ
ックデータと、オブジェクトファイル27を読み込みシ
ンボル情報解析部17で作成したシンボル情報から、ス
タック情報解析部23で関数実行履歴データを作成し、
関数実行履歴データ格納部19に保存する。このデータ
をもとに、関数コールスタック情報を関数コールスタッ
ク表示部20に、高級言語レベルでの実行トレース結果
を実行トレース表示部21に表示する。また、従来と同
様にアセンブラレベルでのトレースも実行トレース表示
部22に表示する。
The source debugger 11 sets software break conditions from the breakpoint setting management unit 18 for the start address and end address of each function based on the function address information table. The software break is a function of the emulator, and is characterized in that the number of breakpoints that can be set is sufficiently larger than the number of hardware breakpoints. The emulator 12 includes an emulation unit 15 for emulating the execution of the object code, and a trace data storage unit 16 for storing the execution result of the instruction and the access result of the memory. The source debugger 11 creates function execution history data in the stack information analysis unit 23 from the stack data read from the stack memory in the emulation unit 15 and the symbol information created in the symbol information analysis unit 17 by reading the object file 27.
It is stored in the function execution history data storage unit 19. Based on this data, the function call stack information is displayed on the function call stack display section 20, and the execution trace result at the high-level language level is displayed on the execution trace display section 21. Also, the trace at the assembler level is displayed on the execution trace display unit 22 as in the conventional case.

【0041】これらの詳細を図4のC言語ソースプログ
ラム例を用いて説明する。図4のC言語ソースプログラ
ムに対してコンパイラ25とリンカ26から出力された
オブジェクトファイル27をソースディバッガ11で読
み込み、エミュレータ12にダウンロードする。
The details will be described with reference to an example of a C language source program shown in FIG. The object file 27 output from the compiler 25 and the linker 26 for the C language source program in FIG. 4 is read by the source debugger 11 and downloaded to the emulator 12.

【0042】ソースディバッガ11は、シンボル情報解
析部17で関数アドレス情報テーブルを作成する。ソー
スディバッガ11は、関数アドレス情報テーブルの情報
を元に、任意の関数の開始アドレスと終了アドレスの全
てに対して、ブレークポイント設定管理部18からソフ
トウェアブレーク条件を設定する。
The source debugger 11 creates a function address information table in the symbol information analyzer 17. The source debugger 11 sets software break conditions from the breakpoint setting management unit 18 for all of the start address and end address of an arbitrary function based on the information in the function address information table.

【0043】ソフトウェアブレーク条件設定後、被試験
プログラムを実行すると、はじめに図4の26行目のm
ain関数の開始アドレスでブレークする。ここで、エ
ミュレーション部15からPCの値を読み出し、関数ア
ドレス情報テーブルのデータから現在実行中の関数がm
ain関数であることを特定する。
After the software break conditions are set, the program under test is executed.
Break at the start address of the ain function. Here, the value of the PC is read from the emulation unit 15 and the function currently being executed is m from the data in the function address information table.
Specifies that the function is an ain function.

【0044】更に、スタック情報解析部23がエミュレ
ーション部15の中のスタックデータとシンボル情報解
析部18の出力情報を読み込んで解析し、関数名と引数
を関数実行履歴データ格納部19に登録する。関数実行
履歴データ取得後、ソースディバッガ11はプログラム
を再実行する。
Further, the stack information analysis section 23 reads and analyzes the stack data in the emulation section 15 and the output information of the symbol information analysis section 18, and registers the function name and the argument in the function execution history data storage section 19. After acquiring the function execution history data, the source debugger 11 executes the program again.

【0045】次に、図4の15行目のfuncA関数の
開始アドレスでブレークする。この時、スタックメモリ
には図5の60,61,62のデータが積まれている。
先ほどと同様に、PC値から関数がfuncA関数であ
ることを特定する。noauto関数であるfuncA
関数は引数をレジスタ渡しするため、この場合、引数は
レジスタから取得する。取得した引数を関数名とともに
関数実行履歴データ格納部19に登録する。
Next, a break occurs at the start address of the funcA function on line 15 in FIG. At this time, the data of 60, 61 and 62 in FIG. 5 is stored in the stack memory.
Similarly to the above, it is specified from the PC value that the function is the funcA function. funcA which is a noauto function
In this case, the argument is obtained from the register because the function passes the argument to the register. The acquired argument is registered in the function execution history data storage unit 19 together with the function name.

【0046】更にプログラムを実行すると、図4の10
行目のfuncB関数の開始アドレスでブレークする。
この時、スタックメモリには図5の63,64,65が
積まれている。norec関数も引数をレジスタ渡しす
るため、ここでも同様にレジスタから引数を取得し、関
数名とともに関数実行履歴データ格納部19に登録す
る。
When the program is further executed, 10 in FIG.
Break at the start address of the funcB function on the line.
At this time, 63, 64 and 65 of FIG. 5 are stacked on the stack memory. Since the norec function also passes arguments to registers, the arguments are similarly acquired from the registers and registered in the function execution history data storage unit 19 together with the function names.

【0047】更にプログラムを実行すると、13行目の
funcB関数の終了アドレスでブレークする。ここで
は、PC値を元に実行中の関数がfuncB関数である
ことを特定する。ソースディバッガ11は、返却値を格
納しているレジスタから返却値を取得した後、関数名と
ともに関数実行履歴データ格納部19に登録する。返却
後は、関数の返却値の型によって渡す場所があらかじめ
決められている。
When the program is further executed, a break occurs at the end address of the funcB function on the thirteenth line. Here, it is specified that the function being executed is a funcB function based on the PC value. After acquiring the return value from the register storing the return value, the source debugger 11 registers it in the function execution history data storage unit 19 together with the function name. After the return, the location to be passed is determined in advance by the type of the return value of the function.

【0048】続いて、プログラムを再実行すると、23
行目のfuncA関数の終了アドレスでブレークする。
ここでも、同様に関数名と返却値を関数実行履歴データ
格納部19に登録する。main関数の終了アドレスに
ついても同様に処理を行い、関数実行履歴データ格納部
19に全てのデータを登録する。
Subsequently, when the program is re-executed,
Break at the end address of the funcA function on the line.
Here, similarly, the function name and the return value are registered in the function execution history data storage unit 19. The same processing is performed for the end address of the main function, and all data is registered in the function execution history data storage unit 19.

【0049】また、関数実行履歴データ格納部のデータ
をもとに、関数コールスタック情報を関数コールスタッ
ク表示部20に、高級言語レベルでの実行トレース結果
を実行トレース表示部21に表示する。また、従来と同
様にアセンブラレベルでのトレースも実行トレース表示
部22に表示する。
Also, based on the data in the function execution history data storage unit, the function call stack information is displayed on the function call stack display unit 20, and the execution trace result at the high-level language level is displayed on the execution trace display unit 21. Also, the trace at the assembler level is displayed on the execution trace display unit 22 as in the conventional case.

【0050】最後に、関数実行履歴データ格納部19に
登録されたデータの表示例を示す。図4の10行目のf
uncB関数呼び出し時に、関数コールスタック表示部
20に表示されるデータは図6(a)のようになる。ま
た、図4の18行目でC言語レベルの実行トレース表示
部21に表示されるデータは図6(b)のようになる。
70は引数の値であり、71は返却値の値である。引数
がポインタの場合にはアドレス値を表示し、返却後は<
return>として表示される。
Finally, a display example of data registered in the function execution history data storage unit 19 will be described. F on line 10 in FIG.
When the uncB function is called, the data displayed on the function call stack display section 20 is as shown in FIG. The data displayed on the C language level execution trace display section 21 on the 18th line in FIG. 4 is as shown in FIG. 6B.
70 is the value of the argument, and 71 is the value of the return value. If the argument is a pointer, the address value is displayed.
return>.

【0051】[0051]

【発明の効果】以上のように本発明によれば、コンパイ
ル時に最適化オプションを指定した場合、あるいはコン
パイラの拡張機能であるnoauto関数宣言、nor
ec関数宣言を使用して、オブジェクトコードの効率化
をはかった関数に対しても、正しく関数コールスタック
データを生成することができる。
As described above, according to the present invention, when an optimizing option is specified at the time of compiling, or when a noauto function declaration, nor
Using the ec function declaration, function call stack data can be correctly generated even for a function whose object code is more efficient.

【0052】また、関数実行履歴データを使用して、高
級言語レベルのプログラム実行トレースデータを生成す
ることができる。これにより、被試験プログラムと同じ
高級言語レベルでのディバッグが可能となり、ディバッ
グ作業の効率を向上させることができる。
Further, high-level language-level program execution trace data can be generated using the function execution history data. As a result, debugging at the same high-level language level as the program under test can be performed, and the efficiency of the debugging operation can be improved.

【図面の簡単な説明】[Brief description of the drawings]

【図1】本発明を実施する装置の一実施例を示すブロッ
ク構成図。
FIG. 1 is a block diagram showing an embodiment of an apparatus for implementing the present invention.

【図2】従来の装置の一例を示すブロック構成図。FIG. 2 is a block diagram showing an example of a conventional apparatus.

【図3】関数呼び出し時のスタックメモリ状態図。FIG. 3 is a state diagram of a stack memory when a function is called;

【図4】C言語ソースプログラム例。FIG. 4 is an example of a C language source program.

【図5】図4のソースプログラムにおけるスタック状態
図。
FIG. 5 is a stack state diagram in the source program of FIG. 4;

【図6】関数コールスタック表示例と実行トレース表示
例。
FIG. 6 shows a display example of a function call stack and a display example of an execution trace.

【符号の説明】[Explanation of symbols]

10 コンピュータ 11 ソースディバッガ 12 エミュレータ 13 通信インタフェース部(コンピュータ側) 14 通信インタフェース部(エミュレータ側) 15 エミュレーション部 16 トレースデータ格納部 17 シンボル情報解析部 18 ブレークポイント設定管理部 19 関数実行履歴データ格納部 20 関数コールスタック表示部 21 実行トレース表示部(C言語レベル) 22 実行トレース表示部(アセンブラレベル) 23 スタック情報解析部 24 C言語ソースファイル 25 コンパイラ 26 リンカ 27 オブジェクトファイル 50 ワーク用レジスタ退避領域 51 引数領域 52 戻りアドレス領域 53 OLD FP領域 54 オートマティック変数領域 55 レジスタ変数退避領域 56 スタックフレームサイズ 57 呼び出し元関数のスタック領域の終端(=OL
D FP) 58 フレームポインタ 59 スタックポインタ 60 main関数が積んだワーク用レジスタ退避領
域 61 main関数が積んだ引数用レジスタ退避領域 62 main関数が積んだ戻りアドレス領域 63 funcA関数が積んだワーク用レジスタ退避
領域 64 funcA関数が積んだ引数用レジスタ退避領
域 65 funcA関数が積んだ戻りアドレス領域 70 プログラム実行トレースの引数情報 71 プログラム実行トレースの返却値情報
Reference Signs List 10 computer 11 source debugger 12 emulator 13 communication interface unit (computer side) 14 communication interface unit (emulator side) 15 emulation unit 16 trace data storage unit 17 symbol information analysis unit 18 breakpoint setting management unit 19 function execution history data storage unit 20 Function call stack display section 21 Execution trace display section (C language level) 22 Execution trace display section (assembler level) 23 Stack information analysis section 24 C language source file 25 Compiler 26 Linker 27 Object file 50 Work register save area 51 Argument area 52 Return address area 53 OLD FP area 54 Automatic variable area 55 Register variable save area 56 Stack frame size 57 Call End of stack area of original function (= OL
D FP) 58 Frame pointer 59 Stack pointer 60 Work register save area loaded with main function 61 Argument register save area loaded with main function 62 Return address area loaded with main function 63 Work register save loaded with funcA function Area 64 Register save area for arguments loaded by funcA function 65 Return address area loaded by funcA function 70 Argument information of program execution trace 71 Return value information of program execution trace

Claims (6)

【特許請求の範囲】[Claims] 【請求項1】 検査対象となるソースプログラムをコン
パイル処理によってオブジェクトコードに変換し、前記
オブジェクトコードに従う処理を順次実行させることに
よって前記ソースプログラムを検証するソフトウェアデ
ィバッグ装置において、 前記ソースプログラム中の任意の関数の開始アドレスと
終了アドレスにソフトウェアブレーク条件を設定するた
めのブレークポイント設定管理部と、 前記関数の実行順に関数実行情報を保存する関数実行履
歴データ格納部と、を有し、 前記ソフトウェアブレーク条件の成立時毎にスタックメ
モリを解析することにより、前記関数実行履歴データを
生成する手段を有することを特徴とするソフトウェアデ
ィバッグ装置。
1. A software debugging apparatus for converting a source program to be inspected into an object code by a compiling process and verifying the source program by sequentially executing a process according to the object code, wherein: A break point setting management unit for setting a software break condition at a start address and an end address of the function; and a function execution history data storage unit for storing function execution information in the order of execution of the functions. A software debug device comprising means for generating the function execution history data by analyzing a stack memory each time a condition is satisfied.
【請求項2】 前記関数実行履歴データ格納部に登録さ
れた情報から、関数コールスタック情報を生成する手段
を有することを特徴とする請求項1記載のソフトウェア
ディバッグ装置。
2. The software debugging apparatus according to claim 1, further comprising means for generating function call stack information from information registered in the function execution history data storage.
【請求項3】 前記関数実行履歴データ格納部に登録さ
れた情報から、高級言語レベルの実行トレース情報を生
成する手段を有することを特徴とする請求項1記載のソ
フトウェアディバッグ装置。
3. The software debugging apparatus according to claim 1, further comprising: means for generating execution trace information at a high-level language level from information registered in the function execution history data storage unit.
【請求項4】 検査対象となるソースプログラムをコン
パイル処理によってオブジェクトコードに変換し、前記
オブジェクトコードに従う処理を順次実行させることに
よって前記ソースプログラムを検証するソフトウェアデ
ィバッグ方法において、 前記ソースプログラム中の任意の関数の開始アドレスと
終了アドレスにソフトウェアブレーク条件を設定し、 前記ソフトウェアブレーク条件の成立時毎に、スタック
メモリを解析することにより関数実行履歴データを生成
し、前記関数の実行順に関数実行情報を保存する関数実
行履歴データ格納部に格納することを特徴とするソフト
ウェアディバッグ方法。
4. A software debugging method for converting a source program to be inspected into an object code by a compiling process and verifying the source program by sequentially executing a process according to the object code, wherein: A software break condition is set at a start address and an end address of a function, and each time the software break condition is satisfied, function execution history data is generated by analyzing a stack memory, and the function execution information is stored in the execution order of the function. A software debugging method characterized by storing a function execution history data storage unit to be stored.
【請求項5】 前記関数実行履歴データ格納部に登録さ
れた情報から、関数コールスタック情報を生成すること
を特徴とする請求項4記載のソフトウェアディバッグ方
法。
5. The software debugging method according to claim 4, wherein function call stack information is generated from information registered in the function execution history data storage.
【請求項6】 前記関数実行履歴データ格納部に登録さ
れた情報から、高級言語レベルの実行トレース情報を生
成することを特徴とする請求項4記載のソフトウェアデ
ィバッグ方法。
6. The software debugging method according to claim 4, wherein high-level language-level execution trace information is generated from the information registered in the function execution history data storage unit.
JP9217390A 1997-08-12 1997-08-12 Device and method for debugging software Pending JPH1165885A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP9217390A JPH1165885A (en) 1997-08-12 1997-08-12 Device and method for debugging software

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9217390A JPH1165885A (en) 1997-08-12 1997-08-12 Device and method for debugging software

Publications (1)

Publication Number Publication Date
JPH1165885A true JPH1165885A (en) 1999-03-09

Family

ID=16703436

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9217390A Pending JPH1165885A (en) 1997-08-12 1997-08-12 Device and method for debugging software

Country Status (1)

Country Link
JP (1) JPH1165885A (en)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100334559C (en) * 2003-04-02 2007-08-29 佳能株式会社 Journal obtaining method and controlling program and storage medium thereof
JP2011107883A (en) * 2009-11-16 2011-06-02 Renesas Electronics Corp Debugging device
KR101400396B1 (en) * 2012-09-05 2014-05-27 재단법인대구경북과학기술원 Real-time embedded software deburgging method using memory address
CN110837473A (en) * 2019-11-07 2020-02-25 腾讯科技(深圳)有限公司 Application program debugging method, device, terminal and storage medium
CN111382044A (en) * 2020-02-29 2020-07-07 深圳市腾讯信息技术有限公司 Locating method, locating device, electronic device and storage medium for performance bottleneck
CN114238098A (en) * 2021-12-09 2022-03-25 上海创景信息科技有限公司 Embedded software stack use condition dynamic analysis method and system based on data breakpoint

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100334559C (en) * 2003-04-02 2007-08-29 佳能株式会社 Journal obtaining method and controlling program and storage medium thereof
JP2011107883A (en) * 2009-11-16 2011-06-02 Renesas Electronics Corp Debugging device
KR101400396B1 (en) * 2012-09-05 2014-05-27 재단법인대구경북과학기술원 Real-time embedded software deburgging method using memory address
CN110837473A (en) * 2019-11-07 2020-02-25 腾讯科技(深圳)有限公司 Application program debugging method, device, terminal and storage medium
CN110837473B (en) * 2019-11-07 2023-08-22 腾讯科技(深圳)有限公司 Application program debugging method, device, terminal and storage medium
CN111382044A (en) * 2020-02-29 2020-07-07 深圳市腾讯信息技术有限公司 Locating method, locating device, electronic device and storage medium for performance bottleneck
CN114238098A (en) * 2021-12-09 2022-03-25 上海创景信息科技有限公司 Embedded software stack use condition dynamic analysis method and system based on data breakpoint

Similar Documents

Publication Publication Date Title
US8266608B2 (en) Post-compile instrumentation of object code for generating execution trace data
US9152531B2 (en) Post-compile instrumentation of object code for generating execution trace data
US20080127113A1 (en) Method and system for implementing watchpoints
JP2753500B2 (en) An improved software debugging system and method for debugging code specifically in a multi-architecture environment
JP2004164554A (en) Program execution monitoring device and method
JPH0689200A (en) Debug system and method
CN101667154A (en) Apparatus and method for improving emulation speed of high-level languages in on-chip emulation systems
US11074153B2 (en) Collecting application state in a runtime environment for reversible debugging
CN113742215A (en) Method and system for automatically configuring and calling test tool to perform test analysis
US11113182B2 (en) Reversible debugging in a runtime environment
JPH0748182B2 (en) Program error detection method
JPH1165885A (en) Device and method for debugging software
CN114036047B (en) An Implementation Method of a Serial Port-Based Firmware Real-Time Debugger
JP2919302B2 (en) CPU simulation method
JP2008033849A (en) Failure analysis system
JPH0766342B2 (en) Program test equipment
Usui et al. Bugdel: An aspect-oriented debugging system
CN115905012B (en) Debugging and analysis system, method, electronic device and storage medium in embedded system software development scenario
Lutz et al. Testing tools (software)
JP3745968B2 (en) Test system, test method, test program, and computer-readable recording medium recording the test program
JP2005174045A (en) Source program conversion device, source program conversion method, source program conversion program, and program recording medium
CN115904928A (en) A stub insertion method, device, equipment and storage medium for slow function monitoring
RU2390821C1 (en) Dynamic instrumentation technique
JP2004287869A (en) Program execution monitoring device and method
US20070028218A1 (en) Apparatus, system, and method for a software test coverage analyzer using embedded hardware