7

基本的に、Visual Basic 6.0 IDE の次のパスの下に表示される「クラス モジュールの中断」と「ハンドルされていないエラーでの中断」の違いを理解しようとしています。

Tools --> Options --> General --> Error Trapping

3つのオプションは次のようです。

  • すべてのエラーでブレーク
  • クラス モジュールの中断
  • 未処理のエラーでブレーク

どうやら、MSDN によると、2 番目のオプション (クラス モジュールのブレーク) は、実際には「クラス モジュールのハンドルされていないエラーでブレークする」ことを意味します。また、このオプションはデフォルトで設定されているようです (つまり、最初からこれに設定されていると思います)。

私が把握しようとしているのは、2 番目のオプションを選択した場合、3 番目のオプション (未処理のエラーでブレーク) を無料で取得できるかどうかです。その中で、それはクラス モジュール スペクトル以外のすべてのシナリオにデフォルトで含まれていますか? アドバイスとして、現在アクティブなプロジェクトにはクラス モジュールがありません。私は .bas モジュールを持っています。また、クラス モジュールによって、通常の .bas モジュールも参照されている可能性はありますか? (これは私の2番目のサブ質問です)。

基本的には、exeがリリースされたときに驚きがないように設定したいだけです。開発中はできるだけ多くのエラーを表示し、リリースモードでは非表示にしたい。通常、明示的なエラー処理がないフォームには、次の 2 種類の On Error Resume Next があります。

On Error Resume Next ' 必須 On Error Resume Next ' 不要

必要なものは、配列に長さがあるかどうかを確認すること、その UBound への呼び出しがエラーになった場合、つまり長さがないことを意味すること、0 以上の値を返す場合、長さがあること (したがって、長さがあること) などです。 、存在します)。これらのタイプのエラー ステートメントは、開発中であってもアクティブなままにしておく必要があります。ただし、開発中は NOT REQUIRED をアクティブにしておくべきではないため、存在するすべてのエラーを確実にキャッチできるように、それらをすべてコメントアウトしています。

exe をリリースする準備ができたら、CTRL+H を実行して、次のすべての出現箇所を見つけます。

'On Error Resume Next' 必須ではありません

(コメントアウトされていることに気付いたかもしれません)...そしてそれらを次のように置き換えます:

On Error Resume Next ' 不要

... コメントを外したバージョン。リリース モードでエラーが残っていても、ユーザーには表示されません。

3 つのオプションに関する MSDN の説明 (私は 2 回読んだのですが、まだ十分ではありません) の詳細については、次のリンクにアクセスしてください。

http://webcache.googleusercontent.com/search?q=cache:yUQZZK2n2IYJ:support.microsoft.com/kb/129876&hl=en&lr=lang_en%7Clang_tr&gl=au&tbs=lr:lang_1en%7Clang_1tr&prmd=imvns&strip=1

また、ボランティアをしたい場合は、あなたの考えを聞くことにも興味があります (これは、暫定的/完全にオプションの 3 番目のサブ質問であり、フォールバック エラー処理テクニックに関するあなたの考えです)。

要約すると、最初の 2 つの質問は、オプション 2 を選択した場合、すべての非クラス シナリオにオプション 3 が含まれるかということでした。また、「クラス モジュール」という用語を使用する場合、.bas モジュールも参照している可能性はありますか? (.bad モジュールは実際には、起動時にバックグラウンドで事前にインスタンス化される単なるクラス モジュールであるため)。

ありがとうございました。

4

2 に答える 2

5

最初のオプションから始めます。すべてのエラーで中断すると、単にエラー ハンドラーが無効になります。これは、エラー ハンドラーを配置した後にデバッグしようとする場合に役立ちます。ハンドラー自体にエラーが発生したり、エラーがコンテナーシップの階層構造をバブルアップさせたときにエラーが発生した場所を追跡できなくなったりする可能性があるためです (これは、問題のあるコード行を見つけようとしている場合に混乱を招く可能性があります)。

次に、エラーの原因となるコード行がクラス モジュール内にある場合、未処理のエラーで中断しても、実際には中断されません。このオプションが設定されていて、クラスでメソッドを呼び出し、メソッドのコード行にエラーがある場合、メソッド呼び出しのあるクライアントの行で中断します。

クラス モジュールの中断は、エラーのあるクラスのコード行に移動します。これに対する注意点は、ActiveX EXE を使用している場合、制御設定はクライアント プロジェクトではなくそのプロジェクトにあるということです。つまり、クライアント プロジェクトで設定されたすべてのエラーで中断し、ActiveX EXE プロジェクトで設定された未処理のエラーで中断することができます。2 つの別個のプロセスで作業しているため、クラス モジュールで中断することはありません。

個人的には、クラス モジュールのブレーク時に設定したままにしておくことを好みます。これにより、エラーのサイトに非常に正確にドリルダウンできるからです。ただし、これはエラー ハンドラーを始める前の話です。その時点で、何を安定させようとしているかにもよりますが、通常は 3 つすべてを跳ね返します。

最後に、インライン エラー処理のコンテキスト以外で On Error Resume Next を使用することはお勧めしません。

于 2012-10-03T00:13:39.210 に答える
4

はい、「クラスモジュールでブレーク」を選択すると、未処理のエラーでブレークしますが、クラスモジュール自体で処理されないクラスモジュール (プレーンモジュールではない) のエラーでもブレークします。

これを「未処理のエラーで中断する」とは対照的に、エラーが内部で発生したときにクラス/ユーザー制御コードから終了し、正確な場所を追跡するのが難しくなります。

良性のエラーを処理したときに他のエラーが発生するため、一般的な開発では「未処理のエラーでブレーク」に設定したままにしておくのがおそらく最善です。ただし、エラーが発生する前にこれらを検出することをお勧めします。

于 2012-10-02T09:35:22.617 に答える