how to intercept EXC_BAD_ACCESS?


i am writing some simple Python script to intercept EXC_BAD_ACCESS error. i only know “stop-hook” that can be used to intercept breakpoint, but have no idea how to intercept EXC_BAD_ACCESS.

any hint please?



Each time a thread stops, it either has a reason for stopping (breakpoint, watchpoint, exception, etc), or it doesn't (just stopped because other threads stopped).

You will need to check the thread stop reason for each thread when a process stops. Below the code will check for

process = ...

for thread in process:
    if thread.GetStopReason() == lldb.eStopReasonException:
        if thread.GetStopReasonDataAtIndex(0) == 1: # EXC_BAD_ACCESS
      stop_description = thread.GetStopDescription()
            print "got EXC_BAD_ACCESS on thread %s: %s" % (thread, stop_description)

EXC_BAD_ACCESS isn't represented as a mach exception, it is just represented as an exception that has data. The "stop_description" should contain EXC_BAD_ACCESS in the text for mach based platforms, but really we just want the user to know that an exception happened and to be able to get to any data the exception generates on the current system. thread.GetStopReasonDataAtIndex(<index>) will return data for the exception like the address and any other data that the system returns. So this is an abstract way to represent exceptions on any system, yet still get to the underlying data.