[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 3259] デバッグアドバイス(BMPV06b).



  こんにちは、川合です。


rakkyo さんは 2002/02/19 18:59:34 の「[OSASK 3256] Re: BMPV05 Re
lease」で書きました:

>とりあえずソースも追加しておいておきました。
>http://homepage2.nifty.com/rakkyo-taro/secret/b06b.zip
>お暇な時でいいので、見てもらえると助かります。

  少しだけ見てみました。

  僕が怪しいと思ったのは、302〜305行目です。・・・なんかレジスタ
がおかしくありませんか?このせいで、work->lib_opengraphbox.x_siz
eがすごい値になっているような気がします。

---

  ここからはより一般的なアドバイスです。

  おそらくらっきょさんの開発スタイルは、

1.書き足す。
2.バグが出る(バグが出なければ1.に戻ってさらに改良)。
3.INT(3);トラップを仕込んでどこでこけているか探す。
4.バグを修正する。
5.さらに改良するために1.に戻る。

という方法でしょう。これはこれでいいのです。

  しかし僕がお薦めするのは、以下のスタイルです。参考にしてくださ
い。

1.書き足す。
2.バグが出る(バグが出なければ1.に戻ってさらに改良)。
3.完全に動いていた状態にまでいったんソースを戻す。
4.少しずつ付け足して、テストランさせて様子を見る。
5.どの変更が原因になったのかは分かっても、挙動不審になった理由
    がなかなか分からない時は、確認したい変数をレジスタに読み込ん
    で、INT(3);トラップを仕込む。
    (例) EAX = work->lib_opengraphbox.x_size; INT(3);
6.おかしいところはそのつど修正して、全ての変更を付け足し終わる
    。
7.さらに改良するために1.に戻る。

  ・・・ポイントは、3.の部分です。この「いったんソースを戻す」
というのは、ちょっと勇気が要ることですが、しかし埒があかないバグ
を根絶するには有効な方法です。もちろん元に戻すとはいっても、せっ
かく作った新しいソースを捨ててしまうわけではありません。どこかに
とっておきます。4.で書き足す時は、このとっておいたソースから部
分的にコピーしてくるわけです。

  動かなくなったソースからスタートして、まともに動くように直すの
はかなりの腕前が必要です。腕に自信があったり、バグが些細なもので
ある場合は、らっきょさんのスタイルでもうまくいくでしょう(僕もひ
どいバグが出るまでは、らっきょさんと同じような方法でやっています
し)。・・・しかし手におえない時は、動く状態に戻すべきです。そし
てどの改良が挙動不審の原因になっているのかを知るために、少しずつ
付け足して様子を見るべきです。おかしい動作をする原因が、例外を起
こした命令やつまづきの直前の付近にあるとは限りません。

  今回紹介したこの方法なら、今回の僕の指摘は、きっと確実にらっき
ょさん自身で発見できたでしょう。もちろん、ASKA以外でもこのやり方
は大いに効果を発揮します。

  僕がなにかにつけてサンプルプログラムからの改造を重視し、マニュ
アルを頼りに0から書き始めるプログラミングスタイルを薦めていない
のは、最初に動かないソースから出発する可能性があるからです。・・
・僕は、今回紹介したデバッグ手法がとても有効であると感じています
(手間が増えて面倒ではありますが、しかしかなり確実に問題個所を発
見できます)。上級者にはかったるいことこの上ないと思いますが、誰
にでもできる方法なので、困った時にはお薦めです。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/