Visual Studio-czy może być punktem przerwania wywoływanym z kodu?
Mam projekt testów jednostkowych oparty na UnitTest++. Zazwyczaj umieszczam punkt przerwania w ostatniej linii kodu, aby móc sprawdzić konsolę, gdy jeden z testów zawiedzie:
n = UnitTest::RunAllTests();
if ( n != 0 )
{
// place breakpoint here
return n;
}
return n;
Ale muszę go ponownie włożyć za każdym razem, gdy sprawdzam kod NA NOWO Z SVN. Czy możliwe jest nieco umieścić punkt przerwania przez kompilator?:
n = UnitTest::RunAllTests();
if ( n != 0 )
{
// place breakpoint here
#ifdef __MSVC__
@!!!$$$??___BREAKPOINT;
#endif
return n;
}
return n;
6 answers
Użyj __debugbreak()
intrinsic(wymaga włączenia <intrin.h>
).
Użycie __debugbreak()
jest lepsze od bezpośredniego zapisu __asm { int 3 }
, ponieważ składanie w wierszu nie jest dozwolone podczas kompilacji kodu dla architektury x64.
I dla przypomnienia, na Linuksie i Macu, z GCC, używam __builtin_trap()
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-25 09:34:55
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 19:16:36
Możesz użyć tego w C lub C++
__asm
{
int 3
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-06 09:15:54
Jeśli używasz VC6 (tak, przestarzały, ale nadal używany w niektórych miejscach/projektach), DebugBreak()
zadziała, ale możesz skończyć w jakimś niejasnym miejscu głęboko w bibliotekach DLL Windows, z których musisz przejść stos z powrotem do kodu.
Dlatego używam ASSERT()
w MFC lub assert()
w" standardowym " kodzie.
Twój przykład działa tak:
n = UnitTest::RunAllTests();
ASSERT(n == 0);
//assert(n == 0);
return n;
Jeśli nie potrzebujesz wyniku i chcesz go tylko do debugowania, możesz również zrobić
if(0 != UnitTest::RunAllTests())
{
ASSERT(FALSE);
//assert(false);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-06 09:31:27
Co powiesz na użycie metody debugowania lub śledzenia, aby wyświetlić informacje o konsoli. Może to być lepsze podejście niż poleganie na punktach przerwania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 19:14:22
Jak często sprawdzasz projekt z SVN? Zazwyczaj jest to coś, co robię tylko raz na projekt lub gdy przebudowuję mój komputer.
Jeśli sprawdzasz również pliki projektu, punkty przerwania powinny być przechowywane w plikach projektu.
Myślę, że jest w .plik suo. Możesz również umieścić to pod kontrolą SVN, jeśli chcesz, choć wolę nie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 19:16:08