JPH07311692A - デバッグ方法 - Google Patents

デバッグ方法

Info

Publication number
JPH07311692A
JPH07311692A JP6105547A JP10554794A JPH07311692A JP H07311692 A JPH07311692 A JP H07311692A JP 6105547 A JP6105547 A JP 6105547A JP 10554794 A JP10554794 A JP 10554794A JP H07311692 A JPH07311692 A JP H07311692A
Authority
JP
Japan
Prior art keywords
loop
information
program
execution
debugging
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
JP6105547A
Other languages
English (en)
Inventor
Masahiro Miura
雅弘 三浦
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP6105547A priority Critical patent/JPH07311692A/ja
Publication of JPH07311692A publication Critical patent/JPH07311692A/ja
Pending legal-status Critical Current

Links

Landscapes

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

Abstract

(57)【要約】 【目的】現在実行している部分が、プログラム全体の中
でどういう役割を持つ部分なのかをユーザに分かりやす
く示し、デバッグを効率的に実行することを可能にする 【構成】ソースファイルをコンパイラによって実行可能
な形式に変換する際に、ソースプログラム中の繰り返し
処理(ループ)の位置を検出し、ループの位置に関する
ループ情報をデバッグ情報として実行可能なオブジェク
トファイルに含め、さらにオブジェクトファイル中のデ
バッグ情報を含む実行ファイル12に基づいてプログラ
ムを実行する時に、デバッグ情報中のループ情報に基づ
いてループに入ったことを検出し、ループに入ったこと
が検出された際に、ループ情報を用いて現在実行中の位
置を入出力手段16を介して通知する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、計算機プログラムのデ
バッグ方法に関する。
【0002】
【従来の技術】近年では、計算機の高速化・大容量化に
伴い、計算機ユーザの要求は高度なものとなり、計算機
プログラムの複雑化・長大化が進んでいる。このため、
プログラムのデバッグはますます重要かつ困難なものと
なってきている。
【0003】一般的に、デバッグを支援するツールとし
ては、デバッガが代表的である。デバッガを用いると、
プログラムの状態(制御が到達している位置や変数の内
容など)を確認しながら、プログラムを少しずつ動作さ
せることができる。これをプログラムのステップ実行
(またはトレース)といい、デバッグの一般的な手法と
なっている。
【0004】従来のデバッガでは、トレースしているプ
ログラム内の現在実行中の位置を表示するのに、ソース
ファイル名とルーチン名と行番号とを表示する方法と、
現在実行中の位置に至るまでのルーチン呼出しの階層を
表示する方法しかない。
【0005】
【発明が解決しようとする課題】このように従来のデバ
ッグ方法においては、トレースしているプログラム内の
現在実行中の位置を表示するのに、ソースファイル名と
ルーチン名と行番号とを表示する方法と、現在実行中の
位置に至るまでのルーチン呼出しの階層を表示する方法
しかなかった。このため、複雑・長大なプログラムをト
レースする場合、現在実行している部分がプログラム全
体の中でどういう役割を持つ部分なのかが分かりにく
く、デバッグが困難であるという問題があった。
【0006】また、ソースプログラム中の実行中断位置
を指定する場合にも、ソースファイル名と、ルーチン名
または行番号で指定する方法しかなく、同様に現在実行
している部分がプログラム全体の中でどういう役割を持
つ部分なのかが分かりにくく、デバッグが困難であると
いう問題があった。
【0007】本発明は前記のような事情を考慮してなさ
れたもので、現在実行している部分が、プログラム全体
の中でどういう役割を持つ部分なのかをユーザに分かり
やすく示し、デバッグを効率的に実行することを可能に
するデバッグ方法を提供することを目的とする。
【0008】
【課題を解決するための手段】本発明は、ソースプログ
ラムのデバッグ方法において、前記ソースプログラムを
実行可能な形式に変換する際に、前記ソースプログラム
中の繰り返し処理(ループ)の位置を検出し、前記ルー
プの位置に関する情報を前記実行可能な形式に含め、前
記実行可能な形式に基づくプログラムの実行時に、前記
情報に基づいてループに入ったことを検出し、ループに
入ったことが検出された際に、前記情報を用いて現在実
行中の位置を通知することを特徴とする。
【0009】また本発明は、前記ソースプログラムを実
行可能な形式に変換する際に、前記ソースプログラム中
の繰り返し処理(ループ)の位置を検出し、前記ループ
の位置に関する情報を前記実行可能な形式に含め、前記
実行可能な形式に基づくプログラムの実行時に、前記情
報に基づいてループから出たことを検出し、ループから
出たことが検出された際に、前記情報を用いて現在実行
中の位置を通知することを特徴とする。
【0010】また、前記情報が示す位置を基準とする所
定の位置を指定して、前記実行可能な形式に基づくプロ
グラムの実行を指示することを特徴とする。また、前記
ソースプログラム中にループに関する付加情報が存在す
る場合、付加情報に関する情報をも前記実行可能な形式
に含め、現在実行中の位置を通知する際に、前記付加情
報に関する情報を用いて、前記付加情報も通知すること
を特徴とする。
【0011】
【作用】計算機は本質的に繰り返し処理(ループ)を得
意としており、プログラムとは複数のループ間を渡り歩
いたり、繰り返し処理の中で別の繰り返し処理を行った
りするものである。そのため、プログラム中で実行して
いるループが示されると、どのような役割を持つ部分を
現在実行しているのか分かりやすくなり、またプログラ
ム中の実行中断位置を指定する場合にもループで指定で
きれば、プログラム中の役割のまとまった単位をループ
という形で指定できるので分かりやすくなり、デバッグ
が容易になる。
【0012】
【実施例】以下、図面を参照して本発明の一実施例を説
明する。はじめに、本実施例におけるデバッグの対象と
なる実行ファイルの作成について説明する。図1はコン
パイラ型言語を用いた場合の実行ファイルの作成を説明
するための図である。なお、図1では、コンパイラ型言
語の例を示しているが、インタプリタ型言語でも、本実
施例によるデバッグの結果についての表示が可能であ
る。
【0013】図1において、10はソースファイル、1
1はオブジェクトファイル、12は実行ファイル、13
はコンパイラ、14はリンカ(連係編集プログラム)で
ある。
【0014】コンパイラ13は、ソースファイル10を
コンパイルしてオブジェクトファイル11を生成する。
一般に、コンパイラ13がソースファイル10をコンパ
イルして生成するオブジェクトファイル11は、コード
とデータを含み、さらにデバッグ用のコンパイルを行っ
た場合であれば、変数名やソースファイル10中の行番
号などのデバッグ情報も含んでいる。
【0015】本発明に係わるコンパイラ13は、デバッ
グ用コンパイルを行なうことによって、前述のような情
報に加えて、さらに繰り返し処理(ループ)に関する情
報(ループ開始とループ終了の行番号など)もデバッグ
情報に含むように動作する。なお、コンパイラは、一般
的にコードを生成する際にループを検出するため、ルー
プに関する情報の検出のために特別な処理を行なうわけ
ではないが、本発明ではさらにループに関する情報が追
加される。
【0016】リンカ14は、一般的なリンカと同様に、
オブジェクトファイル11をリンクして実行ファイル1
2を生成する。さらに、本発明に係わるリンカ14は、
オブジェクトファイル11が、デバッグ情報中にループ
に関する情報を含む場合には、ループに関する情報も実
行ファイル12に含めるという点が異なる。
【0017】次に、本実施例におけるデバッグについて
説明する。図2は、図1に示すようにして作成された実
行ファイル12に対するデバッグを説明するための図で
ある。
【0018】図2において、12は図1に示すようにし
て作成された実行ファイル、15はデバッガ、16は入
出力手段である。実行ファイル12は、それ自体がオペ
レーティングシステム(OS)上で単独で動作できる
が、本実施例ではデバッガ15の制御の下に置かれて動
作するものとする。デバッガ15によって実行ファイル
12が実行制御される場合、特に実行ファイル12にデ
バッグ情報を含んでいれば、元のソースファイル10の
リストの何行目まで実行せよ、といったような実行制御
命令を、入出力手段16を介してユーザがデバッガ15
に対して与えることができ、デバッグ作業を容易にする
ことができる。
【0019】デバッガ15は、実行ファイル12中に含
まれるループに関する情報を検出し、この情報に基づい
て、プログラム中の現在実行している位置がどのループ
内にあるか示す通知や、実行中にループに入ったことを
示す通知を表示したすることができる。また、デバッガ
15に対して入出力手段16を介してステップ実行をル
ープ単位で指定(実行制御命令)することで、デバッガ
15は、指定に応じて動作することができる。これによ
り、デバッグがさらに容易となる。
【0020】入出力手段16は、コンピュータ(オペレ
ーティングシステム、デバッガ15等を含むプログラム
等)とユーザとの間のインタフェースであり、キーボー
ド等の入力装置や、デバッガ15の実行結果等を表示す
るための表示装置を含む。
【0021】次に、本実施例の動作について説明する。
図3は本発明のデバッガ15の制御のもとでプログラム
(実行ファイル12)を実行する場合の処理の流れを示
すフローチャートである。図3には本発明に関係する主
要な処理について示している。
【0022】デバッガ15は、デバッグを開始すると、
実行ファイル12に含まれるデバッグ情報(ソースファ
イル中の行番号)を参照して、プログラム中の実行位置
を求める(ステップS1)。
【0023】次に、デバッガ15は、ステップS1で求
めた実行位置がプログラムの終了位置であるかどうかを
調べる(ステップS2)。ここで、実行位置がプログラ
ムの終了位置であった場合には、プログラム実行を終了
し、そうでなければ次の処理を行なう。
【0024】次に、デバッガ15は、実行位置がループ
の先頭であるかどうかを、ループに関する情報(ループ
開始の行番号)を参照して調べる(ステップS3)。実
行位置がループの先頭であると判別されると、ループに
入ったことを入出力手段16(表示装置)に表示してユ
ーザに通知する。
【0025】一方、デバッガ15は、実行位置がループ
の先頭でない場合には、実行位置がループの直後である
かどうかを、ループに関する情報(ループ終了の行番
号)を参照して調べる(ステップS5)。実行位置がル
ープの直後であると判別されると、ループから抜けたこ
とを入出力手段16(表示装置)に表示してユーザに通
知する。
【0026】デバッガ15は、以上の処理を実行ファイ
ル12に対して繰り返して行ない、ループに関する情報
を、入出力手段16を介してユーザに通知する。このよ
うに、デバッガ15によってトレースしているプログラ
ム内の現在実行中の位置が、プログラム全体の中でどう
いう役割を持つ部分であるかを、ループに関する情報を
表示することにより、ユーザに分かりやすく示すことが
できる。
【0027】次に、具体例を示して本実施例のデバッガ
15の動作について説明する。図4はC言語を用いて作
成されたソースプログラムの例を示している。これはテ
キストをキーボードやファイルから入力して表示するプ
ログラムである。
【0028】まず、「inputLines()」という関数でテキ
ストをすべて読込む。「inputLines()」では、ループの
中から各行について、1行を読込む関数「inputLine
s()」を呼んでいる。「inputLines()」は、テキストの
入力法に応じて適当な関数を呼ぶ。
【0029】図4に示す例では、キーボードから読込む
ものとして、「inputLineFromkeyboard() 」を呼んでい
る。「inputLineFromkeyboard() 」では、ループの中か
ら、各キーに入力ごとに関数「keyinChar() 」を呼んで
いる。
【0030】このプログラムでは、ループに関する付加
情報として、「 for文」や「do…while 文」にコメント
が付いている。例えば、「 for文」に対しては「for ea
ch line 」、「do…while 文」に対しては「repeats un
til End-of-Line 」のコメントが付加されている。
【0031】図5は本発明によるデバッガ15を用い
て、図4に示すソースプログラムから得られた実行ファ
イル12に対してデバッグした結果、ユーザに通知され
る情報の具体例を示している。
【0032】デバッガ15を実行させる場合、入出力手
段16(表示装置)にはデバッガのプロンプト「 debug
>」が表示されている。この状態で、デバッグ15によ
るデバッグの実行を、入出力手段16から「 run」コマ
ンドによって指示されると、デバッガ15の制御の下で
プログラム(実行ファイル12)実行を開始する。
【0033】デバッガ15は、プログラム実行中にルー
プに入ると、図3のフローチャート中で説明したよう
に、ループに入ったことを表示してユーザに知らせる。
図5中では「entering loop<1>」によって通知している
ことを示している。このとき、ループに関する付加情報
であるコメント「for each line 」も同時に表示してい
る。
【0034】同様にして、他のループに入ることによっ
て、図5中では「entering loop<2>」によって通知し、
このループに関する付加情報であるコメント「repeats
until End-of-Line 」も同時に表示している。
【0035】ここで、ユーザにより入出力手段16から
プログラム実行の中止が指示されると、デバッガ15
は、プログラム実行を中止し、例えば「stopped at fil
e foo.c fn.c, fn keyinChar(), line 256」の表示、す
なわち「foo.c というファイル内の関数 keyinChar()
内、行番号256のところで停止した」というメッセー
ジを表示する。
【0036】ここで、デバッガ15は、停止した位置が
プログラム中のどういう位置なのか、入出力手段16ら
の指示に応じて通知することができる。まず、「 wher
e」コマンドが指示されると、デバッガ15は、関数の
入れ子関係を表示させる。
【0037】さらに、「loopwhere 」コマンドが指示さ
れると、ループの入れ子関係を表示させている。図5に
示す例では、関数の入れ子関係を全て表示するよりも、
重要な部分を簡潔に表示している。
【0038】また、あるループから抜けたところまで実
行したい場合、「 loopwhere」コマンドでループに付け
られている番号を「loopnext」コマンドで指定される
と、デバッガ15は、「 inputLineFromkeyboard()」内
のループから抜けたところまで実行する。従来では、ソ
ースファイルを調べるなどしてループの次の行の行番号
を求めて、その行までの実行を指定する必要があったが
本発明によるデバッガであれば、ソースファイルを調べ
る必要がない。
【0039】なお、前記実施例では、図3に示すフロー
チャートでは、ループに関する情報(ループ開始とルー
プ終了の行番号など)を参照して、ループの先頭、及び
直後の位置を検出しているが、ループに関する情報が示
す位置を基準とする所定の位置を検出するように指定す
ることができる。例えば、ループの先頭、及び直後の位
置の他に、ループの直前、末尾などがある。
【0040】このようにして、プログラム中で実行して
いるループを示すことで、プログラム全体の中でどうい
うどのような役割を持つ部分を現在実行しているか分か
りやすくなる。また、トレースしているプログラム中の
現在実行中の位置を表示する際に、その位置が何らかの
ループの中にある場合には、どのループの中にあるのか
を一部または全て示すことができる。
【0041】さらに、プログラム中の実行中断位置をル
ープで指定できることにより、プログラム中の役割りが
把握しやすくなり、ソースプログラムのデバッグを容易
に行なうことができる。例えば、プログラム中の実行中
断位置を指定する際には、ループの直前・先頭・末尾・
直後などを行番号などの代わりに指定することも可能と
なる。
【0042】
【発明の効果】以上詳述したように本発明によれば、デ
バッグの際に、現在実行している部分が、プログラム全
体の中でどういう役割を持つ部分なのかをユーザに分か
りやすく示すことが可能となるので、デバッグを効率的
に実行することができる。
【図面の簡単な説明】
【図1】本実施例におけるコンパイラ型言語を用いた場
合の実行ファイルの作成を説明するための図。
【図2】本実施例における実行ファイル12に対するデ
バッグを説明するための図。
【図3】本実施例におけるデバッガ15の制御のもとで
プログラム(実行ファイル12)を実行する場合の処理
の流れを示すフローチャート。
【図4】本実施例においてデバッグの対象となるソース
プログラムの例を示す図。
【図5】本実施例においてデバッグした結果、ユーザに
通知される情報の具体例を示す図。
【符号の説明】
10…ソースファイル、11…オブジェクトファイル、
12…実行ファイル、13…コンパイラ、14…リン
カ、15…デバッガ、16…入出力手段。

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラムのデバッグ方法におい
    て、 前記ソースプログラムを実行可能な形式に変換する際
    に、前記ソースプログラム中の繰り返し処理(ループ)
    の位置を検出し、前記ループの位置に関する情報を前記
    実行可能な形式に含め、 前記実行可能な形式に基づくプログラムの実行時に、前
    記情報に基づいてループに入ったことを検出し、 ループに入ったことが検出された際に、前記情報を用い
    て現在実行中の位置を通知することを特徴とするデバッ
    グ方法。
  2. 【請求項2】 ソースプログラムのデバッグ方法におい
    て、 前記ソースプログラムを実行可能な形式に変換する際
    に、前記ソースプログラム中の繰り返し処理(ループ)
    の位置を検出し、前記ループの位置に関する情報を前記
    実行可能な形式に含め、 前記実行可能な形式に基づくプログラムの実行時に、前
    記情報に基づいてループから出たことを検出し、 ループから出たことが検出された際に、前記情報を用い
    て現在実行中の位置を通知することを特徴とするデバッ
    グ方法。
  3. 【請求項3】 前記情報が示す位置を基準とする所定の
    位置を指定して、前記実行可能な形式に基づくプログラ
    ムの実行を指示することを特徴とする請求項1または請
    求項2記載のデバッグ方法。
  4. 【請求項4】 前記ソースプログラム中にループに関す
    る付加情報が存在する場合、付加情報に関する情報をも
    前記実行可能な形式に含め、 現在実行中の位置を通知する際に、前記付加情報に関す
    る情報を用いて、前記付加情報も通知することを特徴と
    する請求項1または請求項2記載のデバッグ方法。
JP6105547A 1994-05-19 1994-05-19 デバッグ方法 Pending JPH07311692A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP6105547A JPH07311692A (ja) 1994-05-19 1994-05-19 デバッグ方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6105547A JPH07311692A (ja) 1994-05-19 1994-05-19 デバッグ方法

Publications (1)

Publication Number Publication Date
JPH07311692A true JPH07311692A (ja) 1995-11-28

Family

ID=14410609

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6105547A Pending JPH07311692A (ja) 1994-05-19 1994-05-19 デバッグ方法

Country Status (1)

Country Link
JP (1) JPH07311692A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100586303B1 (ko) * 2004-12-10 2006-06-08 주식회사디아이 반도체 메모리 장치의 테스트 장치 및 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100586303B1 (ko) * 2004-12-10 2006-06-08 주식회사디아이 반도체 메모리 장치의 테스트 장치 및 방법

Similar Documents

Publication Publication Date Title
US6243857B1 (en) Windows-based flowcharting and code generation system
JPH07295859A (ja) プログラムの動的特性の決定
JP2000122886A (ja) 半導体試験装置のプログラム作成方式
JPH1091476A (ja) プログラム実行装置及び機能仕様とコードアドレスとの対応付け方法
JPH07311692A (ja) デバッグ方法
JPH0766342B2 (ja) プログラムテスト装置
JP3196675B2 (ja) 言語処理方式
JP2010287101A (ja) ソフトウエアデバッグ装置及び方法
JPH0554277A (ja) プラント監視装置
JPH11110256A (ja) プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体
JP4387288B2 (ja) 制御用表示装置、エディタ装置、プログラムおよび記録媒体
JP2809048B2 (ja) 対画面デバッグ方式
JP2672968B2 (ja) デバッグ用ソースリスト出力処理方式
JP2001229044A (ja) デバッグ方法
JPS62102339A (ja) プログラムトレ−ス装置
JPH0756723A (ja) コンパイラ装置
JP2659366B2 (ja) デバッグ方法及びその装置
JPH06242943A (ja) ソースコードレベルデバッグ装置
JP2000353112A (ja) 中間言語レベルのデバッグ方法及びシステム
KR940008474B1 (ko) 프로그램 개발장치의 디버거 제어방법
JPH0766343B2 (ja) プログラムテスト装置
JPH0546434A (ja) プログラムデバツグ方式
JPH0833846B2 (ja) 関数トレース・ステップトレース切り替え制御方式
JPH07319730A (ja) テスト・デバッグ方法
JPH04155540A (ja) 対話型デバッガによるプログラム修正方式