Hi Andrea,

The dialog that pops up says "data stack underflow", which given that all
operations essentially compute on the data stack means you had insufficient
objects on the stack for the computation. I just realized we don't document
what this means in a very discoverable way:

    http://docs.factorcode.org/content/word-datastack-underflow
.,debugger.html

If you look at the traceback, you see a "1" and a kernel-error which in
this case is the data stack underflow error tuple (perhaps we could
prettyprint it nicer here so it matches the dialog that popped up).  In the
bottom window, you see the computations from the top listener to the bottom
where the signal-handler trapped the data stack underflow.  Right above the
signal-handler you see * which was the operation that triggered it.

So just with that information you can see you tried to apply the *
operation to a 1 and nothing underneath the stack.  Essentially this error
is a "compile-time" error, frequently due to bad stack effects, you can see
this error isolated by

1) using infer to check the stack effects of the operation:

    IN: scratchpad [ { 1 2 -2 3 } [ * ] collect-by ] infer

    The input quotation to “collect-by” doesn't match its expected effect
    Input Expected               Got
    [ * ] ( ... obj -- ... key ) ( x x -- x )

2) putting your operation into a word, which is frequently a useful way to
build more complex expressions, which essentially shows the same error and
is unable to compile your expression into a word that can be called:

    IN: scratchpad : foo ( seq -- seq' ) [ * ] collect-by ;
    :errors - show 1 compiler errors

    IN: scratchpad :errors
    ...
    The input quotation to “collect-by” doesn't match its expected effect
    Input Expected               Got
    [ * ] ( ... obj -- ... key ) ( x x -- x )

For debugging code, I encourage you to look over the docs for the walker,
which allows you to put breakpoints and step forward and backward and into
code:

    http://docs.factorcode.org/content/article-ui-walker.html

This feedback is very helpful and we can make some improvements here -
sometimes its easy to forgot what it was like to learn when I started
blogging a couple years ago.

Best,
John.


On Sat, Oct 11, 2014 at 6:59 AM, Andrea Ferretti <ferrettiand...@gmail.com>
wrote:

> Hi, I am relatively new to Factor, and I am trying understand how to
> debug programs in it.
>
> Whenever I make an error, a popup suggests to Traceback and open the
> debugger. Now, I am used to the debugger in, say, Smalltalk, where I
> can browse the current local variables, step into code, edit
> definitions and so on.
>
> Of course the Factor debugger does not show local variables, but this
> makes the process of debugging completely incomprehensible to me.
>
> For the sake of a trivial example, say I want to group a list of
> numbers by their square, and I enter
>
> { 1 2 -2 3 } [ * ] collect-by
>
> where the correct form would be
>
> { 1 2 -2 3 } [ dup * ] collect-by
>
> I see that the call stack holds words having to do with the listener
> thread both on top and on bottom, where I would have expected to have
> something related to collect-by.
>
> The data stack only informative item is something with the name
> "kernel-error", and the retain stack (what that even is?) holds a few
> numbers, a few empty containers and a composition which seems the only
> item relevant to what I have entered.
>
> Can someone explain the process to figure out where the error is, or
> to analyze the situation in more detail? I have the feeling the
> debugger is a powerful tool, but at my level of experience I cannot
> make head or tails of it.
>
>
> ------------------------------------------------------------------------------
> Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
> Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
> Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
> Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
> http://p.sf.net/sfu/Zoho
> _______________________________________________
> Factor-talk mailing list
> Factor-talk@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>
------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://p.sf.net/sfu/Zoho
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to