JPH09146776A - オブジェクト生成方法、及びデバッグ方法 - Google Patents
オブジェクト生成方法、及びデバッグ方法Info
- Publication number
- JPH09146776A JPH09146776A JP7327959A JP32795995A JPH09146776A JP H09146776 A JPH09146776 A JP H09146776A JP 7327959 A JP7327959 A JP 7327959A JP 32795995 A JP32795995 A JP 32795995A JP H09146776 A JPH09146776 A JP H09146776A
- Authority
- JP
- Japan
- Prior art keywords
- name
- function
- object name
- program
- information
- 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.)
- Withdrawn
Links
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】 ソフトウェアデバッグの効率向上を図ること
にある。 【解決手段】 初期設定関数にオブジェクトの名前(オ
ブジェクト名)を埋込むための処理を追加することによ
り、そのオブジェクトのデバッグにおいては、特定のオ
ブジェクトから呼出された関数のみブレークさせること
ができ(S11〜S14)、そのようにオブジェクトと
関数の条件を組合わせたブレークポイントの設定を可能
とすることで、ソフトウェアデバッグの効率向上を達成
する。
にある。 【解決手段】 初期設定関数にオブジェクトの名前(オ
ブジェクト名)を埋込むための処理を追加することによ
り、そのオブジェクトのデバッグにおいては、特定のオ
ブジェクトから呼出された関数のみブレークさせること
ができ(S11〜S14)、そのようにオブジェクトと
関数の条件を組合わせたブレークポイントの設定を可能
とすることで、ソフトウェアデバッグの効率向上を達成
する。
Description
【0001】
【発明の属する技術分野】本発明は、ソフトウェア開発
支援技術、さらにはソフトウェアデバッグの効率向上を
図るための技術に関する。
支援技術、さらにはソフトウェアデバッグの効率向上を
図るための技術に関する。
【0002】
【従来の技術】Cコンパイラ又はアセンブラで作成した
オブジェクトモジュール(単に「オブジェクト」とも称
する)、又はリンケージエディタで作成したロードモジ
ュールは、デバッグシステムによってデバッグすること
ができる。そのようなオブジェクトモジュールやロード
モジュールは、デバッグ対象プログラムと称される。デ
バッグ対象プログラムを実際に実行させ、その実行軌跡
を追うことによりプログラムの誤りを見つけ出すことが
でき、そのようなツールとして、デバッガやシミュレー
タが知られている。
オブジェクトモジュール(単に「オブジェクト」とも称
する)、又はリンケージエディタで作成したロードモジ
ュールは、デバッグシステムによってデバッグすること
ができる。そのようなオブジェクトモジュールやロード
モジュールは、デバッグ対象プログラムと称される。デ
バッグ対象プログラムを実際に実行させ、その実行軌跡
を追うことによりプログラムの誤りを見つけ出すことが
でき、そのようなツールとして、デバッガやシミュレー
タが知られている。
【0003】デバッガは、デバッグ対象プログラムを実
行させ、指定により1命令実行毎にその実行結果をトレ
ースバッファに書込むトレース機能や、デバッグ対象プ
ログラム実行中にブレーク条件が成立した場合に、ブレ
ーク条件成立のメッセージを表示してプログラム実行を
中断するブレーク機能を備えている。ブレーク条件とし
ては、ブレーク系コマンドの条件成立によるブレーク、
デバッグ対象プログラム実行時エラー検出によるブレー
ク、割込みキー入力によるブレークなどがある。
行させ、指定により1命令実行毎にその実行結果をトレ
ースバッファに書込むトレース機能や、デバッグ対象プ
ログラム実行中にブレーク条件が成立した場合に、ブレ
ーク条件成立のメッセージを表示してプログラム実行を
中断するブレーク機能を備えている。ブレーク条件とし
ては、ブレーク系コマンドの条件成立によるブレーク、
デバッグ対象プログラム実行時エラー検出によるブレー
ク、割込みキー入力によるブレークなどがある。
【0004】尚、デバッガについて記載された文献の例
としては、昭和60年12月25日に株式会社オーム社
から発行された「マイクロコンピュータハンドブック
(第569頁〜)」がある。
としては、昭和60年12月25日に株式会社オーム社
から発行された「マイクロコンピュータハンドブック
(第569頁〜)」がある。
【0005】
【発明が解決しようとする課題】高級言語プログラムの
デバッグにおいて、プログラムのブレークポイントを関
数内部に設定し、処理がブレークポイントの位置に到達
したときにプログラム実行を中断させたい場合がある。
しかし、例えメンバ関数内部にブレークポイントを設定
して、そこでプログラム実行を中断しても、ブレークポ
イント位置でメンバ関数を呼出したオブジェクトを調べ
ることはできない。それは、デバッガにおいて、オブジ
ェクトのデバッグ情報が、オブジェクトの型の構成を示
す情報と、オフセット位置を示す静的情報とから成り、
プログラム実行時に動的に変化するオブジェクトを特定
することができないことに起因する。例えば図3(a)
に示されるように、ソースプログラム1からソースプロ
グラム2への関数呼出しがある場合を考えてみると、プ
ログラム実行処理が関数内部のときに、デバッガが参照
できる情報は、図3(b)に示されるように、オブジェ
クトのオフセット位置、及びオブジェクトの型情報に基
づくオブジェクトのメンバ情報であり、オブジェクト名
a1,a2のいずれかを特定することができない。つま
り、関数呼出しにより処理実行が関数内部に移った場合
に、その関数呼出しが、a1によるものなのか、a2に
よるものなのかを判別することができない。そのため
に、ブレークポイントは、必然的に「a1.f()」、
あるいは「a2.f()」に設定するしかなく、例えば
「a1」、あるいは「a2」のように、特定のオブジェ
クトから呼出された関数のみブレークさせたい場合で
も、それを行うことができない。
デバッグにおいて、プログラムのブレークポイントを関
数内部に設定し、処理がブレークポイントの位置に到達
したときにプログラム実行を中断させたい場合がある。
しかし、例えメンバ関数内部にブレークポイントを設定
して、そこでプログラム実行を中断しても、ブレークポ
イント位置でメンバ関数を呼出したオブジェクトを調べ
ることはできない。それは、デバッガにおいて、オブジ
ェクトのデバッグ情報が、オブジェクトの型の構成を示
す情報と、オフセット位置を示す静的情報とから成り、
プログラム実行時に動的に変化するオブジェクトを特定
することができないことに起因する。例えば図3(a)
に示されるように、ソースプログラム1からソースプロ
グラム2への関数呼出しがある場合を考えてみると、プ
ログラム実行処理が関数内部のときに、デバッガが参照
できる情報は、図3(b)に示されるように、オブジェ
クトのオフセット位置、及びオブジェクトの型情報に基
づくオブジェクトのメンバ情報であり、オブジェクト名
a1,a2のいずれかを特定することができない。つま
り、関数呼出しにより処理実行が関数内部に移った場合
に、その関数呼出しが、a1によるものなのか、a2に
よるものなのかを判別することができない。そのため
に、ブレークポイントは、必然的に「a1.f()」、
あるいは「a2.f()」に設定するしかなく、例えば
「a1」、あるいは「a2」のように、特定のオブジェ
クトから呼出された関数のみブレークさせたい場合で
も、それを行うことができない。
【0006】本発明の目的は、ソフトウェアデバッグの
効率向上を図ることにある。
効率向上を図ることにある。
【0007】本発明の別の目的は、オブジェクトと関数
の条件を組合わせたブレークポイントの設定を可能とす
るための技術を提供することにある。
の条件を組合わせたブレークポイントの設定を可能とす
るための技術を提供することにある。
【0008】本発明の前記並びにその他の目的と新規な
特徴は本明細書の記述及び添付図面から明らかになるで
あろう。
特徴は本明細書の記述及び添付図面から明らかになるで
あろう。
【0009】
【課題を解決するための手段】本願において開示される
発明のうち代表的なものの概要を簡単に説明すれば下記
の通りである。
発明のうち代表的なものの概要を簡単に説明すれば下記
の通りである。
【0010】すなわち、ソースプログラムに基づいてオ
ブジェクトを生成する場合に、オブジェクトの内部にそ
のオブジェクトの識別を可能とするオブジェクト名の情
報を埋込むことにより、関数内部から、それを呼出した
オブジェクトの把握を可能とする。
ブジェクトを生成する場合に、オブジェクトの内部にそ
のオブジェクトの識別を可能とするオブジェクト名の情
報を埋込むことにより、関数内部から、それを呼出した
オブジェクトの把握を可能とする。
【0011】具体的な態様として、オブジェクトを生成
する場合において、ユーザ定義サイズを求め(S1)、
ポインタサイズ及びオブジェクト名の文字サイズに基づ
いて、オブジェクト名の情報埋込みに要するサイズを求
め(S2)、求められたサイズに基づいて、オブジェク
トの内部にそのオブジェクトの識別を可能とするオブジ
ェクト名の情報を埋込むようにする。
する場合において、ユーザ定義サイズを求め(S1)、
ポインタサイズ及びオブジェクト名の文字サイズに基づ
いて、オブジェクト名の情報埋込みに要するサイズを求
め(S2)、求められたサイズに基づいて、オブジェク
トの内部にそのオブジェクトの識別を可能とするオブジ
ェクト名の情報を埋込むようにする。
【0012】そして、上記のようにして生成されたオブ
ジェクトのデバッグにおいては、関数呼出しに係るオブ
ジェクト名を、オブジェクト内部に埋込まれたオブジェ
クト名の情報に基づいて特定するようにする。
ジェクトのデバッグにおいては、関数呼出しに係るオブ
ジェクト名を、オブジェクト内部に埋込まれたオブジェ
クト名の情報に基づいて特定するようにする。
【0013】さらに、上記デバッグにおけるブレーク処
理では、指定されたオブジェクトにより呼出される関数
の内部の任意のプログラム行にブレークポイントを設定
し、プログラムカウンタによって示されるアドレスが、
上記関数のアドレスと一致したか否かを判別し(S1
1)、この判別結果に基づいて、上記オブジェクトから
オブジェクト名のアドレスを取得して(S12)、その
アドレスからオブジェクト名を取得し(S13)、取得
されたオブジェクト名が上記ブレークポイント設定に係
るオブジェクトに一致するか否かを判別し(S14)、
この判別結果に基づいてプログラム実行を中断するよう
にする。
理では、指定されたオブジェクトにより呼出される関数
の内部の任意のプログラム行にブレークポイントを設定
し、プログラムカウンタによって示されるアドレスが、
上記関数のアドレスと一致したか否かを判別し(S1
1)、この判別結果に基づいて、上記オブジェクトから
オブジェクト名のアドレスを取得して(S12)、その
アドレスからオブジェクト名を取得し(S13)、取得
されたオブジェクト名が上記ブレークポイント設定に係
るオブジェクトに一致するか否かを判別し(S14)、
この判別結果に基づいてプログラム実行を中断するよう
にする。
【0014】
【発明の実施の形態】図2には、本発明の一実施例方法
が適用されるソフトウェア開発支援システムが示され
る。
が適用されるソフトウェア開発支援システムが示され
る。
【0015】このシステムは、ソフトウェア開発支援に
関する各種プログラムの実行により所定の演算処理を行
うための演算処理装置21、情報表示のための表示装置
22、及び各種情報の入出力装置23を含む。演算処理
装置21は、アセンブラ言語で記述されたソースプログ
ラムを翻訳してオブジェクトモジュールを生成するため
のアセンブラ211、高級言語で記述されたソースプロ
グラムを翻訳してオブジェクトモジュールを生成するた
めのコンパイラ212、上記オブジェクトモジュールを
ライブラリ化するためのライブラリアン214、複数の
オブジェクトモジュールをリンクさせるためのリンケー
ジエディタ215、シミュレータとしての機能やデバッ
ガとしての機能を備えたシミュレータ・デバッガ21
6、及び開発対象ソフトウェアが実際に使用されるマイ
クロコンピュータ(ターゲットCPU)に関する各種情
報ファイルを作成するためのターゲットCPU情報解析
手段213などが、所定のプログラム実行により機能的
に実現される。
関する各種プログラムの実行により所定の演算処理を行
うための演算処理装置21、情報表示のための表示装置
22、及び各種情報の入出力装置23を含む。演算処理
装置21は、アセンブラ言語で記述されたソースプログ
ラムを翻訳してオブジェクトモジュールを生成するため
のアセンブラ211、高級言語で記述されたソースプロ
グラムを翻訳してオブジェクトモジュールを生成するた
めのコンパイラ212、上記オブジェクトモジュールを
ライブラリ化するためのライブラリアン214、複数の
オブジェクトモジュールをリンクさせるためのリンケー
ジエディタ215、シミュレータとしての機能やデバッ
ガとしての機能を備えたシミュレータ・デバッガ21
6、及び開発対象ソフトウェアが実際に使用されるマイ
クロコンピュータ(ターゲットCPU)に関する各種情
報ファイルを作成するためのターゲットCPU情報解析
手段213などが、所定のプログラム実行により機能的
に実現される。
【0016】図6には、上記ソフトウェア開発支援シス
テムによるデバッグ対象プログラム作成の流れが示され
る。
テムによるデバッグ対象プログラム作成の流れが示され
る。
【0017】アセンブラ言語で記述されたアセンブラソ
ースプログラムが、アセンブラ211で翻訳されてオブ
ジェクトモジュール13が生成される。また、高級言語
で記述されたソースプログラムはコンパイラで翻訳され
てオブジェクトモジュール13が生成される。上記アセ
ンブラ211やコンパイラ212によって生成されたオ
ブジェクトモジュール13はライブラリアン214によ
りライブラリ化され、それによってライブラリファイル
14が作られる。さらに、複数のオブジェクトモジュー
ルは、リンケージエディタ215によって結合され、そ
れによってロードモジュール16が生成される。このロ
ードモジュール16がシミュレータ・デバッガ216に
よってデバッグされる。
ースプログラムが、アセンブラ211で翻訳されてオブ
ジェクトモジュール13が生成される。また、高級言語
で記述されたソースプログラムはコンパイラで翻訳され
てオブジェクトモジュール13が生成される。上記アセ
ンブラ211やコンパイラ212によって生成されたオ
ブジェクトモジュール13はライブラリアン214によ
りライブラリ化され、それによってライブラリファイル
14が作られる。さらに、複数のオブジェクトモジュー
ルは、リンケージエディタ215によって結合され、そ
れによってロードモジュール16が生成される。このロ
ードモジュール16がシミュレータ・デバッガ216に
よってデバッグされる。
【0018】次に、オブジェクト生成について説明す
る。
る。
【0019】図4(a)にはC++ソースプログラムの一
例が示される。
例が示される。
【0020】図4(a)において、「struct
A」はユーザ定義型とされる。「struct」は構造
体の宣言であり、その型名は「A」であることを示して
いる。そしてそれに続く「int a」は、int型の
変数aの領域をメモリ上に確保することを示し、「lo
ng b」は、long型の変数bの領域をメモリ上に
確保することを示している。int型の変数aの領域、
及びlong型の変数bの領域は、特に制限されない
が、それぞれ4バイトとされる。さらに、上記変数a,
bについての初期設定関数が記述され、そこで、「a=
2」、「b=10」により初期化される。そして、その
初期設定関数の後に、「A aa;」が記述されてい
る。この「A aa;」は、オブジェクト名の設定を意
味し、それについてのコンパイルは、コンパイラ212
によって、以下のように処理される。
A」はユーザ定義型とされる。「struct」は構造
体の宣言であり、その型名は「A」であることを示して
いる。そしてそれに続く「int a」は、int型の
変数aの領域をメモリ上に確保することを示し、「lo
ng b」は、long型の変数bの領域をメモリ上に
確保することを示している。int型の変数aの領域、
及びlong型の変数bの領域は、特に制限されない
が、それぞれ4バイトとされる。さらに、上記変数a,
bについての初期設定関数が記述され、そこで、「a=
2」、「b=10」により初期化される。そして、その
初期設定関数の後に、「A aa;」が記述されてい
る。この「A aa;」は、オブジェクト名の設定を意
味し、それについてのコンパイルは、コンパイラ212
によって、以下のように処理される。
【0021】図4(b)には上記「A aa;」につい
てのコンパイル処理の流れが示される。
てのコンパイル処理の流れが示される。
【0022】このコンパイル処理では、初期設定関数に
オブジェクトの名前(オブジェクト名)を埋込むための
処理が追加されることによって、オブジェクト内にその
オブジェクト名が埋込まれる。
オブジェクトの名前(オブジェクト名)を埋込むための
処理が追加されることによって、オブジェクト内にその
オブジェクト名が埋込まれる。
【0023】先ず、ユーザ定義型(A)のサイズが求め
られる(ステップS1)。この実施例では、「int
a」、「long b」がそれぞれ4バイトとされるた
め、ユーザ定義型(A)のサイズは、4+4=8(バイ
ト)とされる。
られる(ステップS1)。この実施例では、「int
a」、「long b」がそれぞれ4バイトとされるた
め、ユーザ定義型(A)のサイズは、4+4=8(バイ
ト)とされる。
【0024】次に、オブジェクト名(aa)を埋込むた
めに要するサイズが求められる(ステップS2)。この
実施例では、オブジェクト名の情報として、オブジェク
ト名の設定エリアのアドレス保持のためのポインタのサ
イズが4バイト、オブジェクト名(aa)の文字サイズ
が2バイトとされるため、オブジェクト名(aa)を埋
込むために、4+2=6バイトが必要とされる。
めに要するサイズが求められる(ステップS2)。この
実施例では、オブジェクト名の情報として、オブジェク
ト名の設定エリアのアドレス保持のためのポインタのサ
イズが4バイト、オブジェクト名(aa)の文字サイズ
が2バイトとされるため、オブジェクト名(aa)を埋
込むために、4+2=6バイトが必要とされる。
【0025】そして、初期設定関数により、図5(a)
に示されるように、メモリにオブジェクトが設定される
(ステップS3)。オブジェクトの先頭には、オブジェ
クト名の記憶エリア42のアドレスを指示すためのポイ
ンタの記憶エリア41が形成され、それに続いてデータ
(a=2,b=10)が設定される。そして、一つのオ
ブジェクトは、オフセットの位置からデータ(b=1
0)までであり、その後に、そのオブジェクトの名前を
示す文字(aa)の記憶エリア42が設定される。この
実施例では、データa=2,b=10がそれぞれ4バイ
トとされることから、オブジェクト名記憶エリア42の
アドレスは、ポインタ記憶エリア41から8バイト先と
なる。すなわち、この実施例では、図4(a)に示され
る初期設定関数に対して、図5(b)に示されるよう
に、「オブジェクト名(aa)のあるアドレス」、及び
「オブジェクト名=aa」が追加されたものとしてコン
パイル処理が行われ、それによって、オブジェクト名の
埋込みが行われる。そのようにオブジェクト名の埋込み
が行われることにより、後述するデバッグ処理において
は、オブジェクト名のあるアドレスから、そのオブジェ
クトの名前を把握することができる。
に示されるように、メモリにオブジェクトが設定される
(ステップS3)。オブジェクトの先頭には、オブジェ
クト名の記憶エリア42のアドレスを指示すためのポイ
ンタの記憶エリア41が形成され、それに続いてデータ
(a=2,b=10)が設定される。そして、一つのオ
ブジェクトは、オフセットの位置からデータ(b=1
0)までであり、その後に、そのオブジェクトの名前を
示す文字(aa)の記憶エリア42が設定される。この
実施例では、データa=2,b=10がそれぞれ4バイ
トとされることから、オブジェクト名記憶エリア42の
アドレスは、ポインタ記憶エリア41から8バイト先と
なる。すなわち、この実施例では、図4(a)に示され
る初期設定関数に対して、図5(b)に示されるよう
に、「オブジェクト名(aa)のあるアドレス」、及び
「オブジェクト名=aa」が追加されたものとしてコン
パイル処理が行われ、それによって、オブジェクト名の
埋込みが行われる。そのようにオブジェクト名の埋込み
が行われることにより、後述するデバッグ処理において
は、オブジェクト名のあるアドレスから、そのオブジェ
クトの名前を把握することができる。
【0026】上記のようにして生成されたオブジェクト
のデバッグについて説明する。
のデバッグについて説明する。
【0027】図1には、デバッガ216によるブレーク
に関する処理の流れが示される。
に関する処理の流れが示される。
【0028】デバッガ216は、デバッグ対象プログラ
ムを実行させ、指定により1命令実行毎にその実行結果
をトレースバッファに書込むトレース機能や、デバッグ
対象プログラム実行中にブレーク条件が成立した場合
に、ブレーク条件成立のメッセージを表示してプログラ
ム実行を中断するブレーク機能を備えており、ブレーク
条件として、ブレーク系コマンドの条件成立によるブレ
ーク、デバッグ対象プログラム実行時エラー検出による
ブレーク、割込みキー入力によるブレーク等を有する。
そしてこの実施例では、ブレーク系コマンドとして、単
に関数fにブレークポイントを設定する場合の他に、特
定のデータに対して関数fの処理を開始する直前にブレ
ークポイントを設定する場合のように、オブジェクトと
関数の条件とを組合わせたブレークポイントの設定を可
能とするコマンドが用意されている。例えば、「bre
ak a−>f」と指定することによって、データaに
対して関数fの処理を開始する直前にブレークポイント
を設定することができる。そのようなブレークコマンド
によりブレークポイントが設定された場合、デバッガ2
16では、図1に示されるように処理される。
ムを実行させ、指定により1命令実行毎にその実行結果
をトレースバッファに書込むトレース機能や、デバッグ
対象プログラム実行中にブレーク条件が成立した場合
に、ブレーク条件成立のメッセージを表示してプログラ
ム実行を中断するブレーク機能を備えており、ブレーク
条件として、ブレーク系コマンドの条件成立によるブレ
ーク、デバッグ対象プログラム実行時エラー検出による
ブレーク、割込みキー入力によるブレーク等を有する。
そしてこの実施例では、ブレーク系コマンドとして、単
に関数fにブレークポイントを設定する場合の他に、特
定のデータに対して関数fの処理を開始する直前にブレ
ークポイントを設定する場合のように、オブジェクトと
関数の条件とを組合わせたブレークポイントの設定を可
能とするコマンドが用意されている。例えば、「bre
ak a−>f」と指定することによって、データaに
対して関数fの処理を開始する直前にブレークポイント
を設定することができる。そのようなブレークコマンド
によりブレークポイントが設定された場合、デバッガ2
16では、図1に示されるように処理される。
【0029】プログラムカウンタの出力アドレスが更新
される毎に、プログラムカウンタ(PC)の値と、関数
f()の値とが一致したか否かの判別が行わる(ステッ
プS11)。この判別において、プログラムカウンタ
(PC)の値と、関数f()の値とが不一致の場合には
(no)、ブレーク条件不成立により、そのときのプロ
グラムカウンタ(PC)の値に基づいて対応するコマン
ドが実行される。また、上記ステップS11の判別にお
いて、プログラムカウンタ(PC)の値と、関数f()
の値とが一致した(yes)と判断された場合には、そ
のときのプログラムカウンタ(PC)の値に対応するコ
マンド実行に先立ち、ポインタによりオブジェクト名の
アドレスが取得され(ステップS12)、そのアドレス
に基づいてオブジェクト名が取得される(ステップS1
3)。そして、ユーザ指定のオブジェクト名と、オブジ
ェクト名(aa)が一致したか否かの判別が行われる
(ステップS14)。この判別において、それらが一致
した(yes)と判断された場合には上記ブレークポイ
ントでのブレーク条件成立により、必要情報が表示装置
22に表示され、デバッグ対象プログラムの実行が中断
される。また、上記ステップS14の判別において、ユ
ーザ指定のオブジェクト名と、オブジェクト名(a)が
一致しない(no)と判断された場合には、ブレーク条
件不成立により、プログラムカウンタの値に対応するコ
マンドが実行され、上記ステップ11の判別に移行され
る。そのように、オブジェクトと関数の条件とを組合わ
せたブレークポイントの設定が可能とされるので、関数
内部の所望位置にブレーク条件を設定して、その場合の
動作状態を把握可能とすることにより、デバッグ効率の
向上を図ることができる。
される毎に、プログラムカウンタ(PC)の値と、関数
f()の値とが一致したか否かの判別が行わる(ステッ
プS11)。この判別において、プログラムカウンタ
(PC)の値と、関数f()の値とが不一致の場合には
(no)、ブレーク条件不成立により、そのときのプロ
グラムカウンタ(PC)の値に基づいて対応するコマン
ドが実行される。また、上記ステップS11の判別にお
いて、プログラムカウンタ(PC)の値と、関数f()
の値とが一致した(yes)と判断された場合には、そ
のときのプログラムカウンタ(PC)の値に対応するコ
マンド実行に先立ち、ポインタによりオブジェクト名の
アドレスが取得され(ステップS12)、そのアドレス
に基づいてオブジェクト名が取得される(ステップS1
3)。そして、ユーザ指定のオブジェクト名と、オブジ
ェクト名(aa)が一致したか否かの判別が行われる
(ステップS14)。この判別において、それらが一致
した(yes)と判断された場合には上記ブレークポイ
ントでのブレーク条件成立により、必要情報が表示装置
22に表示され、デバッグ対象プログラムの実行が中断
される。また、上記ステップS14の判別において、ユ
ーザ指定のオブジェクト名と、オブジェクト名(a)が
一致しない(no)と判断された場合には、ブレーク条
件不成立により、プログラムカウンタの値に対応するコ
マンドが実行され、上記ステップ11の判別に移行され
る。そのように、オブジェクトと関数の条件とを組合わ
せたブレークポイントの設定が可能とされるので、関数
内部の所望位置にブレーク条件を設定して、その場合の
動作状態を把握可能とすることにより、デバッグ効率の
向上を図ることができる。
【0030】上記実施例によれば、以下の作用効果を得
ることができる。
ることができる。
【0031】(1)コンパイルにおいて、初期設定関数
にオブジェクトの名前(オブジェクト名)を埋込むため
の処理が追加されることにより、図3(a)に示される
ように、ソースプログラム1からソースプログラム2へ
の関数呼出しがある場合でも、プログラム実行処理が関
数内部のときに、オブジェクトのオフセット位置、及び
オブジェクトの型情報からオブジェクトのメンバ情報に
加えて、オブジェクト名を参照することができるので、
関数呼出しにより処理実行が関数内部に移った場合に、
その関数呼出しが、a1によるものなのか、b1による
ものなのかを判別することができ、それによりソフトウ
ェアデバッグ効率の向上を図ることができる。
にオブジェクトの名前(オブジェクト名)を埋込むため
の処理が追加されることにより、図3(a)に示される
ように、ソースプログラム1からソースプログラム2へ
の関数呼出しがある場合でも、プログラム実行処理が関
数内部のときに、オブジェクトのオフセット位置、及び
オブジェクトの型情報からオブジェクトのメンバ情報に
加えて、オブジェクト名を参照することができるので、
関数呼出しにより処理実行が関数内部に移った場合に、
その関数呼出しが、a1によるものなのか、b1による
ものなのかを判別することができ、それによりソフトウ
ェアデバッグ効率の向上を図ることができる。
【0032】(2)また、上記のように、初期設定関数
にオブジェクトの名前(オブジェクト名)を埋込むため
の処理が追加されることにより、そのオブジェクトのデ
バッグにおいては、特定のオブジェクトから呼出された
関数のみブレークさせることができ(S11〜S1
4)、そのようにオブジェクトと関数の条件を組合わせ
たブレークポイントの設定を可能とすることで、ソフト
ウェアデバッグの効率向上を図ることができる。
にオブジェクトの名前(オブジェクト名)を埋込むため
の処理が追加されることにより、そのオブジェクトのデ
バッグにおいては、特定のオブジェクトから呼出された
関数のみブレークさせることができ(S11〜S1
4)、そのようにオブジェクトと関数の条件を組合わせ
たブレークポイントの設定を可能とすることで、ソフト
ウェアデバッグの効率向上を図ることができる。
【0033】以上本発明者によってなされた発明を実施
例に基づいて具体的に説明したが、本発明はそれに限定
されるものではなく、その要旨を逸脱しない範囲におい
て種々変更可能であることは言うまでもない。
例に基づいて具体的に説明したが、本発明はそれに限定
されるものではなく、その要旨を逸脱しない範囲におい
て種々変更可能であることは言うまでもない。
【0034】例えば、上記実施例ではC++ソースプログ
ラムを使用した場合について説明したが、C++言語に限
定されるものではなく、各種オブジェクト指向言語プロ
グラムを使用することができる。
ラムを使用した場合について説明したが、C++言語に限
定されるものではなく、各種オブジェクト指向言語プロ
グラムを使用することができる。
【0035】また、上記実施例ではポインタを利用して
オブジェクト名の文字(aa)の記憶エリア42をメモ
リに確保するようにしたが、上記ポインタに代えて、オ
ブジェクト毎に設定されたデバッグ情報用ID番号等を
埋込むようにすれば、それによって直ちにオブジェクト
の判別が可能とされるので、オブジェクト名の文字(a
a)の記憶エリア42をメモリに確保する必要がなくな
る。
オブジェクト名の文字(aa)の記憶エリア42をメモ
リに確保するようにしたが、上記ポインタに代えて、オ
ブジェクト毎に設定されたデバッグ情報用ID番号等を
埋込むようにすれば、それによって直ちにオブジェクト
の判別が可能とされるので、オブジェクト名の文字(a
a)の記憶エリア42をメモリに確保する必要がなくな
る。
【0036】以上の説明では主として本発明者によって
なされた発明をその背景となった利用分野であるコンパ
イラとそれによって生成されたオブジェクトのデバッグ
に適用した場合について説明したが、本発明はそれに限
定されるものではなく、アセンブラとそれによって生成
されたオブジェクトのデバッグに適用することができ
る。
なされた発明をその背景となった利用分野であるコンパ
イラとそれによって生成されたオブジェクトのデバッグ
に適用した場合について説明したが、本発明はそれに限
定されるものではなく、アセンブラとそれによって生成
されたオブジェクトのデバッグに適用することができ
る。
【0037】本発明は、少なくともオブジェクトを生成
することを条件に適用することができる。
することを条件に適用することができる。
【0038】
【発明の効果】本願において開示される発明のうち代表
的なものによって得られる効果を簡単に説明すれば下記
の通りである。
的なものによって得られる効果を簡単に説明すれば下記
の通りである。
【0039】すなわち、コンパイルにおいて、初期設定
関数にオブジェクトの名前(オブジェクト名)を埋込む
ための処理が追加されることにより、プログラム実行処
理が関数内部のときに、オブジェクトのオフセット位
置、及びオブジェクトの型情報からオブジェクトのメン
バ情報に加えて、オブジェクト名を参照することができ
るので、関数呼出しにより処理実行が関数内部に移った
場合に、その関数呼出し先を判別することができ、それ
によってデバッグ効率の向上を図ることができる。
関数にオブジェクトの名前(オブジェクト名)を埋込む
ための処理が追加されることにより、プログラム実行処
理が関数内部のときに、オブジェクトのオフセット位
置、及びオブジェクトの型情報からオブジェクトのメン
バ情報に加えて、オブジェクト名を参照することができ
るので、関数呼出しにより処理実行が関数内部に移った
場合に、その関数呼出し先を判別することができ、それ
によってデバッグ効率の向上を図ることができる。
【0040】また、上記のように初期設定関数にオブジ
ェクトの名前(オブジェクト名)を埋込むための処理が
追加されることにより、特定のオブジェクトから呼出さ
れた関数のみブレークさせることができ、オブジェクト
と関数の条件を組合わせたブレークポイントの設定が可
能とされる。そのように関数呼出し先の判定や、オブジ
ェクトと関数の条件を組合わせたブレークポイントの設
定が可能とされることにより、デバッグ効率の向上を図
ることができる。
ェクトの名前(オブジェクト名)を埋込むための処理が
追加されることにより、特定のオブジェクトから呼出さ
れた関数のみブレークさせることができ、オブジェクト
と関数の条件を組合わせたブレークポイントの設定が可
能とされる。そのように関数呼出し先の判定や、オブジ
ェクトと関数の条件を組合わせたブレークポイントの設
定が可能とされることにより、デバッグ効率の向上を図
ることができる。
【図1】本発明の一実施例方法が適用されるコンパイル
処理の主要部のフローチャートである。
処理の主要部のフローチャートである。
【図2】上記コンパイル処理を行うためのソフトウェア
開発支援システムの機能ブロック図である。
開発支援システムの機能ブロック図である。
【図3】本実施例におけるオブジェクトとの比較対象と
されるオブジェクトの型の構成説明図である。
されるオブジェクトの型の構成説明図である。
【図4】本実施例におけるソースプログラムとそれの主
要部についてのコンパイル処理のフローチャートであ
る。
要部についてのコンパイル処理のフローチャートであ
る。
【図5】本実施例におけるオブジェクトの型の説明図で
ある。
ある。
【図6】上記ソフトウェア開発支援システムによるデバ
ッグ対象プログラム作成のフローチャートである。
ッグ対象プログラム作成のフローチャートである。
11 アセンブラソースプログラム 12 高級言語で記述されたソースプログラム 13 オブジェクトモジュール 14 ライブラリファイル 15 CPU情報ファイル 16 ロードモジュール 21 演算処理装置 22 表示装置 23 入出力装置 41 ポインタの記憶エリア 42 オブジェクト名の文字記憶エリア
Claims (4)
- 【請求項1】 ソースプログラムに基づいて、デバッグ
対象とされるオブジェクトを生成するオブジェクト生成
方法において、 オブジェクトの内部にそのオブジェクトの識別を可能と
するオブジェクト名の情報を埋込むステップを含むこと
を特徴とするオブジェクト生成方法。 - 【請求項2】 ソースプログラムに基づいて、デバッグ
対象とされるオブジェクトを生成するオブジェクト生成
方法において、 ユーザ定義のサイズを求める第1ステップと、 ポインタサイズ及びオブジェクト名の文字サイズに基づ
いて、オブジェクト名の情報埋込みに要するサイズを求
める第2ステップと、 初期設定関数によるオブジェクト設定の際に、上記第
1,第2ステップで求められたサイズに基づいて、オブ
ジェクトの内部にそのオブジェクトの識別を可能とする
オブジェクト名の情報を埋込む第3ステップと、 を含むことを特徴とするオブジェクト生成方法。 - 【請求項3】 請求項1又は2記載のオブジェクト生成
方法によって生成されたオブジェクトをデバッグするデ
バッグ方法において、 関数呼出しに係るオブジェクト名を、オブジェクト内部
に埋込まれたオブジェクト名の情報に基づいて特定する
ステップを含むことを特徴とするデバッグ方法。 - 【請求項4】 指定されたオブジェクトにより呼出され
る関数の内部の任意のプログラム行にブレークポイント
を設定する第4ステップと、 プログラムカウンタによって示されるアドレスが、上記
関数のアドレスと一致したか否かを判別する第5ステッ
プと、 この判別結果に基づいて、上記オブジェクトからオブジ
ェクト名のアドレスを取得する第6ステップと、 オブジェクト名のアドレスからオブジェクト名を取得す
る第7ステップと、 取得されたオブジェクト名が上記ブレークポイント設定
に係るオブジェクトと一致するか否かを判別する第8ス
テップと、 この判別結果に基づいてプログラム実行を中断する第9
ステップと、 を含むことを特徴とする請求項3記載のデバッグ方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP7327959A JPH09146776A (ja) | 1995-11-22 | 1995-11-22 | オブジェクト生成方法、及びデバッグ方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP7327959A JPH09146776A (ja) | 1995-11-22 | 1995-11-22 | オブジェクト生成方法、及びデバッグ方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH09146776A true JPH09146776A (ja) | 1997-06-06 |
Family
ID=18204930
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP7327959A Withdrawn JPH09146776A (ja) | 1995-11-22 | 1995-11-22 | オブジェクト生成方法、及びデバッグ方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH09146776A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2004326789A (ja) * | 2003-04-21 | 2004-11-18 | Microsoft Corp | ジャストマイコード型のデバッグ方法 |
-
1995
- 1995-11-22 JP JP7327959A patent/JPH09146776A/ja not_active Withdrawn
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2004326789A (ja) * | 2003-04-21 | 2004-11-18 | Microsoft Corp | ジャストマイコード型のデバッグ方法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US8266608B2 (en) | Post-compile instrumentation of object code for generating execution trace data | |
| US7100152B1 (en) | Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof | |
| US9152531B2 (en) | Post-compile instrumentation of object code for generating execution trace data | |
| US5987250A (en) | Transparent instrumentation for computer program behavior analysis | |
| CA2179553C (en) | Determining dynamic properties of programs | |
| US6430741B1 (en) | System and method for data coverage analysis of a computer program | |
| EP0785510B1 (en) | Program debugging system for debugging a program having a graphical user interface | |
| JPH0689200A (ja) | デバッグシステム及び方法 | |
| US10229031B2 (en) | Debugging inline functions in optimized code | |
| JPH07105044A (ja) | コンピュータプログラムの実行をシュミレーションする方法及びシステム | |
| US20060200806A1 (en) | Apparatus, system, and method for trace insertion | |
| JP2006185211A (ja) | プログラム解析装置、テスト実行装置、その解析方法及びプログラム | |
| JP2004164554A (ja) | プログラム実行監視装置および方法 | |
| JP2003050715A (ja) | コンパイラおよびデバッグ装置 | |
| JPH03188535A (ja) | プログラム・エラー検出方法 | |
| US20040168157A1 (en) | System and method for creating a process invocation tree | |
| JP2010287101A (ja) | ソフトウエアデバッグ装置及び方法 | |
| JP2005338987A (ja) | 例外テスト支援プログラム及び例外テスト支援装置 | |
| Spinellis | Trace: A tool for logging operating system call transactions | |
| JPH09146776A (ja) | オブジェクト生成方法、及びデバッグ方法 | |
| JPH0766342B2 (ja) | プログラムテスト装置 | |
| US20030018957A1 (en) | Debugger monitor with anticipatory highlights | |
| RU2390821C1 (ru) | Способ динамической инструментации | |
| JP2004287869A (ja) | プログラム実行監視装置および方法 | |
| JP3165105B2 (ja) | プログラムのトレーサ、コンパイラ及びリンカー |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20030204 |