logging in or signing up DDD UpBeat Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINTLite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 238 Category: Entertainment License: All Rights Reserved Like it (1) Dislike it (0) Added: December 24, 2007 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... Premium member Presentation Transcript A DDD Tutorial: A DDD Tutorial Elena Jakubiak & Larissa Winey What is DDD: What is DDD DDD stands for Data Display Debugger DDD is a visual interface to the command-line GDB debuggerWhy DDD?: Why DDD? It’s intuitive It’s fast “I just use print() statements” That’s like sewing clothes using a needle and thread instead of a sewing machineGetting Started: Getting Started Copy the sample programs to your directory % cp /r/uxpdworkshop/DebugLab/* . Compile your program using the –g flag % g++ -g factorial.cpp –o factorial Run your program, right now, we’ll start with factorial (any easy program to start with) % factorial So You Have a Bug: So You Have a Bug What did you expect the program to do? It should take the factorial of a number i.e. 6! = 6 * 5 * 4 * 3 * 2 * 1 = 720 (1! = 1) Any ideas what went wrong? You didn’t write this code You could read the code and then try to understand a bunch of it and then put in print() statements You could walk through it in the debugger (Hint: Choose the debugger) Starting DDD: Starting DDD Open your executable program in DDD (DDD knows what source code to use because you compiled with the –g flag) % ddd factorial &Customizing DDD: Customizing DDD Line numbers: Source Display Line Numbers Docking toolbars: Edit Preferences Setting Breakpoints: Setting Breakpoints If the program is stuck in an infinite loop, then we want to set a breakpoint in the while loop Right-click on the line number of the while(number < 1) Select Set Breakpoint There should now be a stop-sign at that line Start the Program: Start the Program At the top of the screen, select “Run” to start your program This can also be found in the ‘program’ menu If DDD asks for arguments to your program, just leave it blank The program will halt and prompt you for input in the bottom of the window Enter a small number: something that should finish in less than a second. It should stop again at the breakpoint. (The black arrow indicates the next line to be executed) Next, Hover, and Step: Next, Hover, and Step Use Next to move through the program one line at a time After each Next you can hold your cursor over each variable to see the value This is called hovering Use this to watch the values in factorial, number and startnumber This always displays the variable’s value at the current line of execution Note Step will move down the program, one line at a time. It will also step into function calls if there are any. Next would also move down one line at a time, but would skip function calls. Fixing the Bug: Fixing the Bug So, what’s going wrong? Leave DDD open Open the code in your favorite editor (factorial.cpp) Fix the code Recompile the code Run the code (on the command line) If you wanted to run it again in DDD, you would need to reload the code in DDDNow, a Harder Example: Now, a Harder Example Compile your program, again using the –g flag % g++ -g myFriends.cpp –o myFriends Run myFriendsSo You Have Another Bug: So You Have Another Bug What did you expect the program to do? Any ideas what went wrong? Starting DDD: Starting DDD Open your executable program in DDD (DDD knows what source code to use because you compiled with the –g flag) % ddd myFriends &Using DDD: Using DDD What do we know about where this bug occurred? Our youngest friend was wrong Be strategic! Where should we look first? Using DDD: Using DDD What do we know about where this bug occurred? Our youngest friend was wrong Be strategic! Where should we look first? Setting Breakpoints: Setting Breakpoints We want to watch the program at the call to FindYoungest() Set a breakpoint at: youngest = FindYoungest(friends, nFriends);Inspecting the Data: Inspecting the Data Right-click on friends and choose Display friends The data display editor opens Right-click on youngest and choose Display *youngest (notice the *) You can also hover over a variable to see its value Try hovering over the variable yougestInspecting Your Data: Inspecting Your Data Does the data look correct? Yes. Click Next to step to the next line of code Now, does the data look correct? No. Where did it go wrong? We now want to step into FindYoungest() Going Backwards: Going Backwards To get back to the break point.. Click and drag the arrow up a to the line youngest = FindYoungest(friends, nFriends); Inspecting Your Data: Inspecting Your Data At the breakpoint, click Step in the command tool to step inside FindYoungest() Next: steps one line at time, stepping over function calls Step: steps one line at time, stepping into function calls Should we step through or set another breakpoint? Stepping is temping but what if there are 10,000 items in your array and a lot of code inside your loop? What should we do? Finding the Bug: Finding the Bug Put a breakpoint at youngest = &friends[i]; Put a breakpoint on the line return(youngest) This prevents exiting the function after the loop Finding the Bug: Finding the Bug Click Continue to run the program to the next breakpoint Check the data Right-click on youngest and choose Display *youngest (Note the *) Highlight friends[i], right click on the selection, and choose Display friends[i] Finding the Bug: Finding the Bug Watch the program Click Continue to run to the next time youngest is updated Check your data Is youngest ever set correctly? Repeat… When you reach the breakpoint at return(youngest), ask Was youngest ever set correctly? What is its value now? So, what is the bug? Drag the arrow up and restart running through the loop Determine exactly when did the data become incorrect? Discovering the Bug: Discovering the Bug The infamous Array out-of-bounds! Fixing the Bug: Fixing the Bug Again, leave DDD open Open the code in your favorite editor (friends.cpp) Fix the code Recompile the code Run the codeIt’s still broken: It’s still broken Fixing the NEXT Bug: Fixing the NEXT Bug Reload the code in DDD In the Source menu, choose Source Reload Where do we put the break-point this time? What is the last line of code that we know was executed? Set a breakpoint Next… Next… Step… Some Debugging Theory: Some Debugging Theory Most programs are too big to step through You have to use breakpoints strategically Suppose you have 10,000 lines of code with no output and a segmentation fault. Where do you put your breakpoint? Some Debugging Theory: Some Debugging Theory Most programs are too big to step through You have to use breakpoints strategically Suppose you have 10,000 lines of code with no output and a segmentation fault. Where do you put your breakpoint? The Binary Search Principle of debugging You don’t look up a word in the dictionary by starting at the first letter ‘A’ page and turning hundreds of pages until you find your word (especially if your word is zebra). Like searching the dictionary, put a breakpoint in the middle of your program and look at the values there. Is your bug before or after that point? Bells & Whistles: Bells & Whistles DDD is very powerful! Each time you think, “I wish DDD could ….”, check the manual because it probably can! There are too many features to teach so we will go over only a few of the most usefulConditional Breakpoints: Conditional Breakpoints What if you had 10,000 friends? It would take a long to check each assignment. Instead, first make sure that the loop reaches the youngest friend. Use a conditional breakpoint Insert a breakpoint Right-click the break point and choose properties Enter the condition (in C code) when, if true, the code should pause.Watchpoints: Watchpoints Often you have a program and, at some point, an important value gets set incorrectly e.g., using (x = 0) instead of (x == 0) Suppose you know that A line 6, x is set to 7 At line 9,234 x = 0 (but x should still be 7). How can you quickly find the line where x was incorrectly set. A watchpoint allows you to watch for a variable to change REMEMBER…: REMEMBER… Be systematic & strategic Where should I look next? Remember the Binary Search Principle What should I look at next? Use the data display Use breakpoints & watchpoints You do not have the permission to view this presentation. In order to view it, please contact the author of the presentation.
DDD UpBeat Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINTLite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 238 Category: Entertainment License: All Rights Reserved Like it (1) Dislike it (0) Added: December 24, 2007 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... Premium member Presentation Transcript A DDD Tutorial: A DDD Tutorial Elena Jakubiak & Larissa Winey What is DDD: What is DDD DDD stands for Data Display Debugger DDD is a visual interface to the command-line GDB debuggerWhy DDD?: Why DDD? It’s intuitive It’s fast “I just use print() statements” That’s like sewing clothes using a needle and thread instead of a sewing machineGetting Started: Getting Started Copy the sample programs to your directory % cp /r/uxpdworkshop/DebugLab/* . Compile your program using the –g flag % g++ -g factorial.cpp –o factorial Run your program, right now, we’ll start with factorial (any easy program to start with) % factorial So You Have a Bug: So You Have a Bug What did you expect the program to do? It should take the factorial of a number i.e. 6! = 6 * 5 * 4 * 3 * 2 * 1 = 720 (1! = 1) Any ideas what went wrong? You didn’t write this code You could read the code and then try to understand a bunch of it and then put in print() statements You could walk through it in the debugger (Hint: Choose the debugger) Starting DDD: Starting DDD Open your executable program in DDD (DDD knows what source code to use because you compiled with the –g flag) % ddd factorial &Customizing DDD: Customizing DDD Line numbers: Source Display Line Numbers Docking toolbars: Edit Preferences Setting Breakpoints: Setting Breakpoints If the program is stuck in an infinite loop, then we want to set a breakpoint in the while loop Right-click on the line number of the while(number < 1) Select Set Breakpoint There should now be a stop-sign at that line Start the Program: Start the Program At the top of the screen, select “Run” to start your program This can also be found in the ‘program’ menu If DDD asks for arguments to your program, just leave it blank The program will halt and prompt you for input in the bottom of the window Enter a small number: something that should finish in less than a second. It should stop again at the breakpoint. (The black arrow indicates the next line to be executed) Next, Hover, and Step: Next, Hover, and Step Use Next to move through the program one line at a time After each Next you can hold your cursor over each variable to see the value This is called hovering Use this to watch the values in factorial, number and startnumber This always displays the variable’s value at the current line of execution Note Step will move down the program, one line at a time. It will also step into function calls if there are any. Next would also move down one line at a time, but would skip function calls. Fixing the Bug: Fixing the Bug So, what’s going wrong? Leave DDD open Open the code in your favorite editor (factorial.cpp) Fix the code Recompile the code Run the code (on the command line) If you wanted to run it again in DDD, you would need to reload the code in DDDNow, a Harder Example: Now, a Harder Example Compile your program, again using the –g flag % g++ -g myFriends.cpp –o myFriends Run myFriendsSo You Have Another Bug: So You Have Another Bug What did you expect the program to do? Any ideas what went wrong? Starting DDD: Starting DDD Open your executable program in DDD (DDD knows what source code to use because you compiled with the –g flag) % ddd myFriends &Using DDD: Using DDD What do we know about where this bug occurred? Our youngest friend was wrong Be strategic! Where should we look first? Using DDD: Using DDD What do we know about where this bug occurred? Our youngest friend was wrong Be strategic! Where should we look first? Setting Breakpoints: Setting Breakpoints We want to watch the program at the call to FindYoungest() Set a breakpoint at: youngest = FindYoungest(friends, nFriends);Inspecting the Data: Inspecting the Data Right-click on friends and choose Display friends The data display editor opens Right-click on youngest and choose Display *youngest (notice the *) You can also hover over a variable to see its value Try hovering over the variable yougestInspecting Your Data: Inspecting Your Data Does the data look correct? Yes. Click Next to step to the next line of code Now, does the data look correct? No. Where did it go wrong? We now want to step into FindYoungest() Going Backwards: Going Backwards To get back to the break point.. Click and drag the arrow up a to the line youngest = FindYoungest(friends, nFriends); Inspecting Your Data: Inspecting Your Data At the breakpoint, click Step in the command tool to step inside FindYoungest() Next: steps one line at time, stepping over function calls Step: steps one line at time, stepping into function calls Should we step through or set another breakpoint? Stepping is temping but what if there are 10,000 items in your array and a lot of code inside your loop? What should we do? Finding the Bug: Finding the Bug Put a breakpoint at youngest = &friends[i]; Put a breakpoint on the line return(youngest) This prevents exiting the function after the loop Finding the Bug: Finding the Bug Click Continue to run the program to the next breakpoint Check the data Right-click on youngest and choose Display *youngest (Note the *) Highlight friends[i], right click on the selection, and choose Display friends[i] Finding the Bug: Finding the Bug Watch the program Click Continue to run to the next time youngest is updated Check your data Is youngest ever set correctly? Repeat… When you reach the breakpoint at return(youngest), ask Was youngest ever set correctly? What is its value now? So, what is the bug? Drag the arrow up and restart running through the loop Determine exactly when did the data become incorrect? Discovering the Bug: Discovering the Bug The infamous Array out-of-bounds! Fixing the Bug: Fixing the Bug Again, leave DDD open Open the code in your favorite editor (friends.cpp) Fix the code Recompile the code Run the codeIt’s still broken: It’s still broken Fixing the NEXT Bug: Fixing the NEXT Bug Reload the code in DDD In the Source menu, choose Source Reload Where do we put the break-point this time? What is the last line of code that we know was executed? Set a breakpoint Next… Next… Step… Some Debugging Theory: Some Debugging Theory Most programs are too big to step through You have to use breakpoints strategically Suppose you have 10,000 lines of code with no output and a segmentation fault. Where do you put your breakpoint? Some Debugging Theory: Some Debugging Theory Most programs are too big to step through You have to use breakpoints strategically Suppose you have 10,000 lines of code with no output and a segmentation fault. Where do you put your breakpoint? The Binary Search Principle of debugging You don’t look up a word in the dictionary by starting at the first letter ‘A’ page and turning hundreds of pages until you find your word (especially if your word is zebra). Like searching the dictionary, put a breakpoint in the middle of your program and look at the values there. Is your bug before or after that point? Bells & Whistles: Bells & Whistles DDD is very powerful! Each time you think, “I wish DDD could ….”, check the manual because it probably can! There are too many features to teach so we will go over only a few of the most usefulConditional Breakpoints: Conditional Breakpoints What if you had 10,000 friends? It would take a long to check each assignment. Instead, first make sure that the loop reaches the youngest friend. Use a conditional breakpoint Insert a breakpoint Right-click the break point and choose properties Enter the condition (in C code) when, if true, the code should pause.Watchpoints: Watchpoints Often you have a program and, at some point, an important value gets set incorrectly e.g., using (x = 0) instead of (x == 0) Suppose you know that A line 6, x is set to 7 At line 9,234 x = 0 (but x should still be 7). How can you quickly find the line where x was incorrectly set. A watchpoint allows you to watch for a variable to change REMEMBER…: REMEMBER… Be systematic & strategic Where should I look next? Remember the Binary Search Principle What should I look at next? Use the data display Use breakpoints & watchpoints