NOTE: this section is highly machine dependent. The tricks described here are tested on SUN-3 and SUN-4. They might work on other BSD variants of Unix.
Debugging incrementally loaded executables is a bit more difficult than debugging normal executables. The oldest way of debugging (putting print statements in your code at critical points) of course still works. `Post-crash' debugging however is not possible. For adb/dbx to work they need (besides the core) the text segment and the symbol table. The symbol table lives somewhere on /tmp (called `/tmp/pl_ld_..._.', where `...' is the process id and `.' is an additional number to make sure the temporary file is unique. The text segment lives partly in the core (the incremental loaded bit) and partly in the SWI-Prolog executable.
The only way to debug foreign language code using a debugger is by
starting the debugger on the running core image. Dbx(1) can do this. First
compile the source files to be debugged with the `-g' option to
include dbx debugging information. Then load them into SWI-Prolog. Now
obtain the name of the current symbol table and the process id of
Prolog. Then start dbx (or dbxtool) using
Should this be done often then the following foreign predicate definition might help:
Register this predicate as dbx/0 using the following call in your initialisation function: