When code crashes on BGL, usually you'll get core.<process id>
files, which are plain-text stack traces. You can figure out where your code crashed by using addr2line -e <exe> <address>
. You get the addresses from the "function call chain:" section at the end of the core file.
function call chain: 0x001521f4 0x00152148 0x00170604 0x00100a24 0x00100158 0xfffffffc |
Jim Edwards wrote a perl script to automatically spit out a full stack trace for a given binary; it is located at /contrib/bgl/bin/decode.pl
. You need to compile and link with the '-g' flag to get the proper routine names.
Example:
decode.pl test.exe core.0 |
The memmon library is at /contrib/bgl/lib/libmemmon.rts.a
, with a README at /contrib/bgl/memmon/README
.
Memmon allows you to trace and view stack and heap usage in your code. These functions are provided:
C |
Fortran |
|
|
|
|
|
|
Compile your code with these flags, depending on the compiler you are using:
-qdebug=function_trace
-finstrument-functions
Link with -L/contrib/bgl/lib -lmemmon.rts
If you just link with memmon and do not add any of the memmon_ function calls, memmon will watch your memory usage and exit if the stack overwrites the heap.
If you add calls to memmon_trace_on
and memmon_trace_off
in your code, memmon will print memory usage at the entry and exit of each funtion surrounded by the memmon_trace_on
and off
functions.
entering somefunc, min free mem: 508.58MB, stack min: 0x1ffaa728 (somefunc;entry), heap max: 0x00316000 (somefunc;entry) exiting somefunc, min free mem: 508.58MB, stack min: 0x1ffaa728 (somefunc;entry), heap max: 0x00316000 (somefunc;entry) |
Calling memon_print_usage()
anywhere in your code prints out a message like this:
Min Free Memory: 508.58MB, stack min: 0x1ffaa728 (somefunc;entry), heap max: 0x00316000 (somefunc;entry) |
Note that memmon shows the maximum (not the current) stack and heap usage in the program at the point where the routine is called.