gpt4 book ai didi

c++ - 是什么导致 MacOS Sierra 中的 libdispatch 错误 EVFILT_MACHPORT?

转载 作者:行者123 更新时间:2023-11-27 23:50:43 35 4
gpt4 key购买 nike

早上好

我的应用程序遇到了崩溃。当用户尝试启动它时,他等了一分钟,然后引发了一个 std::exception。真的,我无法自己重现这个错误,但这似乎是一个很常见的问题。

我唯一可以跟踪的是系统日志中的以下行:

libdispatch 客户端中的错误:kevent[EVFILT_MACHPORT] 监视的资源在调用源取消处理程序之前消失

然后,我开始用谷歌搜索它,但找不到更多信息...我只能“假设”GCD 有问题(我不使用 afaik,或者至少不直接使用...)。我在网上看到的是它与 MacOSX Sierra 有关。但是大部分论坛都没有答案,只是试了很多都没有一个独特的结果。也许唯一一个对解决方法(我没有测试过,无论如何我不想使用)似乎有点清楚的网页是 this .

所以...:

  • 有人清楚什么会导致 libdispatch 中的异常吗?
  • 谁能给我一些好的链接、官方文档之类的?
  • 在没有更新的情况下,这会是 Sierra 中的错误吗?
  • 会不会与应用程序的安装程序有关?
  • 有人知道用测试程序重现此异常的方法吗?

最佳答案

这条 libdispatch 日志消息不是致命的,而且几乎可以肯定与您的崩溃无关,这听起来像是由于未捕获的 C++ 异常而中止(没有崩溃报告/回溯很难说更多)。 libdispatch 本身不会生成任何 C++ 异常 FWIW。

至于该特定日志消息的含义,它与 dispatch_source_create(3) 联机帮助页中的以下部分有关:

CANCELLATION: Important: a cancellation handler is required for file descriptor and mach port based sources in order to safely close the descriptor or destroy the port. Closing the descriptor or port before the cancellation handler has run may result in a race condition: if a new descriptor is allocated with the same value as the recently closed descriptor while the source's event handler is still running, the event handler may read/write data to the wrong descriptor.

如果您看到 EVFILT_MACHPORT“消失”日志消息,您的进程中的某个人违反了该 API 契约(Contract)并在调度源仍在监视它时释放了一个 machport(导致内核生成 EV_VANISHED kevent),请参阅 source code

关于c++ - 是什么导致 MacOS Sierra 中的 libdispatch 错误 EVFILT_MACHPORT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46666946/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com