When a Matlab function block running inside a simulink model gives an error, how can I find out which line the error occurred on?

6 visualizzazioni (ultimi 30 giorni)
When running a Simulink model that contains an "Interpreted Matlab Function" block, if an error occurs inside the Matlab function there seems to be no easy way to find out what line of the function gave the error. When the error occurs, a Simulink Diagnostics window pops up telling me what error occurred and which block it occurred in. But is doesn't say what line of the function caused the error.
This is a problem I encounter frequently, and it is difficult to debug. For instance, it just occurred about a half hour into a simulation. What I'll probably do is start outputting a bunch of values to the command window so I can get an idea where in the function the error occurred, but I can take a very long time to find the error this way when it occurs far along in the simulation.
It seems like Matlab must know what line caused the error, right? How can I get it to tell me?
Thanks for any help!

Risposta accettata

Anderson
Anderson il 31 Mag 2013
Okay, a co-worker (Alexander Brissette) came up with a good solution using try-catch. It works like this:
try
<code that might produce error>
catch err
err
err.stack
line = err.stack(1).line
end
This prints the error, filename, and line number. You can also put a breakpoint in the "catch" block so you can see all your variables when an error occurs. You could put an entire function inside the try block. And it works even when the function is called from within Simulink!

Più risposte (2)

David Sanchez
David Sanchez il 31 Mag 2013
  3 Commenti
David Sanchez
David Sanchez il 31 Mag 2013
For what you say, it seems your code has to be right, does any signal become complex during runtime? What messages do you receive from simulink?
Anderson
Anderson il 31 Mag 2013
The two simulink error messages are: Error in Interpretted Matlab Function block and Matrix dimension must agree
Unfortunately there are at least several hundred matrix operations in the function that gives the error, so it's a tedious process to narrow down.
If you mean "complex" as in (real+imaginary), no, there are no complex signals.

Accedi per commentare.


Kaustubha Govind
Kaustubha Govind il 31 Mag 2013
You could try using dbstop if error to see if the execution breaks when the error occurs.
  1 Commento
Anderson
Anderson il 31 Mag 2013
That seemed like a good idea, but it didn't work. It appears that "dbstop if error" is ignored when a function is called from within Simulink. I do not "clear all" before running, so I'm not sure why Simulink would ignore the dbstop....

Accedi per commentare.

Categorie

Scopri di più su Simulink Functions in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by