[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 3259] デバッグアドバイス(BMPV06b).
- Subject: [OSASK 3259] デバッグアドバイス(BMPV06b).
- From: Hidemi KAWAI <kawai !Atmark! imasy.org>
- Date: Wed, 20 Feb 2002 02:32:39 -0000
こんにちは、川合です。
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/