#!/usr/bin/env python3 import imp import os import sys import common rungdb = imp.load_source('rungdb', os.path.join(kwargs['root_dir'], 'run-gdb')) parser = self.get_argparse(argparse_args={ 'description': '''GDB step debug guest userland processes without gdbserver. More information at: https://github.com/cirosantilli/linux-kernel-module-cheat#gdb-step-debug-userland-processes ''' }) parser.add_argument( 'executable', help='Path to the executable to be debugged relative to the Buildroot build directory.' ) parser.add_argument( 'break_at', default=None, help='Break at this point, e.g. main.', nargs='?' ) args = self.setup(parser) executable = self.resolve_userland(kwargs['executable']) addr = self.get_elf_entry(os.path.join(kwargs['buildroot_build_build_dir'], executable)) extra_args = {} extra_args['before'] = '-ex \"add-symbol-file {} {}\"'.format(executable, hex(addr)) # Or else lx-symbols throws for arm: # gdb.MemoryError: Cannot access memory at address 0xbf0040cc # TODO understand better. # Also, lx-symbols overrides the add-symbol-file commands. extra_args['no_lxsymbols'] = True extra_args['break_at'] = kwargs['break_at'] sys.exit(rungdb.main(args, extra_args))