web-dev-qa-db-ja.com

Visual Studio-コードから呼び出されるブレークポイントにすることができますか?

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;
33
danatel

__debugbreak() 組み込みを使用します(_<intrin.h>_を含める必要があります)。

X64アーキテクチャのコードをコンパイルする場合、インラインアセンブリは許可されないため、___asm { int 3 }_を直接書き込むよりも__debugbreak()を使用することをお勧めします。

ちなみに、LinuxとMacではGCCを使用して、__builtin_trap()を使用しています。

60
Gregory Pakosz
DebugBreak(void)

Winbase.hから。

[〜#〜] msdn [〜#〜]

18
Clinton Pierce

これはCまたはC++で使用できます

__asm
{
    int 3
}
9
Indy9000

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);
}
3
foraidt

DebugまたはTraceメソッドを使用してコンソール情報を出力するのはどうですか。これは、ブレークポイントに依存するよりも優れたアプローチかもしれません。

0
Cody C

どのくらいの頻度でSVNからプロジェクトをチェックアウトしますか?これは通常、プロジェクトごとに1回だけ、またはPCを再構築するときに行うことです。

プロジェクトファイルもチェックインする場合は、ブレークポイントをプロジェクトファイルに保存する必要があります。

.suoファイルにあると思います。必要に応じて、SVNの制御下に置くこともできますが、私はしたくありません。

0
codenheim