2011-07-20 82 views

回答

2
#define Debugger() { kill(getpid(), SIGINT) ; } 

然後,只需調用Debugger(),無論您想要放置斷點。

,如果你想跟蹤的堆棧你也可以引發一個異常:

[NSException raise:@"Exception Message" format:formatString]; 
+0

當您放置斷點時,您會做什麼? – Tyilo

6

我用的系統日誌和尾巴。你需要Cydia的syslogdErica Utilities。然後在整個調整的地方NSLog(@"breakpoint 1 - %@", someObject);並運行調整。

tail -f /var/log/syslog 
+0

錯字:'埃裏卡公用事業'。 ,P – Matoe

1

Mobilesubstrate將您的dylib注入到目標進程中。使用GDB或LLDB調試目標進程也在調試您的擴展代碼。 我將向您展示如何使用GDB調試Mobilesubstrate擴展。 下面是簡單的MobileSubstrate有/標誌擴展:

%hook SBApplicationController 
-(void)uninstallApplication:(id)application { 
    int i = 5; 
    i = i +7; 
    NSLog(@"Hey, we're hooking uninstallApplication: and number: %d", i); 
    %orig; // Call the original implementation of this method 
    return; 
} 
%end 

我編譯和安裝代碼,然後在GDB連接到它:

yaron-shanis-iPhone:~ root# ps aux | grep -i springboard 
mobile  396 1.6 4.3 423920 21988 ?? Ss 2:19AM 0:05.23 /System/Library/CoreServices/SpringBoard.app/SpringBoard 
root  488 0.0 0.1 273024 364 s000 S+ 2:22AM 0:00.01 grep -i springboard 
yaron-shanis-iPhone:~ root# gdb -p 488 

你可以找到你的MobileSubstrate有擴展使用以下命令:

(gdb) info sharedlibrary 

此命令打印已加載模塊的列表,找到您的擴展名:

test-debug-substrate.dylib   - 0x172c000   dyld Y Y /Library/MobileSubstrate/DynamicLibraries/test-debug-substrate.dylib at 0x172c000 (offset 0x172c000) 

您還可以找到標誌uninstallApplication掛鉤的地址:哪些輸出該

(gdb) info functions uninstallApplication 

0x0172cef0 _logos_method$_ungrouped$SBApplicationController$uninstallApplication$(SBApplicationController*, objc_selector*, objc_object*) 

可以調試與斷點和其他GDB的功能,您uninstallApplication鉤子函數:

(gdb) b *0x0172cef0+36 

其中偏移量36是程序集opcod e在uninstallApplication鉤子函數中將7添加到i變量中。只要您願意,您可以繼續從這裏調試您的Mobilesubstrate擴展。