Отладка приложений


         

Это значит, что из отлаженного


Это значит, что из отлаженного варианта все операторы утверждений можно спокойно удалить. Однако на этапе отладки иногда полезно использовать сплошные ASSERT-проверки — для всех параметров всех внутренних функций модуля. Возможно, это позволит отловить некоторые внутренние ошибки в модуле.
При выборе параметров для проверок с помощью утверждений полезно придерживаться некоторой средней линии поведения и проверять не все, а лишь наиболее "опасные" для устойчивой работы модуля параметры внутренних вызовов. Правильный отбор таких параметров возможен лишь после приобретения достаточных навыков в разработке программ. Только накопив определенный опыт программирования, вы почувствуете, в каких точках программы можно столкнуться с проблемами, и сможете отобрать внутренние параметры для проверок с помощью утверждений.
Другими объектами ASSERT-контроля являются возвращаемые значения функций. ASSERT-оператор проверяет корректность возвращаемого значения непосредственно перед его возвратом в вызывающую программу. Некоторые разработчики предпочитают проверять с помощью операторов утверждений почти каждое возвращаемое значение. В листинге 3-1 приводится определение функции startDebugging (из отладчика, описанного в главе 4), использующее операторы утверждений для проверки корректности возвращаемых значений. Если в функции вычисляется некорректное значение, то оператор утверждения выводит на экран предупреждающее сообщение.
 Листинг 3-1. Примеры ASSERT-проверок возвращаемых значений ;
HANDLE DEBUGINTERFACE_DLLINTERFACE _stdcall
StartDebugging ( LPCTSTR szDebuggee , 
LPCTSTR szCmdLine , 
LPDWORD IpPID ,
 CDebugBaseUser * pUserClass ,
 LPHANDLE IpDebugSyncEvents ) 
{
// ASSERT-проверки параметров.
ASSERT ( FALSE == IsBadStringPtr ( szDebuggee, MAX__PATH)); 
ASSERT ( FALSE == IsBadStringPtr ( szCmdLine, MAX_PATH)); 
ASSERT ( FALSE == IsBadWritePtr ( IpPID, sizeof ( DWORD))); 
ASSERT ( FALSE == IsBadReadPtr ( pUserClass,

Содержание  Назад  Вперед