У меня есть проект модульного теста на основе 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;
Используйте внутреннюю функцию __ debugbreak ()
(требуется включение
).
Использование __ debugbreak ()
предпочтительнее прямой записи __ asm {int 3}
, поскольку встроенная сборка не разрешена при компиляции кода для архитектуры x64.
И для записи, в Linux и Mac с GCC я использую __ builtin_trap ()
.
Как насчет использования метода Debug или Trace для вывода консольной информации. Это может быть лучшим подходом, чем полагаться на точки останова.
Если вы используете 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);
}
Как часто вы проверяете проект в SVN? Обычно это то, что я делаю только один раз за проект или когда я перестраиваю свой компьютер.
Если вы также регистрируете файлы проекта, точки останова должны быть сохранены в файлах проекта.
Думаю, он находится в файле .suo. Вы также можете поставить это под контроль SVN, если хотите, хотя я предпочитаю этого не делать.
Вы можете использовать это в C или C ++
__asm
{
int 3
}