CS3214: Project 1
Today s presentation Git gdb Project 1
Project 1 Due Monday, February 20 at 11:59 PM Office hours are on course website Check Piazza for updates
Git
Version Control System Keep snapshots of your code Sync your code with other developers
Getting the code! Generate SSH keys, add to profile Step by step instructions: https://docs.gitlab.com/ee/ssh/readme.html Fork the repository here: https://git.cs.vt.edu/cs3214-staff/cs3214-esh MAKE IT PRIVATE Give developer access to your partner
Git basics Git keeps your projects history like a timeline Each point in the timeline is called a commit
Committing code Edit some amount of code You can view the status of files as you work git status to see file status (edited, staged, etc) Add changes to staging area: git add <file> Adds file to staging area git add. Adds all files to staging area When ready, commit them git commit -m message Commit with message
Push your changes to Gitlab git push Pull teammate s changes from Gitlab git pull Must pull before push!
Merge Conflict Resolution src/esh.c <<<<<<< HEAD // Author: Richard Feynman ======= // Author: Elon Musk >>>>>>> 52ea9255764f9b67b1ce91250e1d70ddca7ab2cc... Red: My changes Blue: Remote changes Perform necessary changes (don t forget to remove extra markup) and save file Stage changes ($ git add src/esh.c ) Commit changes ($ git commit ) Do another pull ($ git pull), just in case Push final changes ($ git push)
Git Commands - TL;DR Version Shows a list of files that have been modified; shows changes that have been staged and those that haven t $ git status Copies the specified repo to the current directory $ git clone <repo url> Add the specified files to the staging area $ git add <files> Commit all staged changes $ git commit -m commit message here Get changes from the remote repo (gitlab) and apply them to local copy $ git pull Push local changes to the remote repo (gitlab) $ git push Always do PULL before PUSH! Resources Official tutorial page: http://git-scm.com/docs/gittutorial Free Codeschool guided tutorial: https://www.codeschool.com/courses/tr y-git Walk-through tutorial: http://gitimmersion.com/index.html Also, google.com Seriously git is very popular you will probably find everything you need just by searching for it.
Questions?
GDB Debugging is key to success!
$ gcc -g Code MUST compile with -g for gdb to work properly! Also highly recommended to turn off optimizations (-O0) as compilers may shift around or optimize out code
$ gdb --args $ gdb --args program arg1 arg2 Is saved as part of BASH history Great alternative to run arg1 arg2
(gdb) layout src Show source code lines while debugging Far superior alternative to list Turn off with Ctrl-X+A
Backtrace and Frames (gdb) bt (show function call trace) (gdb) frame <num> After selecting a frame, you can print all variables declared in that function call
(gdb) call function() Make any function call while debugging Can also call print function() instead, will also show the return value Don t forget the ()!
Zoning in on the bug Scenario: your program breaks after a while Be clever with breakpoints (bp) (gdb) ignore 1 100 (ignore bp 1 100 times) (gdb) info b (show how many times bp was hit)
Zoning in on the bug
Watchpoints Very good at finding memory bugs watch *0xADDRESS Don t forget the *
GDB Commands - Summary $ gcc -g -O0 $ gdb --args (gdb) layout src (gdb) bt (gdb) frame <num> (gdb) info b (gdb) ignore <bp> <num> (gdb) watch *0x<address> (gdb) call function()
Graphical GDB For those of you who prefer graphical debuggers like Eclipse, try DDD
Questions?
Project 1
Base code - Already includes a parser! - Parser spits out hierarchical data structures -Most of the project will be playing with these data structures
esh_* data structures
List data structure Node contains (a pointer to) data vs Data contains node Retrieve data from a struct list_elem by using the list_entry macro struct esh_command *cmd = list_entry(e, struct esh_command, elem);
List data structure Regular linked list class listnode<t> { T data; listnode<t> next; }
List data structure struct list struct list_elem { struct list_elem *prev; struct list_elem *next; };
List data structure Don t: Use the same list_elem for multiple lists Forget to list_init Pass your struct list to a function (pass a pointer instead)
Questions?
Demo