#!/usr/bin/env python3 import imp import os import subprocess import re import common rungdb = imp.load_source('rungdb', os.path.join(common.root_dir, 'rungdb')) parser = common.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', default=None, help='Break at this point, e.g. main.', nargs='?' ) args = common.setup(parser) readelf_header = subprocess.check_output([ common.get_toolchain_tool('readelf'), '-h', os.path.join(common.build_dir, args.executable), ]) for line in readelf_header.decode().split('\n'): split = line.split() if line.startswith(' Entry point address:'): addr = line.split()[-1] break print(addr) extra_args = {} extra_args['before'] = '-ex \"add-symbol-file {} {}\"'.format(args.executable, 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 rungdb.main(args, extra_args)