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


              

функция будет ждать, пока не


sizeof ( CDebugBaseUser *)));
ASSERT' ( FALSE == IsBadWritePtr ( IpDebugSyncEvents,
sizeof ( HANDLE) *
NUM_DEBUGEVENTS)); 
// Обычные проверки параметров.
if ( ( TRUE == IsBadStringPtr ( szDebuggee, MAX_PATH) ) ||
 ( TRUE •== IsBadStringPtr ( szCmdLine, MAX_PATH) ) ||
( TRUE — IsBadWritePtr ( IpPID, sizeof ( DWORD) )) || 
( TRUE == IsBadReadPtr ( pUserClass,
sizeof ( CDebugBaseUser *))) || 
( TRUE == IsBadWritePtr ( IpDebugSyncEvents,
sizeof ( HANDLE) *
NUM_DEBUGEVENTS) ) )
{
SetLastError ( ERROR_INVALID_PARAMETER);
return ( INVALID_HANDLE_VALUE); 
}
// Обработка начального уведомления о том, что данная
 // функция будет ждать, пока не начнет выполняться отладочный поток HANDLE hStartAck;
// Строка, используемая для начального уведомления TCHAR szStartAck [ МАХ_РАТН ];
 // Загрузить строку начального уведомления, 
if ( 0 == LoadString ( GetDllHandle () ,
IDS_DBGEVENTINIT ,
 szStartAck ,
 sizeof ( szStartAck) ))
 {
ASSERT ( !"LoadString IDS_DBGEVENTINIT failed!");
return ( INVALID_HANDLE_VALUE); 
}
// Создать событие начального уведомления.
 hStartAck = CreateEvent ( NULL , // Безопасность по умолчанию
TRUE , // Событие ручной переустановки FALSE ,
 // Сигнал Initial state = Not szStartAck);
 // Имя события ASSERT ( FALSE != hStartAck);
 if ( FALSE == hStartAck) 
{
TRACE ( "StartDebugging : Unable to create Start Ack event\n");
return ( INVALID_HANDLE_VALUE); 
}
// Связать параметры.
THREADPARAMS StParams; 
stParams.lpPID = IpPID; 
stParams.pUserClass = pUserClass;
 stParams.szDebuggee = szDebuggee;
 stParams.szCmdLine = szCmdLine ;
 // Дескриптор для потока отладки HANDLE hDbgThread; 
// Попытка создать поток.
hDbgThread = (HANDLE)_beginthread ( DebugThread, 0, sstParams); 
ASSERT ( NULL != hDbgThread);
 if ( NULL == hDbgThread)
 {
TRACE ( "StartDebugging : _beginthread failed\n");

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