'malloc_error_break'是否与底层内存损坏发生在同一线程上



我正在尝试调试我们的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

问题:

这是否保证底层内存损坏(例如双自由等)发生在与'malloc_zone_malloc'相同的线程上?或者至少malloc_error_break所引用的内存是分配在同一个线程上的?

知道这一点,将帮助我隔离崩溃从其他库的影响,NSURLConnection请求等。这个应用程序非常大,很难调试。

编辑:

我想我首先想知道的是更简单的东西。

在iOS中,不同的线程有不同的堆/malloc列表吗?

一旦发现内存损坏,就会调用malloc_error_break(),无论发现它的线程是什么。绝对不能保证这将是哪个线程。

在iOS中,不同的线程有不同的堆/malloc列表吗?

相关内容

  • 没有找到相关文章

最新更新