how to track down out-of-bounds error?

Derek Elkins ddarius@hotpop.com
Wed, 28 May 2003 10:35:00 -0400


On Wed, 28 May 2003 09:36:31 -0400
David Roundy <droundy@abridgegame.org> wrote:

> In some code which uses UArrays, I'm getting the following error:
> 
> Fail: Ix{Int}.index: Index (3723) out of range ((0,3722))
> 
> Presumably this means I'm trying to access one beyond the end of an
> array. The problem is trying to figure out where I'm doing this. 
> Unfortunately, I have only been able to see this error on a rather
> large test repository, where it takes seven minutes for the test to
> show up.
> 
> Any suggestions how I might most easily track this bug down?
> -- 
> David Roundy
> http://www.abridgegame.org

1) (If you are using GHC) compile for
profiling and use the -xc runtime option.  This causes GHC to dump a
"stack" dump when an exception is thrown.

2) See the various debuggers that are out there.  I haven't used Hat
(is a pain to compile on Win2k with 64MB) but it seems like your best
bet. Buddha may work but it would require you to mark a lot of code
trusted likely to avoid running out of memory or taking all day.

3) Classic debugging: throw traces (or use HOOD, HOOD is Debug.Trace on
massive steroids) in suspected parts of your code and see what looks
wrong.  I think HOOD has some kind of support for exceptions so it may
dump out some very helpful information.

4) Classic debugging part two: chop out code, make tests, you certainly
know the drill.