mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
trace/mercury_trace_spy.c:
When the user wants to put a breakpoint on a line in a file,
but there is no event exactly on the given line number,
mdb used to tell the user just that fact. This diff makes
mdb more helpful, by printing the nearest line numbers before
and after the given line number that *do* have events on which
breakpoints can be put.
The mismatch can come for several reasons, with the most common
probably being that textually, a switch arm for e.g X being f
starts with the X = f unification goal, but switch detection
*deletes* that unification from the switch arm, so the event
for entry into that arm is actually on the line for the *next* goal.
trace/mercury_trace_tables.[ch]:
Provide the info needed by mercury_trace_spy.c.
Change the interface of MR_process_file_line_layouts to make it
self-contained, i.e. returning counts of matches, instead of
merely *adding* to preexisting counts. This is simpler, since
the only caller of that function needs no running tally.
tests/debugger/breakpoints.inp:
Extend this test to test the possible error messages we now generate.
tests/debugger/breakpoints.exp:
tests/debugger/breakpoints.exp2:
Update the expected outputs in both debug and non-debug grades.
269 lines
11 KiB
Plaintext
269 lines
11 KiB
Plaintext
E1: C1 CALL pred breakpoints.main/2-0 (cc_multi) breakpoints.m:35
|
|
mdb> echo on
|
|
Command echo enabled.
|
|
mdb> register --quiet
|
|
mdb> break data
|
|
Ambiguous procedure specification. The matches are:
|
|
0: func breakpoints.data/0-0 (det)
|
|
1: pred breakpoints.data/1-0 (det)
|
|
|
|
Which do you want to put a breakpoint on (0-1 or *)? *
|
|
0: + stop interface func breakpoints.data/0-0 (det)
|
|
1: + stop interface pred breakpoints.data/1-0 (det)
|
|
mdb> delete 1
|
|
1: E stop interface pred breakpoints.data/1-0 (det)
|
|
mdb> delete 0
|
|
0: E stop interface func breakpoints.data/0-0 (det)
|
|
mdb> break data
|
|
Ambiguous procedure specification. The matches are:
|
|
0: func breakpoints.data/0-0 (det)
|
|
1: pred breakpoints.data/1-0 (det)
|
|
|
|
Which do you want to put a breakpoint on (0-1 or *)? 1
|
|
0: + stop interface pred breakpoints.data/1-0 (det)
|
|
mdb> continue
|
|
E2: C2 CALL pred breakpoints.data/1-0 (det) breakpoints.m:53 (breakpoints.m:49)
|
|
mdb> disable 0
|
|
0: - stop interface pred breakpoints.data/1-0 (det)
|
|
mdb> break info
|
|
0: - stop interface pred breakpoints.data/1-0 (det)
|
|
mdb> break qperm
|
|
1: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
mdb> break safe
|
|
2: + stop interface pred breakpoints.safe/1-0 (semidet)
|
|
mdb> break -e qperm
|
|
3: + stop entry pred breakpoints.qperm/2-0 (nondet)
|
|
mdb> break -a qperm
|
|
4: + stop all pred breakpoints.qperm/2-0 (nondet)
|
|
mdb> break /
|
|
Ambiguous procedure specification. The matches are:
|
|
0: func breakpoints.//2-0 (det)
|
|
1: func breakpoints.print_list.//2-0 (det)
|
|
|
|
Which do you want to put a breakpoint on (0-1 or *)? 0
|
|
5: + stop interface func breakpoints.//2-0 (det)
|
|
mdb> break //2
|
|
Ambiguous procedure specification. The matches are:
|
|
0: func breakpoints.//2-0 (det)
|
|
1: func breakpoints.print_list.//2-0 (det)
|
|
|
|
Which do you want to put a breakpoint on (0-1 or *)? 0
|
|
6: + stop interface func breakpoints.//2-0 (det)
|
|
mdb> break breakpoints.print_list.-/2
|
|
7: + stop interface func breakpoints.print_list.-/2-0 (det)
|
|
mdb> break breakpoints.print_list.--0
|
|
8: + stop interface func breakpoints.print_list.-/2-0 (det)
|
|
mdb> break breakpoints__print_list__/-0
|
|
9: + stop interface func breakpoints.print_list.//2-0 (det)
|
|
mdb> break breakpoints__print_list__print_list
|
|
10: + stop interface pred breakpoints.print_list.print_list/3-0 (det)
|
|
mdb> break breakpoints.print_list.print_list/3
|
|
11: + stop interface pred breakpoints.print_list.print_list/3-0 (det)
|
|
mdb> break info
|
|
0: - stop interface pred breakpoints.data/1-0 (det)
|
|
1: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
2: + stop interface pred breakpoints.safe/1-0 (semidet)
|
|
3: + stop entry pred breakpoints.qperm/2-0 (nondet)
|
|
4: + stop all pred breakpoints.qperm/2-0 (nondet)
|
|
5: + stop interface func breakpoints.//2-0 (det)
|
|
6: + stop interface func breakpoints.//2-0 (det)
|
|
7: + stop interface func breakpoints.print_list.-/2-0 (det)
|
|
8: + stop interface func breakpoints.print_list.-/2-0 (det)
|
|
9: + stop interface func breakpoints.print_list.//2-0 (det)
|
|
10: + stop interface pred breakpoints.print_list.print_list/3-0 (det)
|
|
11: + stop interface pred breakpoints.print_list.print_list/3-0 (det)
|
|
mdb> delete 0
|
|
0: D stop interface pred breakpoints.data/1-0 (det)
|
|
mdb> break info
|
|
1: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
2: + stop interface pred breakpoints.safe/1-0 (semidet)
|
|
3: + stop entry pred breakpoints.qperm/2-0 (nondet)
|
|
4: + stop all pred breakpoints.qperm/2-0 (nondet)
|
|
5: + stop interface func breakpoints.//2-0 (det)
|
|
6: + stop interface func breakpoints.//2-0 (det)
|
|
7: + stop interface func breakpoints.print_list.-/2-0 (det)
|
|
8: + stop interface func breakpoints.print_list.-/2-0 (det)
|
|
9: + stop interface func breakpoints.print_list.//2-0 (det)
|
|
10: + stop interface pred breakpoints.print_list.print_list/3-0 (det)
|
|
11: + stop interface pred breakpoints.print_list.print_list/3-0 (det)
|
|
mdb> disable 3
|
|
3: - stop entry pred breakpoints.qperm/2-0 (nondet)
|
|
mdb> break nodiag
|
|
0: + stop interface pred breakpoints.nodiag/3-0 (semidet)
|
|
mdb> break_print -v -n -b1 HeadVar__1 HeadVar__2
|
|
1: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
HeadVar__1 (verbose, nowarn), HeadVar__2 (verbose, nowarn)
|
|
mdb> continue
|
|
E3: C3 CALL pred breakpoints.qperm/2-0 (nondet) breakpoints.m:63 (breakpoints.m:58)
|
|
HeadVar__1
|
|
[|]
|
|
1-1
|
|
2-[|]
|
|
1-2
|
|
2-[|]
|
|
1-3
|
|
2-[|]/2
|
|
|
|
mdb> break_print -b1 none
|
|
1: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
mdb> format_param -p depth 10
|
|
mdb> format_param -p size 20
|
|
mdb> break_print -p -n -b1 HeadVar__1 HeadVar__2
|
|
1: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
HeadVar__1 (pretty, nowarn), HeadVar__2 (pretty, nowarn)
|
|
mdb> continue
|
|
E4: C3 SWTC pred breakpoints.qperm/2-0 (nondet) s2-2; breakpoints.m:64
|
|
mdb> finish -N
|
|
E5: C4 CALL pred breakpoints.qperm/2-0 (nondet) breakpoints.m:63 (breakpoints.m:67)
|
|
HeadVar__1
|
|
[2, 3, 4, 5]
|
|
mdb> finish -n
|
|
E6: C4 EXIT pred breakpoints.qperm/2-0 (nondet) breakpoints.m:63 (breakpoints.m:67)
|
|
HeadVar__1
|
|
[2, 3, 4, 5]
|
|
HeadVar__2
|
|
[2, 3, 4, 5]
|
|
mdb> break_print -b1 none
|
|
1: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
mdb> break_print -f -n -b1 HeadVar__1
|
|
1: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
HeadVar__1 (flat, nowarn)
|
|
mdb> break_print -f -e -n -b1 HeadVar__2
|
|
1: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
HeadVar__1 (flat, nowarn), HeadVar__2 (flat, nowarn)
|
|
mdb> continue
|
|
E7: C3 EXIT pred breakpoints.qperm/2-0 (nondet) breakpoints.m:63 (breakpoints.m:58)
|
|
HeadVar__1 [1, 2, 3, 4, 5]
|
|
HeadVar__2 [1, 2, 3, 4, 5]
|
|
mdb> continue
|
|
E8: C5 CALL pred breakpoints.safe/1-0 (semidet) breakpoints.m:77 (breakpoints.m:59)
|
|
mdb> finish
|
|
E9: C6 CALL pred breakpoints.nodiag/3-0 (semidet) breakpoints.m:84 (breakpoints.m:79)
|
|
E10: C6 FAIL pred breakpoints.nodiag/3-0 (semidet) breakpoints.m:84 (breakpoints.m:79)
|
|
E11: C5 FAIL pred breakpoints.safe/1-0 (semidet) breakpoints.m:77 (breakpoints.m:59)
|
|
mdb> delete *
|
|
0: E stop interface pred breakpoints.nodiag/3-0 (semidet)
|
|
1: E stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
2: E stop interface pred breakpoints.safe/1-0 (semidet)
|
|
3: D stop entry pred breakpoints.qperm/2-0 (nondet)
|
|
4: E stop all pred breakpoints.qperm/2-0 (nondet)
|
|
5: E stop interface func breakpoints.//2-0 (det)
|
|
6: E stop interface func breakpoints.//2-0 (det)
|
|
7: E stop interface func breakpoints.print_list.-/2-0 (det)
|
|
8: E stop interface func breakpoints.print_list.-/2-0 (det)
|
|
9: E stop interface func breakpoints.print_list.//2-0 (det)
|
|
10: E stop interface pred breakpoints.print_list.print_list/3-0 (det)
|
|
11: E stop interface pred breakpoints.print_list.print_list/3-0 (det)
|
|
mdb> break info
|
|
There are no break points.
|
|
mdb> delete *
|
|
There are no break points.
|
|
mdb> break -i -I3 qperm
|
|
0: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
(ignore next 3 interface events)
|
|
mdb> continue
|
|
E12: C7 REDO pred breakpoints.qperm/2-0 (nondet) breakpoints.m:63 (breakpoints.m:67)
|
|
mdb> print *
|
|
HeadVar__1 [4, 5]
|
|
mdb> ignore -E4 0
|
|
0: + stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
(ignore next 4 call events)
|
|
mdb> continue
|
|
E13: C8 CALL pred breakpoints.qperm/2-0 (nondet) breakpoints.m:63 (breakpoints.m:67)
|
|
mdb> print *
|
|
HeadVar__1 []
|
|
mdb> delete *
|
|
0: E stop interface pred breakpoints.qperm/2-0 (nondet)
|
|
mdb> break -O test_in_both
|
|
Ambiguous procedure specification. The matches are:
|
|
0: pred breakpoints.test_in_both/2-0 (det)
|
|
1: pred breakpoints.print_list.test_in_both/2-0 (det)
|
|
mdb> break breakpoints.test_in_both
|
|
0: + stop interface pred breakpoints.test_in_both/2-0 (det)
|
|
mdb> break breakpoints.print_list.test_in_both
|
|
1: + stop interface pred breakpoints.print_list.test_in_both/2-0 (det)
|
|
mdb> delete *
|
|
0: E stop interface pred breakpoints.test_in_both/2-0 (det)
|
|
1: E stop interface pred breakpoints.print_list.test_in_both/2-0 (det)
|
|
mdb> break print_list.test_in_both
|
|
0: + stop interface pred breakpoints.print_list.test_in_both/2-0 (det)
|
|
mdb> break print_list.test_only_in_printlist
|
|
1: + stop interface pred breakpoints.print_list.test_only_in_printlist/2-0 (det)
|
|
mdb> delete *
|
|
0: E stop interface pred breakpoints.print_list.test_in_both/2-0 (det)
|
|
1: E stop interface pred breakpoints.print_list.test_only_in_printlist/2-0 (det)
|
|
mdb> break test_only_in_printlist
|
|
0: + stop interface pred breakpoints.print_list.test_only_in_printlist/2-0 (det)
|
|
mdb> delete *
|
|
0: E stop interface pred breakpoints.print_list.test_only_in_printlist/2-0 (det)
|
|
mdb> procedures testmod
|
|
Module name `testmod' is ambiguous.
|
|
The matches are:
|
|
breakpoints.a.testmod
|
|
breakpoints.b.testmod
|
|
mdb> procedures a
|
|
List of procedures in module `a'
|
|
|
|
func breakpoints.a.afunc/0-0 (det)
|
|
mdb> procedures a.testmod
|
|
List of procedures in module `a.testmod'
|
|
|
|
func breakpoints.a.testmod.test_in_a/0-0 (det)
|
|
func breakpoints.a.testmod.test_in_ab/0-0 (det)
|
|
mdb> break -O test_in_ab
|
|
Ambiguous procedure specification. The matches are:
|
|
0: func breakpoints.a.testmod.test_in_ab/0-0 (det)
|
|
1: func breakpoints.b.testmod.test_in_ab/0-0 (det)
|
|
mdb> break -O testmod.test_in_ab
|
|
Ambiguous procedure specification. The matches are:
|
|
0: func breakpoints.a.testmod.test_in_ab/0-0 (det)
|
|
1: func breakpoints.b.testmod.test_in_ab/0-0 (det)
|
|
mdb> break -O a.testmod.test_in_ab
|
|
0: + stop interface func breakpoints.a.testmod.test_in_ab/0-0 (det)
|
|
mdb> break -O b.testmod.test_in_ab
|
|
1: + stop interface func breakpoints.b.testmod.test_in_ab/0-0 (det)
|
|
mdb> delete *
|
|
0: E stop interface func breakpoints.a.testmod.test_in_ab/0-0 (det)
|
|
1: E stop interface func breakpoints.b.testmod.test_in_ab/0-0 (det)
|
|
mdb> break -O -p goal test_in_a
|
|
0: + stop interface func breakpoints.a.testmod.test_in_a/0-0 (det)
|
|
goal (flat)
|
|
mdb> break -O -P -p HeadVar__1 test_in_b
|
|
1: + print interface func breakpoints.b.testmod.test_in_b/0-0 (det)
|
|
HeadVar__1 (flat)
|
|
mdb> break info
|
|
0: + stop interface func breakpoints.a.testmod.test_in_a/0-0 (det)
|
|
goal (flat)
|
|
1: + print interface func breakpoints.b.testmod.test_in_b/0-0 (det)
|
|
HeadVar__1 (flat)
|
|
mdb> continue
|
|
[1, 3, 5, 2, 4]
|
|
E14: C9 CALL func breakpoints.a.testmod.test_in_a/0-0 (det) breakpoints.a.testmod.m:14 (breakpoints.m:38)
|
|
test_in_a = '_'
|
|
mdb> break_print -b0 none
|
|
0: + stop interface func breakpoints.a.testmod.test_in_a/0-0 (det)
|
|
mdb> break_print -b0 *
|
|
0: + stop interface func breakpoints.a.testmod.test_in_a/0-0 (det)
|
|
all (flat)
|
|
mdb> break nonexistent.m:1000
|
|
mdb: there is no debuggable source file named nonexistent.m.
|
|
mdb> break breakpoints.m:1000
|
|
mdb: there is no event at line 1000 in breakpoints.m
|
|
(next lower line number: 103, none higher).
|
|
mdb> break breakpoints.m:2
|
|
mdb: there is no event at line 2 in breakpoints.m
|
|
(no lower line number, next higher: 35).
|
|
mdb> break breakpoints.m:82
|
|
mdb: there is no event at line 82 in breakpoints.m
|
|
(next lower line number: 80, next higher line number: 84).
|
|
mdb> continue
|
|
E15: C9 EXIT func breakpoints.a.testmod.test_in_a/0-0 (det) breakpoints.a.testmod.m:14 (breakpoints.m:38)
|
|
HeadVar__1 "a"
|
|
mdb> continue
|
|
"a"
|
|
E16: C10 CALL func breakpoints.b.testmod.test_in_b/0-0 (det) breakpoints.b.testmod.m:14 (breakpoints.m:40)
|
|
mdb: there is no variable named HeadVar__1.
|
|
E17: C10 EXIT func breakpoints.b.testmod.test_in_b/0-0 (det) breakpoints.b.testmod.m:14 (breakpoints.m:40)
|
|
HeadVar__1 "b"
|
|
"b"
|