JPH1165885A - ソフトウェアディバッグ装置及びソフトウェアディバッグ方法 - Google Patents

ソフトウェアディバッグ装置及びソフトウェアディバッグ方法

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
English (en)
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/ja
Publication of JPH1165885A publication Critical patent/JPH1165885A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】 コンパイラの最適化処理を受けたオブジェク
トコードに対しても、関数コールスタック情報を正しく
生成できるようにする。また、高級言語レベルでの実行
トレースを実現する。 【解決手段】 任意の関数の開始アドレスと終了アドレ
スにソフトウェアブレークを設定するためのブレークポ
イント設定管理部18と、実行した関数の引数情報や戻
り値情報を記録する関数実行履歴データ格納部19を有
し、スタックデータの解析を上記のソフトウェアブレー
ク条件発生時に行うことにより、コンパイラの最適化処
理を受けたオブジェクトコードに対しても関数コールス
タック情報を正しく生成することができるとともに、高
級言語レベルで実行トレースを実現する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソフトウェア開発
のディバッグ工程で使われるソフトウェアディバッグ装
置及び方法に関するものであり、特に、ディバッグ対象
となるオブジェクトコードがコンパイラの最適化処理を
受けていてスタックデータの解析が正しく行えない場合
にも、関数コールスタック情報を正しく生成できるよう
にするとともに、高級言語レベルでのプログラム実行ト
レースを実現するソフトウェアディバッグ装置及び方法
に関するものである。
【0002】
【従来の技術】関数コールスタック機能は、ある特定の
時点で、すでに呼び出された関数のうち、まだ呼び出し
側に戻っていない関数を順番にリストし、現在実行中の
関数をその先頭に置いて表示する機能で、それぞれの呼
び出しについて渡した引数名と値、返却値などを表示す
る。
【0003】また、従来のソースディバッガではアセン
ブラレベルでのプログラム実行トレースしかサポートさ
れていないことが多く、開発者が自分の使用したプログ
ラミング言語のレベルでディバッグ作業を行うことがで
きなかった。
【0004】図2は、従来のソフトウェアディバッグ装
置のブロック構成図である。図2において、ソフトウェ
アディバッグ装置は、ディバッグ用のアプリケーション
プログラムであるソースディバッガ11を含むコンピュ
ータ10と、ソースディバッガ11の制御により被試験
プログラムのエミュレーションを行うエミュレータ12
とを備える。コンパイラ25とリンカ26は、C言語ソ
ースファイル24からオブジェクトファイル27を生成
し、オブジェクトファイル27が被試験プログラムとな
る。オブジェクトファイル27は、エミュレータ12の
中のエミュレーション部15で実行され、その実行結果
はトレースデータという形でトレースデータ格納部16
に蓄積される。
【0005】関数コールスタック機能の実現方法につい
て説明する。被試験プログラムを任意のアドレスまで実
行し、プログラムの実行を止める。その時、ソースディ
バッガ11は、エミュレーション部15内にあるスタッ
クメモリのデータを通信インタフェース部14と通信イ
ンタフェース部13を経由して、スタック情報解析部2
3に読み込む。また、ソースディバッガ11は、オブジ
ェクトファイル27に含まれるディバッグ情報を読み込
み、シンボル情報解析部17にてシンボル情報を解析
し、その結果をスタック情報解析部23に送る。スタッ
ク情報解析部23は、シンボル情報解析部17から出力
されたシンボル情報と、エミュレーション部15から出
力されたスタックメモリのデータから、スタックメモリ
上に積まれている関数の情報を解析する。
【0006】図3は、一般的な関数の関数呼び出し時の
スタックメモリへのデータの積み方を示したものであ
る。現在呼び出されている関数は、それぞれ図3のよう
なスタック情報をスタックメモリ上に積んでいる。これ
らを解析することにより、関数の呼び出し順序を知るこ
とができる。スタック情報解析部23で作成された関数
情報を、関数コールスタック表示部20で関数コールス
タック情報として表示する。
【0007】次に、プログラム実行トレース機能の実現
方法について説明する。被試験プログラムをエミュレー
ション部15で実行すると、インストラクションの実行
結果やメモリのアクセス結果を示すデータが、トレース
データ格納部16に書き込まれる。ソースディバッガ1
1は、トレースデータ格納部16に格納されたトレース
データを通信インタフェース部14、通信インタフェー
ス部13を経由して読み出し、データを整形した後、実
行トレース表示部22に表示する。この場合、トレース
データ格納部16に格納されているトレースデータは、
アセンブラレベルのデータであるため、ソースディバッ
ガ11で特別な処理を行わない限り、実行トレースで表
示部22に表示されるデータはアセンブラレベルのデー
タとなる。
【0008】また、このような従来例としては、例え
ば、特開平6−242943号公報に、「ソースコード
レベルデバッグ装置」の開示があるが、これは、コンパ
イラの最適化処理によって命令の実行順序が変更される
等ソースプログラムと逆アセンブルコードの対応がとれ
なくなる場合にもソースコードディバッグができるよう
にするためのものであり、本発明の目的や用途とは異な
るものである。
【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を指す。
【0010】図4は、noauto,norec関数宣
言を使用したC言語ソースプログラムの一例である。プ
ログラム中で宣言されている関数は3つであり、mai
nは通常の関数、funcAはnoauto宣言した関
数、funcBはnorec宣言した関数である。プロ
グラムを図4の25行目のmain関数から実行し、1
0行目のfuncB関数を呼び出したところでブレーク
させた時のスタックメモリの状態を図5に示す。
【0011】図5の60,61,62は、funcA関
数呼び出し時にmain関数が積んだスタックデータで
あり、63,64,65は、funcB関数呼び出し時
にfuncA関数が積んだスタックデータである。現在
のプログラムカウンタ(PC)の値をエミュレータ部か
ら読み出し、シンボル情報と比較することにより、現在
実行中の関数がfuncB関数であることを特定するこ
とができる。
【0012】また、現在のSPの値から戻りアドレス領
域65に格納されている値を読み出し、funcA関数
が積んだ戻りアドレスの値を取得できる。このアドレス
がfuncA関数の範囲内にあることからfuncB関
数がfuncA関数から呼び出されたと結論付けること
ができる。更に、funcA関数の呼び出し元関数を特
定するためには、戻りアドレス領域62に格納されてい
るアドレス値を読み出さなければならない。
【0013】しかし、ワーク用レジスタ退避領域63の
サイズ情報はコンパイラの出力にはないため、戻りアド
レス領域62の位置を特定することはできず、これ以上
スタックデータを正しく解析することはできない。この
ことから、図3のOLD FP領域53がスタックメモ
リ上に積まれている場合を除いて、すなわち、コンパイ
ラの最適化オプション指定時やnoauto関数、no
rec関数使用時には、幾重にもネストした関数の呼び
出し関係をスタックデータを解析することによって調べ
ることはできないという問題があった。
【0014】先に示したように、関数スタックトレース
機能は、関数の呼び出し時にスタックメモリ上に積まれ
たスタックデータを、現在のSPの位置を頼りに、順番
に解析することによって実現されている。スタックメモ
リ上に積まれるデータとしては、関数の戻りアドレス以
外に引数の情報やレジスタの退避データなどがあり、こ
れらの解析を正しく行うことが求められる。
【0015】プログラマはコード効率を上げるために、
コンパイル時にスタックフレームを最適化する最適化オ
プションを指定したり、コンパイラに固有の拡張機能を
使うことがある。例えば、オートマチック変数を使用し
ない関数の場合には、関数をnoauto関数として宣
言することで、スタックフレームの最適化をはかること
ができる。スタックフレームを最適化することにより、
関数呼び出しの前後処理を簡素化し、オブジェクトコー
ドの短縮と実行速度の向上を図ることができる。また、
関数自身から他の関数を呼び出さない関数に対しては、
関数をnorec関数として宣言することにより、no
auto関数と同様の効果を得ることができる。
【0016】また、従来のディバッグ装置の構成で、高
級言語レベルでの実行トレース情報を提供するために
は、図2のトレースデータ格納部16に保存されている
トレースデータと、ソースディバッガ11がオブジェク
トファイル27から読み込んだシンボル情報を元に、高
級言語レベルの実行トレース情報を作成することが考え
られる。しかしこの場合、トレースデータ格納部16に
保存されるデータの中には、実行トレース情報を作成す
るのに必要なデータ以外のものが多く含まれており、実
際に有効なデータが少ない。そのため、十分な量の実行
トレース情報を作成することはできないと考えられる。
【0017】また、トレースデータを格納するトレース
メモリの容量を大きくすることは、コスト的に問題があ
り有効な手段とは言えない。そのため、従来のディバッ
グ装置の構成で実用的な高級言語レベル実行トレースを
実現することは、事実上不可能であると考えられてい
る。
【0018】[発明の目的]本発明の目的は、コンパイ
ラの最適化処理を受けたオブジェクトコードに対して
も、関数コールスタック情報を正しく生成できるように
することにある。
【0019】また、高級言語レベルでの実行トレースを
実現することにある。
【0020】
【課題を解決するための手段】本発明は、前述した課題
を解決するための手段として、検査対象となるソースプ
ログラムをコンパイル処理によってオブジェクトコード
に変換し、前記オブジェクトコードに従う処理を順次実
行させることによって前記ソースプログラムを検証する
ソフトウェアディバッグ装置において、前記ソースプロ
グラム中の任意の関数の開始アドレスと終了アドレスに
ソフトウェアブレーク条件を設定するためのブレークポ
イント設定管理部と、前記関数の実行順に関数実行情報
を保存する関数実行履歴データ格納部と、を有し、前記
ソフトウェアブレーク条件の成立時毎にスタックメモリ
を解析することにより、前記関数実行履歴データを生成
する手段を有することを特徴とするソフトウェアディバ
ッグ装置を提供するものである。
【0021】また、前記関数実行履歴データ格納部に登
録された情報から、関数コールスタック情報を生成する
手段を有することを特徴とする。
【0022】また、前記関数実行履歴データ格納部に登
録された情報から、高級言語レベルの実行トレース情報
を生成する手段を有することを特徴とする。
【0023】また、本発明は、前述した課題を解決する
ための手段として、検査対象となるソースプログラムを
コンパイル処理によってオブジェクトコードに変換し、
前記オブジェクトコードに従う処理を順次実行させるこ
とによって前記ソースプログラムを検証するソフトウェ
アディバッグ方法において、前記ソースプログラム中の
任意の関数の開始アドレスと終了アドレスにソフトウェ
アブレーク条件を設定し、前記ソフトウェアブレーク条
件の成立時毎に、スタックメモリを解析することにより
関数実行履歴データを生成し、前記関数の実行順に関数
実行情報を保存する関数実行履歴データ格納部に格納す
ることを特徴とするソフトウェアディバッグ方法を提供
するものである。
【0024】[作用]本発明によれば、任意の関数の開
始アドレスと終了アドレスにソフトウェアブレークを設
定するためのブレークポイント設定管理部(図1の1
8)と、実行した関数の引数情報や戻り値情報を記録す
る関数実行履歴データ格納部(図1の19)を有し、ス
タックデータの解析を上記のソフトウェアブレーク条件
発生時(成立時)に行うことにより、コンパイラの最適
化処理を受けたオブジェクトコードに対しても関数コー
ルスタック情報を正しく生成することができるととも
に、高級言語レベルで実行トレースを実現することがで
きる。
【0025】スタックデータの解析を正確に行なうため
には、現在実行中の関数に関しては、常に正しくスタッ
クデータの解析を行うことができる。このことから、ど
のような状況においても正しく関数スタックトレースを
行うためには、個々の関数が呼び出された直後のタイミ
ングでスタックデータの解析を行えばよい。そこで、本
発明は、エミュレータのソフトウェアブレーク機能を使
って、任意の関数の開始アドレスと終了アドレスにブレ
ーク条件を設定し、関数が呼び出された直後のスタック
メモリ情報を解析することにより、コンパイラの最適化
オプション指定時や、noauto関数、norec関
数使用時にもスタックデータの解析を正しく行うもので
ある。
【0026】関数の開始アドレスのブレーク条件は、関
数の戻りアドレスと引数の取得に使用し、終了アドレス
のブレーク条件は、返却値の取得に使用する。取得した
戻りアドレス(関数名)、引数、返却値は、関数実行履
歴データとして関数実行履歴データ格納部に登録され
る。関数実行履歴データからは、関数コールスタック情
報を作成することができるとともに、関数のプログラム
実行トレースを高級言語の関数レベルで実現することが
できる。
【0027】このように、本発明は、コンパイラの最適
化処理が施されたオブジェクトコードに対しても正しく
関数コールスタック情報を生成することができること、
更には高級言語レベルでの実行トレースを実現すること
を特徴とする。
【0028】以下、更に、本発明の作用効果について説
明する。
【0029】従来の高級言語デバッガでサポートされて
いる関数コールスタック機能では、ある特定条件下にお
いては、関数のコールスタック情報を正しく取得するこ
とができないという問題があった。
【0030】また、プログラム中で実行した関数の処理
の全体的な流れ(履歴)を追うことができなかった。
【0031】これは、例えば、コンパイラの最適化オプ
ション指定時や、noauto,norec関数使用時
にはスタックデータの解析が正しく行えないからであ
る。
【0032】また、プログラム実行を停止させた(ブレ
ーク)状態で、スタックメモリの解析を行っているから
である。
【0033】そこで、本発明では、コンパイラから出力
されたシンボル情報をもとに、任意の関数の開始アドレ
スと終了アドレスにソフトウェアブレーク条件を設定す
ることにより、各関数がコールされた順序、引数の情
報、戻り値の情報をメモリ上に格納し、解析すること
で、C言語レベルでの関数のコールスタック履歴を生成
する。
【0034】noauto関数やnorec関数は、引
数をレジスタ渡しするため、この場合、引数はレジスタ
から取得する。取得した引数を関数名とともに関数実行
履歴データ格納部(図1の19)に登録する。
【0035】すなわち、本発明では、各関数の開始アド
レスにソフトウェアブレークイベントを設定し、イベン
トブレーク時に、その関数の戻り番地にソフトウェアブ
レークイベントを設定している。開始アドレスによるブ
レーク時には引数情報を、また戻り番地によるブレーク
時には返却値情報を保存し、関数コールスタック情報を
生成する。
【0036】本発明では、関数がコールされた直後にス
タックメモリ情報を解析しているため、noauto,
norec関数使用時や、コンパイラの最適化オプショ
ン指定時にも、常に正しいスタック情報を得ることがで
きる。
【0037】これにより、本発明によれば、いかなる条
件下でも、関数コールスタック情報を正しく生成するこ
とができる。
【0038】また、従来のアセンブラレベルでのトレー
ス情報ではなく、C言語等の高級言語レベルでプログラ
ムの処理の流れを追うことができるため、C言語等の高
級言語で開発しているプログラマにとっては開発効率の
向上が見込まれる。
【0039】
【実施例】本発明の実施例について、図1を用いて説明
する。図1は、本発明を実施するソフトウェアディバッ
グ装置のブロック構成図である。図1において、ソフト
ウェアディバッグ装置は、ディバッグ用のアプリケーシ
ョンプログラムであるソースディバッガ11を含むコン
ピュータ10と、ソースディバッガ11の制御により被
試験プログラムのエミュレーションを行うエミュレータ
12とを備える。被試験プログラムであるオブジェクト
ファイル27は、C言語ソースファイル24にコンパイ
ラ25、リンカ26の処理を施して作成したものであ
る。ソースディバッガ11は、オブジェクトファイル2
7を読み込み、シンボル情報解析部17で全ての関数の
開始・終了アドレスの情報をテーブル化し、関数アドレ
ス情報テーブルを作成する。
【0040】ソースディバッガ11は、この関数アドレ
ス情報テーブルを元に各関数の開始アドレスと終了アド
レスに対してブレークポイント設定管理部18からソフ
トウェアブレーク条件を設定する。ソフトウェアブレー
クは、エミュレータの持つ機能であり、設定可能なブレ
ークポイントの数がハードウェアブレークポイントに比
べて十分に多いことが特長である。エミュレータ12内
には、オブジェクトコードの実行をエミュレートするエ
ミュレーション部15と、インストラクションの実行結
果やメモリのアクセス結果を保持するトレースデータ格
納部16を有する。ソースディバッガ11は、エミュレ
ーション部15内のスタックメモリから読み出したスタ
ックデータと、オブジェクトファイル27を読み込みシ
ンボル情報解析部17で作成したシンボル情報から、ス
タック情報解析部23で関数実行履歴データを作成し、
関数実行履歴データ格納部19に保存する。このデータ
をもとに、関数コールスタック情報を関数コールスタッ
ク表示部20に、高級言語レベルでの実行トレース結果
を実行トレース表示部21に表示する。また、従来と同
様にアセンブラレベルでのトレースも実行トレース表示
部22に表示する。
【0041】これらの詳細を図4のC言語ソースプログ
ラム例を用いて説明する。図4のC言語ソースプログラ
ムに対してコンパイラ25とリンカ26から出力された
オブジェクトファイル27をソースディバッガ11で読
み込み、エミュレータ12にダウンロードする。
【0042】ソースディバッガ11は、シンボル情報解
析部17で関数アドレス情報テーブルを作成する。ソー
スディバッガ11は、関数アドレス情報テーブルの情報
を元に、任意の関数の開始アドレスと終了アドレスの全
てに対して、ブレークポイント設定管理部18からソフ
トウェアブレーク条件を設定する。
【0043】ソフトウェアブレーク条件設定後、被試験
プログラムを実行すると、はじめに図4の26行目のm
ain関数の開始アドレスでブレークする。ここで、エ
ミュレーション部15からPCの値を読み出し、関数ア
ドレス情報テーブルのデータから現在実行中の関数がm
ain関数であることを特定する。
【0044】更に、スタック情報解析部23がエミュレ
ーション部15の中のスタックデータとシンボル情報解
析部18の出力情報を読み込んで解析し、関数名と引数
を関数実行履歴データ格納部19に登録する。関数実行
履歴データ取得後、ソースディバッガ11はプログラム
を再実行する。
【0045】次に、図4の15行目のfuncA関数の
開始アドレスでブレークする。この時、スタックメモリ
には図5の60,61,62のデータが積まれている。
先ほどと同様に、PC値から関数がfuncA関数であ
ることを特定する。noauto関数であるfuncA
関数は引数をレジスタ渡しするため、この場合、引数は
レジスタから取得する。取得した引数を関数名とともに
関数実行履歴データ格納部19に登録する。
【0046】更にプログラムを実行すると、図4の10
行目のfuncB関数の開始アドレスでブレークする。
この時、スタックメモリには図5の63,64,65が
積まれている。norec関数も引数をレジスタ渡しす
るため、ここでも同様にレジスタから引数を取得し、関
数名とともに関数実行履歴データ格納部19に登録す
る。
【0047】更にプログラムを実行すると、13行目の
funcB関数の終了アドレスでブレークする。ここで
は、PC値を元に実行中の関数がfuncB関数である
ことを特定する。ソースディバッガ11は、返却値を格
納しているレジスタから返却値を取得した後、関数名と
ともに関数実行履歴データ格納部19に登録する。返却
後は、関数の返却値の型によって渡す場所があらかじめ
決められている。
【0048】続いて、プログラムを再実行すると、23
行目のfuncA関数の終了アドレスでブレークする。
ここでも、同様に関数名と返却値を関数実行履歴データ
格納部19に登録する。main関数の終了アドレスに
ついても同様に処理を行い、関数実行履歴データ格納部
19に全てのデータを登録する。
【0049】また、関数実行履歴データ格納部のデータ
をもとに、関数コールスタック情報を関数コールスタッ
ク表示部20に、高級言語レベルでの実行トレース結果
を実行トレース表示部21に表示する。また、従来と同
様にアセンブラレベルでのトレースも実行トレース表示
部22に表示する。
【0050】最後に、関数実行履歴データ格納部19に
登録されたデータの表示例を示す。図4の10行目のf
uncB関数呼び出し時に、関数コールスタック表示部
20に表示されるデータは図6(a)のようになる。ま
た、図4の18行目でC言語レベルの実行トレース表示
部21に表示されるデータは図6(b)のようになる。
70は引数の値であり、71は返却値の値である。引数
がポインタの場合にはアドレス値を表示し、返却後は<
return>として表示される。
【0051】
【発明の効果】以上のように本発明によれば、コンパイ
ル時に最適化オプションを指定した場合、あるいはコン
パイラの拡張機能であるnoauto関数宣言、nor
ec関数宣言を使用して、オブジェクトコードの効率化
をはかった関数に対しても、正しく関数コールスタック
データを生成することができる。
【0052】また、関数実行履歴データを使用して、高
級言語レベルのプログラム実行トレースデータを生成す
ることができる。これにより、被試験プログラムと同じ
高級言語レベルでのディバッグが可能となり、ディバッ
グ作業の効率を向上させることができる。
【図面の簡単な説明】
【図1】本発明を実施する装置の一実施例を示すブロッ
ク構成図。
【図2】従来の装置の一例を示すブロック構成図。
【図3】関数呼び出し時のスタックメモリ状態図。
【図4】C言語ソースプログラム例。
【図5】図4のソースプログラムにおけるスタック状態
図。
【図6】関数コールスタック表示例と実行トレース表示
例。
【符号の説明】
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 プログラム実行トレースの返却値情報

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 検査対象となるソースプログラムをコン
    パイル処理によってオブジェクトコードに変換し、前記
    オブジェクトコードに従う処理を順次実行させることに
    よって前記ソースプログラムを検証するソフトウェアデ
    ィバッグ装置において、 前記ソースプログラム中の任意の関数の開始アドレスと
    終了アドレスにソフトウェアブレーク条件を設定するた
    めのブレークポイント設定管理部と、 前記関数の実行順に関数実行情報を保存する関数実行履
    歴データ格納部と、を有し、 前記ソフトウェアブレーク条件の成立時毎にスタックメ
    モリを解析することにより、前記関数実行履歴データを
    生成する手段を有することを特徴とするソフトウェアデ
    ィバッグ装置。
  2. 【請求項2】 前記関数実行履歴データ格納部に登録さ
    れた情報から、関数コールスタック情報を生成する手段
    を有することを特徴とする請求項1記載のソフトウェア
    ディバッグ装置。
  3. 【請求項3】 前記関数実行履歴データ格納部に登録さ
    れた情報から、高級言語レベルの実行トレース情報を生
    成する手段を有することを特徴とする請求項1記載のソ
    フトウェアディバッグ装置。
  4. 【請求項4】 検査対象となるソースプログラムをコン
    パイル処理によってオブジェクトコードに変換し、前記
    オブジェクトコードに従う処理を順次実行させることに
    よって前記ソースプログラムを検証するソフトウェアデ
    ィバッグ方法において、 前記ソースプログラム中の任意の関数の開始アドレスと
    終了アドレスにソフトウェアブレーク条件を設定し、 前記ソフトウェアブレーク条件の成立時毎に、スタック
    メモリを解析することにより関数実行履歴データを生成
    し、前記関数の実行順に関数実行情報を保存する関数実
    行履歴データ格納部に格納することを特徴とするソフト
    ウェアディバッグ方法。
  5. 【請求項5】 前記関数実行履歴データ格納部に登録さ
    れた情報から、関数コールスタック情報を生成すること
    を特徴とする請求項4記載のソフトウェアディバッグ方
    法。
  6. 【請求項6】 前記関数実行履歴データ格納部に登録さ
    れた情報から、高級言語レベルの実行トレース情報を生
    成することを特徴とする請求項4記載のソフトウェアデ
    ィバッグ方法。
JP9217390A 1997-08-12 1997-08-12 ソフトウェアディバッグ装置及びソフトウェアディバッグ方法 Pending JPH1165885A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP9217390A JPH1165885A (ja) 1997-08-12 1997-08-12 ソフトウェアディバッグ装置及びソフトウェアディバッグ方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9217390A JPH1165885A (ja) 1997-08-12 1997-08-12 ソフトウェアディバッグ装置及びソフトウェアディバッグ方法

Publications (1)

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

Family

ID=16703436

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9217390A Pending JPH1165885A (ja) 1997-08-12 1997-08-12 ソフトウェアディバッグ装置及びソフトウェアディバッグ方法

Country Status (1)

Country Link
JP (1) JPH1165885A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100334559C (zh) * 2003-04-02 2007-08-29 佳能株式会社 日志获取方法及装置
JP2011107883A (ja) * 2009-11-16 2011-06-02 Renesas Electronics Corp デバッグ装置
KR101400396B1 (ko) * 2012-09-05 2014-05-27 재단법인대구경북과학기술원 메모리 주소를 이용한 임베디드 소프트웨어의 실시간 디버깅 방법
CN110837473A (zh) * 2019-11-07 2020-02-25 腾讯科技(深圳)有限公司 应用程序调试方法、装置、终端及存储介质
CN111382044A (zh) * 2020-02-29 2020-07-07 深圳市腾讯信息技术有限公司 性能瓶颈的定位方法、定位装置、电子设备及存储介质
CN114238098A (zh) * 2021-12-09 2022-03-25 上海创景信息科技有限公司 基于数据断点的嵌入式软件堆栈使用情况动态分析方法和系统

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100334559C (zh) * 2003-04-02 2007-08-29 佳能株式会社 日志获取方法及装置
JP2011107883A (ja) * 2009-11-16 2011-06-02 Renesas Electronics Corp デバッグ装置
KR101400396B1 (ko) * 2012-09-05 2014-05-27 재단법인대구경북과학기술원 메모리 주소를 이용한 임베디드 소프트웨어의 실시간 디버깅 방법
CN110837473A (zh) * 2019-11-07 2020-02-25 腾讯科技(深圳)有限公司 应用程序调试方法、装置、终端及存储介质
CN110837473B (zh) * 2019-11-07 2023-08-22 腾讯科技(深圳)有限公司 应用程序调试方法、装置、终端及存储介质
CN111382044A (zh) * 2020-02-29 2020-07-07 深圳市腾讯信息技术有限公司 性能瓶颈的定位方法、定位装置、电子设备及存储介质
CN114238098A (zh) * 2021-12-09 2022-03-25 上海创景信息科技有限公司 基于数据断点的嵌入式软件堆栈使用情况动态分析方法和系统

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 (ja) 多重アーキテクチャ環境内で特にコードのデバッグを行う改良したソフトウェア・デバッグ・システムと方法
JP2004164554A (ja) プログラム実行監視装置および方法
JPH0689200A (ja) デバッグシステム及び方法
CN101667154A (zh) 用于改善片上仿真系统中高级语言的仿真速度的装置和方法
US11074153B2 (en) Collecting application state in a runtime environment for reversible debugging
CN113742215A (zh) 一种自动配置和调用测试工具进行测试分析的方法及系统
US11113182B2 (en) Reversible debugging in a runtime environment
JPH0748182B2 (ja) プログラム・エラー検出方法
JPH1165885A (ja) ソフトウェアディバッグ装置及びソフトウェアディバッグ方法
CN114036047B (zh) 一种基于串口的固件即时调试器的实现方法
JP2919302B2 (ja) Cpuシミュレーション方法
JP2008033849A (ja) 障害解析システム
JPH0766342B2 (ja) プログラムテスト装置
Usui et al. Bugdel: An aspect-oriented debugging system
CN115905012B (zh) 嵌入式系统软件开发场景下的调试分析系统、方法、电子设备及存储介质
Lutz et al. Testing tools (software)
JP3745968B2 (ja) 試験システム及び試験方法及び試験プログラム及び試験プログラムを記録した計算機で読み取り可能な記録媒体
JP2005174045A (ja) ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体
CN115904928A (zh) 一种慢函数监控的插桩方法、装置、设备及存储介质
RU2390821C1 (ru) Способ динамической инструментации
JP2004287869A (ja) プログラム実行監視装置および方法
US20070028218A1 (en) Apparatus, system, and method for a software test coverage analyzer using embedded hardware