NASKをデバッグするための一発企画ページ
- for hideyosiさん
- なんでRed Hatで保護例外が出るのか。これは恥だ。
- 対象ソースは、win32で作ったpcat版のfdcdrv.nasに限定(限定しないと原因が追求しにくいから)。
第一回試験
- まずgo_0015のnaskのgcc版をwin32で作って、正常に生成できてOSASKがmakeできるかどうかテストしてもらえないでしょうか(MinGWを使う)。最初にmake cleanするといいでしょう。
- ぐはぁ!! nask はコンパイルはできますが、OSASKをメイクすると、飛んでしまいます!
- それがうまくいったら、以下に進みます。go_0015のdrv_stdc/boot.cが対象(on Red Hat)。
- 104行目を次のように書き換えてみる(書き足す)。
list1 = nask(src0, src1, list0, list0 + MAX_LSTSIZ); exit(0);
- この場合何も出力されません。問題は例外が起きて終了か、例外が起きずに終了か、そのどちらになるかです。要報告。
- もし上記で例外が起きなければ104行目を元に戻して、今度は111行目を書き換え(書き足し)。
tmp1 = LL(list0, list1, tmp0, tmp0 + MAX_TMPSIZ); exit(0);
- この場合も何も出力されません。問題は例外が起きて終了か、例外が起きずに終了か、そのどちらになるかです。要報告。
- もし上記で例外が起きなければ111行目を元に戻して、今度は118行目を書き換え(書き足し)。
dest1 = output(tmp0, tmp1, dest0, dest0 + MAX_BINSIZ, list0, list0 + MAX_LSTSIZ - 2); exit(0);
- この場合も何も出力されません。問題は例外が起きて終了か、例外が起きずに終了か、そのどちらになるかです。要報告。
- ここでエラーが起きました。 by hideyosi
- これらがどういう結果になるかを聞いて、それからまた考えます。お暇なときにでも実験してください。
- 結果がどうであれ、テストが終わったらソースを元どおりにしておいてください。
小柳レポートを当ててみる・・・
- えーと・・・小柳さん、ご指南感謝です。・・・ですが、私の頭ではちょっと・・(^^;)
- こういうことでいいんでしょうか?
2490行目 UCHAR *srcp, *file_p, *string0 = NULL, *dest = dest0; ・ ・ ・ void put4b(unsigned int i, UCHAR *p) { 3812行目 if (p == NULL) return; p[0] = i & 0xff; ・ ・ ・
- 一応これで、OSASKのコンパイルは通ったのですが・・・・(まだテストしていません)
- テストしました。Linuxで作ったOSASKは、正常に起動できるようです。(ってことは、この修正であっているのかな??)
第二回試験
- 修正個所は、go_0015のnask.cの2823~2824行目です。
- 修正前の状態:
} put4b(dest - string0, string0);
- 修正後の状態:
put4b(dest - string0, string0); }
- これだけで直ると思いますが、いかがでしょうか?>hideyosiさん
- この修正をすれば、もちろん小柳さんパッチはいりません。
hideyosiさんからのレス欄
- RedHat上ですが、エラーは、どんなファイルを食わせても起こります。たとえば、 echo -n>aaa.nas nask aaa.nas と、これでもセグメンテーション違反になります。 -- hideyosi 2003-08-21 (木) 15:46:31
- あ、ちなみに、 ↑ が文法的にあってないのはわかっています。いろんなファイルやなんやらを当ててみて、なにかパターンがないか探していた時の実験です。 -- hideyosi 2003-08-21 (木) 15:47:40
- また、念のため、改行コードもいろいろ試してみたのですが、変わらないような・・・・ -- hideyosi 2003-08-21 (木) 15:49:15
- あ!! いけね! 前後しちゃった。Win32まだやってません!!。すぐかかります -- hideyosi 2003-08-21 (木) 15:53:15
- ちなみに、家ではOSASKをメイクしている場合、飛ぶのは base.nas base.exe base.lst の部分です。(WinでもLinuxでも) -- hideyosi 2003-08-21 (木) 16:14:14
- win32でも飛びますか・・・。あれえ、じゃあ、うちで飛ばなかったのは僕の思い違いだったのかな。また気が向いたら、win32で実験してみます。 -- K 2003-08-21 (木) 16:20:13
- とりあえず、outputにバグがあるみたいですね。base.nasで落ちるなら、今後はそれをテストターゲットにしましょう。base.nasの方が短いですから。 -- K 2003-08-21 (木) 16:22:00
- gdb で追いました。 output() の string0 に値が設定されないまま、put4b(dest-string0, string0)が呼ばれることがあり、put4b()で落ちます。string0 = NULL で初期化して、put4b() の先頭で if (p == NULL) return; とすれば問題がなくなることを確認しました。 -- 小柳 2003-08-21 (木) 18:04:24
- 小柳さんありがとうございます。たしかに、やばいところを見付けました。これだと確かにOSASKのmakeが失敗するはずです。ということで、訂正箇所を第二試験として書きます。 -- K 2003-08-21 (木) 19:57:48
- どうもput4bを入れる場所を1行下にしてしまったのが、バグの原因だったようです。>小柳さん、hideyosiさん -- K 2003-08-21 (木) 20:07:48
- いけました!!! RedHatとWin32、両方とも正常なOSASK(つーか・・・1バイトも違わないのでつが・・・)を生成できました。 -- hideyosi 2003-08-21 (木) 20:22:44
- (´_ゝ`)キター!!!!感謝!!! -- (´_ゝ`) 2003-08-21 (木) 20:23:55
- さっとく、GOのページのリニューアルと、Vineでの実験にとりかかります。 -- hideyosi 2003-08-21 (木) 20:24:39
- 2chで報告したいけどplalaなのでできません。。。 -- (´_ゝ`) 2003-08-21 (木) 20:25:45
- うわ!! ちょうどかさなった? 顔文字さん、たぶんこれでいけたと思いますよ。 お待たせしました。レポートありがとう! -- hideyosi 2003-08-21 (木) 20:25:54
- とりあえず、僕は自分の作ったソフトのバグが減ってうれしいです。みなさんご協力ありがとうございました。 -- K 2003-08-21 (木) 20:29:03
- キター!!!!=>デキター!!!!(hideyosiさんじゃないのにここかいてよかったのかな?(汗 -- (´_ゝ`) 2003-08-21 (木) 20:29:05
- っていうか、hideyosiさんと顔文字さんは登場頻度が高いので、自己紹介ページを是非作りましょう。そしてmembersに登録。 -- K 2003-08-21 (木) 20:42:46
Counter: 164,
today: 1,
yesterday: 0
初版日時: 2003-08-21 (木) 23:29:13
最終更新: 2009-11-17 (火) 00:00:00 (JST) (349d) by ゲスト
|
ぺージ情報 | 閲覧可 | 編集可 | |||
---|---|---|---|---|---|---|
ぺージ名 : | debug_NASK | グループ : | すべての訪問者 | グループ : | すべての訪問者 | |
ページ作成 : | ゲスト | ユーザー : | すべての訪問者 | ユーザー : | すべての訪問者 | |
ページ別名 : | 未設定 |