I just started working in a new project using ARC and the dot notation (well, I did some dot notation but in this case, I'm not sure if that's the problem or not), and I'm trying (I say trying) to use llvm to debug.
I have a stupid piece of code (getter) that checks if a instance variable is nil as follow:
- (NSDictionary *)infoPListDict { if (self.infoPListDict == NULL) { NSString *mainBundlePath = [[NSBundle mainBundle] bundlePath]; NSString *plistPath = [mainBundlePath stringByAppendingPathComponent:@"Info.plist"]; self.infoPListDict = [[NSDictionary dictionaryWithContentsOfFile:plistPath] copy]; NSLog(@"infoPListDict: '%@'", self.infoPListDict); } return self.infoPListDict; }
The property is declared as follow: @property (nonatomic, strong, getter=infoPListDict) NSDictionary *infoPListDict; // used by ECXNavigationController
and synthesize as: @synthesize infoPListDict = _infoPListDict;
The stupid problem I'm having is that I set a breakpoint at if (self.infoPListDict == NULL). When I try to step over that instruction, I drop into some low-level assembler and the debugger just get stuck there, at 0x20c2: 0x20c0: pushl $0 0x20c2: movl %esp, ëp 0x20c4: andl $240, %esp 0x20c7: subl $16, %esp 0x20ca: movl 4(ëp), ëx 0x20cd: movl ëx, (%esp) 0x20d0: leal 8(ëp), ìx 0x20d3: movl ìx, 4(%esp) 0x20d7: addl $1, ëx 0x20da: shll $2, ëx 0x20dd: addl ìx, ëx 0x20df: movl ëx, 8(%esp) 0x20e3: movl (ëx), êx 0x20e5: addl $4, ëx 0x20e8: testl êx, êx 0x20ea: jne 0x20e3 ; start + 35 0x20ec: movl ëx, 12(%esp) 0x20f0: calll 0x2810 ; main at main.m:11 0x20f5: movl êx, (%esp) 0x20f8: calll 0x319ec4 ; exit 0x20fd: hlt
No matter what I do it is just stuck there. There are no exception or error reported. I just don't understand how such a basic thing is failing.
What am I missing? -Laurent. -- Laurent Daudelin
|