DOC PREVIEW
UMD CMSC 212 - GDB Tutorial A Walkthrough with Examples

This preview shows page 1-2-20-21 out of 21 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 21 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 21 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 21 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 21 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 21 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

GDB TutorialA Walkthrough with ExamplesCMSC 212 - Spring 2009Last modified March 22, 2009GDB TutorialWhat is gdb?“GNU Debugger”A debugger for several languages, including C and C++It allows you to inspect what the program is doing at a certainpoint during execution.Errors like segmentation faults may be easier to find with thehelp of gdb.http://sourceware.org/gdb/current/onlinedocs/gdb toc.html -online manualGDB TutorialAdditional step when compiling programNormally, you would compile a program like:gcc [flags] <source files> -o <output file>For example:gcc -Wall -Werror -ansi -pedantic-errors prog1.c -o prog1.xNow you add a -g option to enable built-in debugging support(which gdb needs):gcc [other flags] -g <source files> -o <output file>For example:gcc -Wall -Werror -ansi -pedantic-errors -g prog1.c -o prog1.xGDB TutorialStarting up gdbJust try “gdb” or “gdb prog1.x.” You’ll get a prompt that lookslike this:(gdb)If you didn’t specify a program to debug, you’ll have to load it innow:(gdb) file prog1.xHere, prog1.x is the program you want to load, and “file” is thecommand to load it.GDB TutorialBefore we go any furthergdb has an interactive shell, much like the one you use as soon asyou log into the linux grace machines. It can recall history with thearrow keys, auto-complete words (most of the time) with the TABkey, and has other nice features.TipIf you’re ever confused about a command or just want moreinformation, use the “help” command, with or without anargument:(gdb) help [command]You s hould get a nice de scription and maybe some more usefultidbits. . .GDB TutorialRunning the programTo run the program, just use:(gdb) runThis runs the program.If it has no serious problems (i.e. the normal program didn’tget a segmentation fault, etc.), the program should run finehere too.If the program did have issues, then you (should) get someuseful information like the line number where it crashed, andparameters to the function that caused the error:Program received signal SIGSEGV, Segmentation fault.0x0000000000400524 in sum array region (arr=0x7fffc902a270, r1=2, c1=5,r2=4, c2=6) at sum-array-region2.c:12GDB TutorialSo what if I have bugs?Okay, so you’ve run it successfully. But you don’t need gdb forthat. What if the program isn’t working?Basic ideaChances are if this is the case, you don’t want to run the programwithout any stopping, breaking, etc. Otherwise, you’ll just rush past theerror and never find the root of the issue. So, you’ll want to step throughyour code a bit at a time, until you arrive upon the error.This brings us to the next set of commands. . .GDB TutorialSetting breakpointsBreakpoints can be used to stop the program run in the middle, ata designated point. The simplest way is the command “break.”This sets a breakpoint at a specified file-line pair:(gdb) break file1.c:6This sets a breakpoint at line 6, of file1.c. Now, if the programever reaches that location when running, the program will pauseand prompt you for another command.TipYou c an set as many breakpoints as you want, and the programshould stop execution if it reaches any of them.GDB TutorialMore fun with breakpointsYou c an also tell gdb to break at a particular function. Supposeyou have a function my func:int my func(int a, char *b);You c an break anytime this function is called:(gdb) break my funcGDB TutorialNow what?Once you’ve set a breakpoint, you can try using the runcommand again. This time, it should stop where you tell it to(unless a fatal error occurs before reaching that point).You c an proceed onto the next breakpoint by typing“continue” (Ty ping run again would restart the programfrom the beginning, which isn’t very useful.)(gdb) continueYou c an single-ste p (exe cute just the next line of code) bytyping “step.” This gives you really fine-grained control overhow the program proceeds. You can do this a lot...(gdb) stepGDB TutorialNow what? (even more!)Similar to “step,” the “next” command single-steps as well,except this one doesn’t execute each line of a sub-routine, itjust treats it as one instruction.(gdb) nextTipTyping “step” or “next” a lot of times can be tedious. If you justpress ENTER, gdb will repeat the same command you just gave it.You c an do this a bunch of times.GDB TutorialQuerying other aspects of the programSo far you’ve learned how to interrupt program flow at fixed,specified points, and how to continue stepping line-by-line.However, sooner or later you’re going to want to see thingslike the values of variables, etc. This might be useful indebugging. :)The print command prints the value of the variablespecified, and print/x prints the value in hexadecimal:(gdb) print my var(gdb) print/x my varGDB TutorialSetting watchpointsWhereas breakpoints interrupt the program at a particular line orfunction, watchpoints act on variables. They pause the programwhenever a watched variable’s value is modified. For example, thefollowing watch command:(gdb) watch my varNow, whenever my var’s v alue is modified, the program willinterrupt and print out the old and new values.TipYou may wonder how gdb determines which variable named my var to watch if thereis more than one declared in your program. The answer (perhaps unfortunately) isthat it relies upon the variable’s scope, relative to where you are in the program at thetime of the watch. This just means that you have to remember the tricky nuances ofscope and extent :(.GDB TutorialExample programsSome example files are found in~/212public/gdb-examples/broken.c on the linux gracemachines.Contains several functions that each should cause asegmentation fault. (Try commenting out calls to all but onein main())The errors may be easy, but try using gdb to inspect the code.GDB TutorialOther useful commandsbacktrace - produces a stack trace of the function calls thatlead to a seg fault (should remind you of Java exceptions)where - same as backtrace; you can think of this version asworking even when you’re still in the middle of the programfinish - runs until the current function is finisheddelete - deletes a specified breakpointinfo breakpoints - shows information about all declaredbreakpointsLook at sections 5 and 9 of the manual mentioned at the beginningof this tutorial to find other useful commands, or just try help.GDB Tutorialgdb with EmacsEmacs also has built-in support for gdb. To learn about it, go here:http://tedlab.mit.edu/~dr/gdbintro.htmlGDB


View Full Document

UMD CMSC 212 - GDB Tutorial A Walkthrough with Examples

Download GDB Tutorial A Walkthrough with Examples
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view GDB Tutorial A Walkthrough with Examples and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view GDB Tutorial A Walkthrough with Examples 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?