Presentation is loading. Please wait.

Presentation is loading. Please wait.

Jun 16, 2014IAT 2651 Debugging. Dialectical Materialism  Dialectical materialism is a strand of Marxism, synthesizing Hegel's dialectics, which proposes.

Similar presentations


Presentation on theme: "Jun 16, 2014IAT 2651 Debugging. Dialectical Materialism  Dialectical materialism is a strand of Marxism, synthesizing Hegel's dialectics, which proposes."— Presentation transcript:

1 Jun 16, 2014IAT 2651 Debugging

2 Dialectical Materialism  Dialectical materialism is a strand of Marxism, synthesizing Hegel's dialectics, which proposes that  Every economic order grows to a state of maximum efficiency, while simultaneously developing internal contradictions and weaknesses that contribute to its systemic decay Jun 16, 2014IAT 2652

3 Dialectics  Thus, programming is a dialectic process: –ENbugging –Debugging  Karl Marx said so! Jun 16, 2014IAT 2653

4 Jun 16, 2014IAT 2654 How do I know my program is broken?  Compiler Errors –easy to fix!  Runtime Exceptions –more difficult to fix, but at least you're using java and these get reported  Your program just doesn't do the right thing.

5 Jun 16, 2014IAT 2655 Compiler Errors  Errors dealing with language syntax  Simple logical errors –Whatever the compiler can possibly catch.  Generally, the line number stated has the error on it –Sometimes the fix is elsewhere

6 Jun 16, 2014IAT 2656 How to fix compiler errors?  Start at the top of the error list  Some errors cause others –Wrong variable declaration causes errors in usage of that variable  Use the line number!  If that line looks OK, check the line above –maybe missed a brace/semicolon or other necessary syntax element.

7 Count Brackets and Braces { qwdkj { dw wqdlk lqwd { n,mnwq } } } Jun 16, 2014IAT 2657 1 2 3 2 1 0 Braces match if the last == 0!

8 Jun 16, 2014IAT 2658 Compile Time Errors  Some errors aren't necessarily errors. –For example: String foo; //assume we initialize this somewhere else public void blah(){ Object bar; try{ bar = foo.toString(); } catch(Exception e){ println(“Oh no!!”); return; } println(bar.toString()); //lets call this line 101 } –Will give you something like: line 101: variable bar might not be initialized! (or something like that)

9 Jun 16, 2014IAT 2659 print your variables  println() –Use println often –Print everything: array values, pointer values, array index, objects etc –Each println should label itself with class name and line number –Java: Be sure to use System.out.flush(); to ensure you are getting all data

10 Jun 16, 2014IAT 26510 Learn to read your code  Keep a notepad around to keep track of variable values. –Use comments to document complex code –Keep one step to one line. –Format your code! Indentations help readability –Keep your code neat: save your mental effort for understanding, not reading

11 Always the Same Place  My keys are always the same place: –Right front pocket  My Java variables are always the same place –Top of method or top of class  Why? –I always know where to look for variables! Jun 16, 2014IAT 26511

12 Always the Same Place  For loops: always formatted the same  Switch: always formatted the same  Variables: I reuse the same names for( int i = 0 ; i < arr.size() ; i++ ) {... }  Doing it the same way every time Means: –You don’t have to read the whole for loop Jun 16, 2014IAT 26512

13 Always the Same Place  Here’s what you see: for( int i = 0 ; i < arr.size() ; i++ ) { }  Here’s what I see: for( int i = 0 ; i < arr.size() ; i++ ) { }  Here’s what I see when something’s missing: for int i = 0 ; i < arr.size() ; i++ ) { } Jun 16, 2014IAT 26513

14 Always the Same Place  Doing something the same way allows me to notice when something is different Jun 16, 2014IAT 26514

15 Jun 16, 2014IAT 26515 Runtime Exceptions  There are two types of Runtime Exceptions –Checked and Unchecked  Checked exceptions: –Java makes you deal with these in your code –Things that you would expect to fail: I/O mainly  Unchecked exceptions –Java does not require you to catch these

16 Jun 16, 2014IAT 26516 Checked Exceptions  IOException (FileNotFoundException)  Input and output is typically hard to write because you have to deal with the real world’s complexities  Java requires that you put these in Try/Catch Blocks –Processing manages some of this

17 Jun 16, 2014IAT 26517 Unchecked Exceptions  Exceptions that only the programmer can anticipate –Extremely hard for a compiler to determine  NullPointerException (NPE) and ArrayIndexOutOfBoundsException (AIOBE)  Caused by semantic errors –uninitialized variable, bad loop logic…

18 Jun 16, 2014IAT 26518 Exceptions  On exception, you get a stack trace  Find the first line of the stack trace that occurs in your program.  That line is where the exception occurred, not necessarily where the fix is. –On that line, did you get an NPE? –Is there some object that you're calling a method on? Is that object Null? –For AIOBE, check index values

19 Jun 16, 2014IAT 26519 Things to remember  In java Objects are passed by reference and primitives are passed by value. public void doStuff(String a) { a = a + “bar”; } public void doMoreStuff(int a) { a = a+5; } public static void main(...){ String temp = “foo”; int temp2 = 5; doStuff(temp); doMoreStuff(temp2); System.out.println (temp); System.out.println (temp2); } prints out: foobar 5

20 Jun 16, 2014IAT 26520 The #1 debugging tip  TEST YOUR CODE OFTEN! –Catching your small errors early will help you avoid the big complicated errors later. –If you write a chunk of code that you can test, test it. –You'll regret not spending 5 minutes writing a simple test case when you spend hours trying to find out it has a bug later.

21 Wrong and Right  Build  Test  Build  Test  Build  Test  Build  Test  Build  Test Jun 16, 2014IAT 26521


Download ppt "Jun 16, 2014IAT 2651 Debugging. Dialectical Materialism  Dialectical materialism is a strand of Marxism, synthesizing Hegel's dialectics, which proposes."

Similar presentations


Ads by Google