1 / 24

Debugging

Debugging. Debugging Review. Give a man a fish and you feed him for a day. Teach a man to fish and you feed him for a lifetime . – Ancient Proverb

glain
Download Presentation

Debugging

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Debugging

  2. Debugging Review • Give a man a fish and you feed him for a day. Teach a man to fish and you feed him for a lifetime. – Ancient Proverb • Help a student to fix a bug, and he or she is set until the next bug. Teach that student to use the debugging tools, and maybe we can all get some sleep. – IOE 373 Proverb

  3. Debugging Hint 1: Read the Error Message • Not all error messages are easy to understand, but some are. • I’m always amazed at the forum posts which say “I ran this code and got an error.” • Um…What did the error say??? • By now, you should know what “Object reference not set to an instance of an object” means (if not, wait a couple of slides). • But many other error messages are pretty straightforward, or should be to you by now. • It’s frustrating when your code doesn’t work, but let VB help you to solve the problem by reading the message, and then remember debugging hint 2…

  4. Debugging Hint 2: Don’t Hit the Stop Button! • If you run your code and you get to a point where it stops on a line of code, read the message, and then do… • Nothing! When VB stops on a line of code, it is in debugging mode. • By stopping on that line of code, VB is giving you a big hint: THERE’S SOMETHING WRONG WITH THAT LINE OF CODE! • If you stop debugging, you will lose access to LOTS of information that can help you to solve the problem.

  5. In this example, we have experienced the most common error: “Object reference not set to an instance of an object.” • VB doesn’t tell us which reference is not set—we need to find that out.

  6. Don’t Stop That Program! • This information is pretty easy to find—if we don’t stop the program. • We are looking for a variable with a value of “Nothing”. • We can use Quick Watch to find it. Recall that Quick Watch is available on the right-click menu; right click on the variable that you want to check, and select Quick Watch.

  7. QuickWatch on s indicates that it is not Nothing: It contains an actual Student object.

  8. However, a QuickWatch on the AllStudents List reveals that it is Nothing: We never created the List object by calling New.

  9. Fixing the Bug • NOW, we can stop debugging. We know the cause of the error: We are trying to add items to a List object that doesn’t exist yet. • To fix the problem, we need to create the List before using it. • Assuming that we will want to use that List elsewhere in the form’s code, the best places to create it would be when the form is created. Either: • The Form Load event, or • In the constructor, if we have written a custom constructor for this form.

  10. Form Load • Here is the form’s code using Form Load to create the List:

  11. Constructor • Here is the form’s code using a custom constructor to create the List:

  12. No Error, No Action? • What if you run your program, and it seems to freeze? • That is, you do not get an error message, but the program hasn’t done what it was supposed to do, and it doesn’t respond to mouse clicks? • It is probably stuck in an infinite loop.

  13. Debugging an Infinite Loop • If this happens, the first thing to do is to switch to Visual Studio and click on the “Break All” button. (Pause)

  14. Break All • Break All forces the program to pause execution; VB will highlight the line of code currently running. • You can then step through the code to see what’s happening. • In this case, the value of i never changes, so it is never greater than 100. • The Watch Window can help you to see what’s going on. (Next slide)

  15. In this case, the program has added 23027 zeros to the ListBox, and i is still zero. • Whenever you use Do loops, make sure that the exit condition will eventually be met. • For loops generally do not have this problem.

  16. Other possible causes of infinite loops • Aside from Do Loops, there are other ways to end up in an infinite loop: • Recursive subs/functions: These are subs or functions that call themselves. These can be very useful, but they must always contain a way out, so that eventually they stop calling themselves. • Calling back and forth. If Sub A calls Sub B, and Sub B calls Sub A, you can easily get caught in an infinite loop. • In both of these cases, or any case where the program seems to be stuck, hit the “Break All” button. • If the Call Stack is gigantic, you probably have one of these problems.

  17. Startup Errors • Some of the most annoying errors are runtime errors where the program crashes without stopping on a line of code. • These are very hard to find, since VB gives you very few clues. • In most cases, I have found these errors to be caused by writing executable code outside of any procedure. • In particular, the problem frequenty comes from calling constructors (New) outside of any sub or function. • If your program fails on startup, check your code for places where you have any code besides declarations (Dim, Public, Private) outside of procedures. • See the next slide for examples.

  18. Executable Code in Subs • Instead of this, • Do this:

  19. When all else fails • Every semester, four or five students have something go very wrong in their programs. • They were just about finished, most things were working, and they try to add one last feature. All of a sudden… • Nothing works! • Frequently, what has happened is that something has become corrupted in the project file.

  20. What to do • The solution to this situation (we’ll call it plan B) usually takes about 15 minutes, so • Don’t spend more than 15 minutes or so trying to figure out what went wrong before resorting to plan B. • Plan B involves creating a new VB project and copying your forms and code into this new project.

  21. Plan B, Step by Step • Save everything you have, preferably in two places. Make sure that you know the path to the directory that contains your forms and code. • Open Visual Studio and create a new VB project. Give it an appropriate name (Assignment6_PlanB, for example). • In the Solution Explorer, delete Form1 from the project. • Without doing anything else, save this new project in a directory. • Note the directory which now contains the new project file (Assignment6_PlanB.vbproj).

  22. Plan B, Step by Step, continued • Copy all of the code (*.vb), resource (*.resx), and designer (*.Designer.vb) files from your old project directory to your PlanB project directory. (Don’t copy the vbproj, sln, or suo files.) • If you closed your PlanB project, reopen it in Visual Studio. If you had a Form1 in your original project, you should exclude • From the Project menu, select “Add Existing Item”. • Select the forms and classes that you copied in from your original projects. • Note that for forms, you only need to select the vb file; Visual Studio knows to add the Designer.vb and resx files along.

  23. Plan B, Step by Step, continued • In the project properties, Application tab, select the StartUp form that you want. • Try it out. If it works, save this new project and work with it from now on. • If it doesn’t work, there may be a problem with one individual form or class. • Plan C is to individually add or remove forms and classes to see which one is causing the problem. • If you isolate the problem form/class, you may be able to recreate it by starting with a new form or class in this new project, and then copying the controls and code from the matching form/class in the old project.

  24. Plan B Summary • Resorting to plan B is a pain, but • It usually works, and • Spending 15 minutes on plan B is better than spending hours staring at a project that isn’t working.

More Related