def handle_switches(args, sysroot): """Fetch the targeted binary and determine how to attach gdb. Args: args: Parsed arguments. sysroot: Local sysroot path. Returns: (binary_file, attach_pid, run_cmd). Precisely one of attach_pid or run_cmd will be None. """ device = args.device binary_file = None pid = None run_cmd = None args.su_cmd = ["su", args.user] if args.user else [] if args.target_pid: # Fetch the binary using the PID later. pid = args.target_pid elif args.target_name: # Fetch the binary using the PID later. pid = get_remote_pid(device, args.target_name) elif args.run_cmd: if not args.run_cmd[0]: sys.exit("empty command passed to -r") run_cmd = args.run_cmd if not run_cmd[0].startswith("/"): try: run_cmd[0] = gdbrunner.find_executable_path( device, args.run_cmd[0], run_as_cmd=args.su_cmd) except RuntimeError: sys.exit("Could not find executable '{}' passed to -r, " "please provide an absolute path.".format( args.run_cmd[0])) binary_file, local = gdbrunner.find_file(device, run_cmd[0], sysroot, run_as_cmd=args.su_cmd) if binary_file is None: assert pid is not None try: binary_file, local = gdbrunner.find_binary(device, pid, sysroot, run_as_cmd=args.su_cmd) except adb.ShellError: sys.exit("failed to pull binary for PID {}".format(pid)) if not local: logging.warning("Couldn't find local unstripped executable in {}," " symbols may not be available.".format(sysroot)) return (binary_file, pid, run_cmd)
def handle_switches(args, sysroot): """Fetch the targeted binary and determine how to attach gdb. Args: args: Parsed arguments. sysroot: Local sysroot path. Returns: (binary_file, attach_pid, run_cmd). Precisely one of attach_pid or run_cmd will be None. """ device = args.device binary_file = None pid = None run_cmd = None args.su_cmd = ["su", args.user] if args.user else [] if args.target_pid: # Fetch the binary using the PID later. pid = args.target_pid elif args.target_name: # Fetch the binary using the PID later. pid = get_remote_pid(device, args.target_name) elif args.run_cmd: if not args.run_cmd[0]: sys.exit("empty command passed to -r") run_cmd = args.run_cmd if not run_cmd[0].startswith("/"): try: run_cmd[0] = gdbrunner.find_executable_path(device, args.run_cmd[0], run_as_cmd=args.su_cmd) except RuntimeError: sys.exit("Could not find executable '{}' passed to -r, " "please provide an absolute path.".format(args.run_cmd[0])) binary_file, local = gdbrunner.find_file(device, run_cmd[0], sysroot, run_as_cmd=args.su_cmd) if binary_file is None: assert pid is not None try: binary_file, local = gdbrunner.find_binary(device, pid, sysroot, run_as_cmd=args.su_cmd) except adb.ShellError: sys.exit("failed to pull binary for PID {}".format(pid)) if not local: logging.warning("Couldn't find local unstripped executable in {}," " symbols may not be available.".format(sysroot)) return (binary_file, pid, run_cmd)