gdb: GNU Debugger

Please download to get full document.

View again

All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Information Report
Category:

General

Published:

Views: 17 | Pages: 0

Extension: PDF | Download: 0

Share
Related documents
Description
gdb: GNU Debugger. Lecturer: Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954. “UNIX for Programmers and Users” Third Edition, Prentice-Hall, GRAHAM GLASS, KING ABLES Slides partially adapted from Kumoh National University of Technology (Korea) and NYU.
Transcript
gdb: GNU Debugger Lecturer: Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 “UNIX for Programmers and Users” Third Edition, Prentice-Hall, GRAHAM GLASS, KING ABLES Slides partially adapted from Kumoh National University of Technology (Korea) and NYU GDB, the GNU Debugger
  • Text-based, invoked with: gdb [<programfile> [<corefile>|<pid>]]
  • Argument descriptions: <programfile>executable program file <corefile>core dump of program (crash records) <pid>process id of already running program
  • Compile <programfile> with –g for debug info (cc -g <programfile>)
  • Use -xdb for compatibility with xdb
  • corefiles very useful in post mortem analysis (figuring out what went wrong; why did it crash?)
  • Starting with pid very useful for programs that misbehave non-deterministically (scenario difficult to repeat; problem exhibited sporadically; field troubleshooting)
  • Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 gdb Example Get reversefirst.c from: http://www.csun.edu/~andrzej/COMP421-F04/source/ch12/reversefirst.c $ cc -g reversefirst.c -o reverse $ gdb reverse HP gdb 3.2 for PA-RISC 1.1 or 2.0 (narrow), HP-UX 11.00. <…> (gdb) help <…> Type "help" followed by a class name for a list of commands in that class. Type "help" followed by command name for full documentation. Command name abbreviations are allowed if unambiguous. (gdb) Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 Basic GDB Commands
  • General Commands: file [<file>]selects <file> as the program to debug run [<args>]runs selected program with arguments <args> attach <pid>attach gdb to a running process <pid> killkills the process being debugged quitquits the gdb program help [<topic>]accesses the internal help documentation
  • Stepping and Continuing: c[ontinue]continue execution (after a stop) s[tep]step one line, entering called functions n[ext]step one line, without entering functions finishfinish the function and print the return value
  • Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 GDB Breakpoints
  • Useful breakpoint commands: b[reak] [<where>]sets breakpoints. <where> can bea number of things, including a hexaddress, a function name, a linenumber, or a relative line offset [r]watch <expr>sets a watchpoint, which will breakwhen <expr> is written to [or read] info break[points]prints out a listing of all breakpoints clear [<where>]clears a breakpoint at <where> d[elete] [<nums>]deletes breakpoints by number
  • Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 Playing with Data in GDB
  • Commands for looking around: list [<where>]prints out source code at <where> search <regexp>searches source code for <regexp> backtrace [<n>]prints a backtrace <n> levels deep info [<what>]prints out info on <what> (likelocal variables or function args) p[rint] [<expr>]prints out the evaluation of <expr>
  • Commands for altering data and control path: set <name> <expr>sets variables or arguments return [<expr>]returns <expr> from current function jump <where>jumps execution to <where>
  • Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 gdb - Example (gdb) list 1---> can use “l” for “list” 1 /* REVERSE.C */ 2 3 #include <stdio.h> 4 5 /* Function Prototype */ 6 void reverse (); 7 8 /****************************************************************/ 9 10 main () (gdb) l---> same as “list”; continues from the previous 11 12 { 13char str [100]; /* Buffer to hold reversed string */ 14 15reverse ("cat", str); /* Reverse the string "cat" */ 16printf ("reverse (\"cat\") = %s\n", str); /* Display */ 17reverse ("noon", str); /* Reverse the string "noon" */ 18printf ("reverse (\"noon\") = %s\n", str); /* Display */ 19 } 20 (gdb) _ Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 gdb - Example (gdb) break main---> set a breakpoint in function main Breakpoint 1 at 0x29f4: file reversefirst.c, line 15. (gdb) break 16---> set a breakpoint in line 16 (current source) Breakpoint 2 at 0x2a0c: file reversefirst.c, line 16. (gdb) break reverse---> set a breakpoint in function reverse Breakpoint 3 at 0x2a80: file reversefirst.c, line 33. (gdb) info break---> display information on breakpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x000029f4 in main at reversefirst.c:15 2 breakpoint keep y 0x00002a0c in main at reversefirst.c:16 3 breakpoint keep y 0x00002a80 in reverse at reversefirst.c:33 (gdb) run Starting program: /home/usersNN/userID/reverse/reverse Breakpoint 1, main () at reversefirst.c:15 15reverse ("cat", str); /* Reverse the string "cat" */ (gdb) ontinue---> you can use “c” as well Breakpoint 3, reverse (before=0x40001028 "cat", after=0x7f7f0958 "") at reversefirst.c:33 33len = strlen (before); (gdb) _ Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 gdb - Example (gdb) backtrace---> show the execution stack #0 reverse (before=0x40001028 "cat", after=0x7f7f0958 "") at reversefirst.c:33 #1 0x2a0c in main () at reversefirst.c:15 (gdb) l 28 { 29 int i; 30int j; 31int len; 32 33len = strlen (before); 34 35for (j = len - 1, i = 0; j >= 0; j--, i++) /* Reverse loop */ 36after[i] = before[j]; 37 (gdb) next---> execute next line 35for (j = len - 1, i = 0; j >= 0; j--, i++) /* Reverse loop */ (gdb) n---> same as “next” 36after[i] = before[j]; (gdb) _ Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 gdb - Example (gdb) print after[i]---> display data (expression) $1 = 0 '\000' (gdb) p before[j]---> same as “print” $2 = 116 't' (gdb) _ (gdb) n 35for (j = len - 1, i = 0; j >= 0; j--, i++) /* Reverse loop */ (gdb) p after---> print $4 = 0x7f7f0958 "t" (gdb) p before $5 = 0x40001028 "cat" (gdb) c Continuing. Breakpoint 2, main () at reversefirst.c:16
  • printf ("reverse (\"cat\") = %s\n", str); /* Display */
  • (gdb) _
  • Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 gdb - Example (gdb) n reverse ("cat") = tac 17reverse ("noon", str); /* Reverse the string "noon" */ (gdb) s Breakpoint 3, reverse (before=0x40001030 "noon", after=0x7f7f0958 "tac") at reversefirst.c:33 33len = strlen (before); (gdb) return 0 Make reverse return now? (y or n) y #0 main () at reversefirst.c:18 18printf ("reverse (\"noon\") = %s\n", str); /* Display */ (gdb) p str $4 = "tac", '\000' <repeats 96 times> (gdb) n reverse ("noon") = tac---> this is the output from the program 19 } (gdb) quit $ _ Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 gdb/C Challenge
  • The reverse program from the next slide is buggy.
  • Copy the files (reverse1.c and reverse1.h) to your local file system; then, compile and run them.
  • Do you see the problem?
  • Can you fix it easily?
  • gdb will help
  • Use gdb to examine program behavior, fix the bug and call me to show the working version.
  • Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954 gdb/C Challenge /* REVERSE1.C */ #include <stdio.h> #include "reverse1.h" /****************************************************************/ int reverse (str) char *str; { int i; int len; char c; len = strlen (str); for (i = 0; i < len/2; i++) /* Reverse loop */ { c = *str+i; *(str+I) = *str+len-i-1; *(str+len-i-1) = c; } } int main() { char str[1024]; printf("Give me a word to reverse: "); scanf("%s", &str); reverse(str); printf("REVERSED: %s\n", str); } Prof. Andrzej (AJ) Bieszczad Email: [email protected] Phone: 818-677-4954
    We Need Your Support
    Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

    Thanks to everyone for your continued support.

    No, Thanks