I included the iOS tag, but I'm running in the simulator on a Core i7 MacBook Pro (x86-64, right?), so I think that's immaterial.
I'm currently debugging a crash in Flurry's video ads. I have a breakpoint set on Objective-C exceptions. When the breakpoint is hit I am in objc_msgSend
. The callstack contains a mix of private Flurry and iOS methods, nothing public and nothing that I've written. Calling register read
from the objc_msgSend
stack frame outputs the following:
(lldb) register readGeneral Purpose Registers: eax = 0x1ac082d0 ebx = 0x009600b5 "spaceWillDismiss:interstitial:" ecx = 0x03e2cddb "makeKeyAndVisible" edx = 0x0000003f edi = 0x0097c6f3 "removeWindow" esi = 0x00781e65 App`-[FlurryAdViewController removeWindow] + 12 ebp = 0xbfffd608 esp = 0xbfffd5e8 ss = 0x00000023 eflags = 0x00010202 App`-[FeedTableCell setupVisibleCommentAndLike] + 1778 at FeedTableCell.m:424 eip = 0x049bd09b libobjc.A.dylib`objc_msgSend + 15 cs = 0x0000001b ds = 0x00000023 es = 0x00000023 fs = 0x00000000 gs = 0x0000000f
I've got a few questions about this output.
- I assumed $ebx contains the selector that caused the crash and $edi is the last executing method. Is that the case?
- $eip is where I crashed. Is that usually the case?
- $eflags references an instance method that, as far as I know, has nothing to do with this crash. What is that?
- Is there any other information I can pry out of these registers?