2010-10-16 12 views
17

Próbuję usunąć błąd segmentacji spowodowany przez mój program w języku C, używając gdb. Plik zrzutu nie jest generowany automatycznie, gdy uruchomię mój program, i muszę uruchomić poleceniePlik zrzutu rdzenia nie został wygenerowany przy błędzie segmentacji

ulimit -c unlimited 

dla pliku rdzenia być generowane w następnym okresie.

Dlaczego plik zrzutu pamięci nie jest generowany automatycznie i dlaczego za każdym razem muszę uruchamiać komendę ulimit, aby wygenerować plik podstawowy podczas następnego uruchomienia mojego programu?

Używany system operacyjny to Ubuntu 10.10.

Odpowiedz

18

Trzeba umieścić komendę

ulimit -c unlimited 

w ustawieniach środowiska.

Jeśli używasz bash jako powłoki, należy umieścić powyższe polecenie w pliku ~/.bashrc

9

To dlatego, że domyślnie Twoja dystrybucja ogranicza rozmiar pliku core do 0 bloków. Wymienione polecenie ulimit zwiększa ten limit do nieskończoności.

Nie wiem o systemie Ubuntu, ale większość dystrybucji ma plik/etc/limits z domyślnymi ustawieniami systemowymi dla limitów zasobów.

15

Można również spróbować edytować /etc/security/limits.conf plik zamiast dodawania ulimit -c unlimited do ~/.bashrc.

limits.conf to "poprawne" miejsce, w którym można określić szczegóły zrzutu pamięci głównej w większości dystrybucji systemu Linux.

1

Błąd segmentacji wynika z nieistotnych wartości dla zmiennych ścieżki. W moim systemie użytkownikiem jest [email protected], a dodane treści są jak poniżej.

PATH=$PATH:/home/sidd/ns-allinone-2.35/bin:/home/sidd/ns-allinone-2.35/tcl8.5.10/unix:/home/sidd/ns-allinone-2.35/tk8.5.10/unix 

LD_LIBRARY_PATH=/home/sidd/ns-allinone-2.35/otcl-1.14:/home/sidd/ns-allinone-2.35/lib 

TCL_LIBRARY=/home/sidd/ns-allinone-2.35/tcl8.5.10/library 

Proszę odnieść się do this blog post (BARDZO WAŻNE).