(57)【要約】【課題】障害発生条件を特定するには障害を発生した計算機のメモリダンプから充分な情報が得られない場合には、幾度かの再現確認が必要となるが、この作業は多大な工数を要する場合が発生する。【解決手段】被テストプログラムを実行中に分岐命令が発生した場合、プログラムカウンタを取得する。分岐命令から次の分岐命令までは実行したと見なし、プログラムの実行回数の履歴管理する事で運用プログラムの実行パターンを学習し、当該実行パターンと異なる分岐先への遷移履歴が無い、もしくは他の遷移先と比較して極小の場合には障害発生の可能性があるものと見なし、ダンプの差分情報を取得し、実際に障害が発生した場合に障害発生時より幾分以前のダンプ情報を提供し得ることを特徴とするデバッグ装置【選択図】  図１
2004185345.tif 000002
【特許請求の範囲】
【請求項１】
被テストプログラムの実行を開始する際、初期ダンプ情報を取得し、該ダンプ情報に対し任意の状態におけるダンプの差分情報を記憶し、
前記差分情報は、まず実行する前記被テストプログラム実行中の分岐命令のプログラムカウンタ情報を取得し、該取得したプログラムカウンタを他の計算機で処理し、
前記被テストプログラム実行中に当該実行箇所がプログラマの経験則によるチェックポイントと特定命令とタイマについて指定した条件に一致する場合は該被テストプログラム実行中におけるダンプを取得し、
分岐命令等については分岐箇所での遷移回数を記憶し、遷移確率が所定遷移確率以下の場合は、ダンプを取得することを特徴とするデバッグ方法。
【請求項２】
被テストプログラムの初期ダンプ情報、および同プログラムのプログラムカウンタ情報を収集し、被テストプログラム実行時に事前に設定した条件を満たした場合にダンプを取得し、障害発生時にプログラマへデバッグ支援となり得る本情報を提供することを特徴とするデバッグ方法。
【請求項３】
請求項１記載のデバッグ方法において、前回取得した前記ダンプとの差分を蓄積しておくことを特徴とするデバッグ方法。
【請求項４】
請求項１記載のデバッグ方法において、前記プログラムカウンタを複数のスタックに蓄積することにより、該他のプログラムカウンタを使用した他のプログラムにて実行することを特徴とするデバッグ方法。
【請求項５】
被テストプログラムの実行を開始する際、初期ダンプ情報を取得し、該ダンプ情報に対し任意の状態におけるダンプの差分情報を記憶する手段と、
前記差分情報は、まず実行する前記被テストプログラム実行中の分岐命令のプログラムカウンタ情報を取得し、該取得したプログラムカウンタを他の計算機で実行する手段と、
前記被テストプログラム実行中に当該実行箇所がプログラマの経験則によるチェックポイントや特定命令またはタイマなどの事前に指定した条件に一致する場合は該実行中におけるダンプを取得する手段と、
分岐命令等については分岐箇所での遷移回数を記憶し、遷移確率が所定遷移確率以下の場合は、ダンプを取得する手段とを備えたことを特徴とするデバッグシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラムのデバッグ作業における再現性を確保するための技術に関する。
【０００２】
【従来の技術】
障害が発生した場合、エラー発生原因、および発生箇所を調査するたには、デバッガでのステップ実行、障害発生時に取得されるメモリダンプ情報を基にプログラマはデバッグを行う。特開平５−２５０２０８号に開示されているようなデバッグ技術では、プログラムのデバッグの状態を外部記憶装置へ退避させておきその状態からのデバッグ作業を幾度となく実行することができることが記載されている。
【０００３】
【特許文献１】
特開平５−２５０２０８号
【０００４】
【発明が解決しようとする課題】
従来の技術におけるデバッガは何れも障害発生条件を特定でき、再現方法を確立した場合において、被テストプログラムを改めてデバッガを用いて解析する場合に非常に有用である。しかし、障害発生条件を特定するには障害を発生した計算機のメモリダンプから充分な情報が得られる必要があり、充分な情報が得られない場合には、幾度かの再現確認が必要となる。また、この作業は本来行うべきデバッグ作業以上に工数を要する場合が発生する。このような課題は開発初期段階ではなく実稼動するようなプログラムにおいて顕著である。
【０００５】
本発明は前記課題に鑑みてなされたもので高確率な再現性を有する状態から再現確認することを目的とし、障害発生時より幾分か以前のダンプに対して解析可能とすることでプログラマのデバッグ作業の負担を軽減するデバッグ方法およびシステムを提供することである。
【０００６】
【課題を解決するための手段】
本発明では、上記の課題を改善するために次のような方法を採用する。
被テストプログラムの実行を開始する際初期ダンプ情報を取得する。この情報に対し任意の状態におけるダンプの差分情報を収集する。
【０００７】
差分情報を取得する手順は、まず実行する被テストプログラム実行中の分岐命令のプログラムカウンタ情報を取得する。取得したプログラムカウンタを別の計算機で処理する。
被テストプログラム実行中に当該実行箇所がプログラマの経験則によるチェックポイントや特定命令、或いはタイマ等の事前に指定した条件に一致する場合には本状態におけるダンプを取得する。
前記のように障害の発生を経験則のみで予測することは非常に困難である。そのため分岐命令等に関しては分岐箇所での遷移を学習し、遷移確率が極めて低い場合には何らかの異常な状態になり得ることを想定しダンプを取得する。このことで、経験則のみでは判別できない部分を被テストプログラム実行中に変動する遷移確率により補う。
【０００８】
【発明の実施の形態】
以下、本発明の実施例を図面に基づいて詳細に説明する。図１は情報処理装置を利用して実現した一実施例である。１はプロセッサであり、本プロセッサは被テストプログラムを実行中に分岐命令を実行しようとする場合に割り込みを発生する。２は主記憶装置であり、被テストプログラム（３）をロードする領域（２１）、および本装置によってダンプを取得する際に使用する一時的なダンプ格納領域（２２）を有する。４はプログラムカウンタキューであり、プロッセサ（１）での割り込み処理発生時のプログラムカウンタを格納する箇所である。５は実行履歴監視部（プログラムでも実現可能である）であり被テストプログラムの実行履歴を監視する。６はダンプ出力部（プログラムでも実現可能である）であり被テストプログラムロード時、および前記５からのダンプ出力要請発生時に前記２２のダンプを取得する。７はダンプ蓄積部（プログラムでも実現可能である）であり６により出力されるダンプの情報（７１）、および差分（７２）を格納しておく外部記憶装置である。なお、図１における５、６、７は被テストプログラムを実行するプロセッサとは他のプロセッサにて処理することもできる。
【０００９】
図２は、プログラムカウンタキュー（４）である。プログラムカウンタキュー（４）は図２のようなキューの構造をしている。分岐命令によるプロセッサ（１）での割り込み発生時には本時点でのプログラムカウンタを蓄積していく。また、プログラムカウンタ（４１）は次に実行する命令のアドレスを保持している。
【００１０】
図３は本実施例における被テストプログラムを実行する際のフローチャートである。初めに被テストプログラム（３）を主記憶装置（２）にロードする（３０１）。当該領域を被テストプログラムロード領域（２１）とする。次にダンプの初期状態を保持するためにダンプ出力部（６）へダンプ出力要請を行う（３０２）。ダンプ出力部は被テストプログラムロード領域（２１）を初期ダンプ情報（７１）として保持する。プロセッサ（１）は被テストプログラム（２１）を実行するが、その際事前に設定したダンプ取得条件と一致する場合（３０３）にはダンプ出力部へダンプの出力を要求する（３０４）。また、被テストプログラム実行中に分岐命令が発生した場合割り込みを発生させる（３０５）（３０６）。割り込みが発生した場合プログラムカウンタ（４１）をプログラムカウンタキューに蓄積する（３０７）。その後プロセッサ（１）は通常通りに命令を実行する（３０８）。プログラムが終了するまで本処理の３０３〜３０９を繰り返す。当該３０３〜３０９の処理は被テストプログラムを実行するプロセッサが実行する。
【００１１】
図４はプログラムカウンタがキューイングされてからダンプを出力するまでの処理についてのフローチャートである。まず前記１のプロセッサにより４にプログラムカウンタがキューイングされた場合、実行履歴監視部（５）がキューから分岐命令のプログラムカウンタを読み込む（４０１）。さらに分岐命令発生箇所の主記憶装置（２）上でのアドレスを特定する（４０２）。実行履歴監視部（５）のダンプ取得条件に合致する場合（４０３）には、ダンプ出力部（６）へダンプの出力を要求し（４０４）、ダンプ出力部はダンプを主記憶装置（２）上のダンプ情報一時格納領域（２２）に出力する。その後実行履歴監視部（５）は実行履歴情報（５２）を更新する（４０５）。なお、本一連の処理は前記プロッセサ（１）とは異なるプロッセサが処理する。
図５は実行履歴監視部（５）の処理方式を示すフローチャートであり、図６は実行履歴情報である。実行履歴監視部（５）は被テストプログラムの開始アドレス（６０１）から終了アドレス（６０４）までのアドレスへのアクセス回数を管理している。本実行履歴情報は、被テストプログラムの典型的な処理パターンを運用する以前のテスト工程等にて実行しておく必要がある。
【００１２】
その上で、実行履歴部（５）は４にキューイングされているプログラムカウンタを読み出し、読み出したプログラムカウンタから当該アドレス位置を特定する（５０２）。特定したアドレスからの遷移先である分岐命令アドレス（６０２）と分岐先アドレス（６０３）との実行回数を比較し実行回数の比率が任意の閾値を超える場合、もしくは実行履歴が無い場合（５０３）にはユーザが設定したダンプ取得条件（３０３）に一致しない場合でもダンプ出力部（６）へダンプ出力を要求する（５０４）。最後に実行履歴監視部（５）は前回の分岐命令箇所から今回の分岐命令箇所までのアドレスは全て実行したものとして実行履歴情報（５２）を更新する（５０５）。なお本実行履歴情報は被テストプログラムが実行中に「経験」として蓄積されることで、本装置は被テストプログラムの実行パターンを学習する。
【００１３】
図７はダンプ出力部（６）に関するフローチャートである。実行履歴監視部（５）よりダンプ出力要求が発生するとダンプ出力部は主記憶装置（２）上のダンプ情報一時格納領域（２２）にダンプを出力する（７０１）。ダンプ出力部は前回出力時のダンプ情報（６３）を保持しており、７０１において出力したダンプと前回のダンプ（６３）とを比較し差分のみを出力する（７０２）（７０３）。差分情報を出力した後保持しているダンプ情報を更新する（７０４）。
【００１４】
以上により、プログラマの経験則に加え被テストプログラムが分岐命令において常に実行する箇所を「正常処理」、極稀もしくは未実行の箇所を「障害予備群」として捕らえ後者の場合にダンプを取得する。これにより実際に障害が発生した場合にプログラマに充分な情報を与え得ることができ、また当該ダンプ情報を用いる事で再現確認が可能になり得ることができ、プログラマのデバッグ作業を支援することができる。
また、ダンプの差分情報のみを蓄積していく事で資源をより有効に活用することができる。
また、被テストプログラムを実行するプロッセサと実行履歴の監視とを別プロッセサで処理する事で被テストプログラムの実行へ高負荷を掛けることを回避できる。
【００１５】
【発明の効果】
本発明によれば、障害発生時より幾分か以前のダンプに対して解析可能とすることでプログラマのデバッグ作業の負担を軽減することができる。
【図面の簡単な説明】
【図１】本発明の実施形態にかかるデバッグ装置を示す図である
【図２】プログラムカウンタキューの形式とプログラムカウンタの内容を示す図である。
【図３】被テストプログラム実行プロッセサ側のフローチャートである。
【図４】本デバッグ装置実行プロッセサ側のプロッセサのフローチャートである。
【図５】実行履歴監視部のフローチャートである。
【図６】実行履歴情報のデータ構成図である。
【図７】ダンプ出力部のフローチャートである。
【符号の説明】
１  被テストプログラムを実行するプロセッサ
２  主記憶装置
３  被テストプログラム
４  プログラムカウンタキュー
５  実行履歴監視部
６  ダンプ出力部
７  ダンプ蓄積部
２１  被テストプログラムロード領域
２２  ダンプ情報一時格納領域
４１  プログラムカウンタ
５１  実行箇所管理機能
５２  実行履歴情報
６１  ダンプ収集機能
６２  ダンプ差分検出機能
６３  前ダンプ情報
７１  初期状態ダンプ情報
７２  ダンプ差分情報
３０１  被テストプログラムロード指示
３０２  初期状態ダンプ情報取得
３０３  事前ダンプ取得条件確認
３０４  ダンプ出力要求
３０５  分岐命令確認
３０６  分岐命令割り込み指示
３０７  プログラムカウンタ格納指示
３０８  被テストプログラム実行機能
３０９  プログラム終了確認
４０１  プログラムカウンタ読み込み指示
４０２  実行位置特定機能
４０３  実行履歴監視部ダンプ取得指示
４０４  ダンプ出力要求
４０５  実行履歴情報更新機能
５０１  実行位置特定機能
５０２  実行履歴比較指示
５０３  実行履歴監視部ダンプ取得指示機能
５０４  ダンプ出力要求
５０５  実行履歴情報更新機能
６０１  実行履歴情報被テストプログラム開始アドレス
６０２  実行履歴情報被テスト分岐命令アドレス
６０３  実行履歴情報被テスト分岐先アドレス
６０４  実行履歴情報被テスト終了アドレス
７０１  ダンプ格納機能
７０２  差分検出機能
７０３  差分出力機能
７０４  保持ダンプ情報更新機能
【図１】
2004185345.tif 000003
【図２】
2004185345.tif 000004
【図３】
2004185345.tif 000005
【図４】
2004185345.tif 000006
【図５】
2004185345.tif 000007
【図６】
2004185345.tif 000008
【図７】
2004185345.tif 000009