# 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