# Gamin the File Alteration Monitor ## Debugging Gamin

Main Menu
Home Overview Using gamin Configuration News Downloads Python bindings Developers informations Contacts FAQ Debugging Gamin Security Internals Differences from FAM ChangeLog
Related links
Mail archive FAM project sources GNOME Bugzilla Red Hat Bugzilla
Debugging support in gamin Debugging a running program Debugging and testing client ### Debugging support in gamin: Both the client and server side, if compiled with debug support accept an environment variable GAM_DEBUG which is set will make them report debugging informations to stdout. Usually for debugging you also want to use a dedicated server process so setting the GAM_CLIENT_ID environment allows to ensure this. Usually one also want to keep control over the server lifetime and not have it exit automatically after 30 seconds without connection, there is a command line flag --notimeout to gam_server for this. A typical example of a debugging session using 2 shells would be:
    shell1: export GAM_DEBUG=
    shell1: gam_server --notimeout test
to run the server in debug mode using the ID "test"
    shell2: export GAM_DEBUG=
    shell2: export GAM_CLIENT_ID=test
    shell2: gamin_client
to run the client in a verbose session. It is perfectly possible to also run the client under a debugger, for the server it works too except the dnotify kernel interface uses a signal SIG33 which is trapped by gdb. To avoid this use the handle gdb instruction:
    (gdb) handle SIG33 nostop
    Signal        Stop      Print   Pass to program Description
    SIG33         No        Yes     Yes             Real-time event 33
    (gdb)
even better add it to your $HOME/.gdbinit . ### Debugging a running program: Both the gam_server and client of the gamin library can get switched dynamically to a debug mode by sending them a signal SIGUSR2. In that case the program or library switches to verbose debugging and outputs the traces to a new file /tmp/gamin_debug_XXXXXX . Sending the signal again to the application or the server should switch off debugging. ### Debugging and testing client: A debugging client program called testgam is also available in the tests subdirectory. It allow to use the interface and monitor the flow of event received. Here is an example of a session:
    paphio:~/gamin/tests -> export GAMIN_DEBUG_SERVER="../server/gam_server"
    paphio:~/gamin/tests -> ./testgam -
    > connect test
    connected to test
    >
The environment variable can be used to specify the path to the server to run, then testgam is launched in interactive mode (argument - ) and the program is asked to connect to the server for session test (the server will be started on-demand by the library if needed).
    > mkdir temp
    mkdir temp
    > mkfile temp/foo
    mkfile temp/foo
    > mondir temp
    mondir temp 0
    >
    1: /u/veillard/gamin/tests/temp Exists: NULL
    1: foo Exists: NULL
    1: /u/veillard/gamin/tests/temp EndExist: NULL
    > mkfile temp/bar
    mkfile temp/bar
    >
    1: bar Created: NULL
    > rmfile temp/foo
    rmfile temp/foo
    >
    1: foo Deleted: NULL
    >
In this example a new directory is created with a file in it and then monitored, then the directory content is modified. The testgam program also poll and report events coming from the server as they arrive. Daniel Veillard