18
1 Homework • Reading – Finish K&R Chapter 1 (if not done yet) – Start K&R Chapter 2 for next time. • Programming Assignments – Finish HW1 assignment (if not done yet) – Continue HW2 assignment

1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

Embed Size (px)

Citation preview

Page 1: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

1

Homework

• Reading– Finish K&R Chapter 1 (if not done yet)– Start K&R Chapter 2 for next time.

• Programming Assignments– Finish HW1 assignment (if not done yet)– Continue HW2 assignment

Page 2: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

2

“Octal” Dump• Use “od –x” to see hex dump of a file

od –x trim.in00000000 0909 4e68 …. 2020. . .00000120 7061 7274 .… 0a0a

• Octal and Hexadecimal numbers• Why dump in Hex instead of Octal?• ASCII code for representing characters

Page 3: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

3

Octal and Hex Numbers• People normally deal in numbers base 10• Computers normally deal in numbers base 2• The problem:

– Reading a long string of 1’s and 0’s not easy– Conversion between base 2 and base 10 not easy

• The solution:– Convert binary digit strings to Octal or Hex– Easily done because 23 = 8 and 24 = 16

Page 4: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

4

Octal and Hex Numbers• Look at a long string of binary digits in groups

– Group from right by 3 digits for Octal– Group from right by 4 digits for Hex

• See the following examples:– Binary Digits– Grouped by threes– For Octal– Grouped by fours– For Hex

• Don’t convert binary to/from Hex/Octal via decimal!

011010101100011 010 101 100

0110 1010 11000 3 2 5 4

0x 6 a c

Page 5: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

5

Octal and Hex Numbers

• Octal (Octal Constant is written 0dd…)OCTALBINARY OCTAL BINARY

0 000 4 1001 001 5 1012 010 6 1103 011 7 111

• Note: Can’t write a decimal value with a leading 0 digit – will be interpreted as octal

Page 6: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

6

Octal and Hex Numbers

• Hex (Hex Constant is written 0xdd…) HEX BIN. HEX BIN. HEX BIN. HEX BIN.

0 0000 4 0100 8 1000 C1100

1 0001 5 0101 9 1001 D 1101 2 0010 6 0110 A 1010 E 1110 3 0011 7 0111 B 1011 F 1111

• NOTE: Memorize these translations• DO NOT convert between binary and Hex or Octal

by converting to decimal and back! Much harder!!

Page 7: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

7

ASCII Code• For computers to process our letters, digits,

punctuation marks, etc, we need a binary code for each such “character”.

• American Standard Code for Information Interchange (ASCII) provides these codes.

• See ASCII code chart (from Lecture 2)• Standard 8 bit bytes and 16 bit words are not

integer multiples of 3 bits but are integer multiples of 4 bits – favoring use of Hex!

Page 8: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

8

ASCII Codes in visitype.c

• To convert a character’s (integer) value to a printable ASCII string for what it represents:– We need a table of 4 byte character strings each

ending in a zero byte (created by using “\0”)– Arranged in the order of the character values

used in the ASCII code to represent them– And to create the address of one of these strings

to pass to function printf e.g. &asciiname[4*i]

Page 9: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

9

Analysis of visitype.c

• See separate program text “visitype.c”

• ASCII code conversion arraychar asciiname [] = …. ;

• Initialization values for the array128 strings of length 4 including the ‘\0’

asciiname[0] …[1] …[2] …[3] …[4] …[5] …[6]

‘N’ ‘U’ ‘L’ ‘\0’ ‘S’ ‘O’ ‘H’

…‘\0’

…[7]

Page 10: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

10

Analysis of visitype.c• There are a few characters which can't be placed in the

quoted initialization string directly, for example " and \.

"∆∆"\0" (where " is hex 22)• Problem is that " as a character will be interpreted as the end

of string. We need to indicate that it is quoted, that it is to be taken literally by the compiler as an ASCII value, and the way to do that is precede it by a \. 

"∆∆\"\0" (where " is hex 22)• Now there seem to be five chars in that string, “∆∆\"\0”• But there are not, \" is a single character value, just as \0 is

Page 11: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

11

Analysis of visitype.c

• What other characters MAY need the same special treatment?– See K&R page 193.– Good page to mark for open book tests!

• Do all of these require special treatment here?– No, which one other than \“ needs it?– Answer: (write in here) _________

Page 12: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

12

Analysis of visitype.c

• Access the strings in the array (i = 0 to 127)asciiname[4*i]

• Array index 4*i indicates start of each string• However, printf needs a pointer to a string

&asciiname[4*i]

• The “&” is the “address of” operator– Take on faith for now - more on pointers later

Page 13: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

13

More on Debugging

• How to debug. See Users Guide to Tools http://www.cs.umb.edu/helproot/cs240/cs240.html

• A professional programmer uses a Debugger, rather than putting in lots of printf statements to track down a bug. (Note: In some cases such as real time programs, you can’t stop the program with a debugger, you may need to use “printf” or “log” statements.)

Page 14: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

14

Use of Debugger - gdb

• Start with the correct compiler options:

• gcc -g vt.c -o vt -g for debug

-o replaces a.out with filename vt

• Now, instead of just typing program name:

• gdb vt

• Gives message:Ready to run -- not yet running.

Page 15: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

15

Use of Debugger - gdb• Want to interact with running program, not just let

it run free to end. Type:b main break at main()

• To run the program via the debuggerr <vt.in run, taking stdin from vt.in

• Will stop when encounters main() in program execution -- often lot of things done first.

• Now can single step through program, s or n (skip entering functions), put out values of variables.

Page 16: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

16

Use of Debugger - gdb• Examples of gdb commands:

p i (print value of variable i)

p 3*i (print value of expression 3*i)

p/x i (print in hex format value of variable i)

i lo ("info" - give values of all local variables)

h (help -- pretty good messages -- lists topics)

h topic (help on named topic)

h p (help on command p for printf)

q TO QUIT (leave debugger)

Page 17: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

17

Use of Debugger - gdb• More complex gdb commands in UNIX Guide. • Setting breaks/conditional breaks at line numbers:

b 36

b fn.c:22 if i == 3

• Getting line numbers from "list" or "l" command: l 22 print 10 lines around line 22 in main

l fn.c list first five lines, then l means next 10 lines

i b to get info on breakpoints

d 3 to delete bkpt 3

c for continue after bkpt encountered

Page 18: 1 Homework Reading –Finish K&R Chapter 1 (if not done yet) –Start K&R Chapter 2 for next time. Programming Assignments –Finish HW1 assignment (if not done

18

Debugging “core” files• If you compile a program with –g option, run it,

and it crashes, e.g. “segmentation fault – core dumped”, you can use gdb to the analyze the state of the program at the point where it crashed.

• Use the gdb command with two parameters:gdb <program file name> <core file name>

• Example:gdb buggy core

• Use all gdb commands as usual – except step, next, or continue since the program has already crashed. Display variable values, etc. to debug.