<div dir="ltr">Thanks for the pointers. I never realized that "simulated call-stack" could be something different than the HasCallStack stuff. When I used the following command, I get the callstack info I was looking for:<div><br></div><div>stack install --profile --no-strip --ghc-options -fprof-auto-calls && ampersand -- check testing/Sentinel/Tests/ShouldSucceed/OnlyValidation/Issue280.adl<br></div><div><br></div><div>I hope this will help me to find the loop.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Op do 22 sep. 2022 om 11:52 schreef Dominik Schrempf <<a href="mailto:dominik.schrempf@gmail.com">dominik.schrempf@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I just noticed, maybe you are interested in the `-xc` runtime system<br>
option? This option can be activated when compiling with profiling<br>
support. See here:<br>
<br>
<a href="https://downloads.haskell.org/ghc/latest/docs/users_guide/profiling.html#rts-flag--xc" rel="noreferrer" target="_blank">https://downloads.haskell.org/ghc/latest/docs/users_guide/profiling.html#rts-flag--xc</a><br>
<br>
Dominik<br>
<br>
Dominik Schrempf <<a href="mailto:dominik.schrempf@gmail.com" target="_blank">dominik.schrempf@gmail.com</a>> writes:<br>
<br>
> Han Joosten <<a href="mailto:han.joosten.han@gmail.com" target="_blank">han.joosten.han@gmail.com</a>> writes:<br>
><br>
>> Hi,<br>
>><br>
>> 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<br>
>> `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,<br>
>> because of the lazy evaluation of Haskell.<br>
>><br>
>> So I tried another approach. I have a function<br>
>><br>
>> fatal :: HasCallStack => Text -> a<br>
>> fatal msg =<br>
>>   exitWith . Fatal . T.lines $<br>
>>     ( msg <> "\n"<br>
>>         <> (utf8BuilderToText . displayCallStackFull $ callStack)<br>
>>     )<br>
>><br>
>> displayCallStackFull :: CallStack -> Utf8Builder<br>
>> displayCallStackFull cs =<br>
>>   case reverse $ getCallStack cs of<br>
>>     [] -> "<no call stack found>"<br>
>>     xs -> mconcat $ fmap showCall xs<br>
>>   where<br>
>>     showCall :: (String, SrcLoc) -> Utf8Builder<br>
>>     showCall (desc, loc) =<br>
>>       let file = srcLocFile loc<br>
>>        in "\n"<br>
>>             <> fromString file<br>
>>             <> ":"<br>
>>             <> displayShow (srcLocStartLine loc)<br>
>>             <> ":"<br>
>>             <> displayShow (srcLocStartCol loc)<br>
>>             <> " "<br>
>>             <> fromString desc<br>
>><br>
>> (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" rel="noreferrer" target="_blank">https://hackage.haskell.org/package/rio-0.1.22.0/docs/RIO.html#v:displayCallStack</a>).<br>
>><br>
>> 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<br>
>> fatal is in the code.<br>
><br>
> Hi.<br>
><br>
> Do the calling functions have call stack constraints?<br>
><br>
> Quoting from the GHC manual: <a href="https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/callstack.html" rel="noreferrer" target="_blank">https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/callstack.html</a><br>
><br>
> "The call stack will only extend as far as the types allow it."<br>
><br>
> I think compilation with `--profile` (stack) or `--enable-profiling` (cabal-install) activates "simulated call-stacks" which seem to differ from the call stacks obtained by `HasCallStack`. Is this correct?<br>
><br>
> On a side note: I usually get a complete call stacks when compiling with `cabal build --enable-profiling`.<br>
><br>
> Dominik<br>
><br>
>><br>
>> 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<br>
>> shown.<br>
>><br>
>> Until now the best guess I have is<br>
>><br>
>> stack install --profile --no-strip && ampersand -- check testing/Sentinel/Tests/ShouldSucceed/OnlyValidation/Issue280.adl<br>
>><br>
>> The ultimate goal is to get rid of this ugly bug regarding the loop. Any help/suggestions is really appreciated!<br>
>><br>
>> Thanks for reading.<br>
>> Han Joosten<br>
>><br>
>> _______________________________________________<br>
>> Haskell-Cafe mailing list<br>
>> To (un)subscribe, modify options or view archives go to:<br>
>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
>> Only members subscribed via the mailman list are allowed to post.<br>
</blockquote></div>