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

标签 c++ debugging winapi process systems-programming

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

相关文章:

c++ - 如何在 openGL 中旋转图像?

c++ - 无法使用 PhotoViewer.dll 执行 CreateProcess

debugging - 是否可以通过调试器检查表值参数的内容?

angular - Augury 未显示组件状态

Delphi - 获取文件夹图标

c++ - 如何更改复选框属性? C++/VS

c++ - 多集 STL 中的下界

c# - 在 pInvoke 中编码结构数组

c++ - 没有制定目标 'TBB_ENV_LIB_DEBUG-NOTFOUND' 的规则,'lib/libopencv_core.so.3.2.0 需要

winapi - EnumProcessModules 返回 0 错误 299