It's difficult to trace every function call made by a program -- solutions like frida-trace
can only handle so many hooks before they crash. This explores using LLDB as a more reliable alternative for bulk tracing.
(It's slow)
main(0x1f29b8740, 0x0, "convert", 0x16fdfef18)
_objc_msgSend_uncached(0x1f29b8740, "stringWithUTF8String:", 0x1f29b9b18, 0x3)
lookUpImpOrForward(0x1f29b9b18, "stringWithUTF8String:", 0x1f29b9b18, 0x3)
lookUpImpOrForward(0x1f29b9b18, "stringWithUTF8String:", 0x0, 0x3)
dataSegmentsContain(objc_class*)(0x1f29b9b18, 0x16fdfe89c, 0x0, 0x3)
lookUpImpOrForward(0x1f29b8740, 0x1f29b9b18, 0x1, 0x3)
initializeAndMaybeRelock(objc_class*, objc_object*, locker_mixin<lockdebug::lock_mixin<objc_lock_base_t>>&, bool)(0x1f29b9b18, 0x1f29b8740, 0x1, 0x3)
getMaybeUnrealizedNonMetaClass(objc_class*, objc_object*)(0x1f29b8740, 0x1f29b8740, 0x1, 0x3)
initializeAndMaybeRelock(objc_class*, objc_object*, locker_mixin<lockdebug::lock_mixin<objc_lock_base_t>>&, bool)(0x1f29b8740, 0x1f29b8740, 0x1, 0x3)
initializeNonMetaClass(0x1f29b8740, 0x1f29b8740, 0x1, 0x3)
_objc_sync_enter_kind(0x1f29b9b18, 0x2, 0x0, 0x3)
id2data(objc_object*, SyncKind, usage)(0x0, 0x2, 0x0, 0x3)
id2data(objc_object*, SyncKind, usage)(0x16fdfe788, 0x40, 0x40, 0x10a0040571a19fa)
tiny_memalign(0x10002c080, 0x8, 0x0, 0x7f)
tiny_malloc_should_clear(0x10002c080, 0x8, 0x0, 0x7f)
tiny_malloc_should_clear(0x10002c080, 0x100037200, 0x0, 0x8)
tiny_malloc_should_clear(0x100000, 0x14, 0x100, 0x7)
mvm_allocate_pages_plat(0x203, 0x16fdfe588, 0x100000, 0xfffff)
mach_vm_map(0x203, 0x16fdfe588, 0x100000, 0xfffff)
tiny_malloc_should_clear(0x10002c080, 0x143100000, 0x143100000, 0x100000)
tiny_malloc_should_clear(0x143104080, 0x8, 0x143100000, 0x100000)
tiny_memalign(0x1431040c0, 0x4, 0x143100000, 0x100000)
tiny_memalign(0x10002c080, 0x1431040c0, 0x143100000, 0x40)
free_tiny(0x1431040c0, 0x0, 0x40, 0x40)
free_tiny(0x10002c080, 0x100037200, 0x4, 0x143100000)
tiny_free_no_lock(0x1431040c0, 0x100037200, 0x4, 0x143100000)
tiny_free_no_lock(0x10002c080, 0x100037200, 0x1431040c0, 0x4)
initializeNonMetaClass(0x16fdfe820, 0x1f089c208, 0x0, 0x103)
_setThisThreadIsInitializingClass(objc_class*)(0x1, 0x1f089c208, 0x0, 0x16fdfe820)
initializeNonMetaClass(0x1f29b8740, 0x1f089c208, 0x0, 0x16fdfe820)
CALLING_SOME_+initialize_METHOD(0x1f29b8740, "initialize", 0x0, 0x16fdfe820)
_objc_msgSend_uncached(0x1f29b8740, "initialize", 0x1f29b9b18, 0x3)
lookUpImpOrForward(0x1f29b8740, 0x1f29b9b18, 0x1, 0x3)
initializeAndMaybeRelock(objc_class*, objc_object*, locker_mixin<lockdebug::lock_mixin<objc_lock_base_t>>&, bool)(0x1f29b9b18, 0x1f29b8740, 0x1, 0x3)
getMaybeUnrealizedNonMetaClass(objc_class*, objc_object*)(0x1f29b8740, 0x1f29b8740, 0x1, 0x3)
initializeAndMaybeRelock(objc_class*, objc_object*, locker_mixin<lockdebug::lock_mixin<objc_lock_base_t>>&, bool)(0x1f29b8740, 0x1f29b8740, 0x1, 0x3)
initializeNonMetaClass(0x1f29b8740, 0x1f29b8740, 0x1, 0x3)
_objc_sync_enter_kind(0x1f29b9b18, 0x2, 0x0, 0x3)
_objc_sync_exit_kind(0x1f29b9b18, 0x2, 0x1, 0x103)
_objc_sync_exit_kind(0x143104098, 0x2, 0x1, 0x103)
lookUpImpOrForward(0x1f29b9b18, 0x2, 0x1, 0x103)
lookUpImpOrForward(0x1f29b9b18, "initialize", 0x1f381bae8, 0x103)
lookUpImpOrForward(0x18fed53bd, 0x0, "dyld_v1 arm64e", 0x2a7bb8000)
method_t::imp(bool) const(0x18fed53bd, 0x0, "dyld_v1 arm64e", 0x2a7bb8000)
+[NSString initialize](0x1f29b8740, "initialize", 0x0, 0x16fdfe820)
_objc_msgSend_uncached(0x1f29b8740, "class", 0x1f29b9b18, 0x3)
lookUpImpOrForward(0x1f29b8740, 0x1f29b9b18, 0x1, 0x3)
initializeAndMaybeRelock(objc_class*, objc_object*, locker_mixin<lockdebug::lock_mixin<objc_lock_base_t>>&, bool)(0x1f29b9b18, 0x1f29b8740, 0x1, 0x3)
getMaybeUnrealizedNonMetaClass(objc_class*, objc_object*)(0x1f29b8740, 0x1f29b8740, 0x1, 0x3)
initializeAndMaybeRelock(objc_class*, objc_object*, locker_mixin<lockdebug::lock_mixin<objc_lock_base_t>>&, bool)(0x1f29b8740, 0x1f29b8740, 0x1, 0x3)
initializeNonMetaClass(0x1f29b8740, 0x1f29b8740, 0x1, 0x3)
_objc_sync_enter_kind(0x1f29b9b18, 0x2, 0x0, 0x3)
_objc_sync_exit_kind(0x1f29b9b18, 0x2, 0x1, 0x103)
_objc_sync_exit_kind(0x143104098, 0x2, 0x1, 0x103)
lookUpImpOrForward(0x1f29b9b18, 0x2, 0x1, 0x103)
lookUpImpOrForward(0x1f29b9b18, "class", 0x1f381bae8, 0x103)
lookUpImpOrForward(0x1f29942e0, "class", 0x0, 0x2a7bb8000)
lookUpImpOrForward(0x1f29942e0, "class", 0x0, 0x2a7bb8000)
lookUpImpOrForward(0x18debdb9d, 0x0, 0x3, 0xffffffff)
method_t::imp(bool) const(0x18debdb9d, 0x0, 0x3, 0xffffffff)
+[NSString initialize](0x1f29b8740, "class", 0x0, 0x16fdfe820)
_NSDefaultCStringEncoding(0x1f29b8740, "class", 0x0, 0x16fdfe820)
_NSDefaultCStringEncoding(0x0, "class", 0x0, 0x16fdfe820)
_NSDefaultCStringEncoding(0x18fdf5d9c, "class", 0x0, 0x16fdfe820)
+[NSString initialize]("NSTaggedPointerString", "class", 0x0, 0x16fdfe820)
look_up_class("NSTaggedPointerString", "class", 0x0, 0x16fdfe820)