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;
Ответы
Ответ 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, если хотите, хотя я предпочитаю не делать этого.