Understanding the output of electric fence and gdb

2019-04-24 12:26发布

问题:

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!

回答1:

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


回答2:

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.