プログラムの一時停止時に 将来の実行情報を提供するデバッガ

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
全体ミーティング (4/25) 村田雅之.
侵入検知システムの構築と ログの可読性向上
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
情報伝播によるオブジェクト指向プログラム理解支援の提案
Handel-Cによる       エアホッケー.
プログラムの動作を理解するための技術として
プログラミングIII演習 第1回目.
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
AspectScope によるアスペクトとクラスのつながりの視覚化
CSP記述によるモデル設計と ツールによる検証
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
プログラム実行履歴を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
動的スライスを用いた バグ修正前後の実行系列の比較
統合開発環境のための アスペクト指向システム
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
Java Virtual Machine 高速化のためのbyte code 解析 An analysis of byte code to improve the performance of Java Virtual Machine 鈴木タカハル 谷研究室 Feb, 2003.
デバッガ dbx の使い方.
コンパイラ 2012年11月15日
限られた保存領域を使用する Javaプログラムの実行トレース記録手法の 提案と評価
Javaプログラムの変更を支援する 影響波及解析システム
動的データ依存関係解析を用いた Javaプログラムスライス手法
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
データ構造とアルゴリズム論 第9章 木構造 平成30年6月27日 森田 彦.
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
アスペクト指向言語のための 独立性の高いパッケージシステム
Intel SGXを用いた仮想マシンの 安全な監視機構
第二回 Javaの開発環境 04A2029           古賀慎也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
ソフトウェア保守のための コードクローン情報検索ツール
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
同期処理のモジュール化を 可能にする アスペクト指向言語
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
オブジェクトの動的支配関係解析を 用いたシーケンス図の縮約
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
メソッドの同時更新履歴を用いたクラスの機能別分類法
アルゴリズムとデータ構造1 2009年6月15日
蓄積されたオブジェクトの動作履歴を用いた 実行履歴削減手法の提案
統合開発環境のための プログラミング言語拡張 フレームワーク
第2回 開発環境とゲーム 05A1030 佐々木 和也.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
データ構造とアルゴリズム論 第9章 連結リスト
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
アルゴリズムとデータ構造 2010年6月17日
複数ホストにまたがるVMの 高速かつ柔軟な 部分マイグレーション
回帰テストにおける実行系列の差分の効率的な検出手法
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム理解のための 付加注釈 DocumentTag の提案
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

プログラムの一時停止時に 将来の実行情報を提供するデバッガ コンピュータサイエンス専攻 井上研究室 冨永 真司

デバッグ プログラム開発におけるプロセスの一つ プログラム中のバグ(欠陥)を取り除く作業 以下のプロセスに細分化される バグを引き起こすテスト入力の特定 バグの原因・位置の特定 バグの除去 テスト

デバッガ デバッグを支援するツール 様々な機能を提供 実行中のプログラムのメモリ領域の値を確認できる 特にバグの原因・位置を特定する際に使用 様々なIDE(統合開発環境)等で提供されている (例) Eclipse, IntelliJ IDEA, Visual Studio, … 様々な機能を提供 (例)ブレークポイント,ステップ実行,トレース,… 実行中のプログラムのメモリ領域の値を確認できる (例)プログラム(命令),アドレス値,変数の値,…

変数の値の確認の仕方 eclipseでは変数ビューに表示される プログラムの実行停止地点から参照可能な全ての変数を表示 ローカル変数は出現順で,フィールドはアルファベット順で表示される 変数ビュー

問題点 ソースコードと変数ビューを参照しても,プログラムの将来の挙動は自分で推測しなければならない デバッグ時にはプログラム停止地点前後の挙動を考える 既に実行された分に関しては,ログなどで追跡できる 実行してしまうと後戻りが困難

研究概要 プログラムのデバッグの際,変数ビューを用いても,プログラムの将来の挙動を自分で推測する手間がかかる プログラムの将来の挙動を把握しやすいように,変数ビューを改造する デバッグに要する時間や労力の削減を期待

提案手法 将来使用される変数や発生する例外を分かりやすく提示する変数ビューを内蔵したデバッガを提案する 使用される変数と発生する例外: 将来の挙動を把握するための情報 将来使用される変数: プログラム停止地点以降の命令群で値を読みだされる変数 使用される変数を変数ビューの上位に移動する ビューのスクロールや拡大,階層構造の中の項目を探すといった手間を削減 Eclipse JDTデバッガを拡張して実装

改造デバッガの仕様(1/3) プログラム停止地点以降で使用される変数と発生する例外を変数ビューの上部に表示する プログラム停止地点からループの終端,もしくはメソッドの終端までの命令を対象とする 変数の表示順は以下のように変わる 使用される変数の後に使用されない変数を連結する 使用される変数は参照順,使用されない変数は従来の順序 変数リスト 使用される変数 使用されない変数 従来手法 提案手法

number[m](のみ)を参照している場合 改造デバッガの仕様(2/3) 従来の項目に加え,以下の項目が追加される 配列の要素 オブジェクトのフィールド変数 従来手法 提案手法 number number [0] [0] [1] [1] numberを 展開しないと 見えない … … [m] [m] … … [n] [n] number[m] number[m](のみ)を参照している場合

改造デバッガの仕様(3/3) 以下の例外を取り扱う NullPointerException(ヌルポインタアクセス) ArrayIndexOutOfBoundsException(配列外アクセス) ArithmeticException(ゼロ除算)

解析手法(1/3) JDI(Java Debug Interface)を利用している デバッグ対象プログラムを実行している仮想マシンにアクセスするためのインターフェース デバッグ対象プログラムのある変数の値を取得したりすることも出来る J D I デバッグ対象 プログラム側 Java仮想マシン デバッガ側 Java仮想マシン

解析手法(2/3) スタックと変数のコピーを用意し,独立にプログラムを実行,計算している コピーに対して値を読み書きすることで,プログラムの状態を変えないようにする 実行 スタック 実行停止 スタック 最初は空 変数 変数 プログラム 値は必要に 応じて適宜取得 デバッグ対象 デバッガ

解析手法(3/3) 実行してみなければ分からない値には,仮想的な値”unknown”を割り当てる オペランドに”unknown”が含まれる演算の結果は”unknown”とする 一部分だけ値が不明でも,他の部分に関して計算を続行できる

提案手法の流れ ここで停止 URLを取得 バイトコード命令リスト プログラム クラスファイル ループの終端か メソッドの終端に到達するまで実行 使用された変数のリスト 変数ビュー

実行例(ケーススタディ) この部分が実行される 配列外アクセス 従来手法 提案手法

本ツールを使った感想(アンケート) 使用感 配布されたら使いたいか 足りない機能は何か あらかじめ例外が表示されるのは便利 表示されている配列要素がソースコード中のどの部分に対応するか少し分かりづらい 配布されたら使いたいか 使ってみたい 足りない機能は何か メソッド解析機能 計算式の最終的な計算結果の表示

まとめと今後の課題 プログラムの実行の一時停止時,以降の命令で使用される変数の値を変数ビューの上部に表示することで,変数ビューの閲覧を支援した デバッグに要する時間や労力の削減を期待 今後の課題 機能拡張・機能改善 被験者実験

提案手法の流れ 実行停止中のプログラムのクラスファイルを解析し,バイトコード命令リストを得る ソースコードにおける行番号をもとに,次の命令を特定する バイトコード命令を実行して,その命令で使用される変数を記録する ループの終端かメソッドの終端に到達するまで逐次実行 記録した変数が変数ビューの上部に来るように項目の並び順を変更