caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Martin Jambon <martin_jambon@emailuser.net>
To: Andries Hekstra <andries.hekstra@philips.com>
Cc: Richard Jones <rich@annexia.org>, caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Line number for index out of bounds
Date: Sun, 12 Mar 2006 02:17:37 -0800 (PST)	[thread overview]
Message-ID: <Pine.LNX.4.63.0603120200550.25541@droopy> (raw)
In-Reply-To: <OFC6075907.4EE9D09A-ONC1257129.0068BB72-C1257129.00693835@philips.com>

On Mon, 6 Mar 2006, Andries Hekstra wrote:

> Dear Richard,
>
> Thanks for your email. I indeed use native code as I need the speed. My
> program is 3500 lines, and includes multi-dimensional arrays, to putting
> try's everywhere by hand is out of the question. I would then have to
> write a metaprogram that adds such try commands to an existing OCaml
> program and outputs a longer program with the try's with the asserts. If
> possible I would like to postpone that and try your other option.

I finally finished to implement a syntax extension that I once started to 
write, and gave up because of the difficulty. The result is a horribly 
long syntax extension, but it should work well with strings, arrays and 
bigarrays for both read and write accesses.

The syntax uses "#" instead of ".", but you can change this, if you don't 
want to change your program. There is also an option which allows you to 
restore the native mode. It's all there:

   http://martin.jambon.free.fr/ocaml.html#bounds

I tried it on a real program of my own which uses lots of arrays: my 
program runs 2-3 times slower than before, but this is due to a 
short piece of code. If I use regular array accesses in 
this portion of code, it works just as fast as before.

Well, that was not an easy syntax extension, but I'm satisfied with the 
result.
I hope you'll like it!


Martin

> Due to this crashing business I go on a business trip to Asia without any
> ready simulation results for one week.
>
>> * Use bytecode, and before running the program set the environment
>> variable OCAMLRUNPARAM=b which will print a stack trace.
>
> If I would use this week of the trip to try this suggestion you made, how
> will the stack trace give me the line number?
>
> Best regards,
>
> Andries
>
> ------------------------------------------------------------------------
> Dr. Ir. Andries P. Hekstra
> Philips Research
> High Tech Campus 27  (WL-1-4.15)
> 5656 AG Eindhoven
> Tel./Fax/Secr. +31 40 27 42048/42566/44051
>   *  Good open source break software for computer users :
> http://www.workrave.org
>
>
>
>
>
>
>
>
> Richard Jones <rich@annexia.org>
> 06-03-2006 12:14
>
> To
> Andries Hekstra/EHV/RESEARCH/PHILIPS@PHILIPS
> cc
> caml-list@yquem.inria.fr
> Subject
> Re: [Caml-list] Line number for index out of bounds
> Classification
>
>
>
>
>
>
>
> On Mon, Mar 06, 2006 at 11:44:31AM +0100, Andries Hekstra wrote:
>> Invalid_argument("index out of bounds")
> [...]
>> Of course, I am very curious in which line number of the program this
>> exception occurs.
>> Is there any way to get hold of this line number?
>
> This is a real problem with OCaml - it's impossible to get stack
> traces of where an exception happens with native code.  I'm assuming
> you're using native code.  I commonly have cases where a program dies
> with "exception: Not_found" because I forgot to enclose some List.find
> with an appropriate try ... with clause, or made some wrong
> assumption.  Tracking these down is time-consuming.
>
> Possible workarounds:
>
> * Use bytecode, and before running the program set the environment
> variable OCAMLRUNPARAM=b which will print a stack trace.
>
> * Surround every possible array index with a try ... with expression
> like this:
>
>  try
>    (* code which accesses the array *)
>  with
>    Invalid_argument "index out of bounds" -> assert false
>
> The "assert false" will print the line and character number of the
> assertion.
>
> * Hack ocamlopt to be able to print exceptions properly :-)
>
> Rich.
>
> -- 
> Richard Jones, CTO Merjis Ltd.
> Merjis - web marketing and technology - http://merjis.com
> Team Notepad - intranets and extranets for business -
> http://team-notepad.com
>
>

--
Martin Jambon, PhD
http://martin.jambon.free.fr

Edit http://wikiomics.org, bioinformatics wiki


  parent reply	other threads:[~2006-03-12 10:20 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-06 10:44 Andries Hekstra
2006-03-06 11:14 ` [Caml-list] " Richard Jones
2006-03-06 14:39   ` Markus Mottl
2006-03-06 19:08   ` Andries Hekstra
2006-03-06 19:53     ` Richard Jones
2006-03-12 10:17     ` Martin Jambon [this message]
2006-03-12 11:02       ` Richard Jones
2006-03-11 13:26   ` [Caml-list] Line number for index out of bounds / Exceptions for left hand side of assignments Andries Hekstra
2006-03-07 15:55 ` [Caml-list] Line number for index out of bounds Alan Falloon
2006-03-06 13:11 Jonathan Harrop
2006-03-07  9:39 ` Nicolas Pouillard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.63.0603120200550.25541@droopy \
    --to=martin_jambon@emailuser.net \
    --cc=andries.hekstra@philips.com \
    --cc=caml-list@yquem.inria.fr \
    --cc=rich@annexia.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).