DebugActiveProcess также отслеживает дочерние процессы?

Вот фрагмент кода, который делает главное — присоединение к активному процессу. Хотя кажется, что дочерние процессы не были перехвачены как CREATE_PROCESS_DEBUG_EVENT в коммутаторе.
Только CREATE (EXIT) _THREAD_DEBUG_EVENT и LOAD_DLL_DEBUG_EVENT печатаются в stderr, хотя я точно знаю, что создаются подпроцессы (не потоки). Пожалуйста, порекомендуйте.

    DebugActiveProcess(processId);
DebugSetProcessKillOnExit(false);

while (!done) {
DWORD status = DBG_CONTINUE;
DEBUG_EVENT debugEvent;

WaitForDebugEvent(&debugEvent, INFINITE);
switch (debugEvent.dwDebugEventCode) {

cerr << "Got event " << debugEvent.dwDebugEventCode << endl;

case CREATE_PROCESS_DEBUG_EVENT:
{
CREATE_PROCESS_DEBUG_INFO &info = debugEvent.u.CreateProcessInfo;
cerr << "process created " << debugEvent.dwProcessId << endl;
break;
}
case EXIT_PROCESS_DEBUG_EVENT:
{
EXIT_PROCESS_DEBUG_INFO &info = debugEvent.u.ExitProcess;
cerr << "process exited" << endl;
break;
}
case LOAD_DLL_DEBUG_EVENT:
{
CloseHandle(debugEvent.u.LoadDll.hFile);
break;
}
}
ContinueDebugEvent(debugEvent.dwProcessId, debugEvent.dwThreadId, status);
}

1

Решение

Документация на msdn.microsoft.com гласит: «… как будто он создал процесс с флагом DEBUG_ONLY_THIS_PROCESS …».

Это означает: при отладке процесса с помощью DebugActiveProcess все потоки процесса отлаживаются (конечно), но дочерние процессы не отлажено.

Для отладки дочерних процессов вы также можете установить точку останова на первый адрес CreateProcess () (точнее: CreateProcessA, CreateProcessW, CreateProcessAsUserA, …). Когда эта точка останова введена, вы изменяете поле флагов, чтобы процесс запускался в приостановленном состоянии, а когда функция возвращается, вы вызываете DebugActiveProcess.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]