Obecnie opracowuję aplikację wykorzystującą moduł FUSE w Linuksie (jądro 2.6) w języku C. Z powodu błędu programowania aplikacja ulega awarii po zamontowaniu systemu plików. Ponieważ jestem początkującym programistą w środowisku Linux/C. Czy mógłbyś mi powiedzieć, jakie są możliwe opcje debugowania takich programów?Jak zdebugować awarię systemu plików FUSE w Linuksie
Odpowiedz
Po pierwsze, upewnij się, że kompilujesz z włączonymi symbolami debugowania (-g
opcja na gcc
). Przed uruchomieniem programu należy włączyć rdzeń zrzuca z poleceniem powłoki:
ulimit -c unlimited
Potem, gdy awarii aplikacji, będzie to pozostawić plik core
w bieżącym katalogu roboczym (tak długo, jak to może napisać do niego).
Następnie można załadować plik core w gdb
debuggera:
gdb <executable file> <core file>
... i będzie to pokazać, gdzie rozbił się i pozwalają badać zmienne i tak dalej.
Możesz użyć Valgrind z BEZPIECZNIKIEM, jednak read this first, aby dowiedzieć się o obejściu setuid. I rzeczywiście wykonać następujące czynności jako udogodnienie dla innych, którzy mogą potrzebować do debugowania mój system plików:
#include <valgrind/valgrind.h>
if (RUNNING_ON_VALGRIND) {
fprintf(stderr,
"******** Valgrind has been detected by %s\n"
"******** If you have difficulties getting %s to work under"
" Valgrind,\n"
"******** see the following thread:\n"
"******** http://www.nabble.com/valgrind-and-fuse-file-systems"
"-td13112112.html\n"
"******** Sleeping for 5 seconds so this doesn't fly by ....",
progname, progname);
sleep(5);
fprintf(stderr, "\n");
}
Pracuję na Bezpiecznik A partii .. i 90% czasu moje awarie spowodowane są nieszczelności, które powoduje, że OOM zabójca do działania, dereferencji złego wskaźnika, podwójny free(), itp. Valgrind jest doskonałym narzędziem do złapania tego. GDB jest pomocny, ale uznałem, że Valgrind jest nieodzowny.
Ten link jest uszkodzony –
Ale to działa: http://thread.gmane.org/gmane.comp.file-systems.fuse.devel/5224 –
Uruchomić klienta bezpiecznika za pomocą opcji -d
.
Wiem, że to pytanie jest dość stare, ale jeśli użyjesz przełącznika -f
, będzie on działał na pierwszym planie, co jest bardzo pomocne przy debugowaniu. Przełącznik -s
wyłącza wielowątkowość, co jest bardzo przydatne.
Jestem obecnie opracowanie sterownik bezpiecznik i ta strona jest bardzo pomocne: http://www.cs.hmc.edu/~geoff/classes/hmc.cs135.201109/homework/fuse/fuse_doc.html
Cytując:
printf Twój printf/fprintf debugowanie kodu będzie działać tylko wtedy, gdy prowadzony z - przełącznik f. W przeciwnym razie bezpiecznik odłącza stdout i stderr.
Dziękuję za wskaźnik. O ile widzę, jest to najbardziej przydatna odpowiedź. –
UML jest bardzo dobry do debugowania ogólnych części jądra systemu Linux, planowania, ale nie do platformy sprzętowej ani do specyficznej dla sterowników części jądra.
http://www.csee.wvu.edu/~katta/uml/x475.html
http://valerieaurora.org/uml_tips.html
I patrząc na wykres uważnie:
Zobaczysz aplikację "Hello", który jest wykonanie wszystkich procedur obsługi FUSE zwrotnych. Dlatego większość debugowania znajduje się w programie użytkownika, ponieważ moduł jądra FUSE (i libfuse) jest ogólnie przeznaczony do użycia przez system plików ALL FUSE.
- 1. Wdrażanie asynchronicznego systemu plików za pomocą FUSE na Linuksie
- 2. Jak zdebugować i rozwiązać awarię "DisconnectedContext"?
- 3. Szyfrowanie systemu plików dla IOS?
- 4. Łączenie dwóch plików w Linuksie bez powtórzeń
- 5. Ktoś używający "Google Cloud Storage Fuse" w produkcji?
- 6. Usuń spacje z nazw plików w Linuksie
- 7. cloudfoundry: jak używać systemu plików
- 8. Automatyzacja testów: Jak symulować awarię zasilania/awarię urządzenia?
- 9. Jak zdebugować projekt Polymer 1.x?
- 10. Jak zrobić jar w Linuksie?
- 11. Obsługa wyjątków w Linuksie
- 12. Programowanie USB w Linuksie
- 13. Buforowanie DNS w Linuksie
- 14. Readonly plików oprogramowanie odniesienia na Linuksie
- 15. Rozmiar bloku systemu plików
- 16. Rozwój Bada w Linuksie
- 17. eksperymentalny :: linker systemu plików
- 18. Gettext bez systemu plików
- 19. Jak mogę utworzyć system plików przestrzeni użytkownika za pomocą FUSE bez użycia libfuse?
- 20. Odbiornik systemu plików
- 21. jak używać awesomium sdk w Linuksie
- 22. Kronikowanie systemu plików Android
- 23. Polecenie Synchronizacja systemu plików dla systemu Windows
- 24. Uaktualnianie zestawu SDK systemu Android powoduje awarię java.lang.VerifyError
- 25. Pobierz Ograniczenia systemu plików
- 26. połączyć wiele plików pdf w Linuksie za pomocą skryptu?
- 27. Jak zdebugować podstawową aplikację node.js (nie http) w systemie Windows
- 28. Jak mogę zdebugować test ładunków na uszkodzeniu w gdb?
- 29. Dlaczego FUSE wydaje się blokować wszystkie wątki?
- 30. jak włączyć cutil.h w Linuksie
Co to znaczy "używać"? Czy próbujesz wdrożyć system plików przestrzeni użycia w oparciu o mechanizm bezpieczników lub coś innego? –
+1 - BEZPIECZNIK może być trochę trudny do debugowania. –
@Sarsane, tak Wdrażam system plików przestrzeni użytkownika oparty na FUSE. – Hrishi