Sat
26
Jul 2008
Ciekawostka: Instrukcja asemblerowa wywołująca przerwanie int 3 może posłużyć jako asercja. Działa tak: Jeśli program jest uruchomiony z poziomu debuggera, przerywa jego wykonywanie tak, jakby w tym miejscu w kodzie postawiony był Breakpoint ("Program.exe has triggered a breakpoint"). Można podglądać stos wywołań programu czy wartości zmiennych. Potem można go kontynuować. Jeśli natomiast uruchomiony jest bez debuggera, wysypuje się z błędem krytcznym. Można sobie napisać na przykład takie makro:
#ifdef _DEBUG #define MY_ASSERT(x) { if ((x) == 0) { _asm { int 3 } } } #else #define MY_ASSERT(x) { } #endif
Comments | #c++ #visual studio Share