Dear Hongwei,
On Mon, May 27, 2019 at 11:33 PM Hongwei Xi <
gmh...@gmail.com> wrote:
> Yes, I think you can use the gline flag in that way.
It's great news for me.
> If your ATS2 program makes extensive use of templates, the traditional way of debugging
> may not work very well. Unfortunately, I don't know a better way :(
Yes, templates make bad impact for break points.
Following means that there are 20 `#line` directives, but gdb only
found 10 of them.
Do you know how to find all of the multiple breakpoints?
```
$ gcc -E -DATS_MEMALLOC_LIBC -I
/home/kiwamu/src/ATS-Postiats/ccomp/runtime/ -I
/home/kiwamu/src/ATS-Postiats/ rbtree_dats.c > rbtree_dats_E.c
$ grep 235 rbtree_dats_E.c | wc -l
20
$ gcc -g rbtree_dats_E.c
$ gdb a.out
(gdb) b 235
Breakpoint 1 at 0x15ee: /home/kiwamu/tmp/ats/rbtree/rbtree.dats:235.
(10 locations)
```
Carefully reading C code generated by patsopt, there are 10 instances
for `rbtree_insert<T>`.
And one of them can break as following:
```
(gdb) b _057_home_057_kiwamu_057_tmp_057_ats_057_rbtree_057_rbtree_056_dats__rbtree_insert__2__1
Breakpoint 1 at 0x15ee: file /home/kiwamu/tmp/ats/rbtree/rbtree.dats, line 235.
(gdb) run
Starting program: /home/kiwamu/tmp/ats/rbtree/a.out
Breakpoint 1, _057_home_057_kiwamu_057_tmp_057_ats_057_rbtree_057_rbtree_056_dats__rbtree_insert__2__1
(arg0=0x0, arg1=0x7fffffffd4a4, arg2=0x0) at
/home/kiwamu/tmp/ats/rbtree/rbtree.dats:235
235 val t = ins (t, x0)
(gdb) bt
#0 _057_home_057_kiwamu_057_tmp_057_ats_057_rbtree_057_rbtree_056_dats__rbtree_insert__2__1
(arg0=0x0, arg1=0x7fffffffd4a4, arg2=0x0) at
/home/kiwamu/tmp/ats/rbtree/rbtree.dats:235
#1 0x000055555555540b in mainats_0_void () at
/home/kiwamu/tmp/ats/rbtree/rbtree.dats:311
#2 0x000055555555940b in main (argc=1, argv=0x7fffffffd628,
envp=0x7fffffffd638) at /home/kiwamu/tmp/ats/rbtree/rbtree.dats:314
```
Do you have some pointer how to inject name mangling for breaking at
following template instances?
```
casper$ grep global: rbtree_dats.c | sort | uniq
global:
global: cmp$4777(1)(HSEfun(FUN; HSErefarg(1;
HSEs2exp(S2Eapp(S2Ecst(g0int_t0ype); S2Eextkind(atstype_int)))),
HSErefarg(1; HSEs2exp(S2Eapp(S2Ecst(g0int_t0ype);
S2Eextkind(atstype_int)))); HSEapp(HSEcst(atstkind_t0ype);
HSEs2exp(S2Eextkind(atstype_int)))))
global: cmp$4777(1)(HSEfun(FUN; HSErefarg(1; HSEtyvar(a(8564))),
HSErefarg(1; HSEtyvar(a(8564))); HSEapp(HSEcst(atstkind_t0ype);
HSEs2exp(S2Eextkind(atstype_int)))))
global: compare$7$0(level=1)
global: compare$7$10(level=3)
global: compare$7$1(level=3)
global: compare$7$2(level=3)
global: compare$7$3(level=3)
global: compare$7$4(level=3)
global: compare$7$5(level=3)
global: compare$7$6(level=3)
global: compare$7$7(level=3)
global: compare$7$8(level=3)
global: compare$7$9(level=3)
global: eq_g1int_int$16$0(level=0)
global: eq_g1int_int$16$10(level=3)
global: eq_g1int_int$16$11(level=3)
global: eq_g1int_int$16$12(level=3)
global: eq_g1int_int$16$13(level=3)
global: eq_g1int_int$16$14(level=3)
global: eq_g1int_int$16$15(level=3)
global: eq_g1int_int$16$16(level=3)
global: eq_g1int_int$16$17(level=3)
global: eq_g1int_int$16$18(level=3)
global: eq_g1int_int$16$19(level=3)
global: eq_g1int_int$16$1(level=3)
global: eq_g1int_int$16$20(level=3)
global: eq_g1int_int$16$21(level=2)
global: eq_g1int_int$16$2(level=3)
global: eq_g1int_int$16$3(level=3)
global: eq_g1int_int$16$4(level=3)
global: eq_g1int_int$16$5(level=3)
global: eq_g1int_int$16$6(level=3)
global: eq_g1int_int$16$7(level=3)
global: eq_g1int_int$16$8(level=3)
global: eq_g1int_int$16$9(level=3)
global: fprint_val$109$0(level=0)
global: fprint_val$109$1(level=2)
global: gt_g0int_int$21$0(level=0)
global: gt_g0int_int$21$10(level=3)
global: gt_g0int_int$21$1(level=3)
global: gt_g0int_int$21$2(level=3)
global: gt_g0int_int$21$3(level=3)
global: gt_g0int_int$21$4(level=3)
global: gt_g0int_int$21$5(level=3)
global: gt_g0int_int$21$6(level=3)
global: gt_g0int_int$21$7(level=3)
global: gt_g0int_int$21$8(level=3)
global: gt_g0int_int$21$9(level=3)
global: ins_3$0(level=1)
global: ins_3$10(level=2)
global: ins_3$1(level=2)
global: ins_3$2(level=2)
global: ins_3$3(level=2)
global: ins_3$4(level=2)
global: ins_3$5(level=2)
global: ins_3$6(level=2)
global: ins_3$7(level=2)
global: ins_3$8(level=2)
global: ins_3$9(level=2)
global: insfix_l_0$0(level=0)
global: insfix_l_0$10(level=3)
global: insfix_l_0$1(level=3)
global: insfix_l_0$2(level=3)
global: insfix_l_0$3(level=3)
global: insfix_l_0$4(level=3)
global: insfix_l_0$5(level=3)
global: insfix_l_0$6(level=3)
global: insfix_l_0$7(level=3)
global: insfix_l_0$8(level=3)
global: insfix_l_0$9(level=3)
global: insfix_r_1$0(level=0)
global: insfix_r_1$10(level=3)
global: insfix_r_1$1(level=3)
global: insfix_r_1$2(level=3)
global: insfix_r_1$3(level=3)
global: insfix_r_1$4(level=3)
global: insfix_r_1$5(level=3)
global: insfix_r_1$6(level=3)
global: insfix_r_1$7(level=3)
global: insfix_r_1$8(level=3)
global: insfix_r_1$9(level=3)
global: lt_g0int_int$12$0(level=0)
global: lt_g0int_int$12$10(level=3)
global: lt_g0int_int$12$1(level=3)
global: lt_g0int_int$12$2(level=3)
global: lt_g0int_int$12$3(level=3)
global: lt_g0int_int$12$4(level=3)
global: lt_g0int_int$12$5(level=3)
global: lt_g0int_int$12$6(level=3)
global: lt_g0int_int$12$7(level=3)
global: lt_g0int_int$12$8(level=3)
global: lt_g0int_int$12$9(level=3)
global: mainats_0_void$6$0(level=0)
global: print_rbtree_5$0(level=0)
global: print_rbtree_5$1(level=1)
global: rbtree_free_4$0(level=0)
global: rbtree_free_4$1(level=1)
global: rbtree_insert$2$0(level=0)
global: rbtree_insert$2$10(level=1)
global: rbtree_insert$2$1(level=1)
global: rbtree_insert$2$2(level=1)
global: rbtree_insert$2$3(level=1)
global: rbtree_insert$2$4(level=1)
global: rbtree_insert$2$5(level=1)
global: rbtree_insert$2$6(level=1)
global: rbtree_insert$2$7(level=1)
global: rbtree_insert$2$8(level=1)
global: rbtree_insert$2$9(level=1)
```