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 . 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. 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 |