When debugging a program that terminates with a segfault, electric fence, in conjunction with gdb, returns this:
"ElectricFence Exiting: mprotect() failed: Cannot allocate memory
[Thread 0xb0bd4b70 (LWP 5363) exited]
Program exited with code 0377.
I actually thought electric fence would be more helpful. What does this mean? How can I interpret this piece of information? There doesn't seem to be any stack left that I can look at, or at least bt
won't return anything.
Any suggestion would be really appreciated.
Thanks!
You have probably run out of memory map areas. The default is known to be low when using debug allocators. This can be adjusted at runtime via
echo 128000 > /proc/sys/vm/max_map_count
or by adding this line to /etc/sysctl.conf and rebooting:
vm.max_map_count = 128000
The max_map_count number defaults to 65530 and can be increased as high as MAX_INT if necessary.
For more information see:
- max_map_count
- Side effects when increasing vm.max_map_count
The output of ElectricFence simply means that it ran out of memory and can't help you.
ElectricFence imposes extremely high memory overhead, especially for programs with lots of small heap allocations.
If you are on Linux, try Valgrind instead.
Also note, that your first step for a program that dies with SIGSEGV
should not be running it with ElectricFence; rather you should run the program under debugger and see where it crashes.