すべてのスレッドはプライベートスタックを所有しているので、別のスレッドにStackoverflowException
について通知しないでください。特にスレッドがバックグラウンドワーカースレッドの場合はどうしたらいいですか?なぜStackoverflowExceptionは単なるスレッドではなく、プロセス全体を終了させるのですか?
答えて
すべての例外は、キャッチされずにルートに戻る場合、プロセスを解体します。 StackOverflowException
は(.NET 2.0以降)に捕捉できません。したがって、ブーム。
基本的にStackOverflowException
は発生しません。たとえば、反復コードにカウンタを追加するか、非再帰的な実装を使用して再書き込みします(おそらく、保留中のアイテムのQueue<T>
またはStack<T>
上のループ)。
"基本的には、StackOverflowExceptionを引き起こしません"。それは間違いないが、今日のソフトウェアは数十から数百(NuGet)のパッケージで構成されており、それらのすべてを制御することはできない。私の場合、EntityFrameworkは、それを再現する機会がなくても時々狂っているようです.VSで一回見たことのあるコールスタックは長くても(〜50)でした。この例外が発生しなかった場合にデバッガ(VS 2015)を接続すると、デバッグセッション+プロセスがただちに接続され、ただちに終了します。 – springy76
@ springy76: 'AppDomain.UnhandledException'と[' HandleProcessCorruptedStateExceptions'](https://msdn.microsoft.com/library/system.runtime.exceptionservices.handleprocesscorruptedstateexceptionsattribute)を使って、ブレークポイントできるハンドラを設定することができます。 (これによりプロセスが終了するのを妨げることはありませんが、そのような方法でデバッグすることはさらに多くなるでしょう) –
完全性のために、このような例外をスローする可能性のあるコードを絶対に*実行しなければならない* CLRを自分でホストし、['ICLRPolicyManager :: SetActionOnFailure'](https://msdn.microsoft.com/library/ms164395)でカスタムポリシーを適用してAppDomainをアンロードするだけです。私はあなたがそれを遠くに行きたいとは思っていません、それは少しの利益のための仕事のトンですが、私はまだそこにそれを投げています。実際には、それ自体のプロセスでこのようなコードを分離すると、クラッシュする可能性があります。 –
- 1. なぜRubyスレッドを終了すると私のプログラム全体が終了するのですか?
- 2. スレッドが終了するのはなぜですか?
- 3. プロセス全体を殺すことなく、C内でpthreadを終了
- 4. スレッドによって行われたアクションは、他のスレッドとプロセス全体を終了させますか?
- 5. スクリプトを終了することなくプロセスをPythonで終了するには?
- 6. コードカバレッジ:終了マーカーが赤くなるのはなぜですか(終了、終了、など)
- 7. PreferenceScreenが強制終了させるのはなぜですか?
- 8. Pythonスレッドからアプリケーション全体を終了するには?
- 9. スレッドのWindows API安全な終了
- 10. このJavaプロセスが終了しないのはなぜですか?
- 11. HibernateがJavaプロセスをブロックして終了するのはなぜですか?
- 12. このStackOverflowExceptionが表示されるのはなぜですか?
- 13. 終了時にドッカーのexecがnohupプロセスを強制終了するのはなぜですか?
- 14. スレッド内のキャッチされない例外は、スレッドまたはプロセス全体のみを強制終了しますか?
- 15. cプログラムでは、メインスレッドが終了するとプロセス全体が終了しますか?
- 16. query.ref.removeValueは単なるノードではなく子全体を削除します
- 17. Mac OS X:Cocoaアプリケーション内からプロセスツリー全体を終了/終了する最も簡単な方法
- 18. なぜseccompプロセスは常に終了しますか?
- 19. node.jsプロセスを終了させるには?
- 20. node.jsでこのクエリを実行すると、プロセスが終了しないのはなぜですか?
- 21. プロセスを強制終了しないでください
- 22. プロセスを終了する1つのスレッド
- 23. なぜThreadAbortExceptionをスローしてもプロセスが終了しないのですか?
- 24. なぜ、リシェイプコードはglMatrixMode(GL_MODELVIEW)で終了するのですか?
- 25. .tryメソッドがプログラムを終了するのはなぜですか?
- 26. ReactPHP:終了プロセスと終了プロセスの違いは何ですか?
- 27. sasプロセス全体を強制終了する
- 28. なぜ100vhはページ全体を埋めないのですか?
- 29. 子プロセスが終了するまでサブプロセス。ポップンが待機しないのはなぜですか?
- 30. プロセスのStandardOutputがプロセス終了後にデータを受信するのはなぜですか?
どのスレッドに通知したいと思いますか? StackOverflowExceptionに直面して、信頼できる例外ハンドラを書くのは本当に難しいので、これはあらかじめ登録されたフォワーダの形である種の魔法を必要とします。これは興味深い機能ですが、すべての機能は設計、実装、文書化のコストを正当化する必要があります。これはおそらくないでしょう。とにかく、スタックオーバーフローが無限の再帰のような無害のミスに起因する場合、おそらくそれを妨げる可能性があります。 –
[CLRホストは(https://msdn.microsoft.com/en-us/library/ms164395(v = vs.110).aspx)自動ではありません。あなたはFAIL_StackOverflowをmehに変える多くのものを見つけるつもりはありません。まあ、うまくいけない。 .NET 1.xで多すぎるのは、OSがWindows.NETではなくVistaと呼ばれる基本的な理由です。たぶん、それは良いことでした、その人気を与えて:) –