HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0721
にゃんちゃん配布ソフトでもエラー行を表示させたい18未解決


にゃんちゃん

リンク

2011/7/21(Thu) 15:54:35|NO.40046

こんにちは。
ただいまかなり大き目のゲームを作成しておりまして、公開した後にエラーがかなり出るかもしれないことが予想されております。
そこで、エラーの特定を分かりやすくするために、なんとかexeにした状帯でエラー行の表示を行いたいのですが、良い方法がありましたらお教えください。
hsp3imp.dllでデバッグ常法付のaxファイルを実行させてもエラー行の常法は-1のままでした。
個人的には、axファイルを暗号化したものをデータフォルダかどこかに入れておいて、それを実行させるという流れがいいのですが…とにかく、エラー行がわかればなんでもいいです。
よろしくお願いいたします。



この記事に返信する


backdrop

リンク

2011/7/21(Thu) 18:21:18|NO.40053

>そこで、エラーの特定を分かりやすくするために、なんとかexeにした状帯でエラー行の表示を行いたいのですが、良い方法がありましたらお教えください。
実行ファイルではバイナリの機械語なのでまず無理です。



木村

リンク

2011/7/21(Thu) 19:05:33|NO.40056

 一応、エラーを吐き出す関数やエリアを特定する程度であれば不可能ではないと思います。以下は一例

#module i_MN #define global set_method(%1) substance_set_method %1, __line__ #deffunc substance_set_method str method, int row logmes method メソッド@i_MN = method 行数@i_MN = row return #define global get_method メソッド@i_MN+"("+行数@i_MN+"行目〜)" #global #module #deffunc 関数甲 set_method "関数甲" //各関数の初めに関数名と開始行数を記録 mes "A" return #global #module #deffunc 関数乙 set_method "関数乙" //各関数の初めに関数名と開始行数を記録 mes "B" boxf "あ", "い" //ここがエラーを吐く return #global //☆☆☆本編はここからスタート☆☆☆ onerror goto *Error 関数甲 関数乙 stop *Error dialog "Error"+wparam+" in line"+lparam+"\n"+get_method, , "Error♪" end
 各関数の冒頭で関数名、開始行数を記録し、エラーが出たらその2つをダイアログに表示すると言う真単純な代物です。



backdrop

リンク

2011/7/21(Thu) 20:20:46|NO.40060

>一応、エラーを吐き出す関数やエリアを特定する程度であれば不可能ではないと
ほんとだ。こんな方法があったとは。
実行したところエラーの種類は取得できました。ただやはり行数は取得できないようですね。



にゃんちゃん

リンク

2011/7/21(Thu) 21:03:26|NO.40061

やはり無理ですか…
提示いただいたモジュールは、モジュールの中ですべての命令を定義する必要があるんですよね?
普通に書いていたら無理ですよね。
AXファイルを直接実行させればいけるかな後言う甘い考えだったのですが…orz



backdrop

リンク

2011/7/21(Thu) 21:40:34|NO.40065

追記。AXファイルはオブジェクトファイルなので、スクリプトそのものではないです
BASICのRUNのようなものがHSPにもあると考えてください
なので、エラー行取得はできません



check

リンク

2011/7/21(Thu) 21:46:17|NO.40069

そもそも実行可能ファイルにしたAXファイルにはデバッグ情報が
含まれていないから、エラーの行を表示させるのはどうやっても無理。

AXファイルだけ出力させてrun命令で実行させてみたけど、
HSPスクリプトエディタのAXファイル出力機能はデバッグ情報を
出力しないみたいだな。

ただ、hspcmp.dllを自前で操作してデバッグ用のAXファイルを出力させられたら
うまくいくかもしれないな。
やってみてないからわからないけど。



goki

リンク

2011/7/21(Thu) 23:34:23|NO.40078

面倒だけど以下の手順で作れます。
まずhspのフォルダにあるhsprtをどこかに保存しておく
hsp3.exe(hgimg3を使うならhsp3hg.exe)を同じフォルダにコピーしてhsprtにリネームする。
ソースファイルをエディタで開いてCTRL+F9を押す。続いてF7を押す。
カレントディレクトリに実行ファイルとstart.axとobjというファイルができてるので
実行ファイルとstart.axは削除してobjをstart.axにリネームする。
エディタのメニューからツール exeファイル作成 を選択して実行ファイルを作成する。
この実行ファイルならエラー番号も表示される。
終わったら保存していたhsprtを元に戻す。
hsp3debug.dllが同じフォルダにあればデバッグウインドウも表示されます。



formdn

リンク

2011/7/22(Fri) 00:17:12|NO.40081

>hsp3imp.dllでデバッグ常法付のaxファイルを実行させてもエラー行の常法は-1のままでした。
これ書いてあるから、多分オブジェクトファイルに情報がないことはご存知なのでは?
また、デバッグ情報付きのAXファイルでもダメだったってことなんじゃないでしょーか



晩御飯

リンク

2011/7/22(Fri) 01:29:18|NO.40082

わざわざ実行ファイルにしてからエラー行を拾いたい状況がいまひとつ分からないんだけど
差し支えなければ誰か教えてください



fortunehill

リンク

2011/7/22(Fri) 05:43:46|NO.40084

要所要所で__line__を記録しておけば
実行ファイルにしても行番号を表示できますが
関数とかサブルーチン単位でしょうかね?



にゃんちゃん

リンク

2011/7/22(Fri) 07:15:11|NO.40086

たくさんのご返信、感謝します。
gokiさんの言われていた方法は試していませんでした。
やってみたいとおもいます。
hsp3mtをつかうので、hsp3mtをhsp3rtにリネームすればいいですね。
あと、exeにした後にエラーを拾いたいのは、私の頭が悪くて「何々の後にエラーいくつが起きました。」といわれても修正が難しいからです。
前はそれほどスクリプトがながくなかったのですが、今回はかなりの行数になったので。



にゃんちゃん

リンク

2011/7/22(Fri) 07:26:02|NO.40087

いまやってみました。
しかし、やっぱり行は拾えませんでした。
こうなると、やっぱり配布するときにエクセルかなんかで行末に行数をつけるしかないですかね…



れみはる

リンク

2011/7/22(Fri) 16:35:26|NO.40096

>>40053
>実行ファイルではバイナリの機械語なのでまず無理です。
中間言語じゃなかったっけ?



てれてれ

リンク

2011/7/22(Fri) 16:58:07|NO.40097


#undef gosub #define gosub(%1) : ERRORLINE = __line__ : gosub@HSP %1 onerror *Error repeat gosub *a wait 10 loop stop *a mes cnt if cnt=15 : boxf "あ", "い" //ここがエラーを吐く return *Error dialog "Error"+wparam+" in line"+lparam+"\n"+ERRORLINE+"行目のラベル付近です", , "内部エラー" end
gosub毎に記録を行って、エラーが起きた際に表示されるようにしてみました。
ただしどうしてか、上記スクリプトでは、
HSP ver3.3で__line__が正しく機能していないため、上手く動作しませんでした。

HSP ver3.2では、正常に動作しました。



backdrop

リンク

2011/7/22(Fri) 17:07:02|NO.40099

>中間言語じゃなかったっけ?

Σエッ!?そうでしたっけ(汗



kitu

リンク

2011/7/22(Fri) 18:52:53|NO.40104

HSPの実行ファイル = 中間言語を解釈して実行するバイナリプログラム + 中間言語
みたいな感じで、中間言語部分は元コードの行情報もちゃんと持ってるみたいですね

もちろんエラー時に表示はしてくれないので、
皆さんが書かれてるように、自分で__line__で取得してあげないといけませんけど^―^;

内部エラーなんて本来は配布後には(できる限り)出しちゃいけないものなので、
β版をテストプレイしてもらうとかでないかぎり、行番号表示なんて基本的に不要なんだよね…



晩御飯

リンク

2011/7/22(Fri) 21:46:00|NO.40108

>「何々の後にエラーいくつが起きました。」といわれても修正が難しいからです。
そういうエラーは実行ファイル化する前につぶすべきだし
リソースの不足とかはエラー行どうこうで通知するものじゃないし
やっぱりよくわからないけど回答につながるものじゃないのでこのへんにしときます



にゃんちゃん

リンク

2011/7/22(Fri) 22:37:33|NO.40109

ですよね〜配布したもので内部エラーなんて出すのはのぞましくないですよね。わかります。
とりあえず、もしエラーしたときにバックアップファイルが作られるように組んであるので、そこにできるだけエラーを特定するための材料を保存することにします。



ONION software Copyright 1997-2023(c) All rights reserved.