【问题标题】:Translating an iOS stack trace - SIGSEGV/SEGV_ACCERR on viewDidUnload翻译 iOS 堆栈跟踪 - viewDidUnload 上的 SIGSEGV/SEGV_ACCERR
【发布时间】:2012-10-24 15:44:34
【问题描述】:

我猜这个问题是一个生命周期问题。应用程序收到内存警告并尝试卸载一些用户界面项。但我不是 100% 确定如何在堆栈跟踪上最后报告的项目的上下文中解释错误。

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0xa0d9f968
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                     0x361dc026 objc_msgSend_stret + 18
1   TheApp                              0x000b4d31 -**[TheAppFeedController removeAdView]** (TheAppFeedController.m:**189**)
2   TheApp                              0x0000d68d -[TheAppViewController viewDidUnload] (TheAppViewController.m:177)
3   TheApp                              0x000b4a63 -[TheAppFeedController viewDidUnload] (TheAppFeedController.m:137)
4   UIKit                               0x32e66a37 -[UIViewController unloadViewForced:] + 251
5   UIKit                               0x32fae3ad -[UIViewController purgeMemoryForReason:] + 65

所以堆栈跟踪指向这个方法,这并没有真正意义为什么它会抛出这个错误。

-(void) removeAdView {
    [super removeAdView];
    [self fixLayoutForAdRemoval:self.tableView];
}

当您查看堆栈时,我注意到的一件事是 [super viewDidUnload] 被调用为第一行代码。因此,在完成所有“卸载”工作后,我将其移至底部。这是否真的重要,网上似乎有一些分歧,some SO answers 说超类的viewDidUnload 方法什么都不做,因此无论你在开头还是结尾调用它都没有关系。

所以我进行了更改,但由于我从未能够重现此错误,因此我不确定它是否是实际修复。想了解更多关于这个问题的意见,看看我的推理是否正确。

【问题讨论】:

  • 我不确定我是否理解:通过移动[super viewDidUnload],修复了崩溃;如果您将其恢复为第一行,则会发生崩溃;这是你说的吗?
  • 我提到我从未能够重现此错误。我正在通过 HockeyApp 从“野外”收到此崩溃日志......所以我希望为我们的客户解决这个问题
  • TheAppFeedController.m line 189 是哪一行?
  • 这很奇怪,189 是removeAdView 方法的右括号:-/

标签: objective-c ios segmentation-fault


【解决方案1】:
[super removeAdView];
[self fixLayoutForAdRemoval:self.tableView];

如果removeAdView 正在拆除自己的一部分;如果它导致self 被释放到释放点,那么随后对fixLayoutForAdRemoval: 的调用很容易失败。

在 Instruments 中打开僵尸检测,看看它检测到什么。

【讨论】:

  • 我的印象是在dealloc之后不会调用viewDidUnload。此外,僵尸没有透露任何内容……请记住,我无法在本地复制它;它只能通过生产中的崩溃日志报告 (hockeyapp) 检测到。
  • 啊——好的。 Hrm... 在优化的情况下,编译器有时会丢失行号,因此关闭的行号并非闻所未闻。如果崩溃日志包含正在运行的动态库列表,请检查它是否在越狱设备上。
  • 是否有我应该寻找的特定库以确定它是否在越狱设备上运行?
  • 通常,您会在 dylib 列表中看到 Cydia 或 libBac0n 之类的内容。或者奇怪地方的图书馆。
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2011-05-13
  • 1970-01-01
相关资源
最近更新 更多