GRASS Debugging
The following hints assume to work on a working-copy of the GRASS CVS dierctory.
Additionally it is good to have set the debbugging symbols during compile-time. Do not strip the libraries or use optimization in the compile. see INSTALL and doc/debugging.txt in the source code for more information.
Setting Environment-variables (numbers: 1-5)
- g.gisenv set="DEBUG=1"
- A higher debug level means you see more messages.
- These messages are always present regardless of compiler settings.
Using GDB
- running a programm inside GDB works (installation of GDB required :-), (on debian: apt-get install gdb)
- gdb `which v.in.ogr`
- run "out=bla dsn="PG:dbname=postgis user=me" olayer=postgislayer"
- when it crashes, just type bt full for a backtrace
- type "l" to list where in the source code it got to
- type frame 2 to switch to the second level function (see the backtrace), there you can again type "l" to see where it got up to.
Using strace
- running the command through strace could give you another hint what is going wrong somewhere.
- for example: strace v.in.ogr out=bla dsn="PG:dbname=postgis user=me" olayer=postgislayer
Skimming ChangLog for changes
- use the tool cvs2cl.pl for generating a local changelog-file
Using DDD (gdb graphical frontend)
- running a programm inside ddd works (installation of ddd and gdb required :-), (on debian: apt-get install gdb ddd)
- ddd `which v.in.ogr`
http://mpa.itc.it/markus/grass61/debugging/crash_1_small.jpg
- Run (from main menu PROGRAM): "out=bla dsn="PG:dbname=postgis user=me" olayer=postgislayer"
http://mpa.itc.it/markus/grass61/debugging/ddd_1_small.jpg
- run with parameters
- when it crashes, use the UP menu item to trace back
http://mpa.itc.it/markus/grass61/debugging/ddd_2_going_up_small.jpg
- reach the line where it crashed
- set a breakpoint, then run again to stop before the crash
http://mpa.itc.it/markus/grass61/debugging/ddd_3_breakpoint_small.jpg
- right mouse button on variables permits to display them etc.
http://mpa.itc.it/markus/grass61/debugging/ddd_4_displ_vars_small.jpg
- figure out why it crashed there. This requires PATIENCE. But you will nearly save the world if you identify the problem :-)
Using kdbg (gdb graphical frontend)
- kdbg is not unlike DDD, but it's a KDE application.
- Use is similar to ddd.
- Start with (within GRASS):
kdbg `which g.module`
- Fill in command line arguments with menu item Execution->Arguments.
- Open the View->Locals window.
- Click the Run icon (or Execution->Run) and see where it breaks.
- Set pause-points by clicking a red stop-sign to the left of the "+" on a line of the source code. From there you can step through instructions.
- Explore the values of variables in the locals window.