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

7 次查看(过去 30 天)
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!

采纳的回答

Anderson
Anderson 2013-5-31
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!

更多回答(2 个)

David Sanchez
David Sanchez 2013-5-31
  3 个评论
David Sanchez
David Sanchez 2013-5-31
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 2013-5-31
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.

请先登录,再进行评论。


Kaustubha Govind
Kaustubha Govind 2013-5-31
You could try using dbstop if error to see if the execution breaks when the error occurs.
  1 个评论
Anderson
Anderson 2013-5-31
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....

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Simulink Functions 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by