#!/usr/bin/env python3 """Оффлайновая карта исходников Sprinter; live attach появится отдельным этапом.""" import argparse import json import sys from sdbg.model import DebugMap def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--build', required=True) commands = parser.add_subparsers(dest='command', required=True) for name in ('map', 'vars', 'symbols', 'verify'): commands.add_parser(name) address = commands.add_parser('addr2line') address.add_argument('address', type=lambda s: int(s, 0)) line = commands.add_parser('line2addr') line.add_argument('file') line.add_argument('line', type=int) args = parser.parse_args() try: model = DebugMap(args.build) if args.command == 'map': result = model.functions elif args.command == 'vars': result = model.variables elif args.command == 'symbols': result = model.symbols elif args.command == 'addr2line': result = model.addr2line(args.address) elif args.command == 'line2addr': result = model.line_locations(args.file,args.line) else: model.verify_executable() result = {'build_id': model.manifest['build_id'], 'artifacts': 'verified', 'stale_sources': model.stale_sources, 'diagnostics': model.diagnostics, 'limitations': model.manifest['limitations']} print(json.dumps(result, ensure_ascii=False, indent=2)) return 0 except (ValueError, OSError, KeyError) as error: print('sdbg: ' + str(error), file=sys.stderr) return 1 if __name__ == '__main__': sys.exit(main())