Added --gdb-pl to test.py for breaking on specific powerlosses
This allows debugging strategies such as binary searching for the point of "failure", which may be more complex than simply failing an assert.
This commit is contained in:
parent
801cf278ef
commit
c2147c45ee
@ -1139,10 +1139,11 @@ def run(runner, test_ids=[], **args):
|
||||
|
||||
# drop into gdb?
|
||||
if failures and (args.get('gdb')
|
||||
or args.get('gdb_powerloss_before')
|
||||
or args.get('gdb_powerloss_after')
|
||||
or args.get('gdb_case')
|
||||
or args.get('gdb_main')):
|
||||
or args.get('gdb_main')
|
||||
or args.get('gdb_pl') is not None
|
||||
or args.get('gdb_pl_before')
|
||||
or args.get('gdb_pl_after')):
|
||||
failure = failures[0]
|
||||
cmd = runner_ + [failure.id]
|
||||
|
||||
@ -1161,7 +1162,14 @@ def run(runner, test_ids=[], **args):
|
||||
'-ex', 'break %s:%d' % (path, lineno),
|
||||
'-ex', 'run',
|
||||
'--args']
|
||||
elif args.get('gdb_powerloss_before'):
|
||||
elif args.get('gdb_pl') is not None:
|
||||
path, lineno = find_path(runner_, failure.id, **args)
|
||||
cmd[:0] = args['gdb_path'] + [
|
||||
'-ex', 'break %s:%d' % (path, lineno),
|
||||
'-ex', 'ignore 1 %d' % args['gdb_pl'],
|
||||
'-ex', 'run',
|
||||
'--args']
|
||||
elif args.get('gdb_pl_before'):
|
||||
# figure out how many powerlosses there were
|
||||
powerlosses = (
|
||||
sum(1 for _ in re.finditer('[0-9a-f]',
|
||||
@ -1173,7 +1181,7 @@ def run(runner, test_ids=[], **args):
|
||||
'-ex', 'ignore 1 %d' % max(powerlosses-1, 0),
|
||||
'-ex', 'run',
|
||||
'--args']
|
||||
elif args.get('gdb_powerloss_after'):
|
||||
elif args.get('gdb_pl_after'):
|
||||
# figure out how many powerlosses there were
|
||||
powerlosses = (
|
||||
sum(1 for _ in re.finditer('[0-9a-f]',
|
||||
@ -1373,14 +1381,6 @@ if __name__ == "__main__":
|
||||
'--gdb',
|
||||
action='store_true',
|
||||
help="Drop into gdb on test failure.")
|
||||
test_parser.add_argument(
|
||||
'--gdb-powerloss-before',
|
||||
action='store_true',
|
||||
help="Drop into gdb before the powerloss that caused the failure.")
|
||||
test_parser.add_argument(
|
||||
'--gdb-powerloss-after',
|
||||
action='store_true',
|
||||
help="Drop into gdb after the powerloss that caused the failure.")
|
||||
test_parser.add_argument(
|
||||
'--gdb-case',
|
||||
action='store_true',
|
||||
@ -1391,6 +1391,18 @@ if __name__ == "__main__":
|
||||
action='store_true',
|
||||
help="Drop into gdb on test failure but stop at the beginning "
|
||||
"of main.")
|
||||
test_parser.add_argument(
|
||||
'--gdb-pl',
|
||||
type=lambda x: int(x, 0),
|
||||
help="Drop into gdb on this specific powerloss.")
|
||||
test_parser.add_argument(
|
||||
'--gdb-pl-before',
|
||||
action='store_true',
|
||||
help="Drop into gdb before the powerloss that caused the failure.")
|
||||
test_parser.add_argument(
|
||||
'--gdb-pl-after',
|
||||
action='store_true',
|
||||
help="Drop into gdb after the powerloss that caused the failure.")
|
||||
test_parser.add_argument(
|
||||
'--gdb-path',
|
||||
type=lambda x: x.split(),
|
||||
|
Loading…
x
Reference in New Issue
Block a user