180 likes | 278 Views
COP 3530 Spring2012 Data Structures & Algorithms. Discussion Session Week 2. Outline. TA contact compilation makefile debug. About me. TA contact. Tao Li PhD student at CISE tali@cise.ufl.edu http://www.cise.ufl.edu/~tali Office Hour This Week: Thursday 9 th period at E309.
E N D
COP 3530 Spring2012Data Structures & Algorithms Discussion Session Week 2
Outline • TA contact • compilation • makefile • debug
TA contact Tao Li PhD student at CISE tali@cise.ufl.edu http://www.cise.ufl.edu/~tali Office Hour This Week: Thursday 9th period at E309
Separate code header file #ifndef _my_stack#define _my_stackint add(int x, int y); // function prototype for add.h #endif .cpp file int add(int x, int y){ return x + y;} Header guards Because header files can include other header files, it is possible to end up in the situation where a header file gets included multiple times.
Compilation: g++ • Compiling, in which C++ code is translated into assembly; • Assembling, in which assembly is translated into machine language; and • Linking, in which calls to functions outside the main file are linked to their definitions. //////////////////////////////////////////////// g++ -c MyStack.cpp g++ -c main.cpp g++ -o stack main.oMyStack.o or //////////////////////////////////////////////// g++ -o stack main.cpp MyStack.cpp -o program_name // compiling and linking to generate program_name, default "a.out" -c // compiling but no linking-g // for debugging, but runs slow
make and makefile make is a system designed to create programs from large source code trees and to maximize the efficiency of doing so. To that effect, make uses a file in each directory called a Makefile. This file contains instructions for make on how to build your program and when. target: dependencies<tab>instructions<enter> example Note: Build several independent targets in order, below is sample makefile ========================================================== all: target1 target2 target3 target1: dependencies <tab>instructions<enter> target2: ...
Stack A stack is a last in, first out (LIFO) data structure
Main.cpp & Input file While(fscanf(fp1, “ %d, &x”) > 0) if(x == 1) { fscanf(fp1, “ %d”, &y); myStack.Push(y); } else { myStack.Top(y); printf(“%d\n”, y); myStack.Pop(); } } 1 1 1 2 1 3 1 4 1 5 0 0 0 0
Run ./program_name For example: ./stack
GNU debugger -- gdb A symbolic debugger is a program that aids programmers in finding logical errors, by allowing them to execute their program in a controlled manner. • Enable symbol table • Debug the program g++ -g -o stack stack.cpp gdb stack
Use gdb Starting Execution of Program (gdb) run (or r) Quitting gdb (gdb) quit (or q or Ctrl-D) Resuming Execution at a BreakpointOnce you have suspended execution at a particular statement, you can resume execution in several ways: continue (or c) Resumes execution and continues until the next breakpoint or until execution is completed. next (or n) next will execute a function in the current statement in its entirety.
Setting Breakpoints & Print Setting a breakpoint permits you to mark a particular line in your program (called a breakpoint) so that when execution reaches that line, program execution will be suspended, allowing you to enter a gdb command. break function: Set a breakpoint at entry to function function. break filename:linenum :Set a breakpoint at line linenum in source file filename. print expression (or p expression)Displays the value of the expression (usually a variable) once → at the current point of execution.
Example: tst.cpp 1. #include “stdio.h” 2. int summation(int n) { 3. int sum = 0, i; 4. for(i = 1; i<n; i++) { • sum += i; • } 7. return sum; 8. } 9. int main() { 10. printf(“Summation is %d\n”, summation(100)); 11. return 0; 12. }
Example g++ tst.cpp -o tst ./tst Output: Summation is 4950 Actually: 1+2+…+100 = (1+100) * 100 / 2 = 5050 Where is the bug?
Tip: Reduce the input size Change printf(“Summation is %d\n”, summation(100)); To: printf(“Summation is %d\n”, summation(5)); Expected result: 1+2+3+4+5 = 15 g++ tst.cpp -o tst ./tst Output: Summation is 10
gdb Compile: g++ -g tst.cpp -o tst Run gdb: gdbtst List code: l Breakpoint: break 5 Run to bkpnt: r Next step: n Print value: p (variable) Finish: finish Quit: q
The power of PRINTF Add: printf(“i=%d, sum=%d\n”, i, sum); Output: i = 1, sum = 1 i = 2, sum = 3 i = 3, sum = 6 i = 4, sum = 10 Summation is 10