5353 Rate this article:
No rating

Getting information about the last error message

Mark Piper
Dave Hulslander is teaching a Scientific Programming with IDL class this week, and this morning he passed along a question from a student: when a runtime error occurs, how can you programmatically get the name of the file and the line number where the error occurred?

 

 

For example, let's say I have the following program:

pro throw_error
   compile_opt idl2
   
   print, a ; #fail
end
	

When called, THROW_ERROR will fail at the PRINT statement because you can't print an undefined variable in IDL:

IDL> throw_error
% PRINT: Variable is undefined: A.
% Execution halted at: THROW_ERROR         4 C:\Users\mpiper\blog\posts\20130823-get-last-er
  ror-message\throw_error.pro
%                      $MAIN$   	

You can see that IDL gives you the file and line in the file where the error occurred. But how can we get this programmatically?

Unfortunately, this information isn't included in !ERROR_STATE, the system variable that contains information on the last error that occurred, and also the place where I'd expect to find this information. Luckily, there a couple ways to get it. Here's one: use HELP with the LAST_MESSAGE and OUTPUT keywords:

IDL> help, /last_message, output=err_txt
IDL> help, err_txt
ERR_TXT         STRING    = Array[3]
IDL> print, err_txt
% PRINT: Variable is undefined: A.
% Execution halted at:  THROW_ERROR         4 C:\Users\mpiper\blog\posts\20130823-get-last-error-message\throw_error.pro
%                       $MAIN$ 
      

This is a little sloppy, but you can now use string processing routines to parse the error information out of the variable err_txt.

1 comments on article "Getting information about the last error message"

David Fanning

Or, you could just use cgErrorMsg from the Coyote Library. :-)

Catch, theError

IF theError NE 0 THEN BEGIN

Catch, /Cancel

void = cgErrorMsg()

RETURN

ENDIF

This will print out a nicely formatted traceback message with the line number where the error occurred.

Please login or register to post comments.