【问题标题】:GDB Objective-c debugging (no symbol table)GDB Objective-c 调试(无符号表)
【发布时间】:2011-03-26 06:56:39
【问题描述】:

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

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

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

【问题讨论】:

  • 你是如何调用 GDB 的?命令行?

标签: objective-c debugging gdb symbol-table


【解决方案1】:

在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

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

【讨论】:

  • 谢谢,刚刚做了,虽然我将断点设置在 0x00420d10,但它停在了“断点 1, 0x35af7d10”。这不是我设置的断点吗?再次感谢
  • @user: 0x3xxxxxxx 将是一些 Apple 库的位置。你确定你已经清除了之前的所有断点吗?
  • 使用 class-dump-z -A 我只获取 VM 偏移量,例如 0x97179,我认为需要添加应用程序的基地址,当应用程序加载时如何获取基地址?
  • @jim.huang:基地址为 0x1000,但使用 ASLR (iOS 6):在 gdb 控制台提示符下使用命令“info sharedLibrary”并在输出的最开头获取地址。跨度>
猜你喜欢
  • 2011-10-26
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
相关资源
最近更新 更多