Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
586 KB
Nội dung
Old Chapter 10: Programming Tools A Developer’s Candy Store In this chapter … • • • • • Overview Shared Libraries make System calls CVS UNIX/Linux and Programming • Since the OS and most of the tools are written in C, continued development necessitated a thorough set of C development tools • Over time, many other languages found their way to UNIX/Linux, making it an excellent development platform • Machine Independent + Portable + Standards Based = Great for Development CProgramming • Most prevalent C compiler available is the GNU C Compiler, gcc • gcc has progressed to support many other languages including C++, java, cobol, fortran • Has many options and complex syntax, but most simply it compiles and links CProgramming • This is not a programming course, so we’re not interested in how to program • We’ll focus on the utilities and the process of building apps • We’ll focus on C, but these processes extend to most other compiled languages • Scripting languages are different – interpreted (ex perl, python, shell scripts) Compiling and Linking Preprocessor Compiler Assembler Linker Preprocessor • Directives in C/C++ files • #include include_file – Inserts code files from other locations – Can be files you’ve written, or standard library files • Ex: – #include “myHeader.h” – #include Compiler • Changes high level language code into assembly code • Here code is optimized by the compiler (there are varying levels of optimization) • The better the compiler, the neater and more efficient this code is Assembler • Assembly code is then turned into machinereadable object code • Each code file compiled and assembled creates a file with a o extension • These are binary files – not readable by human eye Linker • The last step is to combine all the object code into one executable • Combines with system libraries with common function calls – system specific • Executables are in Executable and Linking Format (ELF) – standardized Makefile • Format: target: prerequisite-list construction-commands • First line lists files that are needed to create target – if one changes, we need to recompile • Second line MUST start with a tab, contains the command to compile/link/etc Makefile example form: size.o length.o gcc –o form size.o length.o size.o: size.c form.h gcc –c size.c length.o: length.c form.h gcc –c length.c form.h: num.h table.h cat num.h table.h > form.h clean: rm *.o *core* make con’t • When you run make without arguments, it will attempt to build the first target in the file • So the end result (complete program) should be the first line • You can force make to build any target by issuing it as an argument – Ex: make clean Advanced Makefiles • More complex Makefiles contain macros, which are like variables • Referenced via $(macro) • CC – compiler • CFLAGS – C compiler flags • CPPFLAGS – C++ compiler flags • COMPILE.c – translates to: $(CC) –c $(CFLAGS) $(CPPFLAGS) Advanced Makefiles con’t • LDFLAGS – linker flags • LINK.c – translates to: $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) • FILES – list of source files • HEADERS – list of header files • OBJECTS – list of object files Debugging • First level of debugging is simply putting breaks and print statements in your code • Can be time consuming • To help prevent problems tell compiler to show warnings about common mistakes • gcc –Wall will show all warnings Debugging con’t • Bigger problems require the use of a symbolic debugger • Allows execution to be monitored and controlled • Allows setting of break points and display of variable contents • Lets you trace through memory dumps to see where run time errors occur gdb • GNU gdb symbolic debugger • Compile programs with –g to allow debugging • This adds debugging information to program, a list of symbols that relate to variables and functions • Also allows you to associate system calls in executable to lines in source file gdb con’t • gdb is very robust and complex, lots of commands and options • Other graphic front ends are available, but at the command line your best bet is probably going to be gdb System Calls • Kernel is responsible for process control, filesystem management, and operation of peripheral devices • We have access to these kernel abilities via system calls • The system works directly on our behalf • Depending on the operation you may need elevated privileges Important system calls • • • • • • • fork() – create new process exec() – runs program in memory getpid() – get a process ID kill() – terminates a process open() – open a file read() – read an open file write() – write to an open file CVS: Source Code Management • When multiple people are working on a project, source code management becomes an issue • Need something to keep track of revisions, and make sure users don’t step on one another • Enter CVS – Concurrent Versions System – Developed from Revision Control System (RCS) CVS • Allows users to check out source code, modify it, the check it back in and integrate their changes • When you check out files, a copy is made for you to edit • Originals are kept in data store • You then can commit your changes to the store CVS con’t • Syntax: cvs [cvs-options] command [options] • Commands include: – checkout – get copy of source – commit – submit changes – update – check for changes made by others – add – add new file to project – delete – remove file from project CVS con’t • A thorough treatment of CVS is beyond the scope of this class • Unless you are a programmer, you probably won’t come into contact with CVS • If you are, you will learn to appreciate it when you work on group projects • Other CVS alternatives: Subversion, BitKeeper, Git ... which are like variables • Referenced via $(macro) • CC – compiler • CFLAGS – C compiler flags • CPPFLAGS – C+ + compiler flags • COMPILE .c – translates to: $(CC) c $(CFLAGS) $(CPPFLAGS) Advanced... then can commit your changes to the store CVS con’t • Syntax: cvs [cvs-options] command [options] • Commands include: – checkout – get copy of source – commit – submit changes – update – check... Developed from Revision Control System (RCS) CVS • Allows users to check out source code, modify it, the check it back in and integrate their changes • When you check out files, a copy is made for you