Hello everybody,
I am trying to catch an error and I have made the following code in Matlab:
catch ME
% Some error occurred if you get here.
errorMessage1 = sprintf('Error in function %s()\n',ME.stack.name);
errorMessage2 = sprintf('Error in line %d\n',ME.stack(1).line);
errorMessage3 = sprintf('Error %s()\n',ME.message);
fprintf(2,'-----------------------------\n');
fprintf(2,'%s\n', errorMessage1);
fprintf(2,'-----------------------------\n');
fprintf(2,'%s\n', errorMessage2);
fprintf(2,'-----------------------------\n');
fprintf(2,'%s\n', errorMessage3);
The output of Matlab is the following one:
Error in hello()
Error in line 386
Error Index exceeds matrix dimensions.()
But, when I execute matlab from de Linux console:
./matlab < hello.m
I just get this output:
Index exceeds matrix dimensions
I cannot see the line or the .m I am running.
What kind of problem is this?
Thanks in advance,
Javi

 Akzeptierte Antwort

Jan
Jan am 10 Okt. 2017
Bearbeitet: Jan am 10 Okt. 2017

1 Stimme

If you write the message to stderr by
fprintf(2, '%s\n', errorMessage1);
you have to catch this channel also. Try:
fprintf(1, '%s\n', errorMessage1);
Perhaps this works instead, but I cannot try it currently and hopefully someone corrects me:
matlab -r hello.m 2>&1

12 Kommentare

Javier Naranjo
Javier Naranjo am 10 Okt. 2017
Can you explain me 2>&1 what exactly does?
I used fprintf(1,..) and it did not work...
Jan
Jan am 10 Okt. 2017
But 2>&1 works? I did not work with Linux for 20 years now...
This redirects the stream 2 (stderr) to 1 (stdout). See https://en.wikipedia.org/wiki/Redirection_(computing).
Do you see that I have used "matlab -r hello.m" instead of "matlab < hello.m"?
Javier Naranjo
Javier Naranjo am 10 Okt. 2017
Thanks for your help.
But it seems not to work...
I just get the fprintf of the error, not the line or function
Jan
Jan am 11 Okt. 2017
This is not clear: What exactly is "the fprintf of the error"? Do you get any output from stdout? I'm surprised that fprintf(1, ...) does not work.
Javier Naranjo
Javier Naranjo am 12 Okt. 2017
Bearbeitet: Javier Naranjo am 12 Okt. 2017
The problem is that when I execute the script in MATLAB and I get an error I can see the 3 fprintf in the console (MATLAB console) (errorMessage1, errorMessage2,...)
On the other hand, when I execute in the Linux Console ./matlab < hello.m and I get an error it does not show any of the errorMessage and I only get for example: Index exceeds matrix dimensions.
I do not see the fprintf of the line or the function.
Thanks for your help
Javier Naranjo
Javier Naranjo am 17 Okt. 2017
Bearbeitet: Javier Naranjo am 17 Okt. 2017
Thanks you so much! It worked! I am running hello.m from another script that opens and closes a diary.
The little problem now is that I get:
No MATLAB command specified
in the Linux Console when I run:
sudo ./matlab -r < getOutput.m -nosplash -nodesktop
It seems to be a warning... any idea how to solve this issue?
Thanks again!
Try
./matlab -r getOutput.m -nosplash -nodesktop
without the <
Javier Naranjo
Javier Naranjo am 17 Okt. 2017
Bearbeitet: Javier Naranjo am 17 Okt. 2017
If I do not write down "<" and I execute
./matlab -r folder1/getOutput.m -nosplash -nodesktop
It turns:
not variable or function folder1
and it stays in an infinite loop.
Try to use quotes and provide an absolute path:
./matlab -r "~/folder1/getOutput.m" -nosplash -nodesktop
Or single quotes ' ?
/folder1/getOutput.m
|
Error: Unexpected MATLAB operator.
I tried with single and doble quotes and it did not work.. When I write down double it says too many input arguments.
Thanks
Jan
Jan am 19 Okt. 2017
Bearbeitet: Jan am 19 Okt. 2017
@Javier: Sorry, my mistake.
./matlab -r "cd('~/folder1'); getOutput" -nosplash -nodesktop
The parameter of the -r command must contain a valid Matlab command, not the path of a m-function. You can find more details in the documentation: https://www.mathworks.com/help/matlab/matlab_env/startup-options.html

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Startup and Shutdown finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 10 Okt. 2017

Bearbeitet:

Jan
am 19 Okt. 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by