kobunketsu
kobunketsu

Reputation: 187

App crashes of type EXC_BREAKPOINT (SIGTRAP) SIGNAL 5 Trace/BPT trap on iOS17

I'm encountering crashes of type EXC_BREAKPOINT (SIGTRAP) Termination Reason: SIGNAL 5 Trace/BPT trap: 5 on iOS 17.

In the iOS app I'm developing, I've noticed that since upgrading to iOS 17 (Xcode 15.1), crashes of this type occur frequently. The crashes are random and can't be reliably reproduced. Below is a typical crash report:

Incident Identifier: 53CAE54C-040F-4965-9AA2-D7A58AB877A8
CrashReporter Key:   fd24cf14a51d73ebfc1852cccb1b8d50822b247c
Hardware Model:      iPhone11,2
Process:             MyApp [89057]
Path:                /private/var/containers/Bundle/Application/06B982E0-B818-48A9-B2D1-F28999EC3BC0/MyApp.app/MyApp
Identifier:          com.company.MyApp
Version:             2.0.0 (72)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.company.MyApp [4659]

Date/Time:           2024-03-24 14:50:46.3982 +0800
Launch Time:         2024-03-24 14:38:38.1438 +0800
OS Version:          iPhone OS 17.3.1 (21D61)
Release Type:        User
Baseband Version:    6.00.00
Report Version:      104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x000000018c44e838
Termination Reason: SIGNAL 5 Trace/BPT trap: 5
Terminating Process: exc handler [89057]

Triggered by Thread:  0

Kernel Triage:
VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter
VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter
VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter
VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter
VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter


Thread 0 name:   Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                        0x18c44e838 object_getClass + 48
1   Foundation                             0x1930807b4 _NSKeyValueObservationInfoGetObservances + 264
2   Foundation                             0x19307fc7c NSKeyValueWillChangeWithPerThreadPendingNotifications + 232
3   QuartzCore                             0x19572f14c CAAnimation_setter(CAAnimation*, unsigned int, _CAValueType, void const*) + 128
4   QuartzCore                             0x19574a6b4 -[CAAnimation setBeginTime:] + 52
5   QuartzCore                             0x1957485b4 CA::Layer::commit_animations(CA::Transaction*, double (*)(CA::Layer*, double, void*), void (*)(CA::Layer*, CA::Render::Animation*, void*), void (*)(CA::Layer*, __CFString const*, void*), CA::Render::TimingList* (*)(CA::Layer*, void*), void*) + 740
6   QuartzCore                             0x195700bf0 invocation function for block in CA::Context::commit_transaction(CA::Transaction*, double, double*) + 148
7   QuartzCore                             0x195700af8 CA::Layer::commit_if_needed(CA::Transaction*, void (CA::Layer*, unsigned int, unsigned int) block_pointer) + 368
8   QuartzCore                             0x195700a84 CA::Layer::commit_if_needed(CA::Transaction*, void (CA::Layer*, unsigned int, unsigned int) block_pointer) + 252
9   QuartzCore                             0x195700a84 CA::Layer::commit_if_needed(CA::Transaction*, void (CA::Layer*, unsigned int, unsigned int) block_pointer) + 252
10  QuartzCore                             0x195700a84 CA::Layer::commit_if_needed(CA::Transaction*, void (CA::Layer*, unsigned int, unsigned int) block_pointer) + 252
11  QuartzCore                             0x195700a84 CA::Layer::commit_if_needed(CA::Transaction*, void (CA::Layer*, unsigned int, unsigned int) block_pointer) + 252
12  QuartzCore                             0x195700a84 CA::Layer::commit_if_needed(CA::Transaction*, void (CA::Layer*, unsigned int, unsigned int) block_pointer) + 252
13  QuartzCore                             0x195700a84 CA::Layer::commit_if_needed(CA::Transaction*, void (CA::Layer*, unsigned int, unsigned int) block_pointer) + 252
14  QuartzCore                             0x195700a84 CA::Layer::commit_if_needed(CA::Transaction*, void (CA::Layer*, unsigned int, unsigned int) block_pointer) + 252
15  QuartzCore                             0x195745248 CA::Context::commit_transaction(CA::Transaction*, double, double*) + 11192
16  QuartzCore                             0x19573bb80 CA::Transaction::commit() + 648
17  QuartzCore                             0x19573b828 CA::Transaction::flush_as_runloop_observer(bool) + 88
18  CoreFoundation                         0x1940ff7bc __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 36
19  CoreFoundation                         0x1940fe1c4 __CFRunLoopDoObservers + 548
20  CoreFoundation                         0x1940fd8e0 __CFRunLoopRun + 1028
21  CoreFoundation                         0x1940fd3f8 CFRunLoopRunSpecific + 608
22  GraphicsServices                       0x1d768b4f8 GSEventRunModal + 164
23  UIKitCore                              0x1965238a0 -[UIApplication _run] + 888
24  UIKitCore                              0x196522edc UIApplicationMain + 340
25  MyApp                                  0x102c1f014 main + 140
26  dyld                                   0x1b6e52dcc start + 2240

By looking up information on the Exception Type and Termination Reason, I found that Apple officially mentions that EXC_BREAKPOINT (SIGTRAP) SIGNAL 5 Trace/BPT trap: 5 crashes could be caused by Swift runtime error crashing mechanisms, mainly due to:

If you use the ! operator to force unwrap an optional value that’s nil, or if you force a type downcast that fails with the as! operator, the Swift runtime catches these errors and intentionally crashes the app. For details, see the link: https://developer.apple.com/documentation/xcode/addressing-crashes-from-swift-runtime-errors

The crash usually occurs after a button click triggers a change in UIView properties, mostly related to layout. All Swift code in the project is unrelated to this type of UI. So, I speculate that it might not be related to Swift runtime errors, but I'm unsure what other possible causes could lead to the aforementioned crash.

My project is a mix of Objc+Swift compilation, and the related crash code has nothing to do with Swift. A common denominator in all similar crash reports is that they occur on the main thread during system framework function calls. All show multiple instances of VM - (arg = 0x3) mach_vm_allocate_kernel failed within call to vm_map_enter

CA::Layer::commit_if_needed is always invoked. I noticed many crashes relate to CALayer setting properties internally calling CAAnimation, so I added:

@implementation CALayer (Animation)
/// Prevent crashes
+ (void)disableAnimation:(VoidBlock)block{
    [CATransaction begin];
    [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
    block();
    [CATransaction commit];
}
@end

Using [CALayer disableAnimation:^{view.layer.someProperty = someValue;}] to disable animations has prevented some crashes, but I'm powerless in situations like the stack trace above, where all calls are made by system frameworks.

Below are parts of similar crash reports with slightly different stack traces:

Thread 0 Crashed:
0   libobjc.A.dylib                        0x18c44e838 object_getClass + 48
1   Foundation                             0x1930807b4 _NSKeyValueObservationInfoGetObservances + 264
2   Foundation                             0x19307fc7c NSKeyValueWillChangeWithPerThreadPendingNotifications + 232
3   QuartzCore                             0x19572f14c CAAnimation_setter(CAAnimation*, unsigned int, _CAValueType, void const*) + 128
4   QuartzCore                             0x19572f0a4 -[CAPropertyAnimation setKeyPath:] + 52
5   UIKitCore                              0x1963e8fc8 -[UIImageView startAnimating] + 684
6   UIKitCore                              0x1963e8ce4 -[UIActivityIndicatorView layoutSubviews] + 1128
7   UIKitCore                              0x196329c04 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1528
8   QuartzCore                             0x19573c7ec CA::Layer::layout_if_needed(CA::Transaction*) + 500
9   QuartzCore                             0x19573c374 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 144
10  QuartzCore                             0x195742860 CA::Context::commit_transaction(CA::Transaction*, double, double*) + 464
11  QuartzCore                             0x19573bb80 CA::Transaction::commit() + 648
12  QuartzCore                             0x19573b828 CA::Transaction::flush_as_runloop_observer(bool) + 88
13  CoreFoundation                         0x1940ff7bc __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 36
14  CoreFoundation                         0x1940fe1c4 __CFRunLoopDoObservers + 548
15  CoreFoundation                         0x1940fd8e0 __CFRunLoopRun + 1028
16  CoreFoundation                         0x1940fd3f8 CFRunLoopRunSpecific + 608
17  GraphicsServices                       0x1d768b4f8 GSEventRunModal + 164
18  UIKitCore                              0x1965238a0 -[UIApplication _run] + 888
19  UIKitCore                              0x196522edc UIApplicationMain + 340
20  MyApp                                  0x1048431b0 main + 140
21  dyld                                   0x1b6e52dcc start + 2240

Thread 0 Crashed:
0   libobjc.A.dylib                        0x18c44e838 object_getClass + 48
1   Foundation                             0x1930807b4 _NSKeyValueObservationInfoGetObservances + 264
2   Foundation                             0x19307fc7c NSKeyValueWillChangeWithPerThreadPendingNotifications + 232
3   QuartzCore                             0x19572f14c CAAnimation_setter(CAAnimation*, unsigned int, _CAValueType, void const*) + 128
4   QuartzCore                             0x195780354 -[CABasicAnimation setFromValue:] + 52
5   QuartzCore                             0x195780200 CALayerCreateImplicitAnimation + 276
6   QuartzCore                             0x195715f20 -[CALayer actionForKey:] + 420
7   QuartzCore                             0x195715c84 CA::Layer::begin_change(CA::Transaction*, unsigned int, objc_object*, objc_object*&) + 204
8   QuartzCore                             0x195716984 CA::Layer::setter(unsigned int, _CAValueType, void const*) + 792
9   QuartzCore                             0x195716644 -[CALayer setOpacity:] + 56
10  MyApp                                  0x100972ae4 -[CALayer(Visbility) setSimHidden:] + 200

Thread 0 Crashed:
0   libobjc.A.dylib                        0x18c44e838 object_getClass + 48
1   Foundation                             0x1930807b4 _NSKeyValueObservationInfoGetObservances + 264
2   Foundation                             0x19307fc7c NSKeyValueWillChangeWithPerThreadPendingNotifications + 232
3   QuartzCore                             0x19572f14c CAAnimation_setter(CAAnimation*, unsigned int, _CAValueType, void const*) + 128
4   QuartzCore                             0x19572f0a4 -[CAPropertyAnimation setKeyPath:] + 52
5   QuartzCore                             0x19572f050 +[CAPropertyAnimation animationWithKeyPath:] + 36
6   UIKitCore                              0x196448c8c __67-[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:]_block_invoke_2 + 384
7   UIKitCore                              0x196448a3c -[_UIViewAdditiveAnimationAction runActionForKey:object:arguments:] + 1968
8   QuartzCore                             0x195704dec CA::Layer::set_bounds(CA::Rect const&, bool) + 436
9   QuartzCore                             0x195704c0c -[CALayer setBounds:] + 132
10  QuartzCore                             0x1957048ac -[CALayer setFrame:] + 416
11  UIKitCore                              0x1963102fc -[UIView _backing_setFrame:] + 240
12  UIKitCore                              0x19630e7e8 -[UIView(Geometry) setFrame:] + 296
13  UIKitCore                              0x19630fa38 -[UIImageView _setViewGeometry:forMetric:] + 160
14  UIKitCore                              0x196367104 -[UIButtonLegacyVisualProvider layoutSubviews] + 108
15  UIKitCore                              0x196367058 -[UIButton layoutSubviews] + 40
16  UIKitCore                              0x196329c04 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1528
17  QuartzCore                             0x19573c7ec CA::Layer::layout_if_needed(CA::Transaction*) + 500
18  UIKitCore                              0x19632ccb4 -[UIView(Hierarchy) layoutBelowIfNeeded] + 296
19  MyApp                                  0x10465973c __74-[KKAssetBrowseCollectionViewController willOpenAssetThumbnailCompletion:]_block_invoke + 328

I've also noticed other similar crash issues on Apple forums: EXC_BREAKPOINT - libobjc.A.dylib object_getClass Crash on the main thread. The author experienced this issue after iOS 16 and iOS 17, with very similar stack information to mine.

This issue has been troubling me for weeks, and I suspect other potential causes might include:

If you've encountered similar situations or can help identify potential causes, please advise. Many thanks!

Upvotes: 0

Views: 1122

Answers (0)

Related Questions