Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the meaning of the EXC_BREAKPOINT code and subcode?

Usually when I set lldb watchpoints, when they're hit, lldb says watchpoint hit old value: new value. However, I set a watchpoint on an address that seems to be getting written to inside a 3rd party library (libjpeg-turbo) and instead of the usual watchpoint hit, I'm seeing EXC_BREAKPOINT code=258, subcode=0xADDRESS.

In all cases, I can see that the subcode must be the address, as it's always equal to the address or close to the one I set the watchpoint to. Can anyone confirm this?

If I delete the watchpoint and keep going, lldb won't pause with EXC_BREAKPOINT. But what does the code mean and where can I find some offical documentation on this?

The exc_types.h doesn't give any detailed information on it.

like image 562
Joey Carson Avatar asked Oct 18 '25 15:10

Joey Carson


1 Answers

For anyone who is interested in this question there is a nice article about the topic:

Understanding iOS Exception Types


In all cases, I can see that the subcode must be the address, as it's always equal to the address or close to the one I set the watchpoint to. Can anyone confirm this?

There is not much information in exception_types.h headers:

open -t /Applications/Xcode.app//Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/mach/exception_types.h

I can confirm that I always see EXC_BREAKPOINT to have address in subcode.

However other types in the header say that subcode can have different kinds of information:

#define EXC_EMULATION       4   /* Emulation instruction */
  /* Emulation support instruction encountered */
  /* Details in code and subcode fields */

We had to investigate on one Swift crash that produced: EXC_BREAKPOINT. In our case it boiled down to Swift type coercions. Both of the following cause EXC_BREAKPOINT on ARM devices:

func test_crash() {
  let num = Int(DBL_MAX)
}

func test_crash_2() {
  let num = Int(Double(0) / Double(0))
}

In both of these cases EXC_BREAKPOINT has a subcode with an address which is the address of sbrk instruction if you look at the assembly.

like image 111
Stanislav Pankevich Avatar answered Oct 21 '25 07:10

Stanislav Pankevich



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!