0

OK、私のアプリケーションは、やるべきことをすべて実行し、毎回同じことを実行するので、テストがそれほど面倒でなくなったわけではありません。

常にではなく「時々」クラッシュします。最近出力したファイルを開くダイアログでマウスをファイルの上に置くと、これが行われます。すぐにではなく、約0.5秒から1秒待ちます。それは、openfiledialogがファイルサイズ、作成日時、ドキュメントの種類などのデータを表示するときです..(標準)マウスホバー情報..これは「opendialog」を使用していて、このコードを書いていないので、このエラーは私のせいではありませんか???? それがどのように、、そうでない場合、それを止めるためにどのように/何ができますか..

エラーの種類は「アドレスでのアクセス違反」です...

ファイルを開くダイアログにはフィルターがなく、コンポーネント トレイとまったく同じであり、「opendialog.execute」を呼び出すとクラッシュします。

最初はまだ書き込んでいる可能性があると思っていましたが、最後のファイルが保存プロセスを完了するまで、新しいファイルを開くアプリを停止した後も続きました。

私が言ったように、それは常に100%発生するわけではなく、マシン固有ではありません.. 3つの異なるwin XP PCでクラッシュします。

ヘルプ!!

追加; 調査結果 ファイルを開いて実行できます。作成したファイルにポップアップするヒント ボックスを作成しない限り、すべて問題ありません。

4

4 に答える 4

3

TApplicationEventコンポーネントをフォームにドロップし、OnHintイベントのイベント ハンドラを追加します。次に、そこにブレークポイントを配置し、クラッシュする前にそれを中断できるかどうかを確認します(あなたが言ったように、ヒントを表示しようとするとクラッシュしているように聞こえます)。次に、デバッグ DCUを使用してコンパイルし、トレースして、何がクラッシュしているのかを確認できます。

私の推測では、ファイルに排他ロックが設定されたファイル ハンドルがまだ残っている可能性があります。ファイル ハンドルを確認し、適切に閉じていることを確認してください。プログラムの実行中にメモ帳からこれらのファイルの 1 つを開こうとするとどうなりますか?

断続的な動作は、ファイル ハンドルのリークにつながるエラー状態の別のコード パスに関連している可能性があります。

幸運を!

于 2009-01-23T19:23:30.970 に答える
1

ファイルを開くダイアログは基本的にエクスプローラーのインスタンスです。つまり、インストールしたすべてのシェル拡張機能も読み込まれます。これに関する 1 つの問題は、一度ファイルを開くダイアログを使用すると、すべてのシェル拡張もスタックを使用して変数/戻りアドレスを格納することです...スタックが十分に大きくない場合、これはクラッシュにつながる可能性があります。

アプリケーションのスタックサイズを増やしてみてください。

于 2009-01-23T18:48:37.467 に答える
-1

アクセス違反は、開いているダイアログとはまったく関係がない可能性が最も高いです。コードを調べて、メモリ境界を上書きしていないことを確認することを強くお勧めします。動的配列を使用している場合は、境界外の要素にアクセスしていないことを確認してください。手動でメモリを割り当てる場合も同じです。

まだ FastMM を使用していない場合は、使用してください。いくつかの優れたメモリ サニティ チェックがあります。

于 2009-01-23T21:44:58.593 に答える
-2

プロセスにデバッガーをアタッチして、プログラムがクラッシュする正確な原因を突き止めることをお勧めします。これで始められるはずです...

于 2009-01-23T18:52:00.893 に答える