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

use*_*064 4 debugging gdb objective-c symbol-table

我有一个可执行文件,我正在使用gdb进行调试.这是我第一次使用gdb,请耐心等待.

我想在函数中设置断点,我知道使用类转储的函数的名称.现在它不会让我为该函数添加断点,因为它说没有符号表.我尝试添加符号表但它仍然抱怨没有加载符号表.

那么,无论如何我可以在这种方法中设置一个断点吗?这是一个客观的c方法,而不是c(如果这有所不同).我需要做的就是检查这个方法的论点.

ken*_*ytm 8

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

@interface FooObject : NSObject
{
}

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

@end
Run Code Online (Sandbox Code Playgroud)

有了这个,你可以使用地址设置一个断点:

(gdb) b *0x100000d54
Breakpoint 1 at 0x100000d54
Run Code Online (Sandbox Code Playgroud)

请注意,除非您已删除可执行文件,否则应始终可以使用方法的名称设置断点

(gdb) b -[FooObject y]
Breakpoint 2 at 0x100000d60
Run Code Online (Sandbox Code Playgroud)

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

  • 使用class-dump-z -A我只需要VM偏移量,例如0x97179,我认为需要添加应用程序的基地址,如何在应用程序加载时获取基址? (4认同)