了解电栅栏和gdb的输出

Ric*_*son 8 debugging gdb segmentation-fault electric-fence

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

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

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

任何建议都会非常感激.

谢谢!

小智 14

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

echo 128000 > /proc/sys/vm/max_map_count
Run Code Online (Sandbox Code Playgroud)

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

vm.max_map_count = 128000
Run Code Online (Sandbox Code Playgroud)

max_map_count数字默认为65530,如果需要,可以增加到MAX_INT.

有关更多信息,请参阅


Emp*_*ian 3

ElectricFence 的输出仅仅意味着内存不足,无法帮助您。

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

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

另请注意,对于因以下原因而终止的程序,您的第一步SIGSEGV应该使用 ElectricFence 运行它;相反,您应该在调试器下运行该程序并查看它在哪里崩溃。