ICorDebugUnmanagedCallback::DebugEvent 方法
通知调试程序,已触发原生事件。
语法
HRESULT DebugEvent (
[in] LPDEBUG_EVENT pDebugEvent,
[in] BOOL fOutOfBand
);
参数
pDebugEvent
[in]指向本机事件的指针。
fOutOfBand
[in] true
如果在发生非托管事件后无法与托管进程状态交互,直到调试器调用 ICorDebugController::Continue;否则为 false
。
注解
如果正在调试的线程是 Win32 线程,请不要使用 Win32 调试接口的任何成员。 只能在 Win32 线程上调用 ICorDebugController::Continue
,并且只能在跳过带外事件继续的情况下调用。
DebugEvent
回调不遵循回调的标准规则。 调用 DebugEvent
时,进程将处于原始的 OS 调试停止状态。 进程不会同步。 当需要满足对托管代码信息的请求时,它将自动进入同步状态,这可能会产生其他嵌套的 DebugEvent
回调。
在继续进程之前,先在进程上调用 ICorDebugProcess::ClearCurrentException,以忽略异常事件。 调用此方法时,将在继续请求上发送 DBG_CONTINUE 而不是 DBG_EXCEPTION_NOT_HANDLED,并自动清除带外断点和单步异常。 带外事件可能随时出现,即使正在调试的应用程序停止,以及存在未完成的带内事件的情况下也是如此。
在 .NET Framework 版本 2.0 中,调试程序应立即跳过带外断点事件继续。 调试程序应该使用 ICorDebugProcess2::SetUnmanagedBreakpoint 和 ICorDebugProcess2::ClearUnmanagedBreakpoint 方法来添加和删除断点。 这些方法将自动跳过任何带外断点。 因此,唯一调度的带外断点应该是指令流中已存在的原始断点,例如对 Win32 DebugBreak
函数的调用。 请勿尝试使用 ICorDebugProcess::ClearCurrentException
,ICorDebugProcess::GetThreadContext、ICorDebugProcess::SetThreadContext 或任何其他调试 API 的成员。
要求
平台:请参阅系统要求。
标头:CorDebug.idl、CorDebug.h
库:CorGuids.lib
.NET Framework 版本:自 1.0 起可用