Подтвердить что ты не робот

Visual Studio - может быть точкой останова, вызванной из кода?

У меня есть проект unit test на основе UnitTest ++. Я обычно помещаю точку останова в последнюю строку кода, чтобы я мог проверить консоль, когда один из тестов завершился с ошибкой:

  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;
4b9b3361

Ответ 1

Используйте __debugbreak() встроенный (требуется включение <intrin.h>).

Использование __debugbreak() предпочтительнее прямого написания __asm { int 3 }, поскольку встроенная сборка не разрешена при компиляции кода для архитектуры x64.

И для записи, на Linux и Mac, с GCC, я использую __builtin_trap().

Ответ 2

DebugBreak(void)

Из Winbase.h.

MSDN

Ответ 3

Вы можете использовать это в C или С++

__asm
{
    int 3
}

Ответ 4

Если вы используете VC6 (да, устаревший, но все еще используется в некоторых местах/проектах), DebugBreak() будет работать, но вы можете оказаться в некотором неявном месте, глубоко в стороне от Windows DLL, из которого вам нужно пройти стек вернитесь в свой код.

Вот почему я использую ASSERT() в MFC или ASSERT() в стандартном коде.

Ваш пример будет работать следующим образом:

n = UnitTest::RunAllTests();
ASSERT(n == 0);
//assert(n == 0);
return n;

Если вам не нужен результат и он нужен только для отладки, вы также можете сделать

if(0 != UnitTest::RunAllTests())
{
    ASSERT(FALSE);
    //assert(false);
}

Ответ 5

Как использовать метод Debug или Trace для вывода информации о консоли. Это может быть лучше, чем полагаться на точки останова.

Ответ 6

Как часто вы просматриваете проект из SVN? Обычно это то, что я делаю только один раз в проекте, или когда я перестраиваю свой компьютер.

Если вы также проверяете файлы проекта, точки останова должны храниться в файлах проекта.

Я думаю, что это в файле .suo. Вы могли бы также установить это под управлением SVN, если хотите, хотя я предпочитаю не делать этого.