gpt4 book ai didi

c++ - DebugActiveProcess 是否也跟踪子进程?

转载 作者:行者123 更新时间:2023-11-30 04:14:04 25 4
gpt4 key购买 nike

下面是一段代码,它完成了主要任务——附加到一个事件进程。尽管看起来子进程没有在开关中作为 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);
}

最佳答案

msdn.microsoft.com 上的文档说:“......就好像它创建了带有 DEBUG_ONLY_THIS_PROCESS 标志的进程......”。

这意味着:当使用 DebugActiveProcess 调试进程时,进程的所有线程都会被调试(当然),但子进程不会被调试。

要调试子进程,您可以将断点设置到 CreateProcess() 的第一个地址(更准确地说:CreateProcessA、CreateProcessW、CreateProcessAsUserA,...)。输入此断点时,您修改标志字段,以便进程以挂起状态启动,并在函数返回时调用 DebugActiveProcess。

关于c++ - DebugActiveProcess 是否也跟踪子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com