了解电栅栏和gdb的输出

时间:2010-11-15 21:54:56

标签: debugging segmentation-fault gdb electric-fence

当调试以段错误终止的程序时,电栅栏与gdb一起返回:

"ElectricFence Exiting: mprotect() failed: Cannot allocate memory [Thread 0xb0bd4b70 (LWP 5363) exited] Program exited with code 0377.

我其实认为电围栏会更有帮助。这是什么意思?我该如何解读这条信息呢?似乎没有任何堆栈可供我查看,或者至少bt不会返回任何内容。

任何建议都会非常感激。

谢谢!

2 个答案:

答案 0 :(得分:14)

您的内存映射区域可能已用完。使用调试分配器时,已知默认值较低。这可以在运行时通过

进行调整
echo 128000 > /proc/sys/vm/max_map_count

或将此行添加到/etc/sysctl.conf并重新启动:

vm.max_map_count = 128000

max_map_count数字默认为65530,如有必要,可以增加到MAX_INT。

有关详细信息,请参阅:

答案 1 :(得分:4)

ElectricFence的输出只是意味着内存耗尽而无法帮助你。

ElectricFence强加高内存开销,特别是对于具有大量小堆分配的程序。

如果您使用的是Linux,请尝试使用Valgrind。

另请注意,使用SIGSEGV而死的程序的第一步应该使用ElectricFence运行它;相反,您应该在调试器下运行该程序,并查看其中崩溃。