ICorDebugUnmanagedCallback::DebugEvent 方法

通知调试程序,已触发原生事件。

语法

HRESULT DebugEvent (  
    [in] LPDEBUG_EVENT  pDebugEvent,  
    [in] BOOL           fOutOfBand  
);  

参数

pDebugEvent
[in] 指向原生事件的指针。

fOutOfBand
[in] 如果在非托管事件发生后,直到调试程序调用 ICorDebugController::Continue 才能与托管进程状态交互,则为 true;否则为 false.。

备注

如果正在调试的线程是 Win32 线程,请不要使用 Win32 调试接口的任何成员。 只能在 Win32 线程上调用 ICorDebugController::Continue,并且只能在跳过带外事件继续的情况下调用。

DebugEvent 回调不遵循回调的标准规则。 调用 DebugEvent 时,进程将处于原始的 OS 调试停止状态。 进程不会同步。 当需要满足对托管代码信息的请求时,它将自动进入同步状态,这可能会产生其他嵌套的 DebugEvent 回调。

在继续进程之前,先在进程上调用 ICorDebugProcess::ClearCurrentException,以忽略异常事件。 调用此方法时,将在继续请求上发送 DBG_CONTINUE 而不是 DBG_EXCEPTION_NOT_HANDLED,并自动清除带外断点和单步异常。 带外事件可能随时出现,即使正在调试的应用程序停止,以及存在未完成的带内事件的情况下也是如此。

在 .NET Framework 版本 2.0 中,调试程序应立即跳过带外断点事件继续。 调试程序应该使用 ICorDebugProcess2::SetUnmanagedBreakpointICorDebugProcess2::ClearUnmanagedBreakpoint 方法来添加和删除断点。 这些方法将自动跳过任何带外断点。 因此,唯一调度的带外断点应该是指令流中已存在的原始断点,例如对 Win32 DebugBreak 函数的调用。 请勿尝试使用 ICorDebugProcess::ClearCurrentExceptionICorDebugProcess::GetThreadContextICorDebugProcess::SetThreadContext 或任何其他调试 API 的成员。

要求

平台:请参阅系统要求

标头:CorDebug.idl、CorDebug.h

库:CorGuids.lib

.NET Framework 版本:自 1.0 起可用

请参阅