3

VB6 で書かれた古いアプリケーションを維持しています。クライアントの環境では、デバッガーで再現できないランタイム エラーが発生します。スタックトレースまたはエラーの場所を取得する方法はありますか?

つまり、 hereのようにコード全体にトレース ステートメントを配置したり、 hereのようにすべてのプロシージャにログを記録するためのエラー ハンドラーを追加したりしません。

簡単な質問のようです。ごめん。私はVB6をよく知りません。そして、それがどれほど広く使われているか (または以前は使われていたか) を考えると、情報をグーグルで検索するのは驚くほど困難です。

4

4 に答える 4

3

pcode にコンパイルしてみて、それでもエラーが発生するかどうかを確認してください。これは、VB6 のデバッグ モードとランタイムの共通の違いの 1 つです。以前はネイティブにコンパイルしていましたが、実行時にのみ発生するエラーに遭遇しました。pcode に切り替えたとき、エラーがなくなったか、実際の問題を反映した新しいエラーが発生し、デバッグ モードでより簡単に再現できることがわかりました。

それでもエラーが発生する場合は、手順スタックの一番上から始めて、Maero の提案を使用して下に進むことをお勧めします

On Error Goto Handler
<code>
Exit <routine>
Handler:
Err.Raise Err.Number, "(function_name)->" & Err.source, Err.Description

それは苦痛ですが、それを回避する実際の方法はありません。

于 2009-07-08T18:29:49.687 に答える
2

[プロジェクト プロパティ/コンパイル] タブの [シンボリック デバッグ情報を作成] チェックボックスをオンにすると、ネイティブ C++ アプリケーションと同じように Visual Studio でデバッグできます。

于 2009-07-09T08:31:19.687 に答える
1

しばらく経ちましたが、VB6 アプリケーションでエラー ハンドラを追加して適切なメッセージを出力せずにスタック トレースを取得する方法はないと思います。アプリケーション全体にエラー処理を追加するサードパーティ ツールがいくつかありましたが、コード全体に "On Error Goto" エラー ハンドラを追加しただけだと思います。

余談ですが、私が VB6 アプリで遭遇した最も陰湿なランタイム エラーの 1 つは、クライアントの PC に存在しないフォントをコントロールのプロパティで使用したときでした。これにより、コードにトラップできない実行時エラーが生成されるため、追加したエラー処理の量によってエラーが明らかになることはありませんでした。やっとたまたま出会えました。お役に立てれば。

于 2009-07-08T15:46:17.693 に答える