MATLAB Answers

0

catching a value while matlab is running

Asked by Dimitrios on 21 Oct 2014
Latest activity Edited by per isakson
on 22 Oct 2014
I am building a simulation with many functions using OOP(beginner). Sometimes I have some values from different variables that are not desirable but I can not see them while the simulation is running. So I was wondering if there is any way to catch this value while the simulation is running. I believe it could be done inside the functions but there so many that its inefficient and time-consuming to do it. Can addlisterer be used for that or any other way? Any suggestions?
Thanks in advance

  5 Comments

I can't see a way around looking at all the events you are interested in, unless they are somehow related.
I can't help you with the specifics of OOP (I am biased against its use in Matlab) or addListener() since I have never used it. Just a quick look at the documentation tells me that you can pass the function you want to listen to as an argument, which can be used to simplify your code.
"some values from different variables" &nbsp Are the names of the variables known? Same name in many functions?
"Can addlisterer be used for that or any other way?" &nbsp Yes, but that requires you to add notify(handle), Notify listeners that event is occurring in 100 methods.
Thanks for the reply.The names of the variables are known.Same name in many functions.I ll try to use addlistener for first time then.(btw I cant find any video tutorial for that,only the example with the bank from the documentation.Anything else out there?) :p

Sign in to comment.

2 Answers

Answer by Robert Cumming on 22 Oct 2014

you could use listeners, but you could also use the dbstop ability to stop on condition, i.e.
dbstop in MFILE at LINENO if 'EXPRESSION'
where Expression is of the format:
myVariable > 1000
You can also add these conditionss interactively in the editor by right clicking on the line number and adding a Conditional Breakpoint.
By adding these conditions your code will stop if the condition is true and you can debug from there.

  0 Comments

Sign in to comment.


Answer by per isakson
on 22 Oct 2014
Edited by per isakson
on 22 Oct 2014

The documentation on Events and Listeners is okay and I didn't find any examples with banks. However, I had to run and modify the examples to really get it. See
I doubt that Events and Listeners is a good approach (to spy om a simulation). It takes some extra code to use Events and Listeners to peek on a running simulation. You will have to either make all the properties (variables) Observable or litter the code with notify. And I guess the performance will be hurt.
You need to make some serious experiments before you start adding code to 100 methods.
&nbsp
An alternative approach builds on the answer by Robert Cumming: &nbsp dbstop if error .... &nbsp I have a hammer and see a nail in your question :)
Building blocks
  • enable_spying.m &nbsp is a script, which contains statements like: &nbsp dbstop in mfile at lineno if my_spy( variables_of_interest ). &nbsp It will be hundreds similar statements.
  • my_spy &nbsp always returns false. It shall not interrupt the simulation.
  • my_spy &nbsp could cause all sorts of side effects, which is the trick: &nbsp make test on the input arguments; add point to a diagram; call a logger (e.g. log4m); etc.
  • log4m - A powerful and simple logger for matlab, by Luke Winslow (and there a few more loggers in the File Exchange)
  • ALWAYSONTOPby Elmar Tarajan to keep the diagram visible
  • tracer4m excels in the use of side effects of &nbsp dbstop in mfile at lineno if foo
Use
  • run the script, enable_spying.m
  • start your simulation
  • watch the output file of log4m with an editor. I use notepad++
Pro
  • not a single line of extra code in your simulation program
  • simple to switch on and off the spying feature
  • does not affect the performance when switched off
Con
  • non-standard. However, it is based on documented features of Matlab.
  • the script, enable_spying.m, must be edited to reflect changes in the code of the simulation program
  • and more - I guess

  0 Comments

Sign in to comment.