フォームにたくさんのコントロール(少なくとも数百)を追加しましたが、そのうちのかなりの数がカスタムコントロールであり、InitializeComponent内のコードは巨大です。それでも、どのように再帰が発生するのか、なぜスタックオーバーフローが発生するのかがわかりません。VS内からデバッグバージョンを実行した場合にのみ発生します(2008、.net Framework 3.5およびWinformsを使用)。実行可能ファイルをダブルクリックするだけで、アプリケーションが実行されます。誰かがそれがどのように可能であるかを教えてもらえますか、そしてその理由を見つけるために私は何ができますか?ありがとう。
2 に答える
おそらく、InitializeComponent
メソッドのコードには、多くのローカル変数/大きなローカル変数 (たとえばstruct
、多くのフィールドを含む) が含まれている可能性があります。これは、使用可能なスタック領域のほとんどすべてを使用し、VS 内のデバッガで実行すると、領域が少し少なくなります。スタック、したがってエラー。
これが問題の場合は、ローカル変数をクラス フィールドに変換したりInitInstance
、同じスタック スペースを共有する独自のローカル変数を持つさまざまなメソッドでメソッドを分割したりすることで修正される可能性があります。
あなたの最善の策は、例外が発生している場所を正確に見つけることです - コントロール Alt E は例外ダイアログを表示します - 共通言語ランタイム例外のスローの下をクリックすると、エラーがスローされるとすぐにデバッグが停止します - そこから呼び出しを表示できます呼び出しを積み重ねて追跡し、どこが間違っていたかを確認します。(ショートカットが機能しない場合は、Visual Studio でデバッグ/例外をクリックして同じことを行うことができます)
(明確にするために - 例外ウィンドウは、左下にリスト、C++ 例外、共通言語ランタイム例外などを含むダイアログを表示します...共通言語ランタイム例外に沿った最初のチェックボックスをクリックして、問題が発生するとすぐにコードが壊れます。さらに調査するために、debug/windows/callstack または control/alt C を使用すると、再帰またはその他の問題があるかどうかをすぐに確認できます。)