デバッグ技法/自動で現象を再現させる


Top / デバッグ技法 / 自動で現象を再現させる

自動で現象を再現させる

QEMU で何回も Mona を起動して不具合が再現させるの大変。
そういうときに楽をする方法です。

概念

以下のようなフローのスクリプトを作り自動化します。

  1. . QEMU を起動する
  2. . 1秒 sleep
  3. . 正常起動条件の文字列をログに見つけたら QEMU を停止 1 に戻る。
  4. . バグ再現条件の文字列をログに見つけたらログの内容を Emacs に表示し exit
  5. . 2に戻る

実際の例

例えば Mona の音楽プレイヤが100回に1回くらいの頻度で、アドレス違反で kill されるとしましょう。
不具合を再現させるには、QEMU を起動しじっと待って kill されなければ、QEMU を再起動というのを繰り返すことになります。
仮に再現したとしても、ちょっと手直しをして落ちなくなったかを検証せねばなりません。
これを手でやっていては身が持ちません。

そこで以下の適当スクリプトで自動化します。(汚いのは勘弁)

 #!/usr/bin/env ruby
  
 while (true)
   system('qemu -cdrom ~/mona/tool/mkimg/mona.iso -fda ~/mona/tool/mkimg/mona.img -boot d -soundhw pcspk -k ja -serial file:/tmp/qemu_mona.log -soundhw es1370 -net nic -net user -redir tcp:5555:10.0.2.15:5555 -redir udp:5555:10.0.2.15:5555 -vnc :1 &')
   while (true)
     sleep 1
     `grep 'ov_open OK' /tmp/qemu_mona.log`
     if $? == 0
       puts 'QEMU restart'
       `pkill qemu`
       break
     else
       puts 'starting ...'
     end
     `grep 'kill' /tmp/qemu_mona.log`
     if $? == 0
       system('gnuclient /tmp/qemu_mona.log &')
       exit
     end
   end
 end
  

ポイントは4つ

これで大分楽ができそうですね。
ちなみにこのドキュメントはバグが再現するまでの待ち時間で書かれています。

コメント

コメントはありません。 コメント/デバッグ技法/自動で現象を再現させる?

お名前:

MENU

now: 3

リンク


最新の20件
2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-12-09 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 3705, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:02 (3681d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.021 sec.