JPH03225532A - Code generation system of compiler for tracing variable of debugger - Google Patents
Code generation system of compiler for tracing variable of debuggerInfo
- Publication number
- JPH03225532A JPH03225532A JP2019223A JP1922390A JPH03225532A JP H03225532 A JPH03225532 A JP H03225532A JP 2019223 A JP2019223 A JP 2019223A JP 1922390 A JP1922390 A JP 1922390A JP H03225532 A JPH03225532 A JP H03225532A
- Authority
- JP
- Japan
- Prior art keywords
- variable
- debugger
- flag
- value
- memory
- 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
Links
- 238000000034 method Methods 0.000 claims abstract description 8
- 238000007689 inspection Methods 0.000 claims description 4
- 238000007796 conventional method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
Landscapes
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
Description
【発明の詳細な説明】
〔概 要〕
特別にハードウェアを変更することなく簡単に変数の変
化をトレースするためのコンパイラのコード生成方式に
関し、
特別なハードウェアを使わず、デバッガで変数のトレー
スを簡単に行う方式を提供することを目的とし、
ソースプログラムをオブジェクトコードに変換するコン
パイラにおいて、デバッガが変数のトレースを行うかど
うかのフラグを各変数に付随して挿入するフラグ生成手
段と、前記フラグを変数毎に格納する格納手段と、デバ
ッグのトレースハンドラにおいて、前記各変数に対応す
る前記フラグがセットされている場合には、その変数を
変更する前にその変数の前の値と新しい値とを検査する
検査手段とを有し、前記検査手段によって検査した後に
、プログラムコードに戻し、その後に変数の値をメモリ
上で変更するように構成する。[Detailed Description of the Invention] [Summary] This invention relates to a compiler code generation method for easily tracing changes in variables without special hardware changes. In a compiler that converts a source program into object code, a flag generating means inserts a flag indicating whether or not a debugger traces variables along with each variable; In a storage means that stores flags for each variable, and in a debugging trace handler, if the flag corresponding to each variable is set, the previous value and new value of that variable are stored before changing that variable. and inspection means for inspecting the program code, and after the inspection by the inspection means, the program code is returned to the program code, and thereafter, the value of the variable is changed on the memory.
本発明は特別にハードウェアを変更することなく簡単に
変数の変化をトレースするためのコンパイラのコード生
成方式に関する。The present invention relates to a compiler code generation method for easily tracing changes in variables without special changes to hardware.
新しいデバッグシステムを供給するためには、実行の進
行方向に対して、変数のトレース動作が出来ることが重
要となる。また、実行の履歴を選択的にサーチする方式
や、データの入れ換え、あるいは部分的なプログラムの
実行を行うことなども重要となる。このような新しいデ
バッグシステムを構築する場合、もともとのオペレーテ
ィングシステムを大きく変更したり、コストがかかった
りするようでは意味がない。また、最近のシステム、特
にワークステーションではマルチウィンドウやメニュー
を駆動しやすいグラフィカルインターフェースが供給さ
れており、デバッガもこのようなインターフェースに整
合する形のものであるべきである。そして、適当なブレ
イクポイントを設けることによって実行のフローを変更
することが出来、適当なプログラムの領域をトレースす
ることが出来ることが重要となる。In order to provide a new debugging system, it is important to be able to trace variables in the direction of execution. It is also important to selectively search the execution history, replace data, or execute partial programs. When building such a new debugging system, there is no point in making major changes to the original operating system or incurring costs. Furthermore, modern systems, particularly workstations, are provided with graphical interfaces that facilitate multi-window and menu operation, and debuggers should also be compatible with such interfaces. It is important to be able to change the flow of execution by setting appropriate breakpoints and to be able to trace appropriate areas of the program.
〔従来の技術及び発明が解決しようとする課題〕従来、
変数をトレースする場合には、デバッガのための多種多
様な高水準言語命令文を源資コードに入れるようなコン
パイラが必要であった。[Problems to be solved by conventional techniques and inventions] Conventionally,
Tracing variables required a compiler that included a wide variety of high-level language statements for the debugger in the source code.
従って、従来方式ではコンパイラが複雑になるという欠
点を有していた。Therefore, the conventional method has the disadvantage that the compiler becomes complicated.
本発明は特別なハードウェアを使わず、デバッガで変数
のトレースを簡単に行う方式を提供することを目的とす
る。An object of the present invention is to provide a method for easily tracing variables using a debugger without using special hardware.
本発明は、ソースプログラムをオブジェクトコードに変
換するコンパイラを前提とする。The present invention is based on a compiler that converts a source program into object code.
まず、デバッガが変数のトレースを行うかどうかのフラ
グを各変数に付随して挿入するフラグ生成手段を有する
。First, it has a flag generating means that inserts a flag accompanying each variable indicating whether or not the debugger traces the variable.
次に、フラグを変数毎に格納する格納手段を有する。Next, it has storage means for storing flags for each variable.
更に、デバッグのトレースハンドラにおいて、前記各変
数に対応する前記フラグがセットされている場合には、
その変数を変更する前にその変数の前の値と新しい値と
を検査する検査手段とを有する。Furthermore, in the debug trace handler, if the flags corresponding to the variables are set,
and checking means for checking the previous value and the new value of the variable before changing the variable.
コンパイラ、デバッガの為に目的コードにフックという
フラグをいれる。このフックは1個の変数に対して1ワ
ードの余分のメモリを必要とする。Insert flags called hooks into the target code for the compiler and debugger. This hook requires one extra word of memory per variable.
デバッガは変数のトレースを行う時に、この余分メモリ
をフラグとして扱う。トレースを行う場合は、lフラグ
をセットし、行わない場合はOフラグをセットする。The debugger treats this extra memory as a flag when tracing variables. If tracing is to be performed, set the l flag; otherwise, set O flag.
各変数は、メモリに書かれる前に、それに付随したフラ
グが検査される。1フラグであれば、値を書かずにその
変数を検査するために、デバッガ処理が実行され、デバ
ッガから戻ってきてから値が書かれる。0フラグであれ
ば、普通と同じように値が書かれる。Each variable is checked for flags associated with it before being written to memory. If the flag is 1, debugger processing is executed to inspect the variable without writing a value, and the value is written after the debugger returns. If the flag is 0, the value will be written as normal.
第1図は、本発明の原理概念図である。 FIG. 1 is a conceptual diagram of the principle of the present invention.
全体はユーザが作成したソースプログラムをコンパイル
されたプログラムにおいて使用される変数のメモリ空間
を示したものである。The whole figure shows the memory space of variables used in a program compiled from a source program created by a user.
第1図において、x、 y、 z等の各変数が、メモ
リのデータ領域に格納されている場合、本発明ではコン
パイラがデバッグの為に目的コード上にトレースするか
否かのフラグを挿入する。このフラグをフックと言い、
そのフックは1個の変数に対して1ワードの余分なメモ
リを必要とする。例えば、Xのフックが0である場合に
は、Xは非トレース変数であることを意味する。同様に
変数YのフックもOであるとするならば、変数Yも非ト
レース変数となる。また、変数Zのフックは1であると
するならば、変数Zはデバッガがトレースベき変数であ
ることを意味する。以下同様である。In Figure 1, when each variable such as x, y, z, etc. is stored in the data area of memory, in the present invention, the compiler inserts a flag on the target code to indicate whether or not to trace it for debugging. . This flag is called a hook,
The hook requires one word of extra memory per variable. For example, if the hook of X is 0, it means that X is a non-trace variable. Similarly, if the hook of variable Y is also O, variable Y also becomes a non-trace variable. Furthermore, if the hook value of variable Z is 1, this means that variable Z is a variable that the debugger should trace. The same applies below.
第2図は本発明のコンパイラとデバッガの概念図であり
、従来方法との比較を示しである。FIG. 2 is a conceptual diagram of the compiler and debugger of the present invention, and shows a comparison with a conventional method.
第2図において、1は変数のメモリ割り付はルーチンで
ある。従来方式では、プログラム上で使われる各変数の
大きさによるメモリ量をただ割り付けるだけであり、割
り付けられたメモリ空間は、変数のみとなる。ところが
、本発明では、各変数の大きさによるメモリ空間のみな
らず、デバッグ時のトレースすべきかどうかのフラグも
余分メモリとして割り付けるため、割り付けたメモリ空
間は変数用のものに加えてデバッグ用のフラグを格納す
る領域を必要とする。しかしながら、各フラグは1個の
変数に対して1ワードの余分メモリを必要とするだけで
ある。In FIG. 2, 1 indicates that memory allocation of variables is a routine. In the conventional method, the amount of memory is simply allocated according to the size of each variable used in the program, and the allocated memory space is only for variables. However, in the present invention, not only the memory space depending on the size of each variable but also the flag indicating whether to trace during debugging is allocated as extra memory, so the allocated memory space is used not only for variables but also for debugging flags. Requires space to store. However, each flag only requires one word of extra memory for one variable.
第2図の2に、変数の値をメモリに書(ライト操作のル
ーチンである。従来方式では、変数の値をただメモリに
書くだけであった。ところが、本発明では変数のトレー
スフラグがセフ)されている場合には、デバッガのトレ
ースフ1ンドラに処理ルーチンが移り、デバッガのトレ
ースハンドラから戻ってきた時点で初めてトレースの変
数の値を書くようにしている。2 in Figure 2 is a write operation routine that writes the value of the variable to memory. In the conventional method, the value of the variable was simply written to memory. However, in the present invention, the trace flag of the variable is ), the processing routine moves to the debugger's trace handler, and the value of the trace variable is written for the first time when the debugger's trace handler returns.
第3図はデバッガの変更を示すもので、3はデバッガで
トレース出来、変数の登録方式を示すルーチンでる。FIG. 3 shows a change in the debugger, and 3 is a routine that can be traced by the debugger and shows the variable registration method.
本発明では、トレースすべき変数を登録する場合には、
まずその変数のトレースフラグを“1”にセットし、そ
の次に、変数の名前や番地と関係がある情報をトレース
テーブルに保存する。トレーステーブルの各領域は各変
数毎に名前や番地或いはその変数に関する属性が保存さ
れる。In the present invention, when registering variables to be traced,
First, the trace flag for that variable is set to "1", and then information related to the name and address of the variable is saved in the trace table. In each area of the trace table, a name, an address, or an attribute related to that variable is saved for each variable.
第3図の4は、本発明のデバッガのトレースハンドラの
処理ルーチンである。4 in FIG. 3 is a processing routine of the trace handler of the debugger of the present invention.
第2図の2において、変数のトレースフラグがセットさ
れている場合に、アを介してデバッガのトレースハンド
ラに処理が移ると、まずトレーステーブル上から指定さ
れた変数、すなわちトレースされた変数の名前が現在の
値を引き出し、それをデイスプレィ上に表示する。これ
はまだ、変数の新しい値ではなく、変更前の古い値であ
る。In 2 of Figure 2, when the trace flag of a variable is set, when processing moves to the trace handler of the debugger via a, the variable specified from the trace table, that is, the name of the traced variable retrieves the current value and displays it on the display. This is still the old value before the change, not the new value of the variable.
次に、そのトレースした変数の新しい値を表示する。そ
して、イのルートを介してデバッガハンドラの処理から
、プログラムコードに基づいて、メモリ上に新しい変数
の値を各動作に移行する。このように、本発明では各変
数はメモリに書かれる前に、それに付随したフラグが検
査される。1フラグであれば値を書かずにその変数を検
査するためにデバッガ処理が実行され、デバッガから戻
ってきてから値が書かれる。0フラグであれば、普通と
同じように値が書かれる。Then print the new value of that traced variable. Then, based on the program code, new variable values are transferred to memory for each operation from the debugger handler process via route 2. Thus, in the present invention, each variable is checked for its associated flag before being written to memory. If the flag is 1, debugger processing is executed to inspect the variable without writing a value, and the value is written after the debugger returns. If the flag is 0, the value will be written as usual.
本発明では、各変数のトレースするかどうかのフラグを
メモリ上に付加′するだけであるので、オペレーション
システムの異なる機械でも、デバッガの変数トレースの
ためのコンパイラのコード生成(フラグ生成)を簡単に
行うことができ、すなわちデバッガが変数のトレースを
行うかどうかのフラグをコンパイラがコード生成時に簡
単に付加することができる。In the present invention, a flag indicating whether or not to trace each variable is simply added to the memory, so compiler code generation (flag generation) for debugger variable tracing can be easily performed even on machines with different operating systems. In other words, the compiler can easily add a flag when generating code to indicate whether or not the debugger should trace variables.
本本発明によれば、プログラムは遅くなるが、いかなる
機械でも簡単に変数をトレースすることが出来るように
なる。According to the present invention, although the program becomes slower, variables can be easily traced on any machine.
第1図は、本発明に係るユーザプログラム用メモリのブ
ロック図、
第2図は、コンパイラの変更を示すブロック図、第3図
は、デバッガの変更を示すプロ・ツク図である。
1・・・変数のメモリ割り付はルーチン、2・・・変数
の値をメモリに書くライト操作のルーチン、
変数の登録方式を示すルーチン、
デバッガのトレースハンドラの処理
ルーチン、
Z・・・変数。
Y。
X。FIG. 1 is a block diagram of a user program memory according to the present invention, FIG. 2 is a block diagram showing changes to the compiler, and FIG. 3 is a program diagram showing changes to the debugger. 1... Routine for memory allocation of variables, 2... Routine for write operation to write variable values to memory, routine showing variable registration method, processing routine for debugger trace handler, Z... Variable. Y. X.
Claims (1)
パイラにおいて、 デバッガが変数のトレースを行うかどうかのフラグを各
変数に付随して挿入するフラグ生成手段と、 前記フラグを変数毎に格納する格納手段と、デバッグの
トレースハンドラにおいて、前記各変数に対応する前記
フラグがセットされている場合には、その変数を変更す
る前にその変数の前の値と新しい値とを検査する検査手
段とを有し、前記検査手段によって検査した後に、プロ
グラムコードに戻し、その後に変数の値をメモリ上で変
更することを特徴とするデバッガの変数トレースのため
のコンパイラのコード生成方式。[Claims] In a compiler that converts a source program into object code, a flag generating means inserts a flag indicating whether or not a debugger traces the variable along with each variable, and stores the flag for each variable. a storage means, and a checking means for checking a previous value and a new value of the variable before changing the variable if the flag corresponding to each variable is set in the debugging trace handler; A code generation method for a compiler for variable tracing in a debugger, characterized in that the code is returned to the program code after being inspected by the inspection means, and then the value of the variable is changed in memory.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019223A JPH03225532A (en) | 1990-01-31 | 1990-01-31 | Code generation system of compiler for tracing variable of debugger |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019223A JPH03225532A (en) | 1990-01-31 | 1990-01-31 | Code generation system of compiler for tracing variable of debugger |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH03225532A true JPH03225532A (en) | 1991-10-04 |
Family
ID=11993372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019223A Pending JPH03225532A (en) | 1990-01-31 | 1990-01-31 | Code generation system of compiler for tracing variable of debugger |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH03225532A (en) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08314765A (en) * | 1995-05-15 | 1996-11-29 | Nec Corp | Debug information collecting system |
JP2011216056A (en) * | 2010-04-02 | 2011-10-27 | Mitsubishi Electric Corp | Programmable controller and peripheral device thereof |
-
1990
- 1990-01-31 JP JP2019223A patent/JPH03225532A/en active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08314765A (en) * | 1995-05-15 | 1996-11-29 | Nec Corp | Debug information collecting system |
JP2011216056A (en) * | 2010-04-02 | 2011-10-27 | Mitsubishi Electric Corp | Programmable controller and peripheral device thereof |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5170465A (en) | Incremental-scanning compiler for source-code development system | |
US5038348A (en) | Apparatus for debugging a data flow program | |
US6550056B1 (en) | Source level debugger for debugging source programs | |
US7530056B1 (en) | Method and system for detecting runtime defects in a program by comparing correct and incorrect runs | |
US20080127113A1 (en) | Method and system for implementing watchpoints | |
US20050097399A1 (en) | Techniques for managed code debugging | |
US8370807B2 (en) | Debugging for runtime type systems | |
US20070234310A1 (en) | Checking for memory access collisions in a multi-processor architecture | |
CN110741354A (en) | Presenting differences between code entity invocations | |
US10209984B2 (en) | Identifying a defect density | |
JPS6116100B2 (en) | ||
US20160232047A1 (en) | Detecting uninitialized memory references | |
US20180267882A1 (en) | Enabling breakpoints on entire data structures | |
US20020129336A1 (en) | Automatic symbol table selection in a multi-cell environment | |
JPH03225532A (en) | Code generation system of compiler for tracing variable of debugger | |
US20160232074A1 (en) | Detecting uninitialized memory references | |
JP3372106B2 (en) | Program debug device | |
JP2017130068A (en) | Programmable controller system, development support device thereof and target device | |
JP3745968B2 (en) | Test system, test method, test program, and computer-readable recording medium recording the test program | |
JPH0283749A (en) | Internal interruption control system for microprocessor | |
JPS60262251A (en) | Backup device for development of microprocessor | |
JPH0231244A (en) | Control system for program check history | |
JPH05108404A (en) | Debugger system | |
JPS6170644A (en) | Program debugging system | |
JP2910548B2 (en) | Data check device |