2017-03-02 15 views
0

私はVS2015で単体テストプロジェクトを作成しようとしています。プロジェクトは正しくビルドされ、大きな構造のローカル変数を作成するまで実行されます。Visual Studio(2015)でアンマネージユニットテストのスタックサイズを増やす方法は?例外コード:C00000FD

私のコードは次のようになります。私はlargeStructure定義を削除すると

#include "stdafx.h" 
#include "CppUnitTest.h" 

using namespace Microsoft::VisualStudio::CppUnitTestFramework; 

namespace testTxRxTest11ac 
{ 
    TEST_CLASS(UnitTest1) 
    { 
    public: 

     TEST_METHOD(TestMethod1) 
     { 
      largeStructure largeStruct; 
      Assert::IsFalse(false); 
     } 

    }; 
} 

、テストは合格します。 largeStructure定義を追加すると例外コード:C00000FDで失敗します。私はこのコードを探知し、それがスタックのオーバーフローであることがわかりました。

テストプロジェクトのプロパティ(プロパティ - >リンカ - >システム - >スタック予約サイズ)でスタックサイズを増やそうとしました。

また、#pragma comment(リンカ、 "/ STACK:10000000")をテストコードとstdafx.cppに追加しようとしました。何も働かなかった。

このエラーに対処する方法は他にありますか?

+1

あなたは '/ F stack_size_in_bytes'を試しましたか? (https://msdn.microsoft.com/en-us/library/tdkhxaks.aspx)大きなオブジェクトをスタックに置くことは悪いですが、コードを再構築することを検討してください。 –

+0

'largeStructure'の定義を示してください。 –

+1

ユニットテストはユニットテストランナーによって割り当てられたスタックで実行されます。あなたはRTFMをしなければならないでしょうが、それを大きくするためのテスト構成設定があることはかなり疑わしいです。私はそのような設定を見て思い出しません。したがって、テストコードがCreateThread()を使用してコードをより大きなスタックで実行できるようにするための回避策が必要です。しかし、テストに失敗したバグレポートを書くことは確かに最高です。 –

答えて

1

これはあなたの元の質問に答えることはできませんが、別の方法は、大規模なクラスでスタックを完全に使用することを避けることです。単純にヒープを使用すると、テストランナーのスタックスペースが無駄になります。スタックベースのアプローチと同じRAIIセマンティクスを維持したい場合は、std :: unique_ptrを使用できます。

関連する問題