我正在尝试调试我们的 iOS 应用程序中偶尔发生的崩溃。
我们得到“malloc_error_break”和通常的“对象在被释放后被修改”。崩溃发生在同一个 C 库中,但在不同的 malloc 位置。
回溯的顶部如下所示:
* thread #29: tid = 0x3a03, 0x32c8cfa8 libsystem_c.dylib`malloc_error_break, stop reason = breakpoint 1.1
frame #0: 0x32c8cfa8 libsystem_c.dylib`malloc_error_break
frame #1: 0x32c71ed0 libsystem_c.dylib`szone_error + 220
frame #2: 0x32c71f1c libsystem_c.dylib`free_list_checksum_botch + 28
frame #3: 0x32c1d3bc libsystem_c.dylib`tiny_malloc_from_free_list + 348
frame #4: 0x32c1c44a libsystem_c.dylib`szone_malloc_should_clear + 1274
frame #5: 0x32c1bf1e libsystem_c.dylib`malloc_zone_malloc + 66
问题:
这是否保证底层内存损坏(fi double free 等)发生在与“malloc_zone_malloc”相同的线程上?或者至少 malloc_error_break 所指的内存是在同一个线程上分配的?
肯定地知道这一点,将帮助我将崩溃与其他库、NSURLConnection 请求等的影响隔离开来。该应用程序非常大,而且调试起来也很困难,因为它是。
编辑:
我想我首先想知道的是更简单的东西。
不同的线程在 iOS 中有不同的堆/malloc 列表吗?