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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1129
(´ω`)vsaveしたデータから変数一覧を取得するには……7解決


(´ω`)

リンク

2012/11/29(Thu) 15:14:18|NO.50948

もうタイトルそのまんまで書くこともあんまないのですが。(u´ω`)

自作アプリを別の場所&他の人が実行中にエラーが出た場合、vsaveで変数の情報をまとめて
出力し、そのbinファイルを元にバグの原因を探ろうと思ったわけです。

vsave内の変数と、その情報をリスト形式で出力する方法はないものでしょうか。
手法をご存知の方、あるいはその参考になりそうな情報がありましたらぜひともご教示を。
よろしくお願いいたします……(´・ω・`)



この記事に返信する


KA

リンク

2012/11/29(Thu) 18:55:21|NO.50950

回答もそのまんまに成りますが、同じ変数を定義して読みだすだけです。
あとは、その内容をリスト化して書き出せば完了。



(´ω`)

リンク

2012/11/29(Thu) 22:17:17|NO.50952

ありがとうございます。ですが、その「同じ変数を定義し直し」が問題なのです。
要するに、使ってる変数が多すぎてわけわからんくなってる、と。(´・ω・`)

と思ったとこで、そういやデバッガ画面に使用中の変数の一覧が出ることを思い出しました。
アレの内容をコピペったりテキストに出力できれば……と思ったけど、できないっぽいですね。

なんかうまい方法はないかなあ……(u´ω`)



KA

リンク

2012/11/29(Thu) 22:44:52|NO.50953

>>その「同じ変数を定義し直し」が問題なのです。
それが問題ではなくて
>>使ってる変数が多すぎてわけわからんくなってる
の方が問題では。

書き出す事を考える前に、その情報からどうやって調べるのか
を先に考えた方が良いような気がしますが・・・。

http://hsp.tv/play/pforum.php?mode=all&num=50941
↑ちょうど出てきているから、これ使ってみたらどう?



inovia

リンク

2012/11/30(Fri) 00:34:30|NO.50958

デバッグウィンドウ風の変数取得(手抜き実装)


dialog "", 16, "vsave命令で保存したファイル" if stat == 0 : end exist refstr sdim buf, strsize bload refstr, buf sdim list, 1024 // チェック if lpeek(buf, 0) == 0x76707368 && lpeek(buf, 4) == 0x00001000{ num = lpeek(buf, 8) // 格納されている変数の数 data_offset = lpeek(buf, 12) // データ開始オフセット varinfo_offset = 16 // 変数情報格納オフセット(開始は16) varinfo_size = 64 // 変数情報格納サイズ (サイズは64) sdim varinfo, varinfo_size // 変数情報格納用変数 list += ""+num+"件 検出\n" // 変数の数だけループする repeat num // コピーする memcpy varinfo, buf, varinfo_size, 0, varinfo_offset // 変数名オフセット varname_offset = lpeek(varinfo, 0) + data_offset // 実データオフセット vardata_offset = lpeek(varinfo, 4) + data_offset // 変数の種類(2 = 文字列, 3 = 実数, 4 = 整数 etc...) vartypeと一緒 vardata_type = wpeek(varinfo, 16) // 変数のモード vardata_mode = wpeek(varinfo, 18) // 配列変数の要素数 vardata_array1 = lpeek(varinfo, 24) vardata_array2 = lpeek(varinfo, 28) vardata_array3 = lpeek(varinfo, 32) vardata_array4 = lpeek(varinfo, 36) // 使用サイズ vardata_usesize = lpeek(varinfo, 40) // 変数名を取得(手抜き) dupptr tmp, varptr(buf) + varname_offset, 1, 2 varname = tmp if vardata_type == 1{ // ラベル型変数の時 type = "label" data = "" }else : if vardata_type == 2{ // 文字列型変数の時 type = "str" bufsize = lpeek(buf, vardata_offset + 4) dupptr tmp, varptr(buf) + vardata_offset + 8, 1, 2 data = tmp }else : if vardata_type == 3{ // 実数型変数の時 type = "double" bufsize = vardata_usesize dupptr tmp, varptr(buf) + vardata_offset, 8, 3 data = str(tmp) }else : if vardata_type == 4{ // 整数型変数の時 type = "int" bufsize = vardata_usesize dupptr tmp, varptr(buf) + vardata_offset, 4, 4 data = str(tmp) }else : if vardata_type == 5{ // モジュール型変数の時 type = "module" data = "" }else : if vardata_type == 6{ // COMオブジェクト型変数の時 type = "comobj" data = "" }else{ // それ以外 type = "unknown" data = "" } // デバッグウィンドウの変数一覧風に書き出す list += "-------------------------------------------\n" list += "変数名:"+varname+"\n" list += "型:"+type+"\n" list += "配列:("+vardata_array1+","+vardata_array2+","+vardata_array3+","+vardata_array4+")\n" list += "モード:"+vardata_mode+"\n" list += "使用サイズ"+vardata_usesize+"\n" list += "バッファサイズ"+bufsize+"\n" list += "内容:\n"+data+"\n\n" // 足していく varinfo_offset += varinfo_size loop }else{ mes "ファイルが違います" } notesel list notesave "vardump.txt" exec "vardump.txt", 16 end



@key

リンク

2012/11/30(Fri) 00:44:04|NO.50959

うおおおお!
すげぇ!
関係無いですがありがとうございます
参考にします

あとしょぼいアドバイスですが
dialog "", 16, "vsave命令で保存したファイル"

だとファイル説明が反映されないので多少汚くなりますが
dialog "**", 16, "vsave命令で保存したファイル"
がいい・・・のかな・・・?



inovia

リンク

2012/11/30(Fri) 00:49:22|NO.50960

>あとしょぼいアドバイスですが
うっかりしてました^^
あえてやるならこうとか?多少マシになりますね。

dialog ";*.*", 16, "vsave命令で保存したファイル"



(´ω`)

リンク

2012/11/30(Fri) 10:39:39|NO.50962

的確なツッコミやら勉強になるお返事やらを色々頂いた時の、天にも昇らんばかりの
至福感は如何に喩えたものか……(*´ω`*)

>KA 様
>>>>使ってる変数が多すぎてわけわからんくなってる
>>の方が問題では。

まさしくその通りでお恥ずかしい限りです。
次々と無節操に機能を放り込んでたら、アララいつの間にやらという。
今度から計画的に実装します。そういう努力をします。

>inovia 様

まさしくこれが求めてたもので、そのまんま解答を頂きまして大変恐縮です。
早速使ってみたら、「2258件 検出」とか出ちゃいました。
モジュール変数も含んでるとはいえ、無節操すぎるだろオレ。



というわけで、大解決といたしました。
皆様に厚く感謝を申し上げると共に、「計画性」をわたくしの今後の課題といたします。
お騒がせしました。(;ω;)



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