# ?- gtrace, append(L1,L2,\[1,2,3\]). crash after first answer is shown

**URL:** <https://swi-prolog.discourse.group/t/gtrace-append-l1-l2-1-2-3-crash-after-first-answer-is-shown/2454>\
**Category:** General\
**Tags:** bug\
**Created:** [June 2, 2020, 7:50pm UTC](https://swi-prolog.discourse.group/t/gtrace-append-l1-l2-1-2-3-crash-after-first-answer-is-shown/2454 "2020-06-02T19:50:47Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Iam](https://avatars.discourse-cdn.com/v4/letter/i/58956e/32.png) [@Iam](https://swi-prolog.discourse.group/u/Iam)\
**Post date:** [June 2, 2020, 7:50pm UTC](https://swi-prolog.discourse.group/t/gtrace-append-l1-l2-1-2-3-crash-after-first-answer-is-shown/2454/1 "2020-06-02T19:50:47Z")

</div>

I am using SWI-Prolog version 8.1.26 under macOS 14 (Mojave).

```prolog
?- gtrace, append(L1,L2,[1,2,3]).    

```

shows me the first solution, but when I type ‘;’ to see the next answer,  
the graphical debugger and the interpreter process crash.

The same happened under Parallels Desktops Windows.

However, e.g.

```prolog
?- gtrace, member(M,[1,2,3]).

```

works as expected.

---

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [June 2, 2020, 8:05pm UTC](https://swi-prolog.discourse.group/t/gtrace-append-l1-l2-1-2-3-crash-after-first-answer-is-shown/2454/2 "2020-06-02T20:05:03Z")

</div>

Exactly the same with

SWI-Prolog (threaded, 64 bits, version 8.1.32-171-g4ba05b1cc) on Windows 10 and today’s [daily build](https://www.swi-prolog.org/download/daily/bin/)  
SWI-Prolog (threaded, 64 bits, version 8.3.0-172-g5e86d749d)

Did not test with [Parallels Desktops Windows](https://www.parallels.com/) as I do not run a Mac.

* * *

When running with WSL 2 using SWI-Prolog (threaded, 64 bits, version 8.1.32) on Ubuntu 18.04 LTS and XWindows running on Windows 10

```prolog
?- gtrace,append(L1,L2,[1,2,3]).
% The graphical front-end will be used for subsequent tracing
L1 = [],
L2 = [1, 2, 3] ;

SWI-Prolog [thread 1 (main) at Tue Jun 2 16:24:59 2020]: received fatal signal 11 (segv)
C-stack trace labeled "crash":
  [0] PL_strtod() at ??:? [0x7fcd9795a4b8]
  [1] bstore_print_backtrace_named() at ??:? [0x7fcd9795a66e]
  [2] bstore_print_backtrace_named() at ??:? [0x7fcd9795a78f]
  [3] PL_get_signum_ex() at ??:? [0x7fcd978e8853]
  [4] killpg() at ??:? [0x7fcd97491f20]
  [5] pl_filled_array4_va() at ??:? [0x7fcd978c7efd]
  [6] pl_filled_array4_va() at ??:? [0x7fcd978c86c9]
  [7] pl_filled_array4_va() at ??:? [0x7fcd978c8848]
  [8] PL_next_solution() at ??:? [0x7fcd978819bf]
  [9] PL_call_predicate() at ??:? [0x7fcd97890c3d]
  [10] pl_pce_init() at ??:? [0x7fcd9528adae]
  [11] pl_pce_init() at ??:? [0x7fcd9528ae40]
  [12] PL_next_solution() at ??:? [0x7fcd978818ed]
  [13] pl_skip_list3_va() at ??:? [0x7fcd978ce2cf]
  [14] pl_skip_list3_va() at ??:? [0x7fcd978ce50b]
  [15] PL_next_solution() at ??:? [0x7fcd978819bf]
  [16] PL_interrupt() at ??:? [0x7fcd978ee910]
  [17] PL_next_solution() at ??:? [0x7fcd9788d1d3]
  [18] pl_skip_list3_va() at ??:? [0x7fcd978cddb4]
  [19] pl_skip_list3_va() at ??:? [0x7fcd978ce65b]
  [20] PL_toplevel() at ??:? [0x7fcd9787a5dd]
  [21] swipl(+0x7c5) [0x55ea01aed7c5]
  [22] __libc_start_main() at ??:? [0x7fcd97474b97]
  [23] swipl(+0x80a) [0x55ea01aed80a]
Prolog stack:
  [38] system:term_attvars/2 [PC=1 in supervisor]
  [37] $attvar:copy_term/3 [PC=6 in clause 1]
  [36] pce_principal:send_implementation/3 [PC=36 in clause 150]
  [35] system:$c_call_prolog/0 [PC=0 in top query clause]
  [34] pce_principal:send/2 <foreign>
  [33] pce_prolog_tracer:show_bindings/2 [PC=200 in clause 1]
  [32] pce_prolog_tracer:prolog_show_frame/2 [PC=26 in clause 1]
  [30] pce_prolog_tracer:show/4 [PC=10 in clause 2]
  [29] pce_prolog_tracer:do_intercept_/4 [PC=26 in clause 5]
  [28] system:setup_call_catcher_cleanup/4 [PC=5 in clause 1]
  [24] pce_prolog_tracer:intercept_/4 [PC=48 in clause 1]
  [23] system:setup_call_catcher_cleanup/4 [PC=5 in clause 1]
  [19] system:$c_call_prolog/0 [PC=0 in top query clause]
  [18] system:notrace/1 <foreign>
  [17] pce_prolog_tracer:prolog_trace_interception_gui/4 [PC=23 in clause 1]
  [16] system:setup_call_catcher_cleanup/4 [PC=5 in clause 1]
  [12] system:$c_call_prolog/0 [PC=0 in top query clause]
  [11] lists:append/3 [PC=-1 in clause 2]
  [10] system:<meta-call>/1 [PC=8 in clause -1]
  [9] $toplevel:toplevel_call/1 [PC=3 in clause 1]
  [8] $toplevel:stop_backtrace/1 [PC=4 in clause 1]
  [7] $tabling:$wfs_call/2 [PC=17 in clause 1]
  [6] $toplevel:residue_vars/3 [PC=11 in clause 2]
  [5] $toplevel:$execute_goal2/3 [PC=29 in clause 1]
  [3] $toplevel:$query_loop/0 [PC=39 in clause 2]
Running on_halt hooks with status 139
Killing 13828 with default signal handlers
Segmentation fault

```

HTH

---

<div class="post-metadata">

**Author:** ![swi](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@swi](https://swi-prolog.discourse.group/u/swi)\
**Post date:** [June 2, 2020, 8:05pm UTC](https://swi-prolog.discourse.group/t/gtrace-append-l1-l2-1-2-3-crash-after-first-answer-is-shown/2454/3 "2020-06-02T20:05:09Z")

</div>

I can get it to crashh too, but only if I step through the debugger the first time:

```prolog
Welcome to SWI-Prolog (threaded, 64 bits, version 8.3.0-8-g80f40cdea-DIRTY)
2 ?- gtrace, append(L1,L2,[1,2,3]). % just pressing 'n' in the debugger
% The graphical front-end will be used for subsequent tracing
L1 = [],
L2 = [1, 2, 3] ;
L1 = [1],
L2 = [2, 3] ;
L1 = [1, 2],
L2 = [3] ;
L1 = [1, 2, 3],
L2 = [] ;
false.

3 ?- gtrace, append(L1,L2,[1,2,3]). % Pressing <space> and ;
L1 = [],
L2 = [1, 2, 3] ;

SWI-Prolog [thread 1 (main) at Tue Jun 2 16:01:50 2020]: received fatal signal 11 (segv)
C-stack trace labeled "crash":
  [0] save_backtrace() at /home/u/tmp/swipl-devel/build.release/../src/os/pl-cstack.c:332 [0x7f32202c9b01]
  [1] print_c_backtrace() at /home/u/tmp/swipl-devel/build.release/../src/os/pl-cstack.c:867 [0x7f32202c9d5c]
  [2] sigCrashHandler() at /home/u/tmp/swipl-devel/build.release/../src/os/pl-cstack.c:905 [0x7f32202c9e96]
  [3] dispatch_signal() at /home/u/tmp/swipl-devel/build.release/../src/pl-setup.c:545 [0x7f32202531dd]
  [4] __restore_rt() at sigaction.c:? [0x7f322001b3e0]
  [5] term_variables_loop() at /home/u/tmp/swipl-devel/build.release/../src/pl-prims.c:2988 [0x7f322023102c]
  [6] term_variables() at /home/u/tmp/swipl-devel/build.release/../src/pl-prims.c:3065 [0x7f32202317b6]
  [7] pl_term_attvars2_va() at /home/u/tmp/swipl-devel/build.release/../src/pl-prims.c:3127 [0x7f3220231928]
  [8] PL_next_solution() at /home/u/tmp/swipl-devel/build.release/../src/pl-vmi.c:3810 [0x7f32201ec467]
  [9] PL_call_predicate() at /home/u/tmp/swipl-devel/build.release/../src/pl-fli.c:4146 [0x7f32201f8658]
  [10] invoke() at /home/u/tmp/swipl-devel/build.release/../packages/xpce/swipl/interface.c:2148 [0x7f321ed843cb]
  [11] pl_send() at /home/u/tmp/swipl-devel/build.release/../packages/xpce/swipl/interface.c:2215 [0x7f321ed84480]
  [12] PL_next_solution() at /home/u/tmp/swipl-devel/build.release/../src/pl-vmi.c:3844 [0x7f32201ec39c]
  [13] callProlog() at /home/u/tmp/swipl-devel/build.release/../src/pl-pro.c:391 [0x7f3220237316]
  [14] pl_notrace1_va() at /home/u/tmp/swipl-devel/build.release/../src/pl-pro.c:268 [0x7f322023759b]
  [15] PL_next_solution() at /home/u/tmp/swipl-devel/build.release/../src/pl-vmi.c:3810 [0x7f32201ec467]
  [16] traceInterception() at /home/u/tmp/swipl-devel/build.release/../src/pl-trace.c:1239 [0x7f3220258b0b]
  [17] PL_next_solution() at /home/u/tmp/swipl-devel/build.release/../src/pl-wam.c:3299 [0x7f32201eef75]
  [18] query_loop() at /home/u/tmp/swipl-devel/build.release/../src/pl-pro.c:144 [0x7f3220236e8f]
  [19] prologToplevel() at /home/u/tmp/swipl-devel/build.release/../src/pl-pro.c:483 [0x7f32202376fb]
  [20] PL_toplevel() at /home/u/tmp/swipl-devel/build.release/../src/pl-fli.c:4586 [0x7f32201e0e4e]
  [21] swipl(+0x10a5) [0x5592020660a5]
  [22] __libc_start_main() at ??:? [0x7f3220006002]
  [23] swipl(+0x10ee) [0x5592020660ee]
Prolog stack:
  [38] system:term_attvars/2 [PC=1 in supervisor]
  [37] $attvar:copy_term/3 [PC=6 in clause 1]
  [36] pce_principal:send_implementation/3 [PC=36 in clause 150]
  [35] system:$c_call_prolog/0 [PC=0 in top query clause]
  [34] pce_principal:send/2 <foreign>
  [33] pce_prolog_tracer:show_bindings/2 [PC=200 in clause 1]
  [32] pce_prolog_tracer:prolog_show_frame/2 [PC=26 in clause 1]
  [30] pce_prolog_tracer:show/4 [PC=10 in clause 2]
  [29] pce_prolog_tracer:do_intercept_/4 [PC=26 in clause 5]
  [28] system:setup_call_catcher_cleanup/4 [PC=5 in clause 1]
  [24] pce_prolog_tracer:intercept_/4 [PC=48 in clause 1]
  [23] system:setup_call_catcher_cleanup/4 [PC=5 in clause 1]
  [19] system:$c_call_prolog/0 [PC=0 in top query clause]
  [18] system:notrace/1 <foreign>
  [17] pce_prolog_tracer:prolog_trace_interception_gui/4 [PC=23 in clause 1]
  [16] system:setup_call_catcher_cleanup/4 [PC=5 in clause 1]
  [12] system:$c_call_prolog/0 [PC=0 in top query clause]
  [11] lists:append/3 [PC=-1 in clause 2]
  [10] system:<meta-call>/1 [PC=8 in clause -1]
  [9] $toplevel:toplevel_call/1 [PC=3 in clause 1]
  [8] $toplevel:stop_backtrace/1 [PC=4 in clause 1]
  [7] $tabling:$wfs_call/2 [PC=17 in clause 1]
  [5] $toplevel:$execute_goal2/3 [PC=29 in clause 1]
  [3] $toplevel:$query_loop/0 [PC=39 in clause 2]
  [2] $toplevel:$runtoplevel/0 [PC=19 in clause 1]
Running on_halt hooks with status 139
Killing 663742 with default signal handlers
[2] 663742 segmentation fault (core dumped) swipl

```

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [June 2, 2020, 8:36pm UTC](https://swi-prolog.discourse.group/t/gtrace-append-l1-l2-1-2-3-crash-after-first-answer-is-shown/2454/4 "2020-06-02T20:36:00Z")

</div>

Also crashes on Ubuntu 18.04 with SWI-Prolog 8.3.0 (installed from the “dev” PPA).

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [June 3, 2020, 10:27am UTC](https://swi-prolog.discourse.group/t/gtrace-append-l1-l2-1-2-3-crash-after-first-answer-is-shown/2454/5 "2020-06-03T10:27:42Z")

</div>

Reproduces fine. Thanks for reporting. Bottom line is a Prolog stack corruption. The sad thing is that when I enable all internal consistency checks to get as close as possible to the step that causes the corruption, the problem vanishes ☹ Probably for tomorrow …

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [June 4, 2020, 8:48am UTC](https://swi-prolog.discourse.group/t/gtrace-append-l1-l2-1-2-3-crash-after-first-answer-is-shown/2454/6 "2020-06-04T08:48:21Z")

</div>

Found and fixed in both stable and devel git versions. Bottom line is that getting the local variables for the source level debugger could fetch uninitialized variables after backtracking to the next clause. This issue only affects the graphical debugger.
