Hi,
I have a packet tunnel provider that crashs randomly with SIGABRT in AutoreleasePoolPage::pop(). The problem is that since it is launched by the system, there isn't any useful crash details in the lldb window nor can i enable the enviroment variables needed for memory debugging.
I've looked into trying to narrow it down in my code but after 2 weeks, I still haven't identified the root cause. Are there any tools/techniques that I can use to pinpoint this autorelease issue?
Additional details:
1. Call stack:
#0 0x0000000183a992ec in __pthread_kill ()
#1 0x0000000183c3e6a8 in pthread_kill$VARIANT$armv81 ()
#2 0x0000000183a07d0c in abort ()
#3 0x0000000183ad1838 in free ()
#4 0x00000001831ea13c in (anonymous namespace)::AutoreleasePoolPage::pop(void*) ()
#5 0x0000000102da2a90 in <this is my code>
2. "po $arg1" doesn't work on frames #3 and #4. To get to the 1st arg, it looks like the call to pop() passes in the (void*) as follows:
0x102da2a88 <+504>: ldur x0, [x29, #-0x58]
0x102da2a8c <+508>: bl 0x1034ab69c ; symbol stub for: objc_autoreleasePoolPop
IIUC, i need to take $x29 and subtract 0x58, then that memory location is loaded into $x0:
(lldb) x/1 ($x29-0x58)
0x16dd92a78: 0x0b204138
However, 0xb204000 doesn't look like any of the other heap addresses, so this doesn't look like the thing getting freed.
At this point, I'm pretty stuck. Any help would be greatly appreciated.