Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EXC_BAD_ACCESS KERN_INVALID_ADDRESS for class method

I am seeing EXC_BAD_ACCESS KERN_INVALID_ADDRESS for class method.

From what I understand, I should not be seeing this for class/static methods.

Am I missing something?

Stack Trace:

Thread : Crashed: com.apple.root.user-initiated-qos

0 libobjc.A.dylib 0x0000000196eac0b4 objc_retain + 20

1 $APP_NAME 0x00000001002611a8 +[$CLASS_NAME $METHOD_NAME:] ($CLASS_NAME.m:590)

2 libdispatch.dylib 0x0000000197511994 _dispatch_call_block_and_release + 24

3 libdispatch.dylib 0x0000000197511954 _dispatch_client_callout + 16

4 libdispatch.dylib 0x000000019751e780 _dispatch_root_queue_drain + 1848

5 libdispatch.dylib 0x000000019751fc4c _dispatch_worker_thread3 + 108

6 libsystem_pthread.dylib 0x00000001976f121c _pthread_wqthread + 816

7 libsystem_pthread.dylib 0x00000001976f0ee0 start_wqthread + 4

like image 420
k-thorat Avatar asked Jan 08 '23 09:01

k-thorat


2 Answers

I have seen this crash a few times (with very similar, if not identical stack traces), and found that it had to do with a nonatomic property being set with a new object, while simultaneously being read.

That objc_retain +20 instruction turned out to be a call on the isa property of the object being read-- but at that point the object is already released and the isa pointer is changed to a bad address

I was able to debug my issue by following this blog post by Mike Ash: https://www.mikeash.com/pyblog/tales-from-the-crash-mines-issue-1.html

I would highly recommend reading the entire thing through-- it involves using the disassembler to debug, but it was definitely a lifesaver for us on multiple occasions

EDIT: Note that I am definitely not even 50% sure that this is your issue, but I hope that my anecdotal experience could save you some time. I know that I've spent many work weeks debugging issues that looked like this, but I still was never 100%

like image 136
A O Avatar answered Jan 17 '23 01:01

A O


This crash happen because of dangling pointer. For example, when variables or objects is trying to access an object that's already been de-allocated.

P.S: Most people might be confused about "memory leak" and "dangling pointer"

Dangling pointer occurs when a pointer references memory that has been de-allocated. Memory Leak occurs when memory is still allocated but nothing references it.

like image 31
noobsee Avatar answered Jan 17 '23 02:01

noobsee