我有一个可执行文件,我正在使用 gdb 对其进行调试。这是我第一次使用 gdb,请多多包涵。
我想在一个函数上设置一个断点,并且我知道使用类转储的函数的名称。现在它不允许我向该函数添加断点,因为它说没有符号表。我尝试添加符号表,但它仍然抱怨没有加载符号表。
那么,无论如何我可以在这种方法上设置断点吗?这是一种客观的 c 方法,而不是 c (如果这有所作为)。我需要做的就是检查这个方法的论点。
我有一个可执行文件,我正在使用 gdb 对其进行调试。这是我第一次使用 gdb,请多多包涵。
我想在一个函数上设置一个断点,并且我知道使用类转储的函数的名称。现在它不允许我向该函数添加断点,因为它说没有符号表。我尝试添加符号表,但它仍然抱怨没有加载符号表。
那么,无论如何我可以在这种方法上设置断点吗?这是一种客观的 c 方法,而不是 c (如果这有所作为)。我需要做的就是检查这个方法的论点。
在 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
(地址不一样,后者跳过了一些帧设置代码。)