Debugging 调用DebugActiveProcess()后继续运行进程

Debugging 调用DebugActiveProcess()后继续运行进程,debugging,winapi,Debugging,Winapi,我正在尝试构建某种统计分析应用程序,其操作如下: 将其自身附加到正在运行的进程(DebugActiveProcess()) 进入某种循环: 命令进程中断(DebugBreakProcess()) 保存它的调用堆栈(或只是分析它) 继续该过程(ContinueDebugEvent()) 从进程中分离(DebugActiveProcessStop()) 我就是不知道该怎么做。 我知道我必须以某种方式使用WaitForDebugEvent()机制,但我不知道如何使用 此外,我发现调用DebugAc

我正在尝试构建某种统计分析应用程序,其操作如下:

  • 将其自身附加到正在运行的进程(DebugActiveProcess())
  • 进入某种循环:
    • 命令进程中断(DebugBreakProcess())
    • 保存它的调用堆栈(或只是分析它)
    • 继续该过程(ContinueDebugEvent())
  • 从进程中分离(DebugActiveProcessStop())
  • 我就是不知道该怎么做。 我知道我必须以某种方式使用WaitForDebugEvent()机制,但我不知道如何使用

    此外,我发现调用DebugActiveProcess()后,进程会停止,但为了能够调用ContinueDebugEvent(),我必须向它提供只有在WaitForDebugEvent()返回后才可用的信息

    我能做什么?

    检查:

    已处理DBG_异常

    说到葡萄酒,浏览来源,我发现了其他几个“未记录”的状态代码:

    •DBG\u终止\u过程
    •DBG_终止_线程
    •DBG_控制_C
    •DBG_控制_中断
    •DBG_命令_异常


    然而,Windows XP似乎不支持最后三个。

    非常不清楚。您必须在调用DebugActiveProcess()之后立即调用WaitForDebugEvent()。您将得到许多事件,最后一个是断点的异常调试事件。您是对的。此外,我还发现(如果我没有错的话)只有附加到被调试对象的特定线程才会接收事件。因此,如果profiler进程的主线程将自己连接到被调试者,那么它的线程将不会获得事件,只有被调试者会。进一步的问题-为什么在开始时有这么多事件(其中包括CreateProcess事件)?这个机制是否是一个堆栈式的机制,它保存所有过去的事件,直到某个调试器收集它们?它为您提供调试器需要的信息。加载了哪些DLL,运行了哪些线程。不过还有一个问题。。。多核机器上会发生什么?Lat说,调试的进程有许多线程,它在双核机器上运行。如果在向该进程发送EXCEPTION_BREAKPOINT事件时,它的两个线程正在运行,每个内核上一个线程,会发生什么情况?DEBUG_事件结构中返回的dwThreadId是什么?调试器可能会从当前运行的每个线程接收两个连续的异常断点事件?这也是记录在案的,是进程的第一个线程。