我很难弄清在哨兵和速成问题上遇到的这个问题。我不确定如何复制该错误,并且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
答案 0 :(得分:0)
我第一次尝试回答的内容不够详尽,无法提供帮助-我很抱歉。让我们再试一次。
基于应用程序特定的信息Attempted to dereference garbage pointer
,以及分配器中只有几帧的事实,我认为您正在遇到堆损坏。这类崩溃真的很难调试。
堆损坏(这是内存损坏的一种具体情况)可能很难找到。主要原因是堆栈跟踪通常根本无法捕获损坏源。通常,崩溃只是症状。
您甚至无法确定TwilioChatClient库是否负责。对于不相关的系统,完全有可能并且仅覆盖Twilio使用的一点内存。更糟糕的是,这可能早于现在无效的内存被使用之前就发生了。
在这些情况下,我通常建议:
Zombies
很难(甚至常常不可能)推断堆损坏。复制该错误也可能是不可能的,因为内存损坏崩溃通常不是确定性的。
因此,只需尝试查找并修复尽可能多的问题。完全有可能其中之一是导致各种崩溃的原因,其中之一可能就是这种崩溃。
答案 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)
}