MATLAB Answers

1

Code in script is printing to command window

Asked by Bernoulli Lizard on 9 Aug 2012
Latest activity Commented on by James Van Zandt on 30 Jan 2019
I am editing a program that someone else wrote, and when I run it, each time it prints a number to the command window. I would like to find what line of code is causing this, but I can not find it and the script is many pages long. I have tried scanning to see if any line is missing the semi colon supresion and have also used find to search for "disp(", but I did not find anything.

  0 Comments

Sign in to comment.

2 Answers

Answer by Star Strider
on 9 Aug 2012
Edited by Star Strider
on 10 Aug 2012
 Accepted Answer

One option is to use the Editor debugging functions and set breakpoints. Set them and remove them down your code as necessary until you locate the area of the code where the number starts to display.
A similar approach is to insert a break or return statement at a particular point in your code and then see if the number displays. (Those statements will stop code execution at that line.) If the number displays, the statement producing it is before the return you inserted. I suggest you add something like
return % ==============================================
to your return statement so it will be easier to find later. If the number didn't display before that return, comment that return out (so you know where it was), and do the same thing several lines further down in your code. Keep doing this until you locate the area where the number starts to display. This will at least narrow your search. Then comment out particular lines of code until you locate the one that's displaying the number.
This approach is kludgy beyond description, but sometimes it's the only way to solve such problems.
Additional idea: if you can't find a line in your code that you know is displaying the number, check the code's dependencies with depfun. The original author of the code could have written a function, called by the code you have, that's displaying the number.

  1 Comment

Star Strider's method is an example of a binary search, which lets you cut down the length of code by a factor of two for each editing step. To speed this up, insert something like this in many places:
warning(' ');
(Note the space between the quotes). You'll get a bunch of printouts like this:
Warning:
> In myfunction (line 2)
Warning:
> In myfunction (line 22)
Warning:
> In myfunction (line 44)
This should narrow the range. Repeat to narrow it further.

Sign in to comment.


Answer by Daniel Shub
on 9 Aug 2012
Edited by Daniel Shub
on 9 Aug 2012

I can think of three ways of doing this.
  • Set break points to narrow down where the output occurs. This could involve a lot of trial and error and if the code takes a long time to run will be inefficient.
  • Overload disp and fprintf to be something like dbstack. Assuming the output is invoked by either of these two methods you will get the calling line number.
  • Use ECHO. The output will show you each line of code and what it produces.
I do not believe anyone starts their code with
clear all; close all; echo off;
anymore, so you should be pretty safe.
By the way I am wanting upvotes for finding a potentially useful way of reviving a long dead command

  0 Comments

Sign in to comment.