netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2007-06-16 [長年日記] ▲
_ [読書] Why Programs Fail を読んでみました ▲
delta debugging で有名な Andreas Zeller が書いている,デバッグに話題を絞った書籍です.個人的には,これのおかげで delta debugging の考え方をようやくちゃんと理解できたので,良い本だと思います.
この本は,ユーザから観測可能なプログラムの動作不良(failure)から,それが起こるときと起こらないときの差分(cause)を調べ,そして原因となっているコード(defect)を発見する手順について述べています.
failure に至るまでのプログラムの実行を時間-メモリ空間軸(プログラムの状態)平面ととらえて,ブレークポイント,ウォッチポイント,アサーション,プログラムスライシング,ダイナミックスライシング,異常データの検出,不変条件の推定,ロギングなどが,どこを調べるために役立つかを説明しています.
この本では,デバッグのプロセスを TRAFFIC (Track the problem / Reproduce the failure / Automate and simplify / Find infection origins / Focus on likely origins / Isolate the infection chain / Correct the defect) という7つのステップに分解し,これに沿った章構成になっています.各ステップについて,具体例を示しつつ,先ほど挙げたような各種手法のどれをどう使うと良いか,またその手法を実装したツール群を紹介しています.
ツール紹介などの一方で,ソフトウェア工学の論文へのポインタもいくらか入ってます.ソフトウェアの欠陥に関連した用語の定義もしっかりしており,delta debugging やスライシングなどの解析技術についても本文中で丁寧に解説されているので,研究テーマによっては,開始地点としてこの本を使うのも良いかな?と思ったりしています.
2007-06-28 [長年日記] ▲
_ [Java] Soot の解析中に JVM がクラッシュすることがある ▲
Soot によるバイトコード解析を全力で(-Xmx4000M -Xss2000M,-include-all -whole-program -p cg.spark:all-reachable:true)動かしてると,JVM がいきなり EXCEPTION_STACK_OVERFLOW でクラッシュする症状が発生するようです.
エラーログには,使っている Sun の 64ビット Windows 用 JVM (Java Hotspot(TM) 64-Bit Server VM build 1.6.0_01-b06, mixed mode)が標準で動かしている parallel gc が gc failed を出したと書いてあったので,とりあえず -Xincgc オプションを付けて incremental gc を有効にしたら,クラッシュの症状は出なくなりました.