更新到 macOS Mojave 后 [NSWindow orderFrontRegardless] 崩溃

亚历克斯

更新到 Mojave 后出现这个奇怪的崩溃。

没有做任何特别的事情,只是创建一个 NSWindow 并调用 orderFrontRegardless

以前一直工作得很好。

1   libsystem_platform.dylib            0x00007fff6610ab5d _sigtramp + 29
2   ???                                 0x0000000000000000 0x0 + 0
3   CoreFoundation                      0x00007fff39b00bb6 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
4   CoreFoundation                      0x00007fff39b00b30 ___CFXRegistrationPost_block_invoke + 63
5   CoreFoundation                      0x00007fff39b00a9a _CFXRegistrationPost + 404
6   CoreFoundation                      0x00007fff39b08f48 ___CFXNotificationPost_block_invoke + 87
7   CoreFoundation                      0x00007fff39a71994 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1642
8   CoreFoundation                      0x00007fff39a70d47 _CFXNotificationPost + 732
9   Foundation                          0x00007fff3bdab217 -[NSNotificationCenter postNotificationName:object:userInfo:] + 66
10  AppKit                              0x00007fff3720538b -[NSWindow _setFrameCommon:display:stashSize:] + 3090
11  AppKit                              0x00007fff37204766 -[NSWindow _setFrame:display:allowImplicitAnimation:stashSize:] + 192
12  AppKit                              0x00007fff3720469f -[NSWindow setFrame:display:] + 51
13  AppKit                              0x00007fff3727aca9 -[NSWindow _reallyDoOrderWindowAboveOrBelow:relativeTo:findKey:forCounter:force:isModal:] + 1336
14  AppKit                              0x00007fff372792a0 -[NSWindow _doOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 283
15  AppKit                              0x00007fff37a0dce9 -[NSWindow orderFrontRegardless] + 40

代码(这是一个控制台应用程序):

NSWindow *window =    [[NSWindow alloc] initWithContentRect:windowRect
styleMask:windowStyle
backing:NSBackingStoreBuffered
defer:NO];

// Since Snow Leopard, programs without application bundles and Info.plist
// files don't get a menubar and can't be brought to the front unless the
// presentation option is changed
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];

 [NSApp activateIgnoringOtherApps:YES];
 [window makeKeyAndOrderFront:nil];
马蒂

您表示您正在取消引用未初始化的指针。但是,我没有从您发布的报告中获得足够的信息来知道这是(可能是运气)null,还是只是垃圾内存。我会假设在某个时候你崩溃了EXC_BAD_ACCESS(信号等效是SIGBUSSIGSEGV,取决于)。

这里的关键信息是您安装了信号处理程序。

信号处理程序通常(但不总是)使用相同的堆栈在崩溃的线程上运行。内核使用该_sigtramp函数注入处理程序在信号传递时,当前堆栈状态包含您需要跟踪错误内存访问的信息。但是,您的信号处理程序被调用了。所以它运行,像它一样改变堆栈。

然后,您的信号处理程序以某种方式完成。可以配置一个信号处理程序sigaction,使进程状态恢复到崩溃事件之前的那一刻。我不确定您的信号处理程序是如何配置的。但是,最终,我将假设该过程被允许退出。

此时,Apple 的 ReportCrash 将被触发,并且会在信号处理程序离开它们的任何状态下捕获所有线程的回溯这很关键,因为这不一定是崩溃状态。

增加的复杂性,backtrace_symbols_fd不是在所有安全从信号处理程序使用。异步安全具有挑战性,并且从信号处理程序运行代码非常困难。您可以安全地做的事情很少。此外,我很确定这会backtrace_symbols_fd分配内存。因此,如果您的崩溃发生在某个内存分配器中,而且听起来确实如此,那么您肯定有陷入僵局的风险。从回溯来看,这似乎正是可能发生的事情。查看man sigaction一些详细信息。

更糟糕的是,在信号处理程序帧上展开堆栈特别具有挑战性,因为内核会运行您的处理程序。这就是为什么那个???框架在那里。

总结:

如果没有安装信号处理程序,Apple 的 ReportCrash 会为崩溃线程生成正确(并且可能有用)的回溯。

您包含的堆栈跟踪不是很好,但很难确切知道原因。似乎backtrace_symbols_fd没有很好地展开,可能是因为它不适合从信号处理程序中使用,可能是因为它没有在这种情况下得到足够好的堆栈展开机制的支持。但是,没有更多信息,我很难知道。不过,我很惊讶顶部框架是_sigtramp这没有多大意义。这让我觉得信号处理程序本身可能出了问题。可能的处理程序崩溃第二次。

Apple 的回溯(例如由 ReportCrash、backtrace_symbols_fd或 NSThread 的生成callStackReturnAddresses)绝对可以信任,前提是您在安全上下文中小心使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

更新到Android 3.6工作室后,在运行时应用程序崩溃

更新到MacOS Sierra后,具有Surefire(TestNG)的Maven变慢

更新到7.7.0后,ElasticSearch无法在MacOS上运行

将支持库更新到23.2.1后,TabLayout崩溃

在macOS Catalina上打开PhpStorm后崩溃

更新到MacOS Catalina后Xcode无法打开

更新到MacOS Mojave后无法使用PHPIZE

MongoDB更新到3.0后Heroku应用程序崩溃

将支持库更新到23.2.0后,TabLayout崩溃

更新到macOS后,出现有关“动态访问器失败”的未知错误

svn要求在更新到MacOS Sierra后升级工作副本

macOS Mojave更新后Apache无法正常工作

更新到MacOs之后,Mojave Visual Studio Code文本几乎不可读

macOS Mojave:从High Sierra更新到Mojave后,无效的活动开发人员路径

Python在MacOS Mojave中因OpenCV崩溃

Instruments在macOS Mojave上使用Hardened Runtime导致应用崩溃

更新到Xcode 10.2 / Swift 5后无法构建macOS项目

关闭并重新打开后,NSWindow崩溃

更新到macOS catalina后,为什么立即在本机中出现“ Watchman抓取失败”错误?

更新到Xcode 11.0后反应本机崩溃

更新到macOS Catalina后授予对JupyterLab的完全访问权限

更新到macOS Big Sur后XAMPP不起作用

将iOS更新到7.1后,Sprite-kit游戏崩溃

更新后崩溃

从11.04更新到11.10后崩溃

内核更新到 5.3.0-43 内核后 iwlwifi 崩溃

MacOS Mojave 更新 SSL/TLS 后无法从“https://rubygems.org/”安装 gems (?)

SwiftUI macos NSWindow 实例

Libreoffice 在更新到 Ubuntu 21.10 后崩溃了