当调试一个以段错误终止的程序时,电栅栏与 gdb 一起返回:
"ElectricFence Exiting: mprotect() failed: Cannot allocate memory
[Thread 0xb0bd4b70 (LWP 5363) exited]
Program exited with code 0377.
我实际上认为电围栏会更有帮助。这是什么意思?我该如何解释这条信息?似乎没有任何堆栈可供我查看,或者至少bt
不会返回任何东西。
任何建议将不胜感激。
谢谢!
当调试一个以段错误终止的程序时,电栅栏与 gdb 一起返回:
"ElectricFence Exiting: mprotect() failed: Cannot allocate memory
[Thread 0xb0bd4b70 (LWP 5363) exited]
Program exited with code 0377.
我实际上认为电围栏会更有帮助。这是什么意思?我该如何解释这条信息?似乎没有任何堆栈可供我查看,或者至少bt
不会返回任何东西。
任何建议将不胜感激。
谢谢!
您可能已经用完了内存映射区域。使用调试分配器时,默认值较低。这可以在运行时通过
echo 128000 > /proc/sys/vm/max_map_count
或将此行添加到 /etc/sysctl.conf 并重新启动:
vm.max_map_count = 128000
max_map_count 数字默认为 65530,如有必要,可以增加到 MAX_INT。
有关更多信息,请参阅:
ElectricFence 的输出只是意味着它内存不足,无法帮助您。
ElectricFence 会带来极高的内存开销,尤其是对于具有大量小堆分配的程序。
如果您使用的是 Linux,请尝试使用 Valgrind。
另请注意,您对一个因程序而死的程序的第一步不SIGSEGV
应该是使用 ElectricFence 运行它;相反,您应该在调试器下运行程序并查看它在哪里崩溃。