Comment déboguer le crash du système de fichiers FUSE sous Linux

Actuellement, je développe une application utilisant le module de système de fichiers FUSE sous Linux (2.6 Kernel) en langage C. En raison d’une erreur de programmation, l’application se bloque après le assembly du système de fichiers. Depuis je suis un développeur novice dans un environnement Linux / C. Pourriez-vous s’il vous plaît laissez-moi me dire les options possibles pour déboguer de tels programmes?

Je sais que cette question est assez ancienne, mais si vous utilisez le paramètre -f , il sera exécuté au premier plan, ce qui est très utile pour le débogage. L’option -s désactive le multithreading, ce qui est également très utile.

Je développe actuellement un pilote FUSE et cette page a été très utile: http://www.cs.hmc.edu/~geoff/classes/hmc.cs135.201109/homework/fuse/fuse_doc.html

Citer:

Printf Votre code de débogage printf / fprintf ne fonctionnera que si vous utilisez le commutateur -f. Sinon, Fuse déconnecte stdout et stderr.

Tout d’abord, assurez-vous de comstackr avec les symboles de débogage activés (option -g à gcc ). Avant d’exécuter votre programme, activez les vidages de mémoire avec la commande shell:

 ulimit -c unlimited 

Puis, lorsque l’application se bloque, elle laissera un fichier core dans le répertoire de travail en cours (tant qu’il pourra y écrire).

Vous pouvez ensuite charger le fichier core dans le débogueur gdb :

 gdb   

… et il vous montrera où il s’est planté, et vous permet d’examiner les variables et ainsi de suite.

Exécutez votre client de fusible avec l’option -d .

Vous pouvez utiliser Valgrind avec FUSE, mais lisez ceci en premier pour en savoir plus sur le contournement de setuid. Je fais effectivement ce qui suit comme commodité pour ceux qui pourraient avoir besoin de déboguer mon système de fichiers:

 #include  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"); } 

Je travaille beaucoup sur FUSE .. et 90% du temps, mes accidents sont dus à une fuite qui provoque l’action du tueur OOM, le déréférencement d’un mauvais pointeur, le double free (), etc. Valgrind est un excellent outil pour attraper ça . GDB est utile, mais j’ai trouvé Valgrind indispensable.

UML est très utile pour le débogage des parties génériques du kernel Linux comme le système de fichiers, la planification mais pas la plate-forme matérielle ou la partie spécifique au pilote du kernel.

http://www.csee.wvu.edu/~katta/uml/x475.html

http://valerieaurora.org/uml_tips.html

Et en regardant attentivement le diagramme:

Résultat de l'image pour le système de fichiers FUSE

Vous verrez l’application “hello” qui implémente tous les gestionnaires de rappel FUSE. La majorité du débogage se trouve donc dans le programme de l’espace utilisateur, car le module du kernel FUSE (et libfuse) est généralement destiné à être utilisé par le système de fichiers ALL FUSE.