Sprinter: добавить отладку C-исходников и интеграцию VS Code
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Одна проверенная live-операция source debugger через sdbgbridge."""
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
|
||||
from sdbg.model import DebugMap
|
||||
from sdbg.session import DebugSession, SessionError
|
||||
from sdbg.transport import BridgeError, FileBridge
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--build', required=True, help='каталог .sprinter-cc-NAME')
|
||||
parser.add_argument('--ipc', required=True, help='SDBG_IPC_DIR процесса MAME')
|
||||
parser.add_argument('--session', required=True, help='SDBG_SESSION_ID процесса MAME')
|
||||
parser.add_argument('--timeout', type=float, default=5)
|
||||
commands = parser.add_subparsers(dest='command', required=True)
|
||||
commands.add_parser('attach')
|
||||
commands.add_parser('where')
|
||||
step = commands.add_parser('step')
|
||||
step.add_argument('--wait', type=float, default=5)
|
||||
commands.add_parser('continue')
|
||||
commands.add_parser('activate-breakpoints')
|
||||
commands.add_parser('deactivate-breakpoints')
|
||||
line = commands.add_parser('break-line')
|
||||
line.add_argument('file')
|
||||
line.add_argument('line', type=int)
|
||||
line.add_argument('--disabled', action='store_true')
|
||||
function = commands.add_parser('break-function')
|
||||
function.add_argument('name')
|
||||
function.add_argument('--disabled', action='store_true')
|
||||
variable = commands.add_parser('read-variable')
|
||||
variable.add_argument('name')
|
||||
variable.add_argument('--module')
|
||||
args = parser.parse_args()
|
||||
bridge = None
|
||||
try:
|
||||
bridge = FileBridge(args.ipc, args.session, args.timeout)
|
||||
session = DebugSession(DebugMap(args.build), bridge)
|
||||
attached = session.attach()
|
||||
if args.command == 'attach': result = attached
|
||||
elif args.command == 'where': result = session.where()
|
||||
elif args.command == 'break-line':
|
||||
result = session.break_line(args.file, args.line, not args.disabled)
|
||||
elif args.command == 'break-function':
|
||||
result = session.break_function(args.name, not args.disabled)
|
||||
elif args.command == 'activate-breakpoints': result = session.activate_breakpoints()
|
||||
elif args.command == 'deactivate-breakpoints': result = session.deactivate_breakpoints()
|
||||
elif args.command == 'read-variable': result = session.read_variable(args.name, args.module)
|
||||
elif args.command == 'step':
|
||||
bridge.request('step')
|
||||
result = session.where(bridge.wait_stopped(args.wait))
|
||||
else:
|
||||
result = bridge.request('continue')
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
return 0
|
||||
except (BridgeError, SessionError, ValueError, OSError, KeyError) as error:
|
||||
print('sdbg-session: ' + str(error), file=sys.stderr)
|
||||
return 1
|
||||
finally:
|
||||
if bridge is not None:
|
||||
bridge.close()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user