4

我有一个可执行文件,我正在使用 gdb 对其进行调试。这是我第一次使用 gdb,请多多包涵。

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

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

4

1 回答 1

8

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

@interface FooObject : NSObject
{
}

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

@end

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

(gdb) b *0x100000d54
Breakpoint 1 at 0x100000d54

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

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

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

于 2011-03-26T07:03:08.713 回答