home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / funkybox.zip / DEBUG.DOC < prev    next >
Text File  |  1983-04-01  |  12KB  |  221 lines

  1.  
  2.  
  3. ***************************
  4.      BLOOPERS AND BUGS
  5. ***************************
  6.  
  7. PEOPLE SYSTEMS, LTD.
  8. Copyright 1983 (c) L. A. Warner, P.E.
  9.  
  10. Even a musical genius practises and plays compositions, written
  11. by others, for a long time before he sets out to play a concert
  12. of his own creations. Similiarly, a programmer should keyboard-in,
  13. and debug other people's programs long before he decides to give 
  14. a recital of his own composing. There is much to be gained by 
  15. copying in a program from a magazine or book and then debugging it
  16. or adapting it for the idiosyncrasies of his particular PC.
  17. Finding and fixing the bloopers is not all that difficult. Try it.
  18.  
  19. prgm : 20 READ X$, Z$        you typed:  20 REED X4, Z$
  20.  
  21. DEBUGGING KEYED-IN PROGRAMS FROM A MAGAZINE
  22. At the time, debugging another's program may seem very difficult,
  23. but as the work progresses, and experience is gained, debugging and
  24. adapting a program becomes quite easy, even though the programming
  25. may seem foreign or a little too advanced to understand. Of course,
  26. debugging your own programs ensures a better understanding and also
  27. a commitment to make them work well. Most of this
  28. article will be concerned with debugging your own programming
  29. efforts, so let us touch lightly on keyed-in debugging and 
  30. adaptation before we plunge into the bottomless pit called DB.
  31.  
  32. prgm: 15 READ X$,B: DATA JONES,24 you typed:15 READ X,B$: DATA @$,JONES
  33.  
  34. SOME DB TIME SAVERS
  35. Some of the time savers are: print-out the listing and place it 
  36. side by side with the original and with two 3x5 cards cross-check
  37. it line by line, marking the errors. Using a copy stand and good 
  38. lighting with a line marker will expedite the keyboarding. There
  39. are good references like "The BASIC Handbook" by David Lien and
  40. "The Conversion Handbook" by D. A. Brain not to mention Appendix D
  41. in the IBM BASIC manual, that will save time in translation of 
  42. certain language specifics.
  43.  
  44. Technical publishers discovered that proof readers who didn't speak
  45. the language they were checking were often very careful in their
  46. galley corrections. Perhaps your family can spot typos that
  47. you can't find?
  48.  
  49. Whats wrong? 25 PRINT "The number is, Z : GOTO 35    (end ")
  50.  
  51. DEBUGGING YOUR OWN PROGRAMS
  52. This is a short tutorial on the process of debugging a program
  53. and is not intended to teach how to use the DOS program called 
  54. DEBUG, which is quite self explanatory although its usage could be
  55. better explained with some examples and demonstrations. It is a tool
  56. worth getting familiar with and we discuss some of its uses in Vol.2
  57. to unlock protected files and recover EDLIN files when the disk 
  58. is full.
  59.  
  60. For definition, debugging is the process of successive improvements
  61. made to enable a program to do what it is intended to do, under most
  62. conditions. Debugging should start right at the beginning of coding 
  63. so that errors of most types can be eliminated, rather than
  64. trapped and handled. Generally, error trapping is omitted until
  65. the program is well developed, because error routines can present
  66. serious impediments to program development and it is better to find
  67. and correct an error instead of being satisfied by handling it.
  68.  
  69. DEBUGGING VS. ERROR HANDLING
  70. In contrast to debugging, ERROR trapping and handling applies to the
  71. run-time keyboard and peripheral errors that would cause a well 
  72. debugged program to shut down, losing all work not already saved.
  73. ERROR trapping is covered in another article in the series.
  74.  
  75. 25 READ T,U,V : DATA 3,6       (not enough data)
  76.  
  77. Error handling installed prematurely can cast a smokescreen over
  78. efforts to debug. However, sometimes ERR and ERL, error message and
  79. error line can be used to debug a very involved program and save
  80. data from being lost because of a crash. During the development of a
  81. complex program, all error messages should be noted and line numbers
  82. logged so that the decision to trap errors can be based on the 
  83. programmer's experience in that part of the program.
  84.  
  85. STUDY THE ERROR MESSAGES IN BASIC AND DOS
  86. The error messages in Appendix A : BASIC manual are extensive and worth
  87. studying on their own terms. It's much easier to learn from them
  88. when you don't have to solve a problem, than it is to read them, one
  89. at a time after the program has shut down and you know you have a mess
  90. to straighten out. By the way, the second edition of IBM BASIC Manual
  91. has an extended section on error messages in Appendix A. Moving
  92. in the right direction, IBM indicates how to correct the error now.
  93.  
  94. AFTER THE CRASH
  95. Now what do you do? That's the question. Record the error message and
  96. line number. Look it up for detail and study it.  Sometimes there are
  97. many possibilities to consider. Then LIST the lines before the ERL and
  98. see if you can detect the problem. There is another route to take
  99. and that is in direct mode enter the print-out of variables, one by
  100. one and see if there are any surprises. Entering  ?X,K$   provides the
  101. value of X and K$ on the next line following the command.
  102.  
  103. Whats wrong?  10R5 PRINT "LINE NUMBER BAD"
  104.  
  105. TRON -- TROFF TRACE
  106. One of the most useful tools, especially if you have a printer and a
  107. quick trigger finger is TRON, which prints the line numbers as the
  108. program proceeds towards the crash. You can stop the action using
  109. Ctrl-NumLock and print out the screen for study purposes. TROFF turns
  110. the trace off again.
  111.  
  112. MULTIPLE STATEMENT LINES
  113. When you have narrowed the program area down to where you 
  114. suspect the error is caused, it may be beneficial to rewrite those
  115. lines especially if they contain multiple statements. Bad single
  116. statement lines can be identified by the error message ERL. Sometimes
  117. a line may show on the screen correctly but have a bug in it's bits.
  118. Retyping a suspect line sometimes helps. Look-up in the manual
  119. the correct spelling and check it letter for letter for any BASIC
  120. statements or commands. ( Don't be fooled by CRSLIN or CSRLIN :
  121. which is it ?)
  122.  
  123. PRINT, STOP AND CONT
  124. In loops and other segments with inter-woven operations, it is often
  125. beneficial to install PRINT commands that will show on the screen or
  126. printer important variables or data that might be clogging the chute.
  127. They can be REMed out temporarily when the trouble is passed. Some
  128. crashes take with it all survivors and don't leave a record on the
  129. screen. Exercise your right to know by installing a STOP just before
  130. the scene of the accident. But don't leave, you can solve it if you
  131. have the patience. The bigger the bug -- the easier they are to find,
  132. sometimes. STOP and CONT can be used to hold the screen for inpection.
  133.  
  134. Whats wrong? 105 PRUNT " My name is Dhuh, I cannt speel."
  135.  
  136. We sometimes forget that DOS  allows us to print-out an LLIST for 
  137. say lines 100-120 (LLIST 100-120) without waiting for the entire LIST
  138. to be printed. An up-to-the-instant printout can be very useful in DB.
  139. Printing the line   340 PRINT "PROGRAM IS AT LINE 340" may be handy
  140. in detecting the progress of the program. Placing an apostrophe in
  141. front of the PRINT will convert it to a REM until you use or delete it.
  142.  
  143. HAND TRACING
  144. When you have tired of eye-ball tracing those fuzzy little green
  145. characters on the screen, then try taking your print-out to a quiet
  146. place and hand trace it. Oddly enough, a pencil is usually needed but
  147. nobody calls it a pencil trace job. By the way do you have a light
  148. hood over your CRT ? It saves eye fatigue, and a corrugated box is
  149. certainly  a low initial cost investment. Tape it to the CRT with
  150. a strong piece of duct tape or other. If you want to get fancy, paint
  151. it black with your kids tempora paints, but standard box-tan works
  152. well. It may be useful to hand calculate and compare results also.
  153.  
  154. LOOP-DE-LOOPS
  155. Probably one of the greatest sources of gray hair, time delays, 
  156. crashes and many other CPU maladies is the FOR NEXT loop we all love 
  157. so dearly. Please be advised a bad loop may not issue an error message,
  158. instead the CPU may politely ignore it. Unless STEP-1 or some
  159. negative value is used  the loop FOR A = X TO Y where X=7 and Y=-4
  160. will be ignored. Because, "... the initial value of the loop is
  161. more than the final value. "
  162.  
  163. PARTIAL RUNS IN LONG PROGRAMS
  164. One of the troublesome problems in a complex program being debugged
  165. is sitting through the repeated sections to get to the problem area.
  166. Doing a RUN 200 will start the show on line 200 but the variables and
  167. arrays will not be there. Although it is not listed as a command
  168. by IBM, but a statement,  GOTO line   can be used in direct mode to
  169. debug areas of a program without destroying the variables and arrays.
  170. If you have ever sat through many unnecessary replays of your pro-
  171. grams, unwillingly committing them to memory, you will enjoy using
  172. GOTO line  . It beats putting extra variable definitions into the
  173. program sections to   RUN line  . 
  174.  
  175. What's wrong?  105 FOR DELAY = 1 TO 10000 : GOTO 65
  176.  
  177. RETURN TO GROUND ZERO
  178. Since all good programmers faithfully keep back-up copies of all
  179. their work as they progress forward through the stormy night, it is
  180. a simple matter to create a useful system to protect the next to
  181. the last version of your program. One that worked, before you added
  182. the XY4AS-?!@W%$#@* blankety-blank lines to make it better.
  183.  
  184. By using two drives and alternating from one to the other each time
  185. you save a newer edition you can be assured of having one available
  186. that was free of the latest bugs that you built into it. Its also a
  187. very good procedure to save any change that might hang up and
  188. all memory could be lost in a cold restart. Thus an LLIST of the two
  189. programs, one from each drive will produce hard copies for comparison.
  190.  
  191. A FUNNY THING HAPPENED ON THE WAY TO THE FORUM
  192. Its often necessary to sit back and laugh at yourself once in a while.
  193. Have you ever made a correction to a line and then carefully run the
  194. program again to check it to find, lo and behold, someone, maybe a 
  195. grinch, changed it back again? No, you aren't imagining things, you
  196. did correct the line, really you did. BUT, you didn't enter it while
  197. you were on the same line and probably moved off with the cursor
  198. arrows to work on another line. Be thankful that it didn't tie all
  199. the lines together like my word processor does when you don't enter
  200. each line promptly, before you leave it.
  201.  
  202. SOME TYPICAL DEBUG BLOOPERS
  203. If everyone made a list of their own bloopers it would include
  204. the full BASIC vocabulary certainly and variations of every syntax
  205. imaginable. Of course for the organized programmers there are
  206. classifications of bloopers, although most roses, by any other
  207. name, are still roses. They can be either Syntax Errors which the
  208. IBM-PC wont stand for in a program, unless they occur because of
  209. a Run-time Error or keyboard input. Another classification is the
  210. Logic Errors which mean your intentions are good but the CPU can't
  211. fulfill your desires because it doesn't understand them. No crash
  212. but meaningless results.
  213.  
  214. Some of the Syntax errors are: No closing quote needed if it would
  215. be the last character on the line. But 20 PRINT " HELLO : GOTO 60
  216. won't work. A variable must begin with a letter. An array of over 11
  217. items or multidimensional must be dimensioned before using. Erasing
  218. a non-existant array. Misspelled Commands, Statements, Functions.
  219. The CPU doesn't care if you misspell text ( inside quotes ). And so
  220. the list goes on. I'd like to have a nickel for every blooper.
  221.