Debugging 调用DebugActiveProcess()后继续运行进程
我正在尝试构建某种统计分析应用程序,其操作如下:Debugging 调用DebugActiveProcess()后继续运行进程,debugging,winapi,Debugging,Winapi,我正在尝试构建某种统计分析应用程序,其操作如下: 将其自身附加到正在运行的进程(DebugActiveProcess()) 进入某种循环: 命令进程中断(DebugBreakProcess()) 保存它的调用堆栈(或只是分析它) 继续该过程(ContinueDebugEvent()) 从进程中分离(DebugActiveProcessStop()) 我就是不知道该怎么做。 我知道我必须以某种方式使用WaitForDebugEvent()机制,但我不知道如何使用 此外,我发现调用DebugAc
- 命令进程中断(DebugBreakProcess())
- 保存它的调用堆栈(或只是分析它)
- 继续该过程(ContinueDebugEvent())
•DBG_终止_线程
•DBG_控制_C
•DBG_控制_中断
•DBG_命令_异常
然而,Windows XP似乎不支持最后三个。非常不清楚。您必须在调用DebugActiveProcess()之后立即调用WaitForDebugEvent()。您将得到许多事件,最后一个是断点的异常调试事件。您是对的。此外,我还发现(如果我没有错的话)只有附加到被调试对象的特定线程才会接收事件。因此,如果profiler进程的主线程将自己连接到被调试者,那么它的线程将不会获得事件,只有被调试者会。进一步的问题-为什么在开始时有这么多事件(其中包括CreateProcess事件)?这个机制是否是一个堆栈式的机制,它保存所有过去的事件,直到某个调试器收集它们?它为您提供调试器需要的信息。加载了哪些DLL,运行了哪些线程。不过还有一个问题。。。多核机器上会发生什么?Lat说,调试的进程有许多线程,它在双核机器上运行。如果在向该进程发送EXCEPTION_BREAKPOINT事件时,它的两个线程正在运行,每个内核上一个线程,会发生什么情况?DEBUG_事件结构中返回的dwThreadId是什么?调试器可能会从当前运行的每个线程接收两个连续的异常断点事件?这也是记录在案的,是进程的第一个线程。