2010-11-15 37 views
8

Khi gỡ một chương trình mà chấm dứt với một segfault, hàng rào điện, kết hợp với gdb, trả về này:Hiểu đầu ra của hàng rào điện và gdb

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

Tôi thực sự nghĩ rằng hàng rào điện sẽ là hữu ích hơn . Điều đó có nghĩa là gì? Làm cách nào tôi có thể giải thích thông tin này? Dường như không còn bất kỳ ngăn xếp nào mà tôi có thể xem, hoặc ít nhất bt sẽ không trả lại bất kỳ thứ gì.

Mọi đề xuất sẽ thực sự được đánh giá cao.

Cảm ơn!

+0

Ngoài ra, khi tôi gỡ lỗi chương trình, nó không giống như nó là tiêu thụ tất cả các bộ nhớ ... vẫn còn ~ Còn 1GB, đó là một nửa. Vì vậy, tôi thậm chí không nên quan tâm đến không gian trao đổi, phải không? –

Trả lời

4

Đầu ra của ElectricFence chỉ có nghĩa là hết bộ nhớ và không thể giúp bạn.

ElectricFence áp đặt cực kỳ phí bộ nhớ cao, đặc biệt đối với các chương trình có nhiều phân bổ đống nhỏ.

Nếu bạn sử dụng Linux, hãy thử Valgrind thay thế.

Cũng lưu ý rằng bước đầu tiên của bạn cho một chương trình chết với SIGSEGV nên không đang chạy nó với ElectricFence; thay vào đó, bạn nên chạy chương trình dưới trình gỡ rối và xem trong đó nó bị treo.

+0

Rất tiếc ... Tôi vẫn còn nhiều bộ nhớ khả dụng khi nó trả về tin nhắn đó. Nó có thể chỉ là về để sử dụng nó cùng một lúc? Thật kỳ lạ. –

+0

Vì vậy, dù sao, khi nào chính xác tôi nên sử dụng hàng rào điện, nếu không phải trong trường hợp này? –

14

Có thể bạn đã hết vùng bản đồ bộ nhớ. Mặc định được biết là thấp khi sử dụng trình phân bổ gỡ lỗi. Điều này có thể được điều chỉnh trong thời gian chạy qua

echo 128000 > /proc/sys/vm/max_map_count 

hoặc bằng cách thêm dòng này vào thư mục /etc/sysctl.conf và khởi động lại:

mặc định số
vm.max_map_count = 128000 

Các max_map_count đến 65.530 và có thể tăng cao như MAX_INT Nếu cần.

Để biết thêm thông tin xem:

Các vấn đề liên quan