Transcript
Page 1: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

CSc 352Debugging Tools

Saumya DebrayDept. of Computer Science

The University of Arizona, [email protected]

Page 2: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Uninitialized pointers

2

str was never initialized to point to anything

Page 3: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Memory error diagnosis: valgrind

3

invoking the tool: valgrind progName arg1 arg2

indicates there was a problem; helps narrow down where the problem arose

Page 4: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Dangling pointersWe looked at this code earlier:

4

runtime stack

main

my_read

read_string

acba

buf

string

str

dangling pointer!

Page 5: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Dangling pointers

Minor variation on this code:

5

Page 6: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Dangling pointers

6

the code seems to work!!!(on hedgehog.cs.arizona.edu)

Page 7: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Dangling pointers

7

doesn’t work(on lectura.cs.arizona.edu)

Page 8: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

What’s going on?

8

runtime stack

main

my_read

read_stringacba

a

padding[ ]

buf[ ]

strlen

the array padding[ ] “protects” buf[ ] from getting overwritten — so the code seems to work (on some machines)

Page 9: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

More diagnosis

9

Page 10: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Summary

• Just because a program produces the expected output doesn’t mean that it’s correct– the observed behavior may be accidental– the observed behavior may be system-dependent

• Use valgrind to check whether the execution was free of memory errors– provides information only about one execution

• other executions may contain erroneous behaviors

– provides some help in identifying where the error occurred.

10

Page 11: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Another example

11

Page 12: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Example 2

12

out of bounds memory access

Page 13: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Example 2

13

where the invalid memory access occurred, (incl. stack trace)

where this memory was allocated(incl. stack trace)

Page 14: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Example 3

14

off-by-one problem fixed

Page 15: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Example 3

15

Page 16: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb: basic functionality

• Interactive debugger– allows the user to run a program and interactively examine

its execution. Features include:• breakpoints (“run until control reaches here, then prompt user”)• stack backtrace (chain of calls leading to some point in the code)• examination of program variables

• Usage:– compile program using

gcc –g …– invoke the program as

gdb prog (then supply arguments inside gdb)

16

Page 17: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

Interactive debugging: gdb

17

expected behavior

buggy behavior

Page 18: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb: example usage

18

invocation

set a breakpoint in this case: at entry to main()

start executionspecify command-line

arguments here

execution reaches breakpoint and returns

control to user

move to next statement

examine the program

Page 19: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb: Looking at the program

19

“list the program source around the line number specified”

Page 20: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb

20

set a breakpoint here

Page 21: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb

21

execution reaches breakpoint and returns

control to user

single-step through the execution

Page 22: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb

22

examine program state

continue to next breakpoint

Page 23: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb

23

Page 24: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb: moving around the runtime stack

24

where did the Seg Fault occur?

move up the stack (i.e., to the caller) to examine variable values

Page 25: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb: other features

• Gdb provides many other debugging features, e.g.:– conditional breakpoints

• “break execution at some point in the code and return control to the user if some condition holds”

– watchpoints• “break execution and return control to user if a variable is read or

written’

– change the value of a variable in the program state

• See tutorials in the DOCS area of class website

25

Page 26: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

gdb: reading commands from a file

26

input to the program to be debugged

script of commands to gdb

invoking gdb to read commands from script file

Page 27: CSc 352 Debugging Tools Saumya Debray Dept. of Computer Science The University of Arizona, Tucson

ddd: a GUI front end for GDB

27

program source

gdb interaction

common operations


Top Related