Asercja - int 3

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

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

Comments

[Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2019