diff --git a/bin/Rakefile b/bin/Rakefile index 1d826d30..5a1392d7 100644 --- a/bin/Rakefile +++ b/bin/Rakefile @@ -9,15 +9,15 @@ task :files do end task :deploy do - if !File.exist?('deploy') or File.mtime('deploy.m') > File.mtime('deploy') - sh "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -mmacosx-version-min=10.6 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -I./src -std=c99 -Wall -O3 deploy.m -o deploy -framework Foundation" + if !File.exist?('deploy') or File.mtime('deploy.m') > File.mtime('deploy') or File.mtime('builtin_debugger_cmds.h') > File.mtime('deploy') + sh "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -mmacosx-version-min=10.6 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -I./src -std=c99 -Wall -O3 deploy.m -o deploy -framework Foundation -I." sh "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip -x deploy" end end task :sim do - if !File.exist?('sim') or File.mtime('sim.m') > File.mtime('sim') - sh "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -mmacosx-version-min=10.6 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -I./src -std=c99 -Wall -O3 sim.m -o sim -framework Foundation -framework ApplicationServices -ledit" + if !File.exist?('sim') or File.mtime('sim.m') > File.mtime('sim') or File.mtime('builtin_debugger_cmds.h') > File.mtime('sim') + sh "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -mmacosx-version-min=10.6 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -I./src -std=c99 -Wall -O3 sim.m -o sim -framework Foundation -framework ApplicationServices -ledit -I." sh "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip -x sim" end end diff --git a/bin/builtin_debugger_cmds.h b/bin/builtin_debugger_cmds.h new file mode 100644 index 00000000..53cded86 --- /dev/null +++ b/bin/builtin_debugger_cmds.h @@ -0,0 +1,31 @@ + +#define cmd_pro ""\ + "if $argc != 1\n"\ + "help print-ruby-object\n"\ + "else\n"\ + "po rb_inspect($arg0)\n"\ + "end\n" + +#define cmd_pri ""\ + "if $argc == 1\n"\ + "po rb_inspect((void *)rb_ivar_get(self, (void *)rb_intern($arg0)))\n" \ + "else\n"\ + "if $argc == 2\n"\ + "po rb_inspect((void *)rb_ivar_get($arg0, (void *)rb_intern($arg1)))\n" \ + "else\n"\ + "help print-ruby-ivar\n"\ + "end\n"\ + "end\n" + +#define BUILTIN_DEBUGGER_CMDS ""\ + "define print-ruby-object\n" cmd_pro "end\n"\ + "define pro\n" cmd_pro "end\n"\ + "document print-ruby-object\n"\ + "print-ruby-object(obj): inspects the given 'obj'\n"\ + "end\n"\ + "define print-ruby-ivar\n" cmd_pri "end\n"\ + "define pri\n" cmd_pri "end\n"\ + "document print-ruby-ivar\n"\ + "print-ruby-ivar(name): inspects the given instance variable 'name' on self\n"\ + "print-ruby-ivar(rcv, name): inspects the given instance variable 'name' on 'rcv'\n"\ + "end\n" diff --git a/bin/deploy.m b/bin/deploy.m index 98fe3bf8..d39efac9 100644 --- a/bin/deploy.m +++ b/bin/deploy.m @@ -1,5 +1,6 @@ #import #include +#include "builtin_debugger_cmds.h" typedef void *am_device_t; typedef void *afc_conn_t; @@ -477,14 +478,22 @@ start_debugger(am_device_t dev) "set inferior-auto-start-dyld 1\n"\ "set inferior-auto-start-cfm off\n"\ "set sharedLibrary load-rules dyld \".*libobjc.*\" all dyld \".*CoreFoundation.*\" all dyld \".*Foundation.*\" all dyld \".*libSystem.*\" all dyld \".*AppKit.*\" all dyld \".*PBGDBIntrospectionSupport.*\" all dyld \".*/usr/lib/dyld.*\" all dyld \".*CarbonDataFormatters.*\" all dyld \".*libauto.*\" all dyld \".*CFDataFormatters.*\" all dyld \"/System/Library/Frameworks\\\\\\\\|/System/Library/PrivateFrameworks\\\\\\\\|/usr/lib\" extern dyld \".*\" all exec \".*\" all\n"\ - "sharedlibrary apply-load-rules all\n"\ - "break rb_exc_raise\n"\ - "continue\n", + "sharedlibrary apply-load-rules all\n", device_support_path, device_support_path, device_support_path, [[app_remote_path stringByDeletingLastPathComponent] stringByReplacingOccurrencesOfString:@"/private/var" withString:@"/var"], [app_path stringByDeletingLastPathComponent], app_remote_path, gdb_unix_socket_path, app_path, dsym_path]; + cmds = [cmds stringByAppendingFormat:@"%s\n", BUILTIN_DEBUGGER_CMDS]; + NSString *user_cmds = [NSString stringWithContentsOfFile: + @"debugger_cmds" encoding:NSUTF8StringEncoding error:nil]; + if (user_cmds != nil) { + cmds = [cmds stringByAppendingString:user_cmds]; + cmds = [cmds stringByAppendingString:@"\n"]; + } + if (getenv("no_continue") == NULL) { + cmds = [cmds stringByAppendingString:@"continue\n"]; + } assert([cmds writeToFile:cmds_path atomically:YES encoding:NSASCIIStringEncoding error:nil]); diff --git a/bin/sim.m b/bin/sim.m index 74131078..857a2b91 100644 --- a/bin/sim.m +++ b/bin/sim.m @@ -12,6 +12,8 @@ #include #include +#include "builtin_debugger_cmds.h" + @interface Delegate : NSObject - (NSString *)replEval:(NSString *)expression; @end @@ -799,7 +801,18 @@ again: [NSArray arrayWithObjects:NSTemporaryDirectory(), @"_simgdbcmds", nil]]; //if (![[NSFileManager defaultManager] fileExistsAtPath:cmds_path]) { - NSString *cmds = @"set breakpoint pending on\nbreak rb_exc_raise\nbreak malloc_error_break\n"; + NSString *cmds = @""\ + "set breakpoint pending on\n"\ + "break rb_exc_raise\n"\ + "break malloc_error_break\n"; + cmds = [cmds stringByAppendingFormat:@"%s\n", + BUILTIN_DEBUGGER_CMDS]; + NSString *user_cmds = [NSString stringWithContentsOfFile: + @"debugger_cmds" encoding:NSUTF8StringEncoding error:nil]; + if (user_cmds != nil) { + cmds = [cmds stringByAppendingString:user_cmds]; + cmds = [cmds stringByAppendingString:@"\n"]; + } if (getenv("no_continue") == NULL) { cmds = [cmds stringByAppendingString:@"continue\n"]; }