slide 2 slide 1 gaius gaius Introduction to the command line Introduction to the Command line
in this lecture series we will be using GNU/Linux to in this module we will examine: develop our understanding of programming in C tools necessary to develop game engines: gdb, emacs and friends one of the beauties of GNU/Linux is that you can do all your development from the command line or examine howone can integrate Python into a game alternatively from a graphical interface engine doom3 on GNU/Linux the command line interface is extremely powerful examine and extend a small physics game engine and once learnt it will last you a lifetime expose its API to Python different GUI’sand IDE’scome and go also revisit C and familiarise ourselves with pointers and indirect function calls learn howtodebug shared libraries and exploit remote debugging
slide 3 slide 4 gaius gaius GNU/Linux at South Wales Introduction to the Command line
you can create yourself a username at South Wales by makesure that you have a working username and clicking here 〈http:// password under GNU/Linux and boot up the imac mcgreg.comp.glam.ac.uk/login.html〉 into Linux the same link can be used to change your password, or reset your password if you forget it and login all machines in J109 are triple boot (will boot into and open up a terminal window GNU/Linux, OSX or Windows) we will be using GNU/Linux adjust the windowfont size so it looks good and rearrange the windowand this browser so both fit on the same screen without overlaps slide 5 slide 6 gaius gaius Introduction to the command line Introduction to the command line
the first command to be aware of is man.Toexamine to find out whether a command exists for a particular what this does type: function, type
$ man man $ man -k directory
when you have read enough, type ’q’ this command tells you all the commands which are associated with directories
you can filter the search by:
$ man -k directory | grep list
slide 7 slide 8 gaius gaius Critical general purpose command line Critical general purpose command line programs programs
cd change directory less display contents of a file, a page at a time
pwd print working directory grep print lines matching a pattern
cp copyafile all programs can be combined using the pipe operator
mv rename a file (move) for example
cat display contents of a file $ man -k directory | less slide 9 slide 10 gaius gaius Critical development command line File organisation programs
please try and keep your $HOME directories tidy gcc the C GNU compiler it is good practice to create separate directories for different courses and tutorials gdb the GNU debugger for example, here we might want to use the following commands: emacs the GNU editor
$ mkdir -p cs3s609/tutorial1 $ cd cs3s609/tutorial1
(before moving onto the next slide)
slide 11 slide 12 gaius gaius Minimal introduction to emacs Minimal introduction to emacs
to start editing the file tiny.c with emacs editor in this section of the notes the notation ˆC means type: press the control key and then press the C key, finally release both keys
$ emacs tiny.c type ˆXˆS to save your file critical key commands this editor can be controlled from the keyboard type ˆXˆC to quit emacs (without the mouse) use cursor keys, page up, page down, to move around the text slide 13 slide 14 gaius gaius Creating a simple C program under Minimal introduction to GCC GNU/Linux
gcc is the GNU C compiler using emacs create the following file (called tiny.c) nowexit emacs and compiler tiny.c,you can compile and link tiny.clikethis: the contents of this tiny.c should be as follows
$ gcc -g tiny.c #include
for (i=1; i<=12; i++) { printf("%d x 8 = %d\n", i, i*8); } $ ./a.out }
slide 15 slide 16 gaius gaius Minimal introduction to GDB Minimal introduction to GDB
gdb is the GNU debugger,which can be useful to for example, suppose we wanted to understand which both lines of code are executed in your tiny.c program, debug your program you could understand howaprogram works
$ gdb a.out GNU gdb 6.4.90-debian Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, etc (gdb) break main Breakpoint 1 at 0x8048365: file tiny.c, line 7. (gdb) run slide 17 slide 18 gaius gaius Minimal introduction to GDB Extending tiny.c to use a function
Breakpoint 1, main () at tiny.c:7 use emacs to modify the tiny.c program (to 7for (i=1; i<=12; i++) { include a mistake) (gdb) next 8printf("%d x 8 = %d\n", i, i*8); (gdb) next 1x8=8 #include
slide 19 slide 20 gaius gaius Extending tiny.c to use a function Extending tiny.c to use a function
nowrecompile the program by: and run the program, as before
$ gcc -g tiny.c $ ./a.out 1x8=9 2x8=18 3x8=27 4x8=36 5x8=45 6x8=54 7x8=63 8x8=72 9x8=81 10 x 8 = 90 11 x 8 = 99 12 x 8 = 108 slide 21 slide 22 gaius gaius Extending tiny.c to use a function Extending tiny.c to use a function
we can single step the program to find out where the (gdb) run mistakeoccurred Starting program: a.out Breakpoint 1, main () at tiny2.c:12 12 for (i=1; i<=12; i++) { (gdb) step $ gdb a.out 13 printf("%d x8=%d\n", i, mult(i)); GNU gdb 6.4.90-debian (gdb) step Copyright (C) 2006 Free Software Foundation, Inc. mult (i=1) at tiny2.c:5 GDB is free software, etc 5return i*9; (gdb) break main (gdb) fin Breakpoint 1 at 0x8048365: file tiny.c, line 7. Run till exit from #0 mult (i=1) at tiny2.c:5 (gdb) run 0x08048388 in main () at tiny2.c:13 13 printf("%d x8=%d\n", i, mult(i)); Value returned is $1 = 9
at this point we see our mistake, the function has returned 9
slide 23 slide 24 gaius gaius Extending tiny.c to use a function Extending tiny.c to use a function
we can see this again if we continue around the for (gdb) print i loop $1 = 2 (gdb) up #1 0x08048388 in main () at tiny2.c:13 13 printf("%d x8=%d\n", i, mult(i)); (gdb) print i (gdb) step $2 = 2 1x8=9 (gdb) down 12 for (i=1; i<=12; i++) { #0 mult (i=2) at tiny2.c:5 (gdb) step 5return i*9; 13 printf("%d x8=%d\n", i, mult(i)); (gdb) step mult (i=2) at tiny2.c:5 5return i*9; slide 25 slide 26 gaius gaius Using gdb from within emacs Using gdb from within emacs
you can run gdb from within emacs and have nowatthe command line, you can type: emacs perform source file correspondence
$ emacs if you wish to do this then it would be sensible to create a file .gdbinit and populate it with
# #this file is the gdb start up script and #you can place any gdb commands in here # break main run this file is read by gdb when gdb is executed
slide 27 slide 28 gaius gaius Using gdb from within emacs Tutorial
at this point makesure your emacs is a large window work though these lecture notes, trying each example in turn nowtype:
Introduction to the command line 〈http:// shop.fsf.org/product/ Introduction_to_Command_Line〉 (pdf) 〈http://en.flossmanuals.net/ CommandLineIntro/FM_16Apr09.pdf〉 gdb documentation 〈http://sourceware.org/ gdb/current/onlinedocs/gdb〉