2011-10-12 9 views
7

Mam uruchomioną aplikację osadzoną na płycie ARM9, gdzie całkowity rozmiar flash wynosi tylko 180 MB. Jestem w stanie uruchomić gdb, ale kiedy robięJak ograniczyć rozmiar pliku zrzutu pamięci podczas generowania go za pomocą GDB

(gdb) generate-core-dump

pojawia się błąd

warning: Memory read failed for corefile section, 1048576 bytes at 0x4156c000. 
warning: Memory read failed for corefile section, 1048576 bytes at 0x50c00000. 
Saved corefile core.5546 
The program is running. Quit anyway (and detach it)? (y or n) [answered Y; input not from terminal] 
Tamper Detected 
**********OUTSIDE ifelse 0********* 
length validation is failed 

ja również ustawić ulimit -c 50000 ale nadal zrzutu pamięci przekroczy ten limit. Kiedy wykonuję ls -l, aby sprawdzić rozmiar pliku, to jest to ponad 300 MB. W takim przypadku w jaki sposób powinienem ograniczyć rozmiar zrzutu pamięci?

Odpowiedz

8

GDB nie respektuje "ulimit -c", robi to tylko jądro.

Nie jest jasne, czy uruchamiasz GDB na tablicy docelowej, czy na hoście programistycznym (i używasz gdbserver na celu). Prawdopodobnie powinieneś użyć tego ostatniego, co pozwoli ci zebrać pełny zrzut rdzenia.

Obcięte zrzuty rdzenia są i tak uciążliwe, ponieważ często nie zawierają dokładnie informacji potrzebnych do debugowania problemu.

+0

Używam gdb na tablicy docelowej. Mogę również użyć gdbserver, ale ponieważ awaria nie jest łatwa do powielenia, wybieram pierwszą opcję. –

+1

Przepraszam, ale nie widzę, jak działa gdb lub gdbserver, skoro cokolwiek związanego z awarią jest łatwo powtarzalne, czy nie? – shodanex

+0

@shodanex - przy użyciu modelu klient-serwer rdzeń może być gromadzony w systemie plików "host", a nie w systemie wbudowanym, który ma tutaj tylko 180 MB dostępnego miejsca na plik podstawowy. Prawdopodobnie system hosta ma pełny dysk twardy i jest w stanie zapisać znacznie większy plik core. – Peter

0

Kiedy używałeś ulimit -c? Musi być użyty przed uruchomieniem programu, dla którego generujesz zrzut pamięci i wewnątrz tej samej sesji.

+0

Ustawiłem ulimit przed uruchomieniem GDB. Umieściłem "ulimit -c 50000" w /etc/rc.d/init.d/startup i sprawdziłem ręcznie również używając "ulimit -a" i został on ustawiony poprawnie. –

4

w swojej muszli rc-file:

limit coredumpsize 50000    # or whatever limit size you like 

że należy ustawić limit dla wszystkich, w tym GDB

Uwaga:

Jeśli ustawisz na 0, można upewnić się, że Katalog główny nie jest zaśmiecony plikami rdzenia zrzutu.

Powiązane problemy