[lldb-dev] how to intercept EXC_BAD_ACCESS?

Greg Clayton gclayton at apple.com
Mon Feb 3 11:37:02 PST 2014


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.

Greg



On Jan 31, 2014, at 10:24 PM, Jun Koi <junkoi2004 at gmail.com> wrote:

> hi,
> 
> 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?
> 
> thanks.
> Jun
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev




More information about the lldb-dev mailing list