Attualmente sto sviluppando un'applicazione utilizzando il modulo del filesystem FUSE in Linux (kernel 2.6) in linguaggio C. A causa di alcuni errori di programmazione, l'applicazione si blocca dopo aver montato il filesystem. Dal momento che sono uno sviluppatore alle prime armi in ambiente Linux/C. Potresti per favore permettermi di dirmi le possibili opzioni per eseguire il debug di tali programmi?Come eseguire il debug di arresto del filesystem FUSE in Linux
risposta
Innanzitutto, assicurarsi di compilare con i simboli di debug abilitati (opzione -g
su gcc
). Prima di eseguire il programma, abilitare i core dump con il comando di shell:
ulimit -c unlimited
Poi, quando l'applicazione si blocca, si lasceranno un file core
nella directory di lavoro corrente (purché in grado di scrivere ad esso).
È possibile quindi caricare il file core nel debugger gdb
:
gdb <executable file> <core file>
... e ti mostrerà dove si schiantò, e ti permettono di esaminare le variabili e così via.
È possibile utilizzare Valgrind con FUSE, tuttavia read this first per informazioni su una soluzione setuid. Io in realtà faccio il seguente come vantaggio per gli altri che potrebbero aver bisogno di eseguire il debug il file system:
#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");
}
Io lavoro su FUSE molto .. e il 90% del tempo i miei arresti sono causa di una perdita, che fa sì che il OOM killer per agire, dereferenziare un puntatore cattivo, doppio free(), ecc. Valgrind è un ottimo strumento per catturarlo. GDB è utile, ma ho trovato Valgrind indispensabile.
Questo link è rotto –
Ma questo funziona: http://thread.gmane.org/gmane.comp.file-systems.fuse.devel/5224 –
Esegui il tuo client di fusibili con l'opzione -d
.
So che questa domanda è piuttosto vecchia, ma se si utilizza lo switch -f
verrà eseguito in primo piano, il che è molto utile per il debug. Lo switch -s
disabilita il multithreading, che è anche molto utile.
Attualmente sto sviluppando un driver FUSE e questa pagina è stato molto utile: http://www.cs.hmc.edu/~geoff/classes/hmc.cs135.201109/homework/fuse/fuse_doc.html
Per citare:
Printf vostro printf/fprintf il debug del codice funziona solo se si esegue con il - f interruttore. Altrimenti, Fuse disconnette stdout e stderr.
Grazie per il puntatore. Per quanto posso vedere, questa è la risposta più utile. –
UML è molto utile per eseguire il debug di parti generiche del kernel Linux come il filesystem, la pianificazione ma non la parte hardware o il driver specifico del kernel.
http://www.csee.wvu.edu/~katta/uml/x475.html
http://valerieaurora.org/uml_tips.html
E guardando il diagramma con attenzione:
Si vedrà l'applicazione "ciao" che sta attuando tutti i gestori di callback FUSE. Quindi la maggior parte del debug è nel programma userspace, dato che il modulo del kernel FUSE (e libfuse) è genericamente pensato per essere utilizzato dal filesystem ALL FUSE.
- 1. In filesystem FUSE in memoria
- 2. Come eseguire il debug di questo arresto C#?
- 3. Come eseguire il debug del debug?
- 4. FUSE - documentazione dettagliata
- 5. Miglioramento del debug in caso di arresto anomalo di Linux in un programma C
- 6. Linux/C++ Come eseguire il debug dell'applicazione di rilascio
- 7. Readonly filesystem su Linux
- 8. Come eseguire il debug del servizio WCF?
- 9. Come eseguire il debug del codice asincrono?
- 10. Come eseguire il debug del servizio Web?
- 11. Come eseguire il debug del codice ruby?
- 12. Determina il dispositivo del filesystem in Python
- 13. Come eseguire il debug del plug-in del file logstash
- 14. Node.js: come eseguire il debug in remoto?
- 15. Creare un loop in un filesystem Linux
- 16. Come posso eseguire il debug in un framework in Xcode?
- 17. Continuare a eseguire il debug dopo l'asserzione fallita su Linux?
- 18. Come posso creare un filesystem userspace con FUSE senza usare libfuse?
- 19. Come eseguire il debug del codice matlab senza gui
- 20. Il modo migliore per eseguire il debug di un arresto anomalo in objc_msgSend?
- 21. Come eseguire il debug del codice nascosto in IntelliJ?
- 22. Come eseguire il debug del template in Meteor/manubri?
- 23. Come eseguire il debug del codice Java compilato in Eclipse
- 24. Come eseguire il debug del codice Cython in Pandas?
- 25. Come eseguire il debug del dattiloscritto in Ionic2
- 26. ResourceNotFoundException come eseguire il debug?
- 27. Come eseguire il debug di una macro del preprocessore
- 28. Come posso eseguire il debug di viste del rasoio mvc4?
- 29. Come eseguire il debug di un timeout del watchdog
- 30. Come eseguire il debug di Android ANR?
Cosa intendi con "usare"? Stai provando ad implementare un file system dello spazio di utilizzo basato sul meccanismo di fusione o qualcos'altro? –
+1 - FUSE può essere un po 'un problema per eseguire il debug. –
@arsane, sì, sto implementando un file system utente basato su FUSE. – Hrishi