суббота, 25 апреля 2009 г.

Как работают исключения С++ MSVC 2003/2008

Вот ссылочка на достаточно понятный пост про обработку исключений C++:
How a C++ compiler implements exception handling

Upd: Вот еще парочка очень неплохих вводных статей:
О компиляции /EHsc (часть 1)
О компиляции /EHsc (часть 2)


Upd2: По внутренностям SEH-исключений есть хорошая статья Matt'a Pietrek'a, правда старенькая (1997), с тех пор особо ничего для прикладного программиста не изменилось.

четверг, 16 апреля 2009 г.

Использование псевдорегистров MSVC при отладке приложений

Недавно застал человека за очень творческой работой, он методично унавоживал исходный код строками вида
DWORD nCode = ::GetLastError();
char buf[256];
sprintf("LastError=%lu", nCode);
::OutputDebugStringA(buf);

Делалось это с целью поймать ошибку, появляющуюся, когда функция API выдает ошибку, а код ее игнорирует и продолжает дальше работать с невалидными данными.
Я тут же дал совет не портить нервы и код, а использовать псевдорегистры и условные точки останова.
Выяснилось, что человек этого понятия не знает, а после разговора с другими людьми я понял, что эта техника популярностью почему-то не пользуется.