【发布时间】:2020-02-07 16:20:44
【问题描述】:
所以我的应用程序经常发生崩溃,当附加调试器时,它只会在崩溃时跳转到 AppDelegate 的第一行,因此它并没有给我太多的指向哪里出了问题.
我有崩溃日志,但我不知道如何解释它们,它们没有指向我编写的任何代码行,它们只是引用 SwiftUI、RenderBox、CoreFoundation 等。谁能帮忙我解释这个或给出想法或分享可能有帮助的类似经验?
我已经尝试过 Xcode 提供的几种诊断工具(地址清理程序、僵尸程序等),但我不想排除其中任何一个,因为可能我没有正确配置它们或其他什么。任何建议都会受到欢迎,几乎重写了整个应用程序尝试不同的事情来摆脱这个崩溃,但我总是在猜测。
这是来自崩溃日志之一:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_PROTECTION_FAILURE at 0x000000016f9cfff0
VM Region Info: 0x16f9cfff0 is in 0x16f9cc000-0x16f9d0000; bytes after start: 16368 bytes before end: 15
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
MALLOC_TINY 000000013a800000-000000013a900000 [ 1024K] rw-/rwx SM=PRV
GAP OF 0x350cc000 BYTES
---> STACK GUARD 000000016f9cc000-000000016f9d0000 [ 16K] ---/rwx SM=NUL ... for thread 0
Stack 000000016f9d0000-000000016facc000 [ 1008K] rw-/rwx SM=PRV thread 0
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [29449]
Triggered by Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 RenderBox 0x00000001d4a27518 RB::Rect::move+ 9496 (RB::AffineTransform&, RB::AffineTransform const&) + 152
1 RenderBox 0x00000001d4a27504 RB::Rect::move+ 9476 (RB::AffineTransform&, RB::AffineTransform const&) + 132
2 RenderBox 0x00000001d4a59078 RB::DisplayList::crop_bounds+ 213112 () + 144
3 RenderBox 0x00000001d4a5a02c RB::DisplayList::draw+ 217132 (RB::DisplayList::Item const*, RB::DisplayList::CachedTransform const&) + 36
4 RenderBox 0x00000001d4a59f00 RB::DisplayList::draw+ 216832 (RB::DisplayList const&) + 300
5 SwiftUI 0x00000001d9da5d50 closure #1 in RBGraphicsContext.makeDisplayList+ 2981200 (contentRect:body:) + 152
6 SwiftUI 0x00000001d9d808a0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext) -> + 2828448 (@unowned Bool) + 40
7 SwiftUI 0x00000001d9d805f4 closure #1 in cachedGraphicsRenderer+ 2827764 (_:) + 184
8 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
9 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
10 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
11 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
12 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
13 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
14 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
15 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
16 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
17 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
18 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
19 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
20 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
21 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
22 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
23 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
24 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
25 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
26 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
27 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
28 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
29 SwiftUI 0x00000001d9db6654 thunk for @escaping @callee_guaranteed (@in_guaranteed GraphicsContext, @in_guaranteed CGSize) -> (@out + 3049044 ()) + 64
30 SwiftUI 0x00000001d9db71f0 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed GraphicsContext, @unowned CGSize) -> + 3052016 () + 44
SwiftUI 行继续使用相同类型的东西,一直到 510,由于问题大小限制,我在 30 处将其截断。 SwiftUI 重复有大约 500 个几乎相同的东西这一事实似乎很糟糕,但在这种情况下,我不知道怎么说。
【问题讨论】:
-
我认为没有你的代码我们只能猜测......错误
-
找到一个生成这个的代码。是的,有时在 SwiftUI 中并不明显 - 我会在受影响的工作流程中逐一排除视图,直到找到发起者。
-
我已经对视图和功能进行了大量注释,但无法追踪到代码中的任何特定位置。我不是在问什么是错的,而是更多地寻求使用 Xcode 信息的帮助让我朝着正确的方向前进。必须有某种方法可以使用崩溃日志信息来确定某种错误信息。
-
所以我确实发现它只会在多次更新 UI 后崩溃。我认为这是 SwiftUI 中的一个错误,但很难确定。作为一种解决方法,我使用 .id 修饰符来更改视图的 id 并经常将其换成新的,这样它就不会达到导致崩溃的更新量。