GNU Info

Info Node: (gmp.info)Debugging

(gmp.info)Debugging


Next: Profiling Prev: Efficiency Up: GMP Basics
Enter node , (file) or (file)node

Debugging
=========

Stack Overflow
     Depending on the system, a segmentation violation or bus error
     might be the only indication of stack overflow.  See
     `--enable-alloca' choices in Note: Build Options, for how to
     address this.

Heap Problems
     The most likely cause of application problems with GMP is heap
     corruption.  Failing to `init' GMP variables will have
     unpredictable effects, and corruption arising elsewhere in a
     program may well affect GMP.  Initializing GMP variables more than
     once or failing to clear them will cause memory leaks.

     In all such cases a malloc debugger is recommended.  On a GNU or
     BSD system the standard C library `malloc' has some diagnostic
     facilities, see Note: Allocation Debugging,
 or `man 3 malloc'.  Other possibilities, in no
     particular order, include

          `http://www.inf.ethz.ch/personal/biere/projects/ccmalloc'
          `http://quorum.tamu.edu/jon/gnu'  (debauch)
          `http://dmalloc.com'
          `http://www.perens.com/FreeSoftware'  (electric fence)
          `http://packages.debian.org/fda'
          `http://www.gnupdate.org/components/leakbug'
          `http://people.redhat.com/~otaylor/memprof'
          `http://www.cbmamiga.demon.co.uk/mpatrol'

Stack Backtraces
     On some systems the compiler options GMP uses by default can
     interfere with debugging.  In particular on x86 and 68k systems
     `-fomit-frame-pointer' is used and this generally inhibits stack
     backtracing.  Recompiling without such options may help while
     debugging, though the usual caveats about it potentially moving a
     memory problem or hiding a compiler bug will apply.

GNU Debugger
     A sample `.gdbinit' is included in the distribution, showing how
     to call some undocumented dump functions to print GMP variables
     from within GDB.  Note that these functions shouldn't be used in
     final application code since they're undocumented and may be
     subject to incompatible changes in future versions of GMP.

Source File Paths
     GMP has multiple source files with the same name, in different
     directories.  For example `mpz', `mpq', `mpf' and `mpfr' each have
     an `init.c'.  If the debugger can't already determine the right
     one it may help to build with absolute paths on each C file.  One
     way to do that is to use a separate object directory with an
     absolute path to the source directory.

          cd /my/build/dir
          /my/source/dir/gmp-4.0.1/configure

     This works via `VPATH', and might require GNU `make'.  Alternately
     it might be possible to change the `.c.lo' rules appropriately.

Assertion Checking
     The build option `--enable-assert' is available to add some
     consistency checks to the library (see Note: Build Options).
     These are likely to be of limited value to most applications.
     Assertion failures are just as likely to indicate memory
     corruption as a library or compiler bug.

     Applications using the low-level `mpn' functions, however, will
     benefit from `--enable-assert' since it adds checks on the
     parameters of most such functions, many of which have subtle
     restrictions on their usage.  Note however that only the generic C
     code has checks, not the assembler code, so CPU `none' should be
     used for maximum checking.

Temporary Memory Checking
     The build option `--enable-alloca=debug' arranges that each block
     of temporary memory in GMP is allocated with a separate call to
     `malloc' (or the allocation function set with
     `mp_set_memory_functions').

     This can help a malloc debugger detect accesses outside the
     intended bounds, or detect memory not released.  In a normal
     build, on the other hand, temporary memory is allocated in blocks
     which GMP divides up for its own use, or may be allocated with a
     compiler builtin `alloca' which will go nowhere near any malloc
     debugger hooks.

Other Problems
     Any suspected bug in GMP itself should be isolated to make sure
     it's not an application problem, see Note: Reporting Bugs.


automatically generated by info2www version 1.2.2.9