
8092f1ae8c6180e44ef48d8786fe5d0d.ppt
- Количество слайдов: 33
Introduction to the Omega Server CSE 1105
Overview n n Intro to Omega Basic Unix Command n n n Files Directories Printing C and C++ compilers GNU Debugger
Omega Server n n Unix-based Server Provides C, C++, Lisp, Prolog, Cobol, and Fortran Language Compilers Pine Mail Server Users connect via telnet, ssh, hummingbird or other remote log ins
How to connect to Omega 1. Using the telnet command > telnet omega. uta. edu 2. Enter username at the prompt
Connect 2. SSH Secure Shell installed on all school computers
Connect 3. Hummingbird
Writing programs n Edit a file using an existing Unix editor n n n vi editor pico editor Edit a text file and upload it to omega n n n telnet ftp e-mail content or attachment
Basic Unix Commands Managing Files ls : displays the files in a specified directory
Basic Unix Commands Managing Directories pwd : print the current (working) directory
Basic Unix Commands Printing Files cat : concatenate the file to the screen (list the file)
Basic Unix Commands Invoking C and C++ compilers gcc : compile a C program to output file a. out
GNU Debugger (GDB) n n Use GDB to debug programs in C, C++, Modular-2, and Pascal, Fortran GDB is part of the GNU Project that was launched in 1984 to develop a complete UNIX style operating system. Free software: the GNU system is free ( pronounced “guh-noo”) at www. gnu. org GDB is protected by the GNU General Public License (GPL)
Capabilities with GDB n n Start your program, specifying anything that might affect its behavior. Make your program stop on specified conditions. Examine what has happened, when your program has stopped. Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another.
Starting GDB gcc filename with option –g
GDB Commands n n n list(l) – show the source list each 10 line list [[file: ]n|func] help – show the information of gdb command help [name] break – setup the breakpoint break [[file: ]n|function]
GDB Commands - cont. n n n clear – remove the breakpoint clear [[file: ]n|function] run – begin program run [arglist] print expr – show the value of expr print expr
GDB Commands - cont. c (or continue) – continue the program c [ n] n next – execute n lines and display the line if the next line is the function, it executes the whole function. next [n] n
GDB Commands - cont. step - execute n lines and display the line if the next line is the function, it executes n line inside the function. step [n] n bt (or backtrace) – display the program stack’s order which functions are called in program n
GDB Commands - cont. n n ret (or return) – exit the current function as return retrunvalue retval finish – execute the current function until the function returns the retval kill – quit the current debugging process quit – quit the gdb
Example – bugsome. c n n The program is to calculate factorial and power Not working for power function Setup the breakpoint as power function Program bugsome. c has been compiled with gcc to file a. out /home/dsk 22/ xxx 1234 /1320> gcc bugsome. c
List – bugsome. c #include
Result – a. out /home/dsk 22/ xxx 1234 /1320> a. out 11! = 39916800 This is f 3(). Stack overflow: pid 315, proc a. out, addr 0 x 11 fdfffe 0, pc 0 x 1200012 bc /home: warning, disk quota exceeded for user id 18531 Segmentation fault (core dumped) /home/dsk 22/xxx 1234/1320>
Debugging example /home/dsk 22/ xxx 1234 /1320> gcc bugsome. c -g /home/dsk 22/ xxx 1234 /1320> gdb a. out GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4. 16 (alpha-dec-osf 4. 0), Copyright 1996 Free Software Foundation, Inc. . . (gdb) break power Breakpoint 1 at 0 x 1200012 d 8: file bugsome. c, line 16.
Example continued (gdb) run Starting program: /home/dsk 22/xxx 1234/1320/a. out 11! = 39916800 This is f 3(). Breakpoint 1, power (b=11, e=7) at bugsome. c: 16 16 return b * power(b, e-1); (gdb) c Continuing. Breakpoint 1, power (b=11, e=6) at bugsome. c: 16 16 return b * power(b, e-1);
(gdb) c 3 Will ignore next 2 crossings of breakpoint 1. Continuing. Breakpoint 1, power (b=11, e=3) at bugsome. c: 16 16 return b * power(b, e-1); (gdb) c Continuing. Breakpoint 1, power (b=11, e=2) at bugsome. c: 16 16 return b * power(b, e-1); (gdb) c Continuing. Breakpoint 1, power (b=11, e=1) at bugsome. c: 16 16 return b * power(b, e-1); (gdb) c Continuing. Breakpoint 1, power (b=11, e=0) at bugsome. c: 16 16 return b * power(b, e-1);
(gdb) ret 1 Make power return now? (y or n) y #0 0 x 1200012 f 8 in power (b=11, e=1) at bugsome. c: 16 return b * power(b, e-1); (gdb) 11 12 13 14 15 16 17 18 19 20 l } /* returns b^e , e>=0 */ int power(int b, int e) { return b * power(b, e-1); } void f 3() {
(gdb) l 21 printf("This is f 3(). n"); 22 } 23 24 void f 2() 25 { 26 f 3(); 27 printf("11^7 = %dn", power(11, 7)); 28 } 29 30 void f 1() (gdb) break 28 Breakpoint 2 at 0 x 1200013 c 4: file bugsome. c, line 28. (gdb) c Continuing. 11^7 = 19487171 Breakpoint 2, f 2 () at bugsome. c: 28 28 }
(gdb) n f 1 () at bugsome. c: 34 34 } (gdb) n main () at bugsome. c: 41 41 printf("0! = %dn", factorial(0)); (gdb) s factorial (n=0) at bugsome. c: 7 7 if(n == 1) (gdb) l 2 #include
(gdb) ret 1 Make factorial return now? (y or n) y #0 0 x 120001478 in main () at bugsome. c: 41 41 printf("0! = %dn", factorial(0)); (gdb) c Continuing. 0! = 1 Program exited normally. (gdb) quit