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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0827
ふにゃふにゃファイルが見つからないか無効な名前です。」について8解決


ふにゃふにゃ

リンク

2007/8/27(Mon) 23:18:02|NO.10730

約1年くらいかけて、少しずつバージョンアップして来たツールが有ります。
今回、スクリプトの中盤くらいに、7〜8Kバイトくらいのバイナリーファイルを読込み、
ダンプしてから細かく分解する処理を追加しようとしています。

該当の変更箇所は、既にダミーを作って正常に動作する事を確認済みで、
これを本番用のスクリプトに組み込むだけです。

ところが、実際に組み込んで動かしてみたところ、今まで安定動作していたツールが、
動かなくなってしまいました。

このツールには、スクリプトの後半部分で、外部にある複数のテキストファイルを開いて、
データ加工に用いるプロセスがあるのですが、
何でもないところで「#Error 12 -->ファイルが見つからないか無効な名前です。」が
出るようになってしまいました。

Errorが出る箇所は、スクリプト本体も外部ファイルもイジッテおらず、
今までは安定動作していたので、パス指定の間違いなどは無いようです。

この現象は、もしかしたら「機能を追加し過ぎて、ハードウェアやOSのリソースが足りない。」
という事なのでしょうか?

"メモリの確保ができませんでした"等のメッセージは出ないので、
諦めが付かないのですが・・・。

途中で読込むファイルを減らすと、エラーが出る場所が、後にずれて行ったりするので、
バグではない様です。でも、少し位、途中の処理を変えても、最後までたどり着きません。

不要な変数をコマめに初期化して行っても、変わりません。

こう言った現象で、考えられる原因に、どんなものが有るでしょう。
それとも全面的な作り替えが必要? HSPだけではキツイから、そろそろC言語とか機械語とか
勉強しろって言う意味なんでしょうか・・。



この記事に返信する


naznyark

リンク

2007/8/28(Tue) 03:14:47|NO.10734

組み込んだことで全体の動作がおかしくなったのなら
まずは組み込んだ部分を徹底的に調べましょう。

・変数名、モジュール名、命令・関数名の衝突はないか?
・排他設定項目(割り込み設定など)の衝突はないか?
・プリプロセッサ命令の記述ミスをしていないか?
 (プリプロセッサ命令は小文字で記述しなければならないうえに
 記述ミスをしただけではエラーは出ません。)
・プリプロセッサ命令行末尾にダメ文字(2バイト目が'\'の全角文字)
 を使っていないか?
・開く閉じるの関係は正しいか?
 (if{-}、repeat-loop、#if-#endif、/*-*/ など。)

あとは全体的に。

・安全性の保障されない処理を正しく行っているか?
 (ポインタを使った処理などは正しく行わないと
 潜在的かつ発見困難な不具合要因になります。)



ふにゃふにゃ

リンク

2007/8/28(Tue) 10:02:15|NO.10736

有難う御座います。

文法的なエラーや名前の衝突は多分有りません。
HSPでポインタが使えると言うのは、やり方がわかりません。

> (プリプロセッサ命令は小文字で記述しなければならないうえに
> 記述ミスをしただけではエラーは出ません。)
>・プリプロセッサ命令行末尾にダメ文字(2バイト目が'\'の全角文字)
> を使っていないか?

コレは初めて知りました。
自分で作ったモジュールのasファイルにある
ユーザー定義命令や関数には大文字もたくさんあって、
使えてしまっていましたけど、本当はダメなんですか。
とにかく、そこは全て小文字に変換してしまいました。
変化は無いようです。


今回追加した中に


i=0 repeat 40 j=0 repeat 600 if(----){ --------------- } loop loop

という構造が有ります。文法的な間違いは無さそうなのですが、
2万回連続のif〜でマシンが怒ったのでしょうか・・。



PC

リンク

2007/8/28(Tue) 12:35:25|NO.10737

えと、一寸失礼します。
全角と半角、大文字と小文字の区別、ついてますか?
それが解れば下記の意味は理解出来ると思うのだが。

>・プリプロセッサ命令行末尾にダメ文字(2バイト目が'\'の全角文字)
全角文字というのは大文字と言う意味じゃないですよ(2バイト文字という事)。

こういう事

大文字小文字 Aa 全角半角 AA \が全角 \¥

検討違いだったらすみません。

どんな容量のアプリケーションを製作しているか解りませんけど、if命令を2万回まわした
所で、現行のマシンでは痛くもかゆくもなんとも無い、と思うのだが(3Dのポリゴンを
使っているのなら話は別だが)。
8ビットや16ビットのマシンは最早存在しないだろうし(使用マシンがこれに当てはまるの
でしたならすみません)。

如何でしょうか?



ふにゃふにゃ

リンク

2007/8/28(Tue) 13:52:29|NO.10738

有難う御座います。
2バイト文字と大文字の違いは、HSP以前に
パソコンそのものがわかっていない人以外はわかると思います。

>if命令を2万回まわした
>所で、現行のマシンでは痛くもかゆくもなんとも無い、

やっぱり、そーですよねー。3D処理は関わっていません。
また少なくとも他の言語で、似た様な事をやって問題になった事は無いです。

とにかく「#Error 12 -->ファイルが見つからないか無効な名前です。」が
普通じゃないんですよね。ファイルパスも属性も確かめてあるのに・・。

本当に問題がある場所ではエラーが出ていなくて、
かなり後ろの方になって、全体が不安定になって的外れなエラーが出ている
ということだと思います。従って、

>記述ミスをしただけではエラーは出ません。
と言う現象になるケースや

>潜在的かつ発見困難な不具合要因
が生じるケースに絞って、考えるべきなんでしょうね。

>・プリプロセッサ命令行末尾にダメ文字(2バイト目が'\'の全角文字)

普通、命令の中に日本語の文字列のリテラルがあったとしても、
最後は必ず「"」で終わるので、このミスがあれば目立つと思います。
本体のスクリプトのプリプロセッサ部分の末尾は、「#include "XXXX.as"改行」で、
外部のモジュールのファイルの末尾は、「#global[EOF]」です。

>プリプロセッサ命令は「小文字」で記述しなければならない

これの理由は実は理解できていなくて、とにかく全部小文字にしてみました。
影響は無かった様です。



eller

リンク

2007/8/28(Tue) 15:59:45|NO.10739

横槍失礼いたします。

ちょっと気になったのですが、「本当に問題がある場所」ではどんな命令を使っていらっしゃるのでしょうか?picload?bload?noteload?それともchdirでしょうか?

それと新しく追加した機能の中で、ディレクトリ移動を行っていないでしょうか。
個人的にはカレントディレクトリが変わっているために発生したロードミスではないかと思うのですが…。



ふにゃふにゃ

リンク

2007/8/28(Tue) 18:15:52|NO.10740

有難う御座いました。ellerさんのアドバイスがビンゴでした。

「本当に問題がある場所」では
dialog "bin",16,"お好きなファイルを選択して下さい。"
を使用していました。

もしやコレでは・・。mes dir_cur・・。
カレントディレクトリは、ユーザーによっても移動される事を
見落としていました。

dialogでファイルを開く時は、起動時の絶対パスを保存しておいて、
後から強制的にchdirして元の場所に戻って来ないとダメですね。

「パス指定は合っているハズ」と言う思い込みのせいで、
遠回りをしました。

バカみたいですけど、自分的には耳から脳ミソが流れ出そうな
迷路にハマっていたので、気付かせてくれる人が誰もいないと、
一生悩んでいた気がします。
お陰様で絶望の淵から奇跡の生還を果たせました。

他の皆さんも有難う御座いました。



eller

リンク

2007/8/28(Tue) 22:55:53|NO.10743

おおっ、それは良かったです。ご丁寧にどうもありがとうございます。
こんな者でもお役に立てたのでしたら、これほど嬉しいことはないです。開発お互いに頑張りましょう!



naznyark

リンク

2007/8/29(Wed) 01:48:05|NO.10744

解決してよかったですね。
ちょっと補足。


> プリプロセッサ命令は小文字で記述しなければならない

 # で始まるプリプロセッサ命令の命令自体は小文字で
記述しなければならないということです。
パラメータ(?)は大文字でも大丈夫です。

#define ABC DEF ; これは良い。 #Define ABC DEF ; 命令(#define)に大文字(この場合は D )があるのでダメ。 #DEFINE ABC DEF ; これもダメ。 #CONST test 120 ; これもダメ。以下他のプリプロセッサ命令でも同様。



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