2011-03-26 58 views
4

我有一個可執行文件,我正在使用gdb進行調試。這是我第一次使用gdb,請耐心等待。GDB Objective-c調試(無符號表)

我想在函數中設置一個斷點,我知道使用類轉儲的函數的名稱。現在它不會讓我爲該函數添加斷點,因爲它表示沒有符號表。我試圖添加符號表,但它仍然抱怨沒有符號表加載。

那麼,有什麼方法可以在此方法中設置斷點?這是一個客觀的c方法,而不是c(如果這有所影響)。我需要做的就是檢查這種方法的論點。

+0

了,喲你用-g編譯? – 2011-03-26 07:01:47

+0

你是如何調用GDB的?命令行? – 2011-03-26 07:03:01

回答

8

在class-dump中有一個-A選項可以打印函數的地址,例如,

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

需要注意的是,除非你已經剝去了可執行文件,你應該總是可以使用該方法的名稱設置一個斷點:

@interface FooObject : NSObject 
{ 
} 

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

@end 

有了這個,你可以使用的地址設置一個斷點

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

(地址是不一樣的,因爲後者會跳過一些幀的設置代碼。)

+0

謝謝,剛纔那樣做,雖然我將斷點設置爲0x00420d10,但它停在「斷點1,0x35af7d10」處。這不是我設定的轉折點?再次感謝 – user635064 2011-03-26 07:17:29

+0

@user:0x3xxxxxxx將是某些Apple庫的位置。你確定你已經清除了以前的所有破發點嗎? – kennytm 2011-03-26 07:24:29

+4

使用class-dump-z -A我只能得到VM偏移量,例如,我認爲需要在應用程序的基址中添加例如xx97179,如何在應用程序加載時獲取基址? – 2012-02-28 03:53:10