@node Development Tools @appendix Development Tools Here are some tools that you might find useful while developing code. @menu * Tags:: * cscope:: * Git:: @ifset recommendvnc * VNC:: @end ifset @ifset recommendcygwin * Cygwin:: @end ifset @end menu @node Tags @section Tags Tags are an index to the functions and global variables declared in a program. Many editors, including Emacs and @command{vi}, can use them. The @file{Makefile} in @file{pintos-ic/src} produces Emacs-style tags with the command @code{make TAGS} or @command{vi}-style tags with @code{make tags}. In Emacs, use @kbd{M-.} to follow a tag in the current window, @kbd{C-x 4 .} in a new window, or @kbd{C-x 5 .} in a new frame. If your cursor is on a symbol name for any of those commands, it becomes the default target. If a tag name has multiple definitions, @kbd{M-0 M-.} jumps to the next one. To jump back to where you were before you followed the last tag, use @kbd{M-*}. @node cscope @section cscope The @command{cscope} program also provides an index to functions and variables declared in a program. It has some features that tag facilities lack. Most notably, it can find all the points in a program at which a given function is called. The @file{Makefile} in @file{pintos-ic/src} produces @command{cscope} indexes when it is invoked as @code{make cscope}. Once the index has been generated, run @command{cscope} from a shell command line; no command-line arguments are normally necessary. Then use the arrow keys to choose one of the search criteria listed near the bottom of the terminal, type in an identifier, and hit @key{Enter}. @command{cscope} will then display the matches in the upper part of the terminal. You may use the arrow keys to choose a particular match; if you then hit @key{Enter}, @command{cscope} will invoke the default system editor@footnote{This is typically @command{vi}. To exit @command{vi}, type @kbd{: q @key{Enter}}.} and position the cursor on that match. To start a new search, type @key{Tab}. To exit @command{cscope}, type @kbd{Ctrl-d}. Emacs and some versions of @command{vi} have their own interfaces to @command{cscope}. For information on how to use these interface, visit @url{http://cscope.sourceforge.net, the @command{cscope} home page}. @node Git @section Git Git is a version-control system. That is, you can use it to keep track of multiple versions of files. The idea is that you do some work on your code and test it, then commit it into the version-control system. If you decide that the work you've done since your last commit is no good, you can easily revert to the last version. Furthermore, you can retrieve any old version of your code as of some given day and time. The version control logs tell you who made changes and when. Whilst Git may not be everyone's preferred version control system, it's free, has a wealth of documentation, and is easy to install on most Unix-like environments. For more information, visit the @uref{https://www.git-scm.com/, , Git home page}. @include localgitinstructions.texi @ifset recommendvnc @node VNC @section VNC VNC stands for Virtual Network Computing. It is, in essence, a remote display system which allows you to view a computing ``desktop'' environment not only on the machine where it is running, but from anywhere on the Internet and from a wide variety of machine architectures. It is already installed on the lab machines. For more information, look at the @uref{http://www.realvnc.com/, , VNC Home Page}. @end ifset @ifset recommendcygwin @node Cygwin @section Cygwin @uref{http://cygwin.com/, ,Cygwin} provides a Linux-compatible environment for Windows. It includes ssh client and an X11 server, Cygwin/X. If your primary work environment is Windows, you will find Cygwin/X extremely useful for these tasks. Install Cygwin/X, then start the X server and open a new xterm. The X11 server also allows you to run pintos while displaying the qemu-emulated console on your Windows desktop. @end ifset @localdevelopmenttools{}