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


         

Теперь посмотрим, что необходимо проверять


.
.
.
}
Что проверяют операторы утверждений
Теперь посмотрим, что необходимо проверять с помощью операторов утверждений. Судя по предыдущим примерам, прежде всего нужно проверять те данные, которые поступают в функцию через аргументы ее вызовов из других программ. Существует опасность, что таким образом в функцию будут направляться некорректные данные (например, данные некорректных для этой функции типов или значений). Выполняя проверки соответствующих параметров, операторы утверждений значительно облегчают процесс отладки и реализуют идею профилактического программирования.
Ниже показан исходный код одной из ключевых функций (stopDebugging) простого отладчика, описанного в главе 4, в которой для контроля параметра использован макрооператор ASSERT. Обратите внимание, что в теле функции сначала выполняется оператор утверждения (ASSERT) и сразу за ним — обработка реальной ошибки. Напомним, что операторы утверждений лишь контролируют правильность параметров, да и то лишь на этапах отладки, и никоим образом не заменяют нормальной обработки ошибок.
BOOL DEBUGINTERFACE_DLLINTERFACE _stdcall
StopDebugging ( LPHANDLE IpDebugSyncEvents) 
{
ASSERT ( FALSE ==
IsBadWritePtr ( IpDebugSyncEvents,
sizeof ( HANDLE) * NUM_DEBUGEVENTS)); 
if ( TRUE == IsBadWritePtr ( IpDebugSyncEvents,
sizeof ( HANDLE) * NUM_DEBUGEVENTS))
 {
SetLastError ( ERROR_INVALID_PARAMETER);
 return ( FALSE); 
}
// Сигнал потоку отладки с именем события его закрытия. 
VERIFY ( SetEvent ( IpDebugSyncEvents[ CLOSEDEBUGGER ]));
return ( TRUE);
 }
Параметры внутренних private-функций программного модуля не всегда нуждаются в контроле с помощью утверждений. Он необходим только в том случае, если речь идет о внешнем вызове внутренней функции. Более того, если параметр, используемый внешним вызовом, однажды уже прошел через проверку оператором утверждения (на этапе отладки, например), то нет необходимости повторять такие проверки в отлаженном (рабочем) варианте программы.

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