cop 3530 spring2012 data structures & algorithms

18
COP 3530 Spring2012 Data Structures & Algorithms Discussion Session Week 2

Upload: gordon

Post on 24-Feb-2016

53 views

Category:

Documents


0 download

DESCRIPTION

COP 3530 Spring2012 Data Structures & Algorithms. Discussion Session Week 2. Outline. TA contact g++ makefile debug. About me. TA contact. Tao Li PhD student at CISE [email protected] http://www.cise.ufl.edu/~tali Office Hour This Week: Thursday 9 th period at E309. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: COP 3530 Spring2012 Data Structures & Algorithms

COP 3530 Spring2012Data Structures & Algorithms

Discussion Session Week 2

Page 2: COP 3530 Spring2012 Data Structures & Algorithms

Outline

• TA contact• g++• makefile• debug

Page 3: COP 3530 Spring2012 Data Structures & Algorithms

About me

Page 4: COP 3530 Spring2012 Data Structures & Algorithms

TA contact

Tao LiPhD student at [email protected]://www.cise.ufl.edu/~tali

Office Hour This Week: Thursday 9th period at E309

Page 5: COP 3530 Spring2012 Data Structures & Algorithms

Separate code

header file#ifndef _my_stack#define _my_stack

int add(int x, int y); // function prototype for add.h

#endif

.cpp fileint add(int x, int y){ return x + y;}

Header guardsBecause header files can include other header files, it is possible to end up in the situation where a header file gets included multiple times.

Page 6: COP 3530 Spring2012 Data Structures & Algorithms

Compilation: g++

1. Compiling, in which C++ code is translated into assembly;2. Assembling, in which assembly is translated into machine language; and3. Linking, in which calls to functions outside the main file are linked to their

definitions.

////////////////////////////////////////////////g++ -c MyStack.cppg++  -c main.cppg++  -o stack main.o MyStack.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

Page 7: COP 3530 Spring2012 Data Structures & Algorithms

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: ...

Page 8: COP 3530 Spring2012 Data Structures & Algorithms

Stack

A stack is a last in, first out (LIFO) data structure

Page 9: COP 3530 Spring2012 Data Structures & Algorithms

Main.cpp & Input file

if(x == 1) { fscanf(fp1, “ %d”, &y); myStack.Push(y);} else { myStack.Top(y); printf(“%d\n”, y); myStack.Pop();}

1 11 21 31 41 50 000

Page 10: COP 3530 Spring2012 Data Structures & Algorithms

Run

./program_name For example:  ./stack

Page 11: COP 3530 Spring2012 Data Structures & Algorithms

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.

1.Enable symbol table   2.Debug the program

g++ -g -o stack stack.cppgdb stack

Page 12: COP 3530 Spring2012 Data Structures & Algorithms

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.

Page 13: COP 3530 Spring2012 Data Structures & Algorithms

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. 

 

Page 14: COP 3530 Spring2012 Data Structures & Algorithms

Example: tst.cpp

1. #include “stdio.h”2. int summation(int n) {3. int sum = 0, i;4. for(i = 1; i<n; i++) {5. sum += i; 6. }7. return sum;8. }9. int main() {10. printf(“Summation is %d\n”, summation(100));11. return 0;12. }

Page 15: COP 3530 Spring2012 Data Structures & Algorithms

Example

g++ tst.cpp -o tst ./tstOutput:Summation is 4950

Actually:1+2+…+100 = (1+100) * 100 / 2 = 5050

Where is the bug?

Page 16: COP 3530 Spring2012 Data Structures & Algorithms

Tip: Reduce the input size

Changeprintf(“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 ./tstOutput:Summation is 10

Page 17: COP 3530 Spring2012 Data Structures & Algorithms

gdb

Compile: g++ -g tst.cpp -o tstRun gdb: gdb tstList code: lBreakpoint: break 5Run to bkpnt: rNext step : nPrint value: p (variable)Finish: finishQuit: q

Page 18: COP 3530 Spring2012 Data Structures & Algorithms

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