問題タブ [exception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 独自のカスタム例外を作成するためのベストプラクティスは何ですか?
例外に関する前の質問のフォローアップで、.NETでカスタム例外を作成するためのベストプラクティスは何ですか?
具体的には、System.Exception、System.ApplicationException、またはその他の基本例外から継承する必要がありますか?
visual-studio - デバッグ中の算術アンダーフローまたはオーバーフロー例外
これは奇妙な行動の日です。
Delphi 2007で作成されたWin32プロジェクトがあります。これは、.NETランタイムをホストし、移行期間の一部として.NETを呼び出して新しいフォームを表示します。
最近、コードのランダムな場所とポイントで例外が発生し始めました。算術オーバーフローまたはアンダーフローです。
これらのいずれかのスタックトレースは次のようになります。
Visual Studioソリューションでは、最も優れたクラスライブラリの1つ(つまり、可能なすべての参照をプルする)が、Delphiプロジェクトの出力を対象とした特定のデバッグプログラムを設定しました。これにより、プログラムの大部分がDelphiで記述されている場合でも、VisualStudioから.NETコードをデバッグできます。
この問題は、exeファイルを直接(エクスプローラー、ショートカット、またはVisual Studio内で)実行した場合ではなく、デバッガーから実行した場合にのみ発生しCtrlます。F5
明らかに、マシンにはスパイウェアはありません(これが示唆するように)。
他に確認できることはありますか?
編集: .NETデバッガーがこのSNaNフラグを有効にしているように見えますが、Delphiデバッガーは有効にしていません。これについてはさらに調査する必要がありますが、今のところは@LorenzoBoccacciaの回答を受け入れます。
どうやら解決した
さて、ようやくこの問題を解決したようです。テスターにとっても、デバッガーを接続しなくても問題が発生し始めたため、問題の優先順位を上げる必要がありました。
最後に、問題が発生したマシンに共通する問題が1つ見つかりました。それは、2006年にラップトップのプロビジョニングに使用されたシステムイメージの古いドライバーを備えたNVIDIA QuadroNVS110Mを搭載したDellLattitudeD620ラップトップです。
ディスプレイドライバを更新するために再起動したときにURLを失いましたが、Webで1つの投稿を見つけました。これは、主にマシンが画面上で何かを実行しているときに.NETサービスがクラッシュしたためです。彼の問題を再現する1つの方法は、C:\へのコマンドプロンプトを開き、を実行してDIR /S
大量の画面更新を強制することでした。これにより、クラッシュがトリガーされます。
彼もNVIDIAビデオカードを持っていました。
私のマシンの問題は、プログラムの2〜4回の起動ごとに発生しましたが、ビデオドライバーを更新した後、問題なく123回の起動に成功しました。(ところで、私はそのようなことのためにAutoHotKeyをお勧めすることができます)。
つまり、古い/バギーなNVIDIAドライバーである犯人を見つけたようです。
この質問を更新して、将来誰かが時間を節約できるようにしました。
失礼しますが、隅で泣きます。
ジンクスド!
私はそれをジンクスしたに違いない。ビデオドライバを更新した後、同僚のラップトップが失敗するのと同じくらい早く、上記の更新を投稿しました。
それでも、私はそれが私たちのアプリケーションの外の問題であると確信しているので、どの特定のものを更新するかを理解することは残っています。
さらなる更新:わかりました。私のマシンは明らかに修正されましたが、同僚のマシンでは修正されていません。これまでのところ、BIOS、チップセットドライバーを更新しており、現在、XP用のSP3が導入されています。
バーンインテストは今夜行われ、起動中、または初めてWinForms .NETコードが実行されたときに問題が発生したため、アプリは一晩起動したままになります。このアプリは主にDelphiWin32アプリですが、.NETランタイムをホストしており、問題は.NETコードに関連しているようです。.NETランタイムを「起動」すると、問題が発生する可能性があります。または、Win32から最初の.NETウィンドウを起動すると、問題も発生する可能性があります。
統計的に、私は今このコードをリリースする準備ができています。一晩中、アプリケーションはエラーなしで3051回起動されましたが、ビデオドライバーを更新する前は、2〜4回ごとにクラッシュしました。
Prodded and found(!/?)
このバグ修正の試練は、医者に行くような気がします。そこで、次の会話が続きます。
私はアプリケーションを突っ込んで突っ込みましたが、ついにこの問題を引き起こす何かを見つけたと思います。
このアプリでは、Delphi 2007 Win32アプリケーションからの.NETランタイムをホストし、グルーコードには次の行があります(現在)。
真ん中の2つの定数は元々0でした。つまり、デフォルトを選択します。この変更は数か月前に導入されたものであり、この後、問題は徐々に私たちに忍び寄ってきました。この変更は、パフォーマンスプロファイリングを実行するためにANTSプロファイラーがWin32アプリケーションとホストされた.NETランタイムをロードするように促すために導入され、当時導入した変更によって機能しました。さらに、算術オーバーフロー/アンダーフローの問題は徐々に悪化しているので、変更後しばらくの間問題が発生しなかったので、私たちが行った変更のいずれにも起因していなかったに違いありません。
また、(元々)デバッガーを実行しているときにのみ問題が発生したため、VisualStudioやDelphiに問題があると考えました。
とにかく、統計的には、JavaScriptによってトリガーされた1つの画面上のブラウザーが上下に繰り返しスクロールすることで(明らかにバグをトリガーするために必要)、呼び出しで0を使用してアプリケーションを726回正常に起動できました。 、および2つの定数を使用して17回のうち5回クラッシュします。
そして、そもそも誰がその変更を行ったのかについては触れないようにしましょう。犯人は匿名のままにされたいと確信しています...咳
c# - C#でスタックトレースを失わずにInnerExceptionを再スローする方法は?
リフレクションを通じて、例外を引き起こす可能性のあるメソッドを呼び出しています。ラッパーのリフレクションを配置せずに、呼び出し元に例外を渡すにはどうすればよいですか?
InnerException を再スローしていますが、これによりスタック トレースが破棄されます。
コード例:
winforms - BufferedGraphicsContext エラー
アプリケーションを数時間使用した後、毎日同時に以下のエラーとコールスタックが発生します。何が起こっているのか、誰かが光を当てることができますか?
python - re.compile() または特定の Python ライブラリ呼び出しは例外をスローしますか?
re.compile(x) 関数が例外をスローする可能性があるかどうかは、Python のドキュメントからはわかりません (文字列を渡すと仮定します)。無効な正規表現と見なされるものがあると思います。より大きな問題は、特定の Python ライブラリ呼び出しが例外をスローする可能性があるかどうか、およびそれらが何であるかをどこで確認できるかということです。
c# - 例外が安全に処理されている場合に最初のチャンスの例外メッセージを回避する
次のコードは、EOS 例外をキャッチします。
では、コンソールでまだ初回例外が発生するのはなぜですか?
タイプ 'System.IO.EndOfStreamException' の初回例外が mscorlib.dll で発生しました
これらの最初のチャンスの例外メッセージを非表示にする方法はありますか?
php - PHP5 では、例外または trigger_error/set_error_handler を使用する必要がありますか?
どちらの方法でも、長所と短所は何ですか。One Right Way(tm) はありますか?
.net - Application.ThreadExceptionイベントハンドラーで例外のチェーン全体を取得するにはどうすればよいですか?
.NET 2.0アプリでの例外処理の修正に取り組んでいたところ、Application.ThreadExceptionの奇妙な問題に遭遇しました。
私が欲しいのは、GUI要素の背後にあるイベント(たとえば、button_Clickなど)からのすべての例外をキャッチできるようにすることです。次に、これらの例外を「致命的」でフィルタリングしたいと思います。たとえば、あるタイプの例外ではアプリケーションを実行し続け、他のタイプではアプリケーションを終了する必要があります。
別の.NET2.0アプリでは、デフォルトでは、デバッグモードでのみ、例外が実際にApplication.RunまたはApplication.DoEvents呼び出しを残すことを学びました。リリースモードではこれは発生せず、Application.ThreadExceptionイベントを使用して例外を「キャッチ」する必要があります。
ただし、Application.ThreadExceptionイベントのThreadExceptionEventArgsで渡される例外オブジェクトは、常に例外チェーンの最も内側の例外であることに気付きました。ただし、ロギング/デバッグ/設計の目的で、例外のチェーン全体が本当に必要です。たとえば、SocketExceptionを処理するだけの場合、どの外部システムが失敗したかを判断するのは簡単ではありません。たとえば、NpgsqlExceptionとしてラップされている場合、少なくともデータベースの問題であることがわかります。
では、このイベントからの例外のチェーン全体に到達するにはどうすればよいですか?それも可能ですか、それとも別の方法で例外処理を設計する必要がありますか?
Application.SetUnhandledExceptionModeを使用して回避策がありますが、独自のメッセージループをロールする必要があるため、これは理想からはほど遠いことに注意してください。
編集:より多くの間違いを防ぐために、GetBaseException()メソッドは私が望むことをしません:それはただ最も内側の例外を返しますが、私がすでに持っているのは最も内側の例外だけです。一番外側の例外を取得したいです!
c++ - C++ 例外コード ルックアップ
例外コードを知っていて、スローされた実際の例外が何を意味するかを調べる方法はありますか?
問題の私の例外: 0x64487347
例外アドレス: 0x1
コール スタックには情報が表示されません。
クラッシュの .dmp を確認していますが、実際には Visual Studio でデバッグしていません。
asp.net - ASP.NET WebServiceは、例外をスローすると、ぎこちない文字を返します
私はWebサービス(ASMX)を持っており、その中には、いくつかの作業を実行し、入力が有効でない場合に例外をスローするWebメソッドがあります。
Webページのクライアント側JavaScriptに戻り、エラーコールバック関数で、エラーを表示します。
これはうまく機能し、私のWebメソッドが(文字列)を返すとき、それは常に完璧に見えます。ただし、スローされた例外からのエラーメッセージの1つに特殊文字が含まれている場合、ブラウザに正しく表示されません。たとえば、エラーメッセージに次のものが含まれている場合:
その入力は無効です! (そこにはASCII#146があります)
これを表示します:
その入力は無効です!
または:
あなたはハスカー・ドゥが好きですか?(ASCII#252)
になる:
あなたはHüskerDüが好きですか?
エラーメッセージの内容は、UTF-8エンコーディングのXMLファイルからのものです。
そして、ページエンコーディングに関する限り、私のWeb.configには、次のものがあります。
L10nパラメータを設定するためのHTTPモジュールもあります。
このHTTPモジュールを無効にしてみましたが、結果は同じです。
Webサービス(l_errMsg変数内)によって返される値は、VSデバッガーでは正常に見えます。クライアントスクリプトが保持されると、正しく表示されなくなります。私はFirebugを使用して応答を確認しましたが、そこには特殊文字も含まれています。そのため、特殊文字が含まれていても、Webメソッドによって返される文字列が正常に表示されるのはかなり奇妙です。しかし、Webメソッドから例外をスローすると、メッセージ内の特殊文字が正しくありません。どうすればこれを修正できますか?