Mac OS 10.9上的QMetaObject :: changeGuard崩溃

时间:2014-01-23 10:34:00

标签: macos qt crash osx-mavericks

我的一位客户在Mac OS 10.9(Mavericks)的Qt 4.8.5应用程序中遇到了以下崩溃。因为我有点卡住而无法重现它:这里有人提示吗?

这是callstack:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   QtCore                             0x000000010177adfd QMetaObject::changeGuard(QObject**, QObject*) + 509
1   QtGui                              0x000000010197d716 QCursor::handle() const + 566
2   QtGui                              0x00000001019a5638 QMacCocoaAutoReleasePool::~QMacCocoaAutoReleasePool() + 18632
3   QtGui                              0x000000010199a814 QMacInputContext::reset() + 24884
4   com.apple.AppKit                   0x00007fff92775a62 -[NSApplication sendEvent:] + 2819
5   QtGui                              0x000000010199f814 QMacInputContext::reset() + 45364
6   com.apple.AppKit                   0x00007fff925c5a29 -[NSApplication run] + 646
7   QtGui                              0x00000001019aa680 QDesktopWidget::resizeEvent(QResizeEvent*) + 13040
8   QtCore                             0x0000000101762af4 QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 68
9   QtCore                             0x0000000101762ea4 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 324
10  QtCore                             0x000000010176558c QCoreApplication::exec() + 188

根据客户的说法,特定操作不会发生崩溃,而是在使用应用程序时发生。

2 个答案:

答案 0 :(得分:0)

请注意,在调用堆栈中,您可以通过事件循环直接调用QDesktopWidget::resizeEvent(QResizeEvent*)。如果您阅读QDesktopWidget的功能,那么应该会发现测试场景与您的应用程序没有直接关系。

尝试与桌面大小更改相关的操作,最大化某些应用程序(不需要你的)更改桌面,最小化/最大化某些应用程序,尝试多个显示器,在显示器之间移动应用程序,尝试更改屏幕分辨率等等。

比较OS X版本,您和客户端。苹果最近做了多台显示器支持。

<小时/> 我用Google搜索了一下,我发现了一些暗示10.9.1可以解决这个问题的东西。关于这个粉碎的话题很多,所以你可能会发现一些对你有用的东西。

答案 1 :(得分:0)

我设法跟踪问题有点失望。它发生在我的应用程序中的特定多选情况中,并且调整计时器值会绕过崩溃。

我仍然不知道为什么它在该特定位置崩溃,但它可能只是我的应用程序导致问题。无论如何,解决了我的知识,可能与其他人无关。