Как отладить катастрофический отказ файловой системы FUSE в Linux

Я не уверен, "скрыто" ли это, но не многие люди знают об этом - псевдорегистры . Прибывает очень удобный при отладке, у меня есть @ERR, час в моем окне часов все время.

11
задан Hrishi 9 December 2009 в 05:46
поделиться

2 ответа

Во-первых, убедитесь, что вы компилируете с включенными отладочными символами ( -g вариант gcc ). Перед запуском программы включите дампы ядра с помощью команды оболочки:

ulimit -c unlimited

Затем, когда приложение выйдет из строя, оно оставит файл core в текущем рабочем каталоге (если он может писать в него

Затем вы можете загрузить основной файл в отладчик gdb :

gdb <executable file> <core file>

... и он покажет вам, где произошел сбой, и позволит вам исследовать переменные и так далее.

6
ответ дан 3 December 2019 в 04:52
поделиться

Вы можете использовать Valgrind с FUSE, однако сначала прочтите этот , чтобы узнать об обходе setuid. На самом деле я делаю следующее для удобства тех, кому может потребоваться отладка моей файловой системы:

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

Я много работаю над FUSE .. и в 90% случаев мои сбои происходят из-за утечки, которая заставляет OOM-убийцу действовать, разыменовывая плохой указатель, double free () и т.д. Valgrind - отличный инструмент для этого. GDB полезен, но я считаю, что Valgrind незаменим.

2
ответ дан 3 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: