2014年6月18日水曜日

実ボク、HSPエラー7との戦い

実写でボクシングのネット対戦終了後、チャットロビーに入った途端に発生するエラー7フリーズ、じゃんぶさんからのスクリーンキャプチャ画像添付による的確な報告でここ数日調査していました。



私の環境で一度も発生せず、他のユーザーから同様のエラー報告がないので、個々の環境に起因するだろうと考えて、じゃんぶさんとチャットしつつ色々と原因を探っていきました。

なにかレアな環境がないだろうかとお聞きしていく中で@nifty(ニフティ)提供のセキュリティソフト「常時安全セキュリティ24」でピピッときました。

エラー7は変数配列が許容された範囲から溢れてしまうエラー、状況としてはなにかしらの遅延でループから抜け出せなくなっている場面、と予想されます。

多くの場合、遅延の発生原因は通信の返事待ちなのでセキュリティソフトによる通信の遮断が疑われます。
しかし、遮断であればエラー発生率100%になるはず。

時折発生、というのはなぜだろうか…?

聞けば、常時安全セキュリティ24は、通信が安全かどうかセンターに問い合わせてから許可するタイプだとか。
この迂回通信により時折、実ボクが待ちきれずにフリーズしてしまうのでは…?

幸いにして設定から特定の通信に許可を与えることができるようなので、実ボクサーバのアドレス「http://boxinggame.mydns.jp:5538/」を許可設定していただきました。

これでエラー7がなくなってくれれば…! しばらく様子をみます!



後日、元々セキュリティの通信センター問い合わせ機能がオフになっていたので、常時安全セキュリティ24はエラー7の原因ではない、との報告を受けました。

振り出しに戻ってガックリしていたのですが、チャット中にじゃんぷさんから「人気値が低い、もしくは0、マイナス、で発生するのでは?」との意見が出ました。

通信系かと決め付けていた私の脳内にピピピッと!

調べた結果、0で割り算する記述があったので修正してアップ。
その後のテストプレイにも協力頂き、エラー7が発生しない状況が続いています。

ただし、割り算起因のバグだとしたら別のエラー番号が表示されるはずなのと、ボットは人気が常に0周辺なのにエラーが発生しないなどの謎が残っています。

が、結果オーライ!
もしエラー7が発生する方がいたら3.07+をぜひ再導入してください!
(ついでなので他にも0で割り算している行を探してみます)



エラー7、解決されません。
DDさんから掲示板に画像投稿がありました。これで原因に辿り着けるかもしれません。



興味深い補足として「ALTキーを間違って押してから頻発」とありました。これも原因の候補として頭に入れて置きます。



エラー7の原因箇所を特定すべく、20箇所に原因究明用のプログラムを仕掛け、3.07+++完全版として本日の昼間にアップいたしました。

無印と同様の方法でダウンロードしていただき、インストール、プレイ。

エラー7が出た際にスクリーンショットを撮って掲示板で報告してください。

ツールバー部分にエラー箇所のヒントが表示されているはずです。
(もし表示されていないとしても、意味があります)

ただし、どの箇所も見たところ大丈夫だなと感じているので、もしエラーが出たら私のプログラミングの認識が間違っているようです。

エラー7が出た際ツールバーにメッセージが出ないとしても、今回仕掛けた20箇所以外の場所が原因という事でやはり意味があり、前進であります。

3.07+++(readmeの一行目で確認できます)以外のスクショは混乱を招いてしまいます。
エラー7が出る方、ぜひぜひ最新版にしてご協力をお願いします!



結果、じゃんぶさんの環境と3.07+++のコラボでこれまで同様エラー7が発生しました。しかも、原因究明用のプログラムは不発に終わっていて、原因究明へのヒントを得ることはできませんでした。



更にゼファーさんから報告。
「昨日から今日の日付の変わりぎわに、もんた君とは2試合したはずなんですけど、1試合しか記録されてないですねー。」


ますます混迷を深めましたが、逆に言うと「時折記録される」という点がヒントになります。
今回のエラー7が毎回同じ発生箇所ではなく、あっちこっちで発生している、と考えられます。

バッファオーバーフローのような洪水バグが発生して、フリーズするタイミングは各状況でバラバラになるんじゃないだろうか…。



ご協力依頼 投稿者:サンドバック 投稿日:2014年 7月 5日(土)08時05分16秒

皆さんの報告、ご協力に感謝です。
情報を元に調査しているのですが、糸口をつかめません。

ツイッター経由のじゃんぶさん画像、
今度はリングクリックの瞬間で…!?
(仕掛けていたツールバーにエラーに関する情報表示もなし)

様々な状況で発生するエラー7、
これほど長引いたバグは実ボク史上、稀と言えます。

強敵ですが、ネバーギブアップ。
私が諦めたら終わり、今、絶対に死ねません!

ゼファーさんがメールで送ってくれたリプレイデータでハッ!と。

エラー7が頻発しているじゃんぶさんのセーブデータを送っていただき、
そのデータを使ってプレイすれば私の環境でも再現できるのではないだろうか!

じゃんぶさん!

実ボクフォルダ→packフォルダの中にあるsaveというフォルダ。
これを圧縮して私に送っていただけないでしょうか?

私の環境でエラー7再現できれば、
全ての変数が今どうなっているのか、調査することができます。

お手数ですが、じゃんぶさん、私にメールで送っていただけませんか!?

よろしくお願いします!



届きました 投稿者:サンドバック 投稿日:2014年 7月 5日(土)11時41分2秒

じゃんぶさんのセーブデータを送っていただき、「じゃんデータ」という名前でテストプレイをしています。

エラー7に期待しているのですが、エラーナンバーを出す隙すら与えずに固まるなど、挙動がだいぶ怪しいです。

HSPごと固まるので(これでは変数の情報を得ることができない!)と焦り始めた頃、ついに!

ついに私の目の前でエラー7が発生!

メモリの中を調べることで多くの情報を得ることができ、確実に原因の一つであろうという部分を修正できました。

原因が複数ある可能性もあり、まだ完全と宣言はできませんが一歩前進です。

今、3.07++++として修正した版をアップしました。エラー7が出る方、お手数ですがぜひぜひ導入を!
これで対戦を行いエラー7が出るか確認をして、3.08正式版として公開したいと思います。



エラーの内容は防衛数を示す変数が一見すると数値データなのに取り出す際に文字列として登録されてしまっていて、その変数を使って計算を行うと問題になっていたようです。

一般的なエラー7の配列変数が指定された範囲を超えたという状況と別の状況だったので、発見にとても時間がかかりました。



ゲーム作製の過程もまたゲームなのだ。

困難を乗り越えていく達成感…。
プログラミング、それ自体がゲームなのだ!

もうこのゲームを私は何年もやっている。
やめるわけにはいかない!

2014年6月3日火曜日

月間ポイントランキングの計算方法、リニューアル!

旧ポイント計算法 (2014年5月度まで)
スパーする+1
勝利する+2
タイトルマッチ勝利+77

現ポイント計算法 (2014年6月度から)
対人戦bot戦王座戦
対戦+2+1+2
勝利+4+1+148

旧ポイント計算法は、botの登場前に設定されたのでbotと対人を同列に扱っていました。よって、弱いbotと連戦する事が月間ポイントの攻略法となってしまった感がありました。

なので、新方式では、bot戦と対人戦の価値に差をつけることにしました。

人と出会い対戦が成立する事、そして人に勝利する事、それらの価値を高く評価します。
逆にbot戦はロビーに誰もいない時の待ち時間、調整試合と位置づけに格下げとします。

これらはUME氏の進言(結構厳しめの指摘でした)によって改善することができました。
おかげでより称賛されるべき実ボクサーが称賛される状況になったと思います。ありがとうございました。


関連記事
botボクサーの情報ページ
実ボク 公式大会の記録