トップ回答者
コンパイル時、スタック領域を拡張するには?

質問
-
VS2015でVB.Netで開発しています。
開発システムの中に巨大な関数があるせいで、スタックオーバーフローが発生してしまいます。
そこで以下のURLを参考に、実行ファイルのスタック領域を4Mに拡張するバッチを作り、コンパイルのたびにそれを実行しているのですが、毎回それをやるのは面倒で困っています。
(本当はその関数を整理するのが一番なのですが、それはけっこう大変なので…)コンパイル時に、実行ファイルのスタック領域を拡張するにはどうしたらよいのでしょうか?
回答
-
プロジェクト->プロパティ->コンパイル->ビルドイベント->ビルド後のイベントのコマンドライン
if exist "$(DevEnvDir)..\Tools\VsDevCmd.bat" ( call "$(DevEnvDir)..\Tools\VsDevCmd.bat" ) else ( call "$(DevEnvDir)..\Tools\vsvars32.bat" ) REM 4MB editbin.exe /stack:4194304 "$(TargetPath)" echo StackSize= dumpbin.exe /HEADERS "$(TargetPath)" | findstr /C:"size of stack"
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク こまってます 2021年4月19日 10:27
すべての返信
-
『ビルド後イベント』で、下記のようなコマンド ラインを指定してみては如何でしょう。
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x86\editbin.exe" /STACK:0x300000 "$(TargetPath)"
設定箇所は、プロジェクトのプロパティの「コンパイル」タブにある「ビルド イベント(N)...」ボタンです。(Express だと使えないかも)
editbin のパスやスタックサイズは、適宜調整してみてください。
-
プロジェクト->プロパティ->コンパイル->ビルドイベント->ビルド後のイベントのコマンドライン
if exist "$(DevEnvDir)..\Tools\VsDevCmd.bat" ( call "$(DevEnvDir)..\Tools\VsDevCmd.bat" ) else ( call "$(DevEnvDir)..\Tools\vsvars32.bat" ) REM 4MB editbin.exe /stack:4194304 "$(TargetPath)" echo StackSize= dumpbin.exe /HEADERS "$(TargetPath)" | findstr /C:"size of stack"
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク こまってます 2021年4月19日 10:27