JPH03225532A - Code generation system of compiler for tracing variable of debugger - Google Patents

Code generation system of compiler for tracing variable of debugger

Info

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
Application number
JP2019223A
Other languages
Japanese (ja)
Inventor
Maaku Fuerudoman
フェルドマン・マーク
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2019223A priority Critical patent/JPH03225532A/en
Publication of JPH03225532A publication Critical patent/JPH03225532A/en
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

PURPOSE:To obtain the system which inspects variables before and after varia tion, in a trace handler when respective flags corresponding to the variables are set, varies the variable values on a memory, and traces the variables by the debugger. CONSTITUTION:When the trace flag of a variable is set in a writing operation routine 2 which writes the value of the variable on a memory, the process is passed to the trace handler of the debugger through 1. The name of the traced variable is used to obtain the current value and the old value before the variation is displayed on a display. Then the new value of the traced variable is displayed. The new values of the variable is set on the memory from the processing of the debugger handler through a route (m) according to program codes. Thus, the flag added to each variable before the variable is written on the memory is checked and the value is written after a return from the debugger when the flag 1 or as usual when 0.

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.

〔産業上の利用分野〕[Industrial application field]

本発明は特別にハードウェアを変更することなく簡単に
変数の変化をトレースするためのコンパイラのコード生
成方式に関する。
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.

〔課題を解決するための手段〕[Means to solve the problem]

本発明は、ソースプログラムをオブジェクトコードに変
換するコンパイラを前提とする。
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.

〔作    用〕[Created for]

コンパイラ、デバッガの為に目的コードにフックという
フラグをいれる。このフックは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.

〔実  施  例〕〔Example〕

第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.

〔発明の効果〕〔Effect of the invention〕

本本発明によれば、プログラムは遅くなるが、いかなる
機械でも簡単に変数をトレースすることが出来るように
なる。
According to the present invention, although the program becomes slower, variables can be easily traced on any machine.

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

第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.
JP2019223A 1990-01-31 1990-01-31 Code generation system of compiler for tracing variable of debugger Pending JPH03225532A (en)

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)

* Cited by examiner, † Cited by third party
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

Cited By (2)

* Cited by examiner, † Cited by third party
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