現: 2024-01-08 (月) 12:58:54 ゲスト [3] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | * NASKをデバッグするための一発企画ページ | ||
+ | -for hideyosiさん | ||
+ | -なんでRed Hatで保護例外が出るのか。これは恥だ。 | ||
+ | -対象ソースは、win32で作ったpcat版のfdcdrv.nasに限定(限定しないと原因が追求しにくいから)。 | ||
+ | * 第一回試験 | ||
+ | -まずgo_0015のnaskのgcc版をwin32で作って、正常に生成できてOSASKがmakeできるかどうかテストしてもらえないでしょうか(MinGWを使う)。最初にmake cleanするといいでしょう。 | ||
+ | |||
+ | -COLOR(#ff0000){ぐはぁ!! 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); | ||
+ | --この場合も何も出力されません。問題は例外が起きて終了か、例外が起きずに終了か、そのどちらになるかです。要報告。 | ||
+ | --COLOR(#ff0000){ここでエラーが起きました。 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]] SIZE(10){2003-08-21 (木) 15:46:31} | ||
+ | -あ、ちなみに、 ↑ が文法的にあってないのはわかっています。いろんなファイルやなんやらを当ててみて、なにかパターンがないか探していた時の実験です。 -- [[hideyosi]] SIZE(10){2003-08-21 (木) 15:47:40} | ||
+ | -また、念のため、改行コードもいろいろ試してみたのですが、変わらないような・・・・ -- [[hideyosi]] SIZE(10){2003-08-21 (木) 15:49:15} | ||
+ | -あ!! いけね! 前後しちゃった。Win32まだやってません!!。すぐかかります -- [[hideyosi]] SIZE(10){2003-08-21 (木) 15:53:15} | ||
+ | -ちなみに、家ではOSASKをメイクしている場合、飛ぶのは base.nas base.exe base.lst の部分です。(WinでもLinuxでも) -- [[hideyosi]] SIZE(10){2003-08-21 (木) 16:14:14} | ||
+ | -win32でも飛びますか・・・。あれえ、じゃあ、うちで飛ばなかったのは僕の思い違いだったのかな。また気が向いたら、win32で実験してみます。 -- [[K]] SIZE(10){2003-08-21 (木) 16:20:13} | ||
+ | -とりあえず、outputにバグがあるみたいですね。base.nasで落ちるなら、今後はそれをテストターゲットにしましょう。base.nasの方が短いですから。 -- [[K]] SIZE(10){2003-08-21 (木) 16:22:00} | ||
+ | -gdb で追いました。 output() の string0 に値が設定されないまま、put4b(dest-string0, string0)が呼ばれることがあり、put4b()で落ちます。string0 = NULL で初期化して、put4b() の先頭で if (p == NULL) return; とすれば問題がなくなることを確認しました。 -- [[小柳]] SIZE(10){2003-08-21 (木) 18:04:24} | ||
+ | -小柳さんありがとうございます。たしかに、やばいところを見付けました。これだと確かにOSASKのmakeが失敗するはずです。ということで、訂正箇所を第二試験として書きます。 -- [[K]] SIZE(10){2003-08-21 (木) 19:57:48} | ||
+ | -どうもput4bを入れる場所を1行下にしてしまったのが、バグの原因だったようです。>小柳さん、hideyosiさん -- [[K]] SIZE(10){2003-08-21 (木) 20:07:48} | ||
+ | -いけました!!! RedHatとWin32、両方とも正常なOSASK(つーか・・・1バイトも違わないのでつが・・・)を生成できました。 -- [[hideyosi]] SIZE(10){2003-08-21 (木) 20:22:44} | ||
+ | -(´_ゝ`)キター!!!!感謝!!! -- [[(´_ゝ`)]] SIZE(10){2003-08-21 (木) 20:23:55} | ||
+ | -さっとく、GOのページのリニューアルと、Vineでの実験にとりかかります。 -- [[hideyosi]] SIZE(10){2003-08-21 (木) 20:24:39} | ||
+ | -2chで報告したいけどplalaなのでできません。。。 -- [[(´_ゝ`)]] SIZE(10){2003-08-21 (木) 20:25:45} | ||
+ | -うわ!! ちょうどかさなった? 顔文字さん、たぶんこれでいけたと思いますよ。 お待たせしました。レポートありがとう! -- [[hideyosi]] SIZE(10){2003-08-21 (木) 20:25:54} | ||
+ | -とりあえず、僕は自分の作ったソフトのバグが減ってうれしいです。みなさんご協力ありがとうございました。 -- [[K]] SIZE(10){2003-08-21 (木) 20:29:03} | ||
+ | -キター!!!!=>デキター!!!!(hideyosiさんじゃないのにここかいてよかったのかな?(汗 -- [[(´_ゝ`)]] SIZE(10){2003-08-21 (木) 20:29:05} | ||
+ | -っていうか、hideyosiさんと顔文字さんは登場頻度が高いので、自己紹介ページを是非作りましょう。そして[[members]]に登録。 -- [[K]] SIZE(10){2003-08-21 (木) 20:42:46} | ||
+ | |||
+ | #comment |
(This host) = http://osask.net