Momop's very own debugging guide to help you all out 
	 
	
		| Author | 
		Message | 
	 
		 
		Nick
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 9:12 am    Post subject: Momop's very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				MOMOP'S GUIDE TO PERFECT DEBUGGING!!!
 
 
 
This is not really a tuturial so much as a guide.  Don't you hate when you have written out a 1000 some odd program and it won't run or not how you want it too?
 
 
If you answered no then you can leave as this guide will not help you however if you answered yes then your normal
 
 
On to the guide
 
 
We will attempt to move a circle using the keyboard
 
 
now on to moving a circle!!!!!!!
 
 
	  | Turing: | 	 		  %The program that doesnt not run
%created by: Nick Hearn aka momop
%23-aug-07
%not too important just making program look nice
setscreen ("graphics:500;400,nobuttonbar,offscreenonly")
%some movement varibles
var circlex, circley  : int
var key  : array char of boolean
%draw your circle
drawfilloval (circlex, circley,  25,  25,  red)
%now to set these varibles
circlex  := 150
circley  := 150
%and so on
loop
    %allow the user to move circle
    Input.KeyDown (key )
    if key  ('w') then
        circley + = 5
    elsif key  ('s') then
        circley - = 5
    elsif key  ('a') then
        circlex - = 5
    elsif key  ('d') then
        circlex + = 5
    end if
end loop  | 	  
 
 
well that didnt work why not?
 
 
	  | Turing: | 	 		  varible has no value  | 	  
 
 
well thats not good we set the varible but turing is not reading it let's check over the program
 
 
well first of all we did set the circlex and circley varibles
 
then we drew the circle
 
then we set the varibles
 
 
and thats where the answer lies...
 
 
we drew the circle before we set the varibles lets reverse that
 
 
	  | Turing: | 	 		  
%The program that doesnt not run
%created by: Nick Hearn aka momop
%23-aug-07
%not too important just making program look nice
setscreen ("graphics:500;400,nobuttonbar,offscreenonly")
%some movement varibles
var circlex, circley  : int
var key  : array char of boolean
%now to set these varibles
circlex  := 150
circley  := 150
%draw your circle
drawfilloval (circlex, circley,  25,  25,  red)
%and so on
loop
    %allow the user to move circle
    Input.KeyDown (key )
    if key  ('w') then
        circley + = 5
    elsif key  ('s') then
        circley - = 5
    elsif key  ('a') then
        circlex - = 5
    elsif key  ('d') then
        circlex + = 5
    end if
end loop
  | 	  
 
 
woot it runs!!!!
 
 
but wait I can't move the circle what's up wit dat yo?
 
 
lets review once more
 
 
we set the varibles
 
we set the varibles
 
we drew the circle
 
we created the main loop which houses the movement commands
 
 
once more we have found the answer!!!!!
 
 
we drew our circle before our loop so lets rewrite our program once more!!!!
 
 
	  | Turing: | 	 		  
%The program that doesnt not run
%created by: Nick Hearn aka momop
%23-aug-07
%not too important just making program look nice
setscreen ("graphics:500;400,nobuttonbar,offscreenonly")
%some movement varibles
var circlex, circley  : int
var key  : array char of boolean
%now to set these varibles
circlex  := 150
circley  := 150
%and so on
loop
    %draw your circle
    drawfilloval (circlex, circley,  25,  25,  red)
    %allow the user to move circle
    Input.KeyDown (key )
    if key  ('w') then
        circley + = 5
    elsif key  ('s') then
        circley - = 5
    elsif key  ('a') then
        circlex - = 5
    elsif key  ('d') then
        circlex + = 5
    end if
end loop
  | 	  
 
 
well it's still not working lets review once more *sigh*
 
we set our varibles, we created our loop with the draw command inside, this is a debugging guide and doesn't get into movement commands so thats not it, it must be something else
 
 
at the top where the program says it's just looking fancy... it's not, its also limiting movement with the "offscreenonly"
 
 
so what now? just erase it? 
 
 
lets try
 
 
	  | Turing: | 	 		  
%The program that doesnt not run
%created by: Nick Hearn aka momop
%23-aug-07
%not too important just making program look nice
setscreen ("graphics:500;400,nobuttonbar")
%some movement varibles
var circlex, circley  : int
var key  : array char of boolean
%now to set these varibles
circlex  := 150
circley  := 150
%and so on
loop
    %draw your circle
    drawfilloval (circlex, circley,  25,  25,  red)
    %allow the user to move circle
    Input.KeyDown (key )
    if key  ('w') then
        circley + = 5
    elsif key  ('s') then
        circley - = 5
    elsif key  ('a') then
        circlex - = 5
    elsif key  ('d') then
        circlex + = 5
    end if
end loop
  | 	  
 
 
...well atleast it's working...
 
 
as you just saw the circle is moving too fast so lets slow it down a bit... you guessed it the delay([milliseconds]) command!!!
 
 
	  | Turing: | 	 		  
%The program that doesnt not run
%created by: Nick Hearn aka momop
%23-aug-07
%not too important just making program look nice
setscreen ("graphics:500;400,nobuttonbar")
%some movement varibles
var circlex, circley  : int
var key  : array char of boolean
%now to set these varibles
circlex  := 150
circley  := 150
%and so on
loop
    %draw your circle
    drawfilloval (circlex, circley,  25,  25,  red)
    %allow the user to move circle
    Input.KeyDown (key )
    if key  ('w') then
        circley + = 5
    elsif key  ('s') then
        circley - = 5
    elsif key  ('a') then
        circlex - = 5
    elsif key  ('d') then
        circlex + = 5
    end if
    delay(1000)
end loop
  | 	  
 
 
woot its working!!!!!... but not perfectly...
 
 
did you notice if you hold a direction the ball will keep moving after you've let go?
 
 
well lets fix that
 
 
but first an explanation of what is happening
 
 
when you press a key the program reads it and sets it in a line so if i hit the 'w' key the program would read:
 
w
 
 
however if i held the key 'w' the program would read:
 
wwwwwwwwwwwwwwwwwwww
 
 
each time the Input.KeyDown is reached it will knock off one key so:
 
wwwwwwwwwwwwwwwwwww
 
wwwwwwwwwwwwwwwwww
 
wwwwwwwwwwwwwwwww
 
wwwwwwwwwwwwwwww
 
wwwwwwwwwwwwwww
 
wwwwwwwwwwwwww
 
and so on
 
 
if i hit 'w' and 'd' then:
 
wd
 
d
 
 
or if I hit 'w' 'd' 's' and 'a' then:
 
wdsa
 
dsa
 
sa
 
a
 
 
but if I do not want this then i use the Input.Flush command
 
 
so if I had a prgram running like
 
 
and I had typed wwwwwwww beforehand then:
 
wwwwwwwwww
 
wwwwwwwww
 
*nothing*
 
 
the third Input.KeyDown did not receice any keys because the Input.Flush got rid of them or flushed em down the toilet  
 
 
so back to the program
 
 
	  | Turing: | 	 		  
%The program that doesnt not run
%created by: Nick Hearn aka momop
%23-aug-07
%not too important just making program look nice
setscreen ("graphics:500;400,nobuttonbar")
%some movement varibles
var circlex, circley  : int
var key  : array char of boolean
%now to set these varibles
circlex  := 150
circley  := 150
%and so on
loop
    %draw your circle
    drawfilloval (circlex, circley,  25,  25,  red)
    %allow the user to move circle
    Input.KeyDown (key )
    Input.Flush
    if key  ('w') then
        circley + = 5
    elsif key  ('s') then
        circley - = 5
    elsif key  ('a') then
        circlex - = 5
    elsif key  ('d') then
        circlex + = 5
    end if
    delay(500)
end loop
  | 	  
 
 
thats much better!!! (ps you can lower the delay i had it higher to show the effects of Input stocking)
 
 
but not quite perfect... ya this is kinda repetitive but bear with me...
 
 
the circle leaves a trail, well ill take care off that...
 
 
the cls command is our friend this time
 
but there are 2 solutions to this...
 
 
either use the cls everytime a key is pressed or each loop run lets try both:
 
 
	  | Turing: | 	 		  
    if key  ('w') then
        circley + = 5
        cls
    elsif key  ('s') then
        circley - = 5
        cls
    elsif key  ('a') then
        circlex - = 5
        cls
    elsif key  ('d') then
        circlex + = 5
        cls
    end if  | 	  
 
 
or
 
 
	  | Turing: | 	 		  
loop
    cls
    %draw your circle
    drawfilloval (circlex, circley,  25,  25,  red)
    %allow the user to move circle
    Input.KeyDown (key )
    Input.Flush
    if key  ('w') then
        circley + = 5
    elsif key  ('s') then
        circley - = 5
    elsif key  ('a') then
        circlex - = 5
    elsif key  ('d') then
        circlex + = 5
    end if
    delay(500)
end loop  | 	  
 
 
both ways work but for further work we'll stick to using cls each loop run for this program
 
 
i bet you've noticed the circle was flashing... didn't ya... did ya cause i did... i really did
 
 
anyway there is a way around this flashing and thats to bring back the "offscreenonly" but with his friend View.Update
 
 
heres how this works
 
offscreenonly draws all images off the screen which is why the circle did not move... it actually did just not on screen so you didn't see it move
 
whenever the View.Update command is used turing brings all images from offscreen onto the onscreen
 
 
	  | Turing: | 	 		  
%The program that doesnt not run
%created by: Nick Hearn aka momop
%23-aug-07
%not too important just making program look nice
setscreen ("graphics:500;400,nobuttonbar,offscreenonly")
%some movement varibles
var circlex, circley  : int
var key  : array char of boolean
%now to set these varibles
circlex  := 150
circley  := 150
%and so on
loop
    %clear the screen to erase any trials
    cls
    %draw your circle
    drawfilloval (circlex, circley,  25,  25,  red)
    %move the circle onscreen
    View.Update
    %allow the user to move circle
    Input.KeyDown (key )
    Input.Flush
    if key  ('w') then
        circley + = 5
    elsif key  ('s') then
        circley - = 5
    elsif key  ('a') then
        circlex - = 5
    elsif key  ('d') then
        circlex + = 5
    end if
    delay (500)
end loop
  | 	  
 
 
wow that seems perfect... not quite but almost there!!!!
 
 
if you pressed two keys at once you noticed the circle ignored one movement
 
thats because in an if statement once one requirement has been met it ignores all other elsif's and else's so what to do?
 
 
break up the if statement like so
 
 
	  | Turing: | 	 		      if key ('w') then
 
        circley += 5
 
    end if
 
    if key ('s') then
 
        circley -= 5
 
    end if
 
    if key ('a') then
 
        circlex -= 5
 
    end if
 
    if key ('d') then
 
        circlex += 5
 
    end if  | 	  
 
 
AND YOU'RE DONE we have just successfully debugged this program!!!!
 
 
but these arent the only ways to debug a program
 
heres some tips:
 
 
1)use put... put can also output varibles
 
use this if a varible is acting weird to help find the problem an example from our circle program would be
 
 
 
 
2)the break command... this will pause the program until the user hits the resume button on the button bar
 
 
use this to stop the program at any location to see what is happening
 
 
3) the assert command
 
this works like put but not in the same way
 
 
if a varible is acting strange and not how you want use assert to make sure the varible is what you want
 
the assert command will stop the program if a varible does not meet the assert requirements hence showing you where the problem is
 
 
an example:
 
 
	  | Turing: | 	 		  assert [var name] (>,>=,=,<=,<,not) [same argument type as [var name]]
 
so...
 
assert circlex>100  | 	  
 
 
4)the debugger menu... to open this menu click on run at the very top of the turing window (not your programs run window as there is no run there)
 
 
be sure to click on the correct run as there are two the right one is above the other and slighty right to it
 
this should open a dropdown menu just click on show debygger menu from here and enjoy
 
 
well thats it thanks for your time
 
if there are any errors please PM me also note that some examples are not meant to run which is the point
 
have fun and never once again be frusterated at your program for not running | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
		 
		Sponsor Sponsor 
		 
  
		 | 
		
 | 
	 
	 
		  | 
	 
				 
		Mr. T
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 9:23 am    Post subject: Re: Momop's very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				| Good effort. In general, people (especially programming newbies) find themselves in debugging nightmares, because they build their programs without a preset plan.  Before doing any coding, it is important to make a rough pesudo code outline, so that you can organize and visualize all the components of your program. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		Nick
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 9:25 am    Post subject: RE:Momop\'s very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				well thats a habit i should get into although im a pretty good debugger i still get typer's block and dont know what else to type
 
what im saying is write a pseudo code before programming and then maybe you wont even need my guide   | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		Aziz
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 9:34 am    Post subject: RE:Momop\'s very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				"have fun and never once again be frusterated at your program for not running"
 
 
Don't give them false hope  
 
 
Anyways, Good job. I'd give you some bits, but I ain't got any!
 
 
Some tips: the proper syntax for the assert command is:
 
 
	  | code: | 	 		  assert _expression_  | 	  
 
 
_expression_ is anything that evaulates to a boolean true/false. Thus you can call methods that may produce a boolean value. To use the assert is to make sure that something is what you expect, as you said. The following are pretty much the same:
 
 
	  | code: | 	 		  assert (expression)  | 	  
 
 
	  | code: | 	 		  if not (expression) then
 
    % stop program with warning
 
end if  | 	  
 
 
Also, in general, for tutorials you should organize your writing better, including using [ code ] tags where code is not exact syntax, using headings, and especially using proper grammar (Capitals, etc). Just makes it cleaner and easier to read.
 
 
Great job though  
 
 
+0 bits! (I'll try to give them, don't think it will let me) | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		Nick
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 9:39 am    Post subject: RE:Momop\'s very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				thanks for the 0 bits the tips and the post   ill be sure to use proper tags headings and grammer in the future   | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		Mr. T
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 9:42 am    Post subject: Re: Momop's very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				Grammar and spelling, as well. Unless you're Hacker Dan. Then you're excused.    | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		Aziz
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 9:43 am    Post subject: RE:Momop\'s very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				| I always forget that. Is grammer US spelling? | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		Mr. T
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 9:45 am    Post subject: Re: Momop's very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				| No. Grammer is just a phonetical misspelling of grammar. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
		 
		Sponsor Sponsor 
		 
  
		 | 
		
 | 
	 
	 
		  | 
	 
				 
		Nick
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 9:46 am    Post subject: RE:Momop\'s very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				lmao hacker dan's misspelling always makes me laugh   same with mr t's sig and aziz's | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		Aziz
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 10:24 am    Post subject: RE:Momop\'s very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				| My sigs were copied directly from users posts on the forum/irc channel. And Dan's spelling has gotten better since I got here. (Here, read this: http://compsci.ca/v3/viewtopic.php?t=12897) | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		rdrake
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 11:19 am    Post subject: RE:Momop\'s very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				| Here, have the 10 bits plus some more that Aziz was going to give you.  Just drop into the IRC channel sometime after 7 PM or so if you require editing of your tutorials.  I'll be happy to help. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		Nick
 
  
 
    
		 | 
		
		
			
				  Posted: Wed Aug 22, 2007 5:17 pm    Post subject: RE:Momop\'s very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				| oh wow i had no idea about Dan must be hard with the youth of today always pointing out diffrences and demanding perfection... but still for a dyslexic to create such a great site and live his life regardless he has really proved to be just like anyone else | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		Nick
 
  
 
    
		 | 
		
		
			
				  Posted: Sun Nov 04, 2007 10:27 pm    Post subject: Re: Momop's very own debugging guide to help you all out  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				after reading Tony's blog i found 2 new ways to debug
 
 
rubber ducking
 
and
 
super paper programming | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		 | 
	 
 
	
	
	 
	
	 |