UnitTest ++に基づくユニットテストプロジェクトがあります。私は通常、コードの最後の行にブレークポイントを設定して、テストの1つが失敗したときにコンソールを検査できるようにします。
n = UnitTest::RunAllTests();
if ( n != 0 )
{
// place breakpoint here
return n;
}
return n;
ただし、SVNからコードを新たにチェックアウトするたびに再挿入する必要があります。コンパイラによってブレークポイントをいくらか配置することは可能ですか?:
n = UnitTest::RunAllTests();
if ( n != 0 )
{
// place breakpoint here
#ifdef __MSVC__
@!!!$$$??___BREAKPOINT;
#endif
return n;
}
return n;
__debugbreak()
組み込みを使用します(_<intrin.h>
_を含める必要があります)。
X64アーキテクチャのコードをコンパイルする場合、インラインアセンブリは許可されないため、___asm { int 3 }
_を直接書き込むよりも__debugbreak()
を使用することをお勧めします。
ちなみに、LinuxとMacではGCCを使用して、__builtin_trap()
を使用しています。
これはCまたはC++で使用できます
__asm
{
int 3
}
VC6を使用している場合(はい、古くなっていますが、一部の場所/プロジェクトでまだ使用されています)、DebugBreak()
は機能しますが、Windows DLLの奥深くにあるあいまいな場所に行き着く可能性があり、そこから歩く必要があります。コードにスタックバックします。
そのため、MFCではASSERT()
を使用し、「標準」コードではassert()
を使用しています。
あなたの例は次のように機能します:
n = UnitTest::RunAllTests();
ASSERT(n == 0);
//assert(n == 0);
return n;
結果が不要で、デバッグのためだけに必要な場合は、次のこともできます。
if(0 != UnitTest::RunAllTests())
{
ASSERT(FALSE);
//assert(false);
}
DebugまたはTraceメソッドを使用してコンソール情報を出力するのはどうですか。これは、ブレークポイントに依存するよりも優れたアプローチかもしれません。
どのくらいの頻度でSVNからプロジェクトをチェックアウトしますか?これは通常、プロジェクトごとに1回だけ、またはPCを再構築するときに行うことです。
プロジェクトファイルもチェックインする場合は、ブレークポイントをプロジェクトファイルに保存する必要があります。
.suoファイルにあると思います。必要に応じて、SVNの制御下に置くこともできますが、私はしたくありません。