0

IDE内のデバッガーで実行しているときにスタックオーバーフローが発生した実行中のC++プロジェクトがあります。

Visual Studio 2008は、オーバーフローしたスレッドのスタックトレースを切り捨てるためにそれ自体を使用しました(オーバーフローをチェックするのはなぜですか?)。

このスレッドの呼び出しのルートを表示するビューオプションまたはデバッグオプションはありますか?

したがって、本質的に、スタックトレースが破損する可能性がある理由などを提供することは別として(AVを無効にしてmemtest86も実行する必要がありますか?)、Visual Studio 2008でのスタックトレースの切り捨てに関する実際の情報を持っている人はいますか?

4

2 に答える 2

0

大きなスタックを持ち、単純な再帰バグによるスタック オーバーフローを回避したい場合は、TLS を使用してください: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686749(v=vs.85) .aspx .

プロセスの開始時に 1 つのスロットを割り当て、TlsGetValue と TlsSetValue を使用してスロットの値をインクリメントし、それを超えているかどうかを確認してから、デバッガーに侵入するか、おそらく問題のある関数で他の「一時停止」を行います。

ハックなしではサードパーティのコードでは機能しませんが、制限を回避するのにうまく機能し、かなり軽量でもありました.

于 2012-08-13T08:27:45.553 に答える
0

簡単な解決策は、スタック オーバーフローが早期に発生するように、スタックを最初から十分に小さく保つことです。いずれにしても、1 メガバイトの反復機能は必要ありません。

于 2012-08-13T08:05:14.423 に答える