Есть такая удобная штука assert называется. Данный макрос вызывает исключение, которое позволяет провести частичную диагностику результатов работы программы.
Макрос проверяет истинность выражения, и если оно ложно пишет в поток stderr само выражение, имя файла и строку исходника, в котором это случилось. После вывода информации работа приложения завершается функцией abort().
Пишем сырец:
#include <windows.h> #include <assert.h> int main() { assert(false); return 0; }
компилим, запускаем и что мы видим?
В консоли:
Assertion failed: false, file tt.cpp, line 9 This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
плюс открывается окошко Error Report. Удобно? .. Мне — нет.
Почему так происходит? Начиная с Visual C++ 2005, функция abort() запускает механизм оповещения об ошибках. Почитав MSDN узнал, что отключить его можно установив флаги функцией _set_abort_behavior(). Там всего два флага:
- _WRITE_ABORT_MSG — вкл./выкл. сообщение в консоли «This application…information.»
- _CALL_REPORTFAULT — вкл./выкл. оповещение об ошибках
добавляем строчечку:
#include <windows.h> #include <assert.h> int main() { _set_abort_behavior(0, _CALL_REPORTFAULT|_WRITE_ABORT_MSG); assert(false); return 0; }
компилим, запускаем… viola, никаких раздражающих окошек, в консоли только нужная нам информация.