iOS EXC_BAD_ACCESS尝试取消引用垃圾指针TwilioPoco

时间:2018-08-21 00:18:04

标签: ios twilio

我很难弄清在哨兵和速成问题上遇到的这个问题。我不确定如何复制该错误,并且stacktrace对我来说有点神秘。有人有什么主意吗?

OS Version: iOS 11.4.1 (15G77)
Report Version: 104

Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: BUS_NOOP at 0x0000000102cb2c30
Crashed Thread: 8

Application Specific Information:
Final state > onDisconnectedImpl >>  > pMethodNf > src/ActiveDispatcher.cpp >
Attempted to dereference garbage pointer 0x102cb2c30.

Thread 8 Crashed:
0   <unknown>                       0x102cb2c30         _ZTVNSt3__120__shared_ptr_emplaceIN5boost4asio20basic_waitable_timerINS_6chrono12steady_clockENS2_11wait_traitsIS5_EENS2_22waitable_timer_serviceIS5_S7_EEEENS_9allocatorISA_EEEE
1   TwilioChatClient                0x102a81588         rtd::TNTwilsockClient::onDisconnectedImpl(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<rtd::TNTwilsockClient> > const&)
2   TwilioChatClient                0x102a9397c         TwilioPoco::ActiveRunnable<void, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<rtd::TNTwilsockClient> >, rtd::TNTwilsockClient>::run()
3   TwilioChatClient                0x1027fb47c         TwilioPoco::ActiveDispatcher::run()
4   TwilioChatClient                0x1027f802c         TwilioPoco::ThreadImpl::runnableEntry(void*)
5   libsystem_pthread.dylib         0x3037d8220         <redacted>
6   libsystem_pthread.dylib         0x3037d8110         _pthread_start

2 个答案:

答案 0 :(得分:0)

我第一次尝试回答的内容不够详尽,无法提供帮助-我很抱歉。让我们再试一次。

基于应用程序特定的信息Attempted to dereference garbage pointer,以及分配器中只有几帧的事实,我认为您正在遇到堆损坏。这类崩溃真的很难调试。

堆损坏(这是内存损坏的一种具体情况)可能很难找到。主要原因是堆栈跟踪通常根本无法捕获损坏源。通常,崩溃只是症状。

您甚至无法确定TwilioChatClient库是否负责。对于不相关的系统,完全有可能并且仅覆盖Twilio使用的一点内存。更糟糕的是,这可能早于现在无效的内存被使用之前就发生了。

在这些情况下,我通常建议:

  • 寻找其他与内存损坏相关的崩溃
  • 在Instruments中尝试Zombies
  • 尝试使用malloc scribble或guardmalloc,这是另外两个不错的内存调试工具

很难(甚至常常不可能)推断堆损坏。复制该错误也可能是不可能的,因为内存损坏崩溃通常不是确定性的。

因此,只需尝试查找并修复尽可能多的问题。完全有可能其中之一是导致各种崩溃的原因,其中之一可能就是这种崩溃。

答案 1 :(得分:0)

由于在 NSLocalizedString 中使用了不正确的类型,我遇到了同样的问题。

static func errorCodeFormatter(_ errcode: Int) -> String {
   let formatter = NSLocalizedString("Error (%@)", comment: "comment")
   return String(format: formatter, errcode)
}

调用此函数将崩溃并显示相同的错误消息。解决的办法是把errCode改成String,或者把string param改成@d

所以下面的任一选项都为我解决了这个问题:

static func errorCodeFormatter(_ errcode: String) -> String {
   let formatter = NSLocalizedString("Error (%@)", comment: "comment")
   return String(format: formatter, errcode)
}

或者:

static func errorCodeFormatter(_ errcode: Int) -> String {
   let formatter = NSLocalizedString("Error (%d)", comment: "comment")
   return String(format: formatter, errcode)
}