下面的代码块是使用Cronet的iOS APP的崩溃堆栈。
我们试图根据最后一帧在源代码中找到确切的崩溃行,
我们可以看到,它是insert的功能,但并未在frame2(EntryImply :: InternalWriteData)中直接调用,
宁可在函数EntryImpl :: UserBuffer :: Write中调用,该函数在frame2中被调用,
但是Write函数没有出现在崩溃堆栈中,
lldb是否有可能将Write视为内联函数?
here is the source code of Write and InternalWriteData.
#19. Crashed: CacheThread_BlockFile
SIGSEGV 0x00000001242e57f7
0 libsystem_platform.dylib 0x22d376de4 _platform_memmove + 164
1 Meipai 0x103f2ec18
std::__1::enable_if<(__is_forward_iterator<char*>::value) && (is_constructible<char, ```
std::__1::iterator_traits<char*>::reference>::value), std::__1::__wrap_iter<char*> >::type std::__1::vector<char, std::__1::allocator<char> >::insert<char*>(std::__1::__wrap_iter<char const*>, char*, char*) + 18623032
2 Meipai 0x103f2f7b0 disk_cache::EntryImpl::InternalWriteData(int, int, net::IOBuffer*, int, base::OnceCallback<void (int)>, bool) + 18626000
3 Meipai 0x103f2f5bc disk_cache::EntryImpl::WriteDataImpl(int, int, net::IOBuffer*, int, base::OnceCallback<void (int)>, bool) + 18625500
4 Meipai 0x103f3b56c disk_cache::SparseControl::DoChildIO() + 18674572
5 Meipai 0x103f3a67c disk_cache::SparseControl::DoChildrenIO() + 18670748
6 Meipai 0x103f3a630 disk_cache::SparseControl::StartIO(disk_cache::SparseControl::SparseOperation, long long, net::IOBuffer*, int, base::OnceCallback<void (int)>) + 18670672
7 Meipai 0x103f2fc88 disk_cache::EntryImpl::WriteSparseDataImpl(long long, net::IOBuffer*, int, base::OnceCallback<void (int)>) + 18627240
8 Meipai 0x103f355e8 disk_cache::BackendIO::ExecuteEntryOperation() + 18650120
9 Meipai 0x103e509c4 base::TaskAnnotator::RunTask(char const*, base::PendingTask*) + 17713124
10 Meipai 0x103e5ffc0 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::sequence_manager::LazyNow*, bool*) + 17776096
11 Meipai 0x103e60408 non-virtual thunk to base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork() + 17777192
12 Meipai 0x103eba4c8 base::MessagePumpCFRunLoopBase::RunWork() + 18146024
这不是lldb回溯,这来自CrashReport,对吗? lldb不处理CrashReports,这是名为CoreSymbolication的组件的工作,该组件当前不处理内联代码。看起来在崩溃时CoreSymbolication找不到该二进制文件的dSYM,或者您至少会看到非内联框架的文件和行号。
lldb确实了解内联代码,并且将始终在回溯中显示内联帧堆栈。如果您手头有dSYM,则可以使用lldb来在发生故障后象征崩溃。在2018年有一个关于该主题的WWDC会议,您可能会觉得有用: