GDB Objective-c调试(无符号表)

GDB Objective-c调试(无符号表),objective-c,debugging,gdb,symbol-table,Objective C,Debugging,Gdb,Symbol Table,我有一个可执行文件,我正在使用gdb调试它。这是我第一次使用gdb,请容忍我 我想在函数上设置一个断点,并且我知道使用类dump的函数名。现在它不允许我向那个函数添加断点,因为它说并没有符号表。我尝试添加符号表,但它仍然抱怨没有加载符号表 那么,我可以在这个方法中设置断点吗?这是一个客观的c方法,而不是c(如果这有区别的话)。我需要做的就是检查这个方法的参数。在类转储中有一个-A选项可以打印函数的地址,例如 @interface FooObject : NSObject { } - (void

我有一个可执行文件,我正在使用gdb调试它。这是我第一次使用gdb,请容忍我

我想在函数上设置一个断点,并且我知道使用类dump的函数名。现在它不允许我向那个函数添加断点,因为它说并没有符号表。我尝试添加符号表,但它仍然抱怨没有加载符号表


那么,我可以在这个方法中设置断点吗?这是一个客观的c方法,而不是c(如果这有区别的话)。我需要做的就是检查这个方法的参数。

在类转储中有一个-A选项可以打印函数的地址,例如

@interface FooObject : NSObject
{
}

- (void)y;  // IMP=0x100000d54

@end
使用此选项,您可以使用以下地址设置断点:

(gdb) b *0x100000d54
Breakpoint 1 at 0x100000d54
请注意,除非剥离了可执行文件,否则应该始终可以使用该方法的名称设置断点

(gdb) b -[FooObject y]
Breakpoint 2 at 0x100000d60

(地址与后者不同,后者跳过了一些帧设置代码。)

您如何调用GDB?命令行?谢谢,刚刚这么做了,虽然我将断点设置为0x00420d10,但它在“断点1,0x35af7d10”处停止。这不是我设定的断点吗?谢谢again@user:0x3xxxxxx将是某些Apple库的位置。你确定你已经清除了所有以前的断点吗?使用class-dump-z-A,我只保留VM偏移量,例如0x97179,我认为需要添加应用程序的基址,当应用程序加载时,我如何获得基址?@jim.huang:基址是0x1000,但使用ASLR(iOS 6):在gdb控制台提示中使用命令“info sharedLibrary”并在输出的最开始处获取地址。