<div dir="ltr"><br><div><br></div><div>Hi, </div><div><br></div><div>I am struggling to debug a loop (some nontermination behaviour) of a huge program. Normally, I use `stack build` to generate it. I have tried to use `trace` at lots of places in the code, recompile and see what happens. However, it isn't always clear in what order the trace statements are fired, because of the lazy evaluation of Haskell. </div><div><br></div><div>So I tried another approach. I have a function</div><div><br></div><div><div style="color:rgb(192,192,192);background-color:rgb(32,32,32);font-family:Consolas,"Courier New",monospace;font-size:14px;line-height:19px;white-space:pre"><div><span style="color:rgb(130,170,255)">fatal</span> <span style="color:rgb(199,146,234)">::</span> HasCallStack <span style="color:rgb(199,146,234)">=></span> Text <span style="color:rgb(199,146,234)">-></span> <span style="color:rgb(51,119,119)">a</span></div><div>fatal msg <span style="color:rgb(199,146,234)">=</span></div><div>  exitWith <span style="color:rgb(199,146,234)">.</span> Fatal <span style="color:rgb(199,146,234)">.</span> <span style="color:rgb(255,203,107)">T.</span>lines <span style="color:rgb(199,146,234)">$</span></div><div>    <span style="color:rgb(137,221,255)">(</span> msg <span style="color:rgb(199,146,234)"><></span> <span style="color:rgb(137,221,255)">"\n"</span><br></div><div>        <span style="color:rgb(199,146,234)"><></span> <span style="color:rgb(137,221,255)">(</span>utf8BuilderToText <span style="color:rgb(199,146,234)">.</span> displayCallStackFull <span style="color:rgb(199,146,234)">$</span> callStack<span style="color:rgb(137,221,255)">)</span><br></div><div>    <span style="color:rgb(137,221,255)">)</span></div><div></div></div></div><div> </div><div><div style="color:rgb(192,192,192);background-color:rgb(32,32,32);font-family:Consolas,"Courier New",monospace;font-size:14px;line-height:19px;white-space:pre"><div><span style="color:rgb(130,170,255)">displayCallStackFull</span> <span style="color:rgb(199,146,234)">::</span> CallStack <span style="color:rgb(199,146,234)">-></span> Utf8Builder</div><div>displayCallStackFull cs <span style="color:rgb(199,146,234)">=</span></div><div>  <span style="color:rgb(137,221,255)">case</span> reverse <span style="color:rgb(199,146,234)">$</span> getCallStack cs <span style="color:rgb(137,221,255)">of</span></div><div>    <span style="color:rgb(137,221,255)">[]</span> <span style="color:rgb(199,146,234)">-></span> <span style="color:rgb(137,221,255)">"</span><span style="color:rgb(195,232,141)"><no call stack found></span><span style="color:rgb(137,221,255)">"</span></div><div>    xs <span style="color:rgb(199,146,234)">-></span> mconcat <span style="color:rgb(199,146,234)">$</span> fmap showCall xs</div><div>  <span style="color:rgb(247,140,108)">where</span></div><div>    <span style="color:rgb(130,170,255)">showCall</span> <span style="color:rgb(199,146,234)">::</span> <span style="color:rgb(137,221,255)">(</span>String<span style="color:rgb(137,221,255)">,</span> SrcLoc<span style="color:rgb(137,221,255)">)</span> <span style="color:rgb(199,146,234)">-></span> Utf8Builder</div><div>    showCall <span style="color:rgb(137,221,255)">(</span>desc<span style="color:rgb(137,221,255)">,</span> loc<span style="color:rgb(137,221,255)">)</span> <span style="color:rgb(199,146,234)">=</span></div><div>      <span style="color:rgb(247,140,108)">let</span> file <span style="color:rgb(199,146,234)">=</span> srcLocFile loc</div><div>       <span style="color:rgb(247,140,108)">in</span> <span style="color:rgb(137,221,255)">"\n"</span></div><div>            <span style="color:rgb(199,146,234)"><></span> fromString file</div><div>            <span style="color:rgb(199,146,234)"><></span> <span style="color:rgb(137,221,255)">"</span><span style="color:rgb(195,232,141)">:</span><span style="color:rgb(137,221,255)">"</span></div><div>            <span style="color:rgb(199,146,234)"><></span> displayShow <span style="color:rgb(137,221,255)">(</span>srcLocStartLine loc<span style="color:rgb(137,221,255)">)</span></div><div>            <span style="color:rgb(199,146,234)"><></span> <span style="color:rgb(137,221,255)">"</span><span style="color:rgb(195,232,141)">:</span><span style="color:rgb(137,221,255)">"</span></div><div>            <span style="color:rgb(199,146,234)"><></span> displayShow <span style="color:rgb(137,221,255)">(</span>srcLocStartCol loc<span style="color:rgb(137,221,255)">)</span></div><div>            <span style="color:rgb(199,146,234)"><></span> <span style="color:rgb(137,221,255)">"</span><span style="color:rgb(195,232,141)"> </span><span style="color:rgb(137,221,255)">"</span></div><div>            <span style="color:rgb(199,146,234)"><></span> fromString desc</div><br></div></div><div><br></div><div>(The function to show the stack was inspired from <a href="https://hackage.haskell.org/package/rio-0.1.22.0/docs/RIO.html#v:displayCallStack">https://hackage.haskell.org/package/rio-0.1.22.0/docs/RIO.html#v:displayCallStack</a>).</div><div><br></div><div>I would expect that at any place where I force a call to `fatal`, I would get the full stacktrace. Unfortunately, I only get the place where the call to fatal is in the code. </div><div><br></div><div>I have been looking at the documentation of both stack and ghc, but I don't understand how to compile my code in a way that the full stacktrace is shown. </div><div><br></div><div>Until now the best guess I have is </div><div><br></div><div>stack install --profile --no-strip && ampersand -- check testing/Sentinel/Tests/ShouldSucceed/OnlyValidation/Issue280.adl<br></div><div><br></div><div>The ultimate goal is to get rid of this ugly bug regarding the loop. Any help/suggestions is really appreciated!</div><div><br></div><div>Thanks for reading.</div><div>Han Joosten</div><div><br></div><div><br></div><div><br></div></div>