KMD中的__debugbreak()语句如果WinDbg不是connect,则会产生BSOD。我想知道为什么?
我想DUT和调试器交换了一些东西..?
发布于 2018-07-11 18:08:19
__debugbreak内部会引发一个断点异常。(int 3 on x86系统)
如果没有调试器,这将无法处理,这将导致错误检查。
如果您希望检测内核调试器的存在,KD_DEBUGGER_NOT_PRESENT变量可能对您有用。
KD_DEBUGGER_NOT_PRESENT并不总是最新的,但是可以使用KdRefreshDebuggerNotPresent()刷新它。
你可能需要这样的东西:
void BreakIfDebuggerPresent()
{
if (!KdRefreshDebuggerNotPresent()) {
DbgBreakPoint();
}
}发布于 2018-07-12 03:35:19
__debugbreak阴谋或DebugBreakPoint api都会引发int3异常。
如果您的应用程序处于用户模式,并且未被处理,应用程序就会崩溃。
如果它处于内核模式,且未被处理,则os崩溃。
这是记录在案的行为
https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/content/wdm/nf-wdm-dbgbreakpoint
如果是用户模式,并且存在内核模式调试器,则异常默认被路由到内核调试器,而不是崩溃应用程序。
您可以在windbg安装中使用kdbgctrl应用程序禁用此行为。
https://stackoverflow.com/questions/51287182
复制相似问题