首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不连接windbg的__debugbreak()

不连接windbg的__debugbreak()
EN

Stack Overflow用户
提问于 2018-07-11 13:47:50
回答 2查看 536关注 0票数 1

KMD中的__debugbreak()语句如果WinDbg不是connect,则会产生BSOD。我想知道为什么?

我想DUT和调试器交换了一些东西..?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-11 18:08:19

__debugbreak内部会引发一个断点异常。(int 3 on x86系统)

如果没有调试器,这将无法处理,这将导致错误检查。

如果您希望检测内核调试器的存在,KD_DEBUGGER_NOT_PRESENT变量可能对您有用。

KD_DEBUGGER_NOT_PRESENT并不总是最新的,但是可以使用KdRefreshDebuggerNotPresent()刷新它。

你可能需要这样的东西:

代码语言:javascript
复制
void BreakIfDebuggerPresent()
{
    if (!KdRefreshDebuggerNotPresent()) {
        DbgBreakPoint();
    }
}
票数 2
EN

Stack Overflow用户

发布于 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应用程序禁用此行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51287182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档