Dealing with segmentation faults

  • Thread starter Thread starter heartless
  • Start date Start date
Click For Summary
To diagnose segmentation faults in applications using gdb, it's essential to understand that segfaults typically occur when a program attempts to access memory it shouldn't, often due to uninitialized pointers or exceeding array boundaries. To effectively identify the specific line causing the fault, users should compile their programs with debugging symbols enabled (using gcc -g) to facilitate better debugging. When a segmentation fault occurs, instead of merely running the program, setting breakpoints and stepping through the code line by line can help pinpoint the issue. Additionally, analyzing core dumps with gdb can provide insights into the program's state at the time of the fault, allowing for further investigation into the cause of the segmentation fault.
heartless
Messages
220
Reaction score
2
Hi everyone,
I'd like to know how to prompt gdb to show me where segmentation fault in an application occurs and why. Any ideas?
 
Technology news on Phys.org
Segfaults happen when your program tries to write to memory that doesn't belong to it. Common causes are:

1) Using uninitialized pointers.
2) Using uninitialized variables for pointer arithmentic (array indexing).
3) Letting a counter go beyond the boundaries of an array.

You should be able to use gdb to step through your code until you find the offending line.

- Warren
 
Yepp, that's what wikipedia says. However do you have any ideas how to find specific line or lines that cause segmentation fault in an application. I tried gdb for "normal" aps, and everything works perfectly, but I can't debug any applications with segmentation faults.

For example:
adrian@ubuntu:~/files/asm$ gdb env_show --quiet
(no debugging symbols found)
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) r
Starting program: /home/adrian/files/asm/env_show

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
You can't do that without a process to debug.
(gdb) info registers
The program has no registers now.
(gdb) bt
No stack.
(gdb)

and so on, I'm not very experienced with gdb,
--Thanks,
 
Rather than just running your program, put a breakpoint in and step through it line by line.

- Warren
 
Also, I presume that you compiled your program with gcc -g to include debugging information in the executable.

- Warren
 
Or run gdb on the core dump. Never done it myself, but the core file should have the program state at the time of the segfault.
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 9 ·
Replies
9
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
Replies
2
Views
603
Replies
8
Views
13K
  • · Replies 7 ·
Replies
7
Views
5K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 3 ·
Replies
3
Views
3K