8

segfault で終了するプログラムをデバッグする場合、gdb と組み合わせて電気柵を使用すると、次のように返されます。

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

本当は電気柵の方が便利だと思っていました。これは何を意味するのでしょうか?この情報をどのように解釈できますか? 私が見ることができる、または少なくともbt何も返さないスタックが残っていないようです。

どんな提案でも大歓迎です。

ありがとう!

4

2 に答える 2

15

メモリ マップ領域が不足している可能性があります。デバッグ アロケータを使用する場合、デフォルトは低いことが知られています。これは実行時に次の方法で調整できます。

echo 128000 > /proc/sys/vm/max_map_count

または、次の行を /etc/sysctl.conf に追加して再起動します。

vm.max_map_count = 128000

max_map_count の数値のデフォルトは 65530 で、必要に応じて MAX_INT まで増やすことができます。

詳細については、次を参照してください。

于 2012-12-31T18:23:38.823 に答える
3

ElectricFence の出力は、単にメモリが不足していて役に立たないことを意味します

ElectricFenceは、特に小さなヒープ割り当てが多数あるプログラムの場合、非常に高いメモリ オーバーヘッドを課します。

Linux を使用している場合は、代わりに Valgrind を試してください。

また、停止するプログラムの最初のステップは、ElectricFence で実行するSIGSEGVべきではないことに注意してください。むしろ、プログラムをデバッガーで実行して、クラッシュする場所を確認する必要があります。

于 2010-11-16T18:36:18.997 に答える