Я не уверен, "скрыто" ли это, но не многие люди знают об этом - псевдорегистры . Прибывает очень удобный при отладке, у меня есть @ERR, час в моем окне часов все время.
Во-первых, убедитесь, что вы компилируете с включенными отладочными символами ( -g
вариант gcc
). Перед запуском программы включите дампы ядра с помощью команды оболочки:
ulimit -c unlimited
Затем, когда приложение выйдет из строя, оно оставит файл core
в текущем рабочем каталоге (если он может писать в него
Затем вы можете загрузить основной файл в отладчик gdb
:
gdb <executable file> <core file>
... и он покажет вам, где произошел сбой, и позволит вам исследовать переменные и так далее.
Вы можете использовать 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 незаменим.