デバックモードで立ち上げるとエラーになる

解決


しぇん  2010-05-31 18:38:26  No: 38599

ソフトを作成して、F9ボタンで実行するとAccess Violation エラーになってしまいます。
単にF9ではなくExeを起動するとエラーは出ずに問題ありません。
また一度コンパイルしてからF9を押すとエラーは出ません。
また怪しいところでブレイクポイントをかませて立ち上げるとエラーは出ません。

エラーが出なくなって、Delphiを落として、再度その問題のプロジェクトを立ち上げてF9を押すと、またエラーになります。
コンパイルはできるし、問題なくExeは立ち上がるのですが、何かほっとくのも気持ち悪いです。
ただ原因がつかめません。
こういった状況で何か考えられること、見ておかなければいけないこと等ありましたらアドバイスください。よろしくお願いします。


monaa  2010-05-31 22:38:27  No: 38600

まず、環境が分かりません。WindowsとDelphiのバージョン。
次に、新規作成→VCLフォームアプリケーションで作られた
最もシンプルなアプリケーションでも発生するのかどうか。
でないと、同じことが発生したことのある人以外答えられませんよ。
ここは母集団も少なさそうですし。


ま゛  2010-05-31 23:18:58  No: 38601

http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/faq/00196.htm

これと関係ありますか?


しぇん  2010-06-01 00:44:41  No: 38602

すいません。
Delphi7のWindowsXPです。
ま゛さんのいっているとおり、IDEでだけ発生します。
また、問題が発生するものをDame.dprとするとそのプロジェクトのみ発生します。

私なりに色々試してみましたが。
Dame.dprで実行すると
Access violation at address 0056A578 in module 'Dame.exe'.Read of address 00000304
がでます。

ただDame.exeをその現象が出なかったころのものに変更しておいて実行するとエラーがでません。
なのでDame.exeを消しておいて、F9で実行したのですが、Could not find program.'○○¥○○¥Dame.exe'
とでます。
他の問題がないプロジェクトはF9で実行するとexeが作成されると思いますが、どうやらDame.exeは以前の更新する前のexeを参照して、実行しているようです。
どうしてそのようになるのかわからないので、これが現象を発生させている原因かわかりません。
このCould not find program.'○○¥○○¥Dame.exe'をとりあえず出ないようにしたいのですが、なぜこのエラーがでてしまうのかわかる方いらっしゃいますか?

よろしくお願いします。


monaa  2010-06-01 02:29:32  No: 38603

正常にコンパイルできていないみたいですね。
メニューバーから
プロジェクト->Dameをコンパイル  もしくは
プロジェクト->Dameを再構築  を行い  
でエラーがでなければその後、実行(F9)してみて下さい。
ですが恐らくエラーがでてコンパイルできないと思います。
その際、エラーメッセージにしたがって問題を解決してください。


しぇん  2010-06-01 18:45:22  No: 38604

コンパイル、再構築を行うとDame.exeファイルができるので、その後F9を押せば、Could not find program.がでません。

そもそもの問題は↓
「コンパイルを一度したあとにF9で実行するとAccess violation は出ません。ですが、一度プロジェクトを閉じて、もう一度立ち上げてコンパイルせずにF9実行を行うとエラーになります。」
なのですが、その現象は出なくなりました。
コンパイルではなく再構築をやったからなのでしょうか…。

また、昨日聞いた問題ですが、Dame.exeファイルを消して、F9を行うとCould not find program.は出てしまいます。
出ないのが普通だと思いますが、出てしまうのは実行の設定かなにかでしょうか?


monaa  2010-06-01 19:13:36  No: 38605

2種類以上の問題がごっちゃになってる気がします。

まず、F9(実行)というのは
  コードに変更があった場合…コンパイル後実行
  コードに変更がなかった場合…コンパイルせず実行
となります。
だから、F9だけではコードを変更せず、exeを削除するとコンパイルしませんので当然、無いexeファイルにアクセスしてしまいます。
これはバグではなく、仕様です。

Access violationですが、これ自体はメモリへのアクセスエラーだと思われるので、コンパイルは通ります。
ですが、アプリケーションとしては間違ったコードが書かれています。
実行環境でこのエラーが出たりでなかったりするのは、
経験上、カレントディレクトリが間違えてると思われます。
プログラム中で相対パスをつかって何かファイルにアクセスしてませんか?


monaa  2010-06-01 19:45:07  No: 38606

補足です。
Access violationのエラーですが、
私の経験上の事を書いただけですので、それ以外の場合も十分考えられます。例えば初期化していない変数を使ってたりとか。
いずれにせよ、コードに誤りがあります。


しぇん  2010-06-01 20:17:03  No: 38607

monaaさん
回答ありがとうございます。

変更がないから実行できなかったのですね。

アクセスしているファイルはあります。

ブレイクで止めていると確実にエラーは出ませんので、生成する前にアクセスしてしまう、タイミングの問題かもしれません。
立ち上げるときに何を参照して、またどこで問題が起こっているか。(現状はブレイクをいれるとうまくできてしまうので問題箇所がわかりません、エラーになってもそこでとまってエラー箇所を示してくれることもありません。)
なので、一つ一つコードを確認してみます。

また何かわからないことがありましたら、よろしくお願いします。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加