views:

251

answers:

2

Currently I am developing an application using FUSE filesystem module in Linux (2.6 Kernel) in C language. Due to some programming error, the application crashes after mounting the filesystem. Since I am a novice developer in Linux/C environment. Could you please let me tell me possible options to debug such programs?

+3  A: 

First, make sure you're compiling with debugging symbols enabled (-g option to gcc). Before you run your program, enable core dumps with the shell command:

ulimit -c unlimited

Then when the application crashes, it'll leave a core file in the current working directory (as long as it can write to it).

You can then load the core file in the gdb debugger:

gdb <executable file> <core file>

...and it'll show you where it crashed, and let you examine variables and so forth.

caf
+1  A: 

You can use Valgrind with FUSE, however read this first to learn about a setuid work-around. I actually do the following as a convenience for others who might need to debug my 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");
}

I work on FUSE a lot .. and 90% of the time my crashes are due to a leak which causes the OOM killer to take action, dereferencing a bad pointer, double free(), etc. Valgrind is a great tool to catch that. GDB is helpful, but I've found Valgrind to be indispensable.

Tim Post
That link is broken
Nicolás
But this works: http://thread.gmane.org/gmane.comp.file-systems.fuse.devel/5224
Nicolás