Verständnis der Ausgabe von Elektrozaun und Gdb

8

Beim Debuggen eines Programms, das mit einem segfault endet, gibt electric fence in Verbindung mit gdb Folgendes zurück:

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

Ich dachte eigentlich, Elektrozaun wäre hilfreicher. Was bedeutet das? Wie kann ich diese Information interpretieren? Es scheint keinen Stack mehr zu geben, den ich anschauen kann, oder zumindest bt wird nichts zurückgeben.

Jeder Vorschlag würde wirklich geschätzt werden.

Danke!

    
Ricky Robinson 15.11.2010, 21:54
quelle

2 Antworten

14

Sie haben wahrscheinlich keine Speicherkartenbereiche mehr. Es ist bekannt, dass der Standardwert niedrig ist, wenn Debug-Zuordner verwendet werden. Dies kann zur Laufzeit über

angepasst werden %Vor%

oder indem Sie diese Zeile zu /etc/sysctl.conf hinzufügen und neu starten:

%Vor%

Die max_map_count-Nummer ist standardmäßig 65530 und kann bei Bedarf bis auf MAX_INT erhöht werden.

Weitere Informationen finden Sie unter

Curtis P 31.12.2012 18:23
quelle
4

Die Ausgabe von ElectricFence bedeutet einfach, dass es nicht genug Speicher hat und Ihnen nicht helfen kann.

ElectricFence erzwingt extrem hohen Speicheraufwand, insbesondere für Programme mit vielen kleinen Heapzuweisungen.

Wenn Sie Linux verwenden, versuchen Sie stattdessen Valgrind.

Beachten Sie auch, dass Ihr erster Schritt für ein Programm, das mit SIGSEGV stirbt, nicht mit ElectricFence ausgeführt werden sollte; Stattdessen sollten Sie das Programm unter Debugger ausführen und sehen, wo es abstürzt.

    
Employed Russian 16.11.2010 18:36
quelle