add ability to execute custom scripts and commands (#472)
diff --git a/src/ios-deploy/ios-deploy.m b/src/ios-deploy/ios-deploy.m index 8c41ad3..175478b 100644 --- a/src/ios-deploy/ios-deploy.m +++ b/src/ios-deploy/ios-deploy.m
@@ -61,6 +61,8 @@ autoexit\n\ "; +NSMutableString * custom_commands = nil; + /* * Some things do not seem to work when using the normal commands like process connect/launch, so we invoke them * through the python interface. Also, Launch () doesn't seem to work when ran from init_module (), so we add @@ -106,6 +108,7 @@ char *args = NULL; char *envs = NULL; char *list_root = NULL; +const char * custom_script_path = NULL; int _timeout = 0; int _detectDeadlockTimeout = 0; bool _json_output = false; @@ -961,6 +964,11 @@ else extra_cmds = lldb_prep_interactive_cmds; fwrite(extra_cmds, strlen(extra_cmds), 1, out); + if (custom_commands != nil) + { + const char * cmds = [custom_commands UTF8String]; + fwrite(cmds, 1, strlen(cmds), out); + } fclose(out); @@ -968,6 +976,24 @@ CFDataRef pmodule_data = CFStringCreateExternalRepresentation(NULL, pmodule, kCFStringEncodingUTF8, 0); fwrite(CFDataGetBytePtr(pmodule_data), CFDataGetLength(pmodule_data), 1, out); CFRelease(pmodule_data); + + if (custom_script_path) + { + FILE * fh = fopen(custom_script_path, "r"); + if (fh == NULL) + { + on_error(@"Failed to open %s", custom_script_path); + } + fwrite("\n", 1, 1, out); + char buffer[0x1000]; + size_t bytesRead; + while ((bytesRead = fread(buffer, 1, sizeof(buffer), fh)) > 0) + { + fwrite(buffer, 1, bytesRead, out); + } + fclose(fh); + } + fclose(out); CFRelease(cmds); @@ -2240,7 +2266,9 @@ @" --detect_deadlocks <sec> start printing backtraces for all threads periodically after specific amount of seconds\n" @" -f, --file_system specify file system for mkdir / list / upload / download / rm\n" @" -F, --non-recursively specify non-recursively walk directory\n" - @" -j, --json format output as JSON\n", + @" -j, --json format output as JSON\n" + @" --custom-script <script> path to custom python script to execute in lldb\n" + @" --custom-command <command> specify additional lldb commands to execute\n", [NSString stringWithUTF8String:app]); } @@ -2296,6 +2324,8 @@ { "app_deltas", required_argument, NULL, 'A'}, { "file_system", no_argument, NULL, 'f'}, { "non-recursively", no_argument, NULL, 'F'}, + { "custom-script", required_argument, NULL, 1001}, + { "custom-command", required_argument, NULL, 1002}, { NULL, 0, NULL, 0 }, }; int ch; @@ -2436,6 +2466,16 @@ case 'F': non_recursively = true; break; + case 1001: + custom_script_path = optarg; + break; + case 1002: + if (custom_commands == nil) + { + custom_commands = [[NSMutableString alloc] init]; + } + [custom_commands appendFormat:@"%s\n", optarg]; + break; default: usage(argv[0]); return exitcode_error;