Segmentation Faults Otherwise known as segfaults. Occur when you - - PowerPoint PPT Presentation

segmentation faults
SMART_READER_LITE
LIVE PREVIEW

Segmentation Faults Otherwise known as segfaults. Occur when you - - PowerPoint PPT Presentation

Segmentation Faults Otherwise known as segfaults. Occur when you try to access memory that you don't have permission to. Results in one of the least-informative error messages when using gcc. It is often more useful to be told the


slide-1
SLIDE 1

Segmentation Faults

Otherwise known as segfaults. Occur when you try to access memory that you

don't have permission to.

Results in one of the least-informative error

messages when using gcc.

It is often more useful to be told the line on

which the segfault occurs.

GDB is a tool which you can use to debug C

code, which tells you what line the segfault

  • ccurred on.
slide-2
SLIDE 2

GDB

GDB allows you to do many things:

Pause your code at any time. Print the contents of any existing variables at that

point in the code.

Step through your code executing each line

individually before pausing again.

Find out what line of your code caused that

annoying segmentation fault. (Note: the line that caused the segmentation fault, is often not the line which has the error).

slide-3
SLIDE 3

Using GDB

1.Compile using the -g flag:

  • % gcc -Wall -Werror -g -o binaryFile myFile.c

2.Start gdb:

  • % gdb binaryFile

3.To run your program:

  • (gdb) run

4.To quit:

  • (gdb) quit
  • Note the change in prompt symbol when gdb is

running.

slide-4
SLIDE 4

GDB Useful Commands

To stop a program during execution:

Break <line number or function name>

To view contents of variables at current point:

Print <variable name>

To keep going:

Continue n Step n - goes into functions Next n - steps over functions

To view the stack (useful at seg faults)‏

Where

slide-5
SLIDE 5

Other Useful Commands

To see the code around the line you're currently

at:

List

slide-6
SLIDE 6

GDB Examples

llsegfault.c

cause: derefrencing null pointer segfault line num print i curr

stackoverflow.c

cause: running out of memory by recursive non-

ending function calls

where

backtraceExample.c

where

slide-7
SLIDE 7

DDD - graphical GDB

DDD has the same commands as gdb, but is

graphical.

One of the main advantages of this is the ability

to visually represent data structures.

slide-8
SLIDE 8

Viewing Data Structures with DDD

Compile with -g flag. Run ddd:

% ddd binaryFile

Set a breakpoint at the point that you want to

view the data structure:

break <line number> OR drag the breakpoint image onto the line you want to

break at

Run the program:

(gdb) run

slide-9
SLIDE 9

Viewing Data Structures with DDD (cntd)‏

When the breakpoint is reached:

If you can't see the place where data structures

would be drawn, select View->Data Window.

Right click in the data window and select 'New

Display'.

Enter the variable name that you want to draw a

picture of and press enter.

Wherever you see ... it means you can expand

the data structure. Do this by double clicking on the ... .

slide-10
SLIDE 10

DDD Examples

aircraft.c (Lab 6)‏

slide-11
SLIDE 11

Segfaults: a deeper view

Another handy tool is: Electric Fence. First, some background as to why it is handy.

slide-12
SLIDE 12

SegFaults (ctnd)‏

Ask for a piece of memory of

the right size:

malloc(sizeof(int));

slide-13
SLIDE 13

SegFaults (ctnd)‏

The memory is allocated.

slide-14
SLIDE 14

SegFaults (ctnd)‏

When only a small piece of

memory is required, instead of providing only that small piece, the operating system gives the user access to a whole page of memory.

Further mallocs will return other

sections of this same page.

slide-15
SLIDE 15

SegFaults (ctnd)‏

A segfault occurs when the

user tries to access the red section of memory.

Eg, if you malloc an array, and

go 1 or 2 indexes off the end, you may never get a segfault.

slide-16
SLIDE 16

SegFaults (ctnd)‏

But you don't know that it will

never segfault.

slide-17
SLIDE 17

Electric Fence

If you try to access memory that's on the same

page in memory, as something you've malloced, then no segfault will occur.

But, if you've accessed memory that you

haven't malloced, you want to know sooner rather than later (when it wreaks havoc on your program).

Electric Fence is a program which causes

segfaults to happen whenever you access memory in the heap that you haven't malloced.

slide-18
SLIDE 18

Using Electric Fence

Compile with -g and -lefence flags:

% gcc -lefence -g -o binaryFile myFile.c

Run the program within gdb:

% gdb binaryFile (gdb) run

slide-19
SLIDE 19

Valgrind

When you want to check if you've freed

everything you've malloced.

Using Valgrind:

Compile your program with -g flag. Pass your file into valgrind:

% valgrind --leak-check=full ./binaryFile

The output will summerise any memory leaks and

  • violations. This includes memory blocks that have

been malloced, but not freed.

The flag --leak-check=full means that it tells you

where you malloced something that you forgot to free.

slide-20
SLIDE 20

Valgrind Demos

valgrindDemo.c