필터 지우기
필터 지우기

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