Segmentation Faults

Segmentation Faults

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 occurred on. 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). 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. 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 Other Useful Commands To see the code around the line you're currently at: List 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 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. 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 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 ... DDD Examples aircraft.c (Lab 6)‏ Segfaults: a deeper view Another handy tool is: Electric Fence. First, some background as to why it is handy. SegFaults (ctnd)‏ Ask for a piece of memory of the right size: malloc(sizeof(int)); SegFaults (ctnd)‏ The memory is allocated. 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. 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. SegFaults (ctnd)‏ But you don't know that it will never segfault. 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. 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 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. Valgrind Demos valgrindDemo.c.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    20 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us