为啥 google breakpad 不能处理所有崩溃?我该如何调试这些案例?
Posted
技术标签:
【中文标题】为啥 google breakpad 不能处理所有崩溃?我该如何调试这些案例?【英文标题】:Why does google breakpad not handle all crashes? How can I debug these cases?为什么 google breakpad 不能处理所有崩溃?我该如何调试这些案例? 【发布时间】:2012-07-06 05:44:53 【问题描述】:我正在使用google-breakpad。 这是一个在后台运行的错误报告程序,用于报告另一个进程的崩溃。
它几乎适用于所有情况。
但是,它有时无法捕获崩溃。没有报告,也没有转储文件。 它只是崩溃。崩溃的最后一条线索是 Windows 事件消息。
如何调试这些崩溃?什么会导致 Breakpad 无法处理崩溃?我可以使用什么方法来调试这种情况?
【问题讨论】:
这些可能是 SEH 异常吗?它们是堆栈溢出还是访问冲突? 我猜这可能与堆栈溢出有关。 Breakpad 已经很好地捕获了访问违规。 Breakpad 说它使用 SetUnhandledExceptionFilter() 函数(windows)。我不确定在这种情况下进程终止之前是否调用了 SetUnhandledExceptionFilter 的回调函数。 我认为不是。不过我不确定.. 【参考方案1】:Visual C++ C/C++ 运行时库在某些情况下会移除带有SetUnhandledExceptionFilter
的钩子;例如,当它检测到缓冲区溢出或其他安全问题时。
This Microsoft feedback page 列出了在大多数情况下如何阻止这种行为,但指出在不引入安全问题的情况下缓冲区溢出情况是不可能的。
【讨论】:
我看不到 Microsoft 反馈页面 - 是否有新链接或我可以查看的内容? 页面似乎变成了 404。我不记得它到底是什么,但请尝试 MSDN 文档中的 _set_abort_behavior 和 _set_invalid_parameter_handler。以上是关于为啥 google breakpad 不能处理所有崩溃?我该如何调试这些案例?的主要内容,如果未能解决你的问题,请参考以下文章