The GNU C library itself has some debugging features and hooks you can use to add your own.
For documentation on a Linux system type info libc and then g Heap<TAB>. Another useful info node is “Hooks for Malloc”, you can get there with g Hooks<TAB>
Recent versions of Linux libc (later than 5.4.23) and glibc (2.x) include a malloc() implementation which is tunable via environment variables. For details, see mallopt(3).
[blyth@belle7 debugging]$ MALLOC_CHECK_=1 ls
malloc: using debugging hooks
malloc.rst
Got some more info using MALLOC_CHECK_=1 (continuing beyond the first corruption).
Now GDB fails:
GiGaRunActionGDML::BeginOfRunAction i 0 c D
FreeFilePath return /data1/env/local/env/geant4/geometry/gdml/DVGX_20131203-2016/g4_00.dae i 1
GiGaRunActionGDML::WriteDAE to /data1/env/local/env/geant4/geometry/gdml/DVGX_20131203-2016/g4_00.dae recreatePoly 0
/data1/env/local/dyb/external/Python/2.7/i686-slc5-gcc41-dbg/bin/python: symbol lookup error: /data1/env/local/dyb/NuWa-trunk/lhcb/InstallArea/i686-slc5-gcc41-dbg/lib/libGaussTools.so: undefined symbol: _ZN10G4DAEWrite5WriteERK8G4StringPK15G4LogicalVolumeS2_ibb
Program exited with code 0177.
[blyth@belle7 DVGX_20131203-1719]$ c++filt _ZN10G4DAEWrite5WriteERK8G4StringPK15G4LogicalVolumeS2_ibb
G4DAEWrite::Write(G4String const&, G4LogicalVolume const*, G4String const&, int, bool, bool)
The reason you can't redirect it is that it gets written specifically to
/dev/tty, unless you have set the environment variable LIBC_FATAL_STDERR_. (I'm
not sure this is documented anywhere, but the relevant code can be found here.)
single quotes needed for GDB breakpoint tab completion
(gdb) b 'G4VSceneHandler::G4VSceneHandler(G4VGraphicsSystem&, int, G4String const&)'
Breakpoint 2 at 0x7ed79b1: file src/G4VSceneHandler.cc, line 84.
(gdb)
The culprit looks to be inconsisent class definition, due to not recompiling all the other classes that access this one. Moral of the story: