什么是调试MobileSubstrate扩展的最佳方法,例如放置断点等?在Xcode中有没有这样做的方法?GNU Debugger?
什么是调试MobileSubstrate扩展的最佳方法,例如放置断点等?在Xcode中有没有这样做的方法?GNU Debugger?
我使用syslog和tail。你需要从Cydia安装syslogd和Erica Utilities。然后在你的tweak中加入NSLog(@"breakpoint 1 - %@", someObject);
并运行该tweak。
tail -f /var/log/syslog
#define Debugger() { kill( getpid(), SIGINT ) ; }
当你想要设置断点的时候,只需要在任何地方调用Debugger()即可。
如果你想要跟踪堆栈,也可以抛出异常:
[NSException raise:@"Exception Message" format:formatString];
%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
(gdb) info sharedlibrary
test-debug-substrate.dylib - 0x172c000 dyld Y Y /Library/MobileSubstrate/DynamicLibraries/test-debug-substrate.dylib at 0x172c000 (offset 0x172c000)
(gdb) info functions uninstallApplication
0x0172cef0 _logos_method$_ungrouped$SBApplicationController$uninstallApplication$(SBApplicationController*, objc_selector*, objc_object*)
您可以使用断点和其他GDB功能来调试您的uninstallApplication挂钩函数:
(gdb) b *0x0172cef0+36
偏移量36是在卸载应用程序钩子函数中将i变量加7的汇编操作码。您可以随意从这里继续调试Mobilesubstrate扩展。