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

[OSASK 1062] Tips of debug(Re: thaleia0).



  こんにちは、川合です。


橋 さんは 2000/08/11 02:59:38 の「[OSASK 1060] Re: thaleia0.」で
書きました:

(thaleia0のベータリリース)
>一式簡単に試しましたが、とりあえず動いているみたいです。

  報告ありがとう。

>なんとなくイメージはつかめたけど、これからソース見るとまた会社で寝て
>怒られるので、とりあえずほどほどにしときます(*_*)

  はい、ほどほどにしてください。私生活を破壊してはいけません(笑
)。

>ちなみに私のラーメンタイムはまだ来てません。
>#カウント終了後のメッセージを変えようとしているんだけどうまくいかないのだ!
>前のメールのエラーは私の方のミスのようです。相変わらず同じエラーでしたので。

  橋さんのページの「新聞」を読んで、その後にこのメールを読んで、
苦労している様子が伝わってきました。その苦労に少しでも報いるため
に、デバッグのヒントを書きます。

  現状のASKAで非常にありがちなのが、WORK構造体宣言と初期値リスト
の食い違いです。どういうことかというと、メッセージなどを書き加え
た際に、WORK構造体宣言部分の対応する部分を変更し忘れてしまうこと
です(特に文字列の長さが変わったときにやってしまう)。

  次にありがちなのは、テキストボックスよりも長い文字列を表示して
しまうことです。本来ならこういう場合にはクリッピングなどの処理を
すべきなのでしょうが、現バージョンではそのような気の利いたことは
なされておりません。あっさり誤動作します。

  また、デバッグ環境は言うまでもなく貧弱なままで、まともなアプリ
ケーションを作るためには、20回以上の再起動が必要になること請け合
いです。これは現時点では不可避なので、こらえてください。ASKA/OSA
SKができればいいんですが・・・。

  で、デバッグ環境が不完全な場合、もっとも役に立つデバッグ手段と
して「printf」デバッグというのがあります。これは、挙動を確認した
い変数の内容を表示したりするものです。・・・しかし、現状では数値
の画面表示そのものが十分に困難(進数変換などが必要)で、デバッグ
のためにデバッグするという事態になりかねません。

  そこでおすすめなのが、Break Point例外の利用です。表示したい変
数の値をレジスタに代入しておいて、

    INT(0x03);  もしくは、  DB(0xcc);

という一文をかまします。この命令によりアプリは停止してしまいます
が、一度に複数のレジスタが表示できるので僕は重宝しています。

  それと、ライブラリコールの際に複数コマンドの記述が可能ですが、
エラーで止まってしまった場合、どのコマンドのせいでエラーになった
のかわかりにくいという難点があります。ですから、怪しいところでは
デバッグが済むまでコマンドを1つずつ実行させた方がエラー個所を特
定しやすいと思います。

>ということで、エラーメッセージのメモ取らなかったんだけど、ちいと気になる
>エラーがありました。上の馬鹿アプリ試して相変わらずエラーで止まったんだけど・・・
>Ctrl+Alt+Delが効いてないようです。別のときには効いていたので、
>アプリ側の影響かもしれないけど、気になったので。
>#起動直後に生じたもので、Num他も起動直後一瞬点灯し、消灯。効いていない状態。
>エラーコードはCS EIP:0020だったのも謎・・・(ちとうろ覚え)
>エラーコードメモって再度報告します。

  エラー個所が0020:????????ということは、GAPIでエラーが発生した
ようですが、これは明らかに表示関係でつまずいています。ライブラリ
側でパラメーターチェックをほとんどしないでGAPIに処理を回している
せいです。で、エラー個所がアプリ内(CS = 0x7)でも標準ライブラリ
内(CS = 0xc7)でもない場合は、キーボードリセットが効かなくなる
場合が結構あります。

---

  あらゆる努力にも関わらず、バグが取れなかったら、OSASK-MLで相談
するという手もあります。その際、ソースはweb等からダウンロードで
きるようにしておいてください(メールに添付しないでほしいです)。
何を制作中かばれてしまいますから、みんなをびっくりさせることはで
きなくなりますが、デバッグの実例から学べることは少なくないでしょ
う。


  それでは。

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