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


MinDBG: простой отладчик для Win32 - часть 8


/////////////////////////////////////////////////////////////*/

void main ( int argc, char * argv[ ])

// Проверка наличия аргумента командной строки.

if ( 1 == argc)

{

ShowHelp (); 

return;

}

// Конкатенация параметров командной строки.

TCHAR szCmdLine[ МАХ_РАТН ];

szCmdLine[ 0 ] = '\0';

for ( int i = 1; i < argc; i++)

{ strcat ( szCmdLine, argv[ i ]);

 if ( i < argc) 

{

strcat ( szCmdLine, " "); 

}

}

// Попытка стартовать процесс подчиненного отладчика.

// Вызов функции выглядит как нормальный вызов CreateProcess,

//за исключением флажка специального режима

// запуска DEBUG_ONLY_THIS_PROCESS.

STARTUPINFO stStartlnfo ;

PROCESS_INFORMATION stProcessInfo ;

memset ( sstStartlnfo , NULL, sizeof ( STARTUPINFO ));

memset ( SstProcessInfo, NULL, sizeof ( PROCESS_INFORMATION));

stStartlnfo.cb = sizeof ( STARTUPINFO);

BOOL bRet = CreateProcess ( NULL ,

szCmdLine , 

NULL

NULL , 

FALSE , 

CREATE_NEW_CONSOLE |

DEBUG__ONLY_THIS_PROCESS,

 NULL , 

NULL , 

&stStartlnfo ,

 &stProcessInfo ) ;

// Посмотреть, стартовал ли процесс подчиненного отладчика.

if ( FALSE == bRet)

{

printf ( "Unable to start %s\n", szCmdLine); 

return;

}

// Подчиненный отладчик стартовал, войдем в цикл отладки.

DEBUG_EVENT stDE

BOOL bSeenlnitialBP = FALSE ;

BOOL bContinue = TRUE ;

HANDLE hProcess = INVALID_HANDLE_VALUE;

DWORD dwContinueStatus

// Входим в цикл while.

while ( TRUE == bContinue)

{

// Пауза, пока не придет уведомление о событии отладки.

bContinue = WaitForDebugEvent ( &stDE, INFINITE);

// Обработать конкретные отладочные события. Из-за того что

// MinDBG является минимальным отладчиком, он обрабатывает

// только некоторые события.

switch ( stDE.dwDebugEventCode)

{

case CREATE_PROCESS_DEBUG_EVENT : 

{

DisplayCreateProcessEvent ( stDE.u.CreateProcessInfo);

 // Сохранить информацию дескриптора, необходимую

 // для дальнейшего использования




Начало  Назад  Вперед



Книжный магазин