gpt4 book ai didi

iPhone 崩溃堆栈跟踪 VS 崩溃报告

转载 作者:行者123 更新时间:2023-12-03 19:06:07 31 4
gpt4 key购买 nike

刚刚花了一些时间......在崩溃上,但没有理解它。这真是经典:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000010

这导致我遇到内存问题,解决无效地址0x10

令我困扰的是我有崩溃报告和堆栈跟踪,它们不同:

<小时/>

崩溃报告,由用户发送(表示成功,发生了):

Thread 0 Crashed:
0 libobjc.A.dylib 0x000027d8 objc_msgSend + 16
1 UIKit 0x0005e9d2 -[UIViewAnimationState animationDidStop:finished:] + 54
2 QuartzCore 0x0002d8c2 run_animation_callbacks(double, void*) + 286
3 QuartzCore 0x0002d764 CA::timer_callback(__CFRunLoopTimer*, void*) + 116
4 CoreFoundation 0x000567f4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
5 CoreFoundation 0x000562a6 __CFRunLoopDoTimer + 854
6 CoreFoundation 0x0002779e __CFRunLoopRun + 1082
7 CoreFoundation 0x00027270 CFRunLoopRunSpecific + 224
8 CoreFoundation 0x00027178 CFRunLoopRunInMode + 52
9 GraphicsServices 0x000045ec GSEventRunModal + 108
10 GraphicsServices 0x00004698 GSEventRun + 56
11 UIKit 0x0000411c -[UIApplication _run] + 396
12 UIKit 0x00002128 UIApplicationMain + 664
13 MyApp 0x00003158 main (main.m:13)
14 MyApp 0x00003120 0x1000 + 8480
<小时/>

崩溃堆栈跟踪(由异常处理程序实时捕获)

0   MyApp                               0x000d79c3 0x0 + 883139
1 MyApp 0x000d790b 0x0 + 882955
2 libSystem.B.dylib 0x302765d3 _sigtramp + 42
3 UIKit 0x31eab9d9 -[UIViewAnimationState animationDidStop:finished:] + 60
4 QuartzCore 0x33a178c9 _ZL23run_animation_callbacksdPv + 292
5 QuartzCore 0x33a1776b _ZN2CAL14timer_callbackEP16__CFRunLoopTimerPv + 122
6 CoreFoundation 0x3084e7fb __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 14
7 CoreFoundation 0x3084e2ad __CFRunLoopDoTimer + 860
8 CoreFoundation 0x3081f7a5 __CFRunLoopRun + 1088
9 CoreFoundation 0x3081f277 CFRunLoopRunSpecific + 230
10 CoreFoundation 0x3081f17f CFRunLoopRunInMode + 58
11 GraphicsServices 0x31e445f3 GSEventRunModal + 114
12 GraphicsServices 0x31e4469f GSEventRun + 62
13 UIKit 0x31e51123 -[UIApplication _run] + 402
14 UIKit 0x31e4f12f UIApplicationMain + 670
15 MyApp 0x0000315f 0x0 + 12639
16 MyApp 0x00003128 0x0 + 12584

两者不同,堆栈跟踪指向我的代码中的崩溃,但在我既无法符号化也无法识别的地址。我认为崩溃报告表明一条消息已发送到已发布的实例...可能与以下内容的使用有关:

+ (void)setAnimationDelegate:(id)delegate
+ (void)setAnimationDidStopSelector:(SEL)selector

所以(最后!)我的问题是:

  1. 如何解释日志之间的差异? (libobjc.A vs libSystem.B ??)
  2. SIGBUS 来 self 的代码还是 UIKit?
  3. 如何破译堆栈跟踪高地址(0x000d79?,atos 无法解析)
  4. 这就是我所认为的与动画未能结束有关的问题吗?类似于此 > How to unset delegate on UIView setAnimationDelegate: call?
  5. 据我所知,setAnimationDelegate 应该保留委托(delegate)...有人确认吗?

编辑:我无法使用NSZombiesEnabled,这是来自已发布应用程序的崩溃报告,我无法在开发环境中重现崩溃。我只有这些日志可以诊断。

最佳答案

每当我在顶部看到 objc_msgSend 时,我对剩余堆栈的信任度就会很低,因为给出的错误往往会对堆栈造成不良影响。

GuardMalloc 对此很有用,因为尝试对已释放的空间执行任何操作都会使应用程序在调试器中立即崩溃。堆栈将完好无损。 (这使得应用程序非常慢,但它是一个非常强大的工具。)

直到 UIViewAnimationState 方法调用为止,两个堆栈都是相同的。来自异常处理程序的版本显示 C++ 损坏的名称,而不是崩溃日志中显示的常规名称。

(据我了解)_sigtramp 是系统调用信号处理程序的方法,是 Signal Trampoline 的缩写。除此之外的堆栈条目可能是您的信号处理程序代码。

关于iPhone 崩溃堆栈跟踪 VS 崩溃报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5510931/

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