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

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

  n = UnitTest::RunAllTests();
  if ( n != 0 )
  {
  // place breakpoint here    
    return n;
  }
  return n;

Но я должен повторно вставить его каждый раз I контроля код снова от SVN. Действительно ли возможно несколько поместить точку останова компилятором?:

      n = UnitTest::RunAllTests();
      if ( n != 0 )
      {
      // place breakpoint here    
#ifdef __MSVC__
        @!!!$$$??___BREAKPOINT;
#endif
        return n;
      }
      return n;
33
задан Gregory Pakosz 5 March 2010 в 19:25
поделиться

6 ответов

Используйте внутреннюю функцию __ debugbreak () (требуется включение ).

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

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

62
ответ дан 27 November 2019 в 17:40
поделиться

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

0
ответ дан 27 November 2019 в 17:40
поделиться

Если вы используете 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);
}
3
ответ дан 27 November 2019 в 17:40
поделиться
DebugBreak(void)

Из Winbase.h.

MSDN

18
ответ дан 27 November 2019 в 17:40
поделиться

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

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

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

0
ответ дан 27 November 2019 в 17:40
поделиться

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

__asm
{
    int 3
}
9
ответ дан 27 November 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: