0

Windows の emacs 内で gdb を介して単体テストを実行しているときに、スタック オーバーフローの問題が発生していると思います。

Linuxでまったく同じ単体テストを問題なく実行します

また、これらの単体テスト内でメモリ効率の非常に悪いスタックベースの .ini ファイル パーサーを使用していることも認識しているため、スタック オーバーフローが発生している可能性は十分にあると思われます。

Linux ではパスしたものの、Windows では失敗するユニット テストがいくつかあることに気付きました。さらに調査すると、for ループ内の (スタックベースの) カウンターが for ループ実行のランダムなポイントでゼロにリセットされ、for ループが同じインデックス値の変更を検査している配列内の (スタックベースの) 値が明らかになります。

Windows で gdb に独自の実行スレッドが割り当てられているように見えることに気付きました。スレッドに割り当てられているスタック スペースの量を調べる方法はありますか?

4

2 に答える 2

2

Linux と Windows の違いの 1 つは、Windows ではスタック サイズをコンパイル時に設定する必要があることです (初期サイズと事前定義された予約済み制限の 2 つのサイズがあります)。使用しているコンパイラのデフォルトが何であるかはわかりませんが、 --stack パラメーター (gcc) を使用して値を増やしてみてください。

Linux では、スタックサイズは制限まで動的であり、通常はシステム管理者によって設定されます。

于 2012-10-09T12:36:34.037 に答える
0

では、Windows は Linux よりもプロセスあたりの最大スタック量の制限が厳しいのではないでしょうか?

このページでは、Windows でスタック オーバーフローをデバッグする方法について詳しく説明します。これは gdb に基づいたものではありませんが、おそらく何かを推測することはできます。

于 2012-10-09T12:19:08.943 に答える