Thanks for the reminder again, the reason I couldn't run lldb's before was because the version of python I installed didn't match, now it works fine! I get the following error using the lldb debugger:
(lldb) Process 2444 launched: 'C:\demo/test.exe' (x86_64) Process 2444 stopped * thread #1, stop reason = Exception 0xc0000005 encountered at address 0x7ff88ae8d14a: Access violation reading location 0x000001a0 frame #0: 0x00007ff88ae8d14a objc.dll`objc_msgSend + 70 objc.dll`objc_msgSend: -> 0x7ff88ae8d14a <+70>: movq 0x8(%r10,%rbx,8), %r10 0x7ff88ae8d14f <+75>: movzbl %al, %ebx 0x7ff88ae8d152 <+78>: movq -0x8(%rsp), %rax 0x7ff88ae8d157 <+83>: movq 0x8(%r10,%rbx,8), %r10
|
Based on the debugging information I've determined that it's because of a pointer error, but I've checked that my code doesn't use pointers incorrectly, and the debugging information mentions objc_xxx, which suggests that it's an error in the objc itself possiblely. After testing the objc_ related runtime function really does not work properly, the test code and test results are as follows:
@interface LayoutManager : NSObject - (void)display; @end
@implementation LayoutManager - (void)display { printf("LayoutManager::display\n"); } @end
void test() {
}
int main() { // LayoutManager *relative = [[LayoutManager alloc]init]; // [relative display];
id aClassFromName = objc_getClass("LayoutManager"); NSLog(@"aClass = %@", aClassFromName); //! null id aClassFromClass = [NSArray class]; //! error NSLog(@"aClass = %@", aClassFromClass); // Never go through here.
return 0; } |
China Guy.