我有一個可執行文件,我正在使用gdb進行調試。這是我第一次使用gdb,請耐心等待。GDB Objective-c調試(無符號表)
我想在函數中設置一個斷點,我知道使用類轉儲的函數的名稱。現在它不會讓我爲該函數添加斷點,因爲它表示沒有符號表。我試圖添加符號表,但它仍然抱怨沒有符號表加載。
那麼,有什麼方法可以在此方法中設置斷點?這是一個客觀的c方法,而不是c(如果這有所影響)。我需要做的就是檢查這種方法的論點。
我有一個可執行文件,我正在使用gdb進行調試。這是我第一次使用gdb,請耐心等待。GDB Objective-c調試(無符號表)
我想在函數中設置一個斷點,我知道使用類轉儲的函數的名稱。現在它不會讓我爲該函數添加斷點,因爲它表示沒有符號表。我試圖添加符號表,但它仍然抱怨沒有符號表加載。
那麼,有什麼方法可以在此方法中設置斷點?這是一個客觀的c方法,而不是c(如果這有所影響)。我需要做的就是檢查這種方法的論點。
在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
(地址是不一樣的,因爲後者會跳過一些幀的設置代碼。)
謝謝,剛纔那樣做,雖然我將斷點設置爲0x00420d10,但它停在「斷點1,0x35af7d10」處。這不是我設定的轉折點?再次感謝 – user635064 2011-03-26 07:17:29
@user:0x3xxxxxxx將是某些Apple庫的位置。你確定你已經清除了以前的所有破發點嗎? – kennytm 2011-03-26 07:24:29
使用class-dump-z -A我只能得到VM偏移量,例如,我認爲需要在應用程序的基址中添加例如xx97179,如何在應用程序加載時獲取基址? – 2012-02-28 03:53:10
了,喲你用-g編譯? – 2011-03-26 07:01:47
你是如何調用GDB的?命令行? – 2011-03-26 07:03:01