Getting information about the last error message
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
.