gpt4 book ai didi

macos - 已删除的未提交 CATransaction 的线程未显示源代码?

转载 作者:行者123 更新时间:2023-12-03 16:50:04 24 4
gpt4 key购买 nike

堆栈溢出上还有很多关于以下内容的其他条目:CoreAnimation:警告,已删除带有未提交的 CATransaction 消息的线程,并通过启用 CA_DEBUG_TRANSACTIONS 对其进行排序。在我看到的 99% 的其他帖子中,回溯显示了未提交动画的来源(例如,参见 Core Animation Warning: "uncommitted CATransaction",它显示了在 MyApp 中调用的函数)。

就我而言,我已将 CA_DEBUG_TRANSACTIONS 标志设置为 1,并且得到了回溯,但不幸的是它没有显示它来自哪里:

Deallocating
CoreAnimation: warning, deleted thread with uncommitted CATransaction; created by:
0 QuartzCore 0x00007fff95f8c76a _ZN2CA11Transaction4pushEv + 312
1 QuartzCore 0x00007fff95f8c60a _ZN2CA11Transaction15ensure_implicitEv + 276
2 QuartzCore 0x00007fff95f916f5 _ZN2CA5Layer13thread_flags_EPNS_11TransactionE + 37
3 QuartzCore 0x00007fff95f91642 _ZN2CA5Layer4markEPNS_11TransactionEjj + 64
4 QuartzCore 0x00007fff95f931df _ZN2CA5Layer25set_needs_display_in_rectERK6CGRect + 315
5 AppKit 0x00007fff97e7ebdd _NSBackingLayerSetNeedsDisplayInRect + 319
6 QuartzCore 0x00007fff95f93081 -[CALayer setNeedsDisplay] + 62
7 AppKit 0x00007fff97e7ea77 -[NSView(NSInternal) _setLayerNeedsDisplayInViewRect:] + 648
8 AppKit 0x00007fff98505049 NSViewSetNeedsDisplayInRect + 838
9 AppKit 0x00007fff97e13eed -[NSView setNeedsDisplay:] + 81
10 AppKit 0x00007fff97e2ddc0 -[_NSThemeWidget update] + 166
11 AppKit 0x00007fff980aa844 -[NSThemeFrame _updateButtonState] + 41
12 AppKit 0x00007fff98101fff -[NSWindow(NSSheets) _detachSheetWindow:] + 641
13 AppKit 0x00007fff98101a1a -[NSMoveHelper(NSSheets) _closeSheet:andMoveParent:] + 546
14 AppKit 0x00007fff9810178c -[NSWindow(NSSheets) _orderOutRelativeToWindow:] + 105
15 AppKit 0x00007fff97f232d7 -[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 2833

不幸的是,代码库非常大,并且在没有看到我的代码库的起源点的情况下,我不确定如何追踪它。

有什么建议吗?

最佳答案

我终于找到了一种方法来做到这一点,使用 conditional breakpoints + symbolic breakpoints .

我会设定一个条件 ![[NSThread currentThread] isMainThread]

编辑:似乎不同版本的 Xcode 处理这种情况的方式不同。如果![[NSThread currentThread] isMainThread]不起作用(您收到无法找到符号的错误),请尝试 ![(NSThread*)[NSThread currentThread] isMainThread] .

并将符号断点设置为回溯中显示的方法之一。根据我之前发布的回溯,符号断点可能是“-[NSView setNeedsDisplay:]”。

然后,一旦在非主线程上调用“[NSView setNeedsDisplay:]”,我的断点就会被触发,我可以看到每个线程的状态,包括调用者的回溯。这让我解决了这个问题。

另外,请注意,这个符号断点会极大地减慢调试速度。我不建议让它一直运行。

关于macos - 已删除的未提交 CATransaction 的线程未显示源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25288698/

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