debugging similar algorithms
stephane ducasse
stephane.ducasse at free.fr
Fri Jan 5 16:40:33 UTC 2007
Have a look at what Andreas Zeller is doing for automatic debugging.
This would be great to have that in squeak.
Stef
On 5 janv. 07, at 15:43, Ralph Boland wrote:
> I have implemented a tool for helping me debug some algorithms that
> are
> very similar but I need some help in improving how it works.
>
> I have a set of implementations of algorithms that all compute the
> same result.
> I normally run two implementations (lets say C and E) at a time
> and
> compare the runs for speed, space used, and other characteristics.
> If the implementations are correct both runs return the same result
> but
> if there is a bug the results may be different.
>
> If the results are different I track down the problem by running a
> method
> called traceBug. (Tracebug is started by pressing a button).
> The high level part of each implementation is the same but they
> each invoke a method
> which is different for each implementation.
> Let's say C invokes Mc and E invokes Me where Mc and Me
> are different.
> Note that Mc (if it has no bugs) always computes the same result
> for the same
> input parameters. Similarly for Me.
>
> Conceptually, TraceBug works as follows.
> Repeat
> If C has not been started start it. Continue running C
> until Mc is invoked.
> Store the result of Mc, in Ac.
> If E has not been started start it. Continue running E
> until Me is invoked.
> Store the result of Me in Ae.
> Until Ac and Ae are different. // since there is a bug this
> must happen
>
> Ac and Ae are arrays. Since they are different, for some index
> i, Ac[i] != Ae[i].
> TraceBug now invokes M'c where is M'c takes the same
> parameters as Mc
> except for one additional parameter i. M'c does the same
> computations as Mc
> except that when the value Ac[i] is about to be computed a halt is
> invoked thus
> bringing up the debugger.
>
> I can now use the debugger to investigate how Ac[i] is computed!
> I also invoke traceBug so that the halt occurs when Ae[i] is about
> to be computed.
>
> Thus by running traceBug twice I am able to bring up two debuggers
> somewhere
> near where my bug is! Having two debuggers up at the same time
> is very useful in finding where my bug is!
>
> I would like to be able to improve traceBug in two ways.
>
> First, I would like to only press the traceBug button once.
> This means that once the debugger is brought up traceBug needs to
> be restarted
> so that it can cause the second debugger to come up.
> Obviously this can be done but I don't know how to do it.
>
> Second, instead of restarting traceBug from the beginning, I would
> like to
> have it be restarted at the point immediately after the line where
> M'c is invoked.
> It could then immediately invoke M'e. This would avoid running
> C and E twice
> and thus be faster. This is not that important to me since C
> and E are
> usually fast (a few seconds), but I would like to know how to do
> this and I may
> deal with slower algorithms in the future.
>
> Thanks in advance for any advice.
>
> Ralph
>
>
>
>
>
More information about the Squeak-dev
mailing list
|