GDB is particularly useful if your external causes a crash, and you want to identify the line in your code that caused the crash.
``hans$ gdb /Applications/Pd-0.39.2-extended-test3/Contents/Resources/bin/pd``
``(gdb) add-symbol-file my_blah.pd_darwin``
start Pd then attach to it using the process name and PID:
``(gdb) attach pd.12341``
With tab completion, you'll see that there are two **pd** processes. On Mac OS X, the one with the higher number is the one you want to attach to.
Now set a breakpoint:
``(gdb) break hid_free``
and start Pd running again:
Here's a transcript of my session:
hans@sla:~ > gdb /Applications/Pd-0.39.2-extended-test3.app/Contents/Resources/bin/pd
GNU gdb 6.1-20040303 (Apple version gdb-384) (Mon Mar 21 00:05:26 GMT 2005)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "powerpc-apple-darwin"...unable to open symbol file: /usr/local/lib/Jack: No such file or directory.
warning: Unable to read symbols from "/Volumes/Document1/Developpement/ProjectsCVS/JackCVS/Jack_CVS_HEAD - Tiger - CVS CURRENT/config/os/macosx/build/Jack.framework/Versions/A/Jack".
warning: Unable to read symbols from "/Volumes/Document1/Developpement/ProjectsCVS/JackCVS/Jack_CVS_HEAD - Tiger - CVS CURRENT/config/os/macosx/build/Jack.framework/Versions/A/Jack"; skipping.
Reading symbols for shared libraries ........ done
(gdb) add-symbol-file ~/cvs/pure-data/externals/hcs/hid/hid.pd_darwin
add symbol table from file "/Users/hans/cvs/pure-data/externals/hcs/hid/hid.pd_darwin"? (y or n) y
Reading symbols from /Users/hans/cvs/pure-data/externals/hcs/hid/hid.pd_darwin...done.
(gdb) attach pd.
1234 3954 4057 4099
(gdb) attach pd.4099
Attaching to program: `/Applications/Pd-0.39.2-extended-test3.app/Contents/Resources/bin/pd', process 4099.
Reading symbols for shared libraries ........................................................................ done
0x9001f5ec in select ()
(gdb) break hid_free
Breakpoint 1 at 0xa370: file /Users/hans/cvs/pure-data/externals/../externals/hcs/hid/hid.c, line 366.
Valgrind is particularly useful for monitoring the memory usage (allocations and frees) of your program, finding memory leaks, and finding memory-related errors such as attempting to read past the end of an array.
Valgrind is invoked as follows:
Interpreting the output
See the `Valgrind documentation`_.
.. _Valgrind documentation: http://valgrind.org/docs/manual/mc-manual.html#mc-manual.errormsgs