Editing Debugging Octave
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
= Preliminaries = | = Preliminaries = | ||
Since compilation of all the source from scratch can take long it is good to have a source folder where most of the source has been compiled. To do this, you can create a parallel build: | Since compilation of all the source from scratch can take long it is good to have a source folder where most of the source has been compiled. To do this, you can create a parallel build: | ||
Line 6: | Line 5: | ||
mkdir dbg-octave | mkdir dbg-octave | ||
cd dbg-octave | cd dbg-octave | ||
/path/to/octave/source/configure FFLAGS=-g CFLAGS=-g CXXFLAGS=-g --enable- | /path/to/octave/source/configure FFLAGS=-g CFLAGS=-g CXXFLAGS=-g --enable-bounds-check --prefix=/opt/dbg-octave | ||
make # or make -jN where N is the number of CPU cores | make # or make -jN where N is the number of CPU cores | ||
</syntaxhighlight> | </syntaxhighlight> | ||
This will create a new build of Octave in a different directory without | This will create a new build of Octave in a different directory without optimisations (no -O2 gcc parameter) and with debug symbols compiled in. This build is useful for debugging Octave itself. | ||
= | = Debugging oct-files = | ||
To debug oct-files, avoid making any optimization during compilation. Use <code>export CXXFLAGS="-ggdb -Wall -O0"</code> for C++ code or <code>export CFLAGS="-ggdb -Wall -O0"</code> for C code to suppress optimization. Compile the oct-file with the debug flag <code>-g</code> which enables debug symbols | |||
<syntaxhighlight lang="bash"> | |||
mkoctfile -g file.cpp | |||
</syntaxhighlight> | |||
start now the GNU debugger with octave. On most Unixy systems, you can start gdb from within an Octave session by evaluating a command like | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
octave> system (sprintf ("gnome-terminal --command 'gdb -p %d'", getpid ()), "async"); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
at the Octave prompt. This command will open a terminal window running gdb attached to the Octave process. At this point, Octave will be stopped. To tell Octave to continue, type | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
(gdb) continue | |||
</syntaxhighlight> | </syntaxhighlight> | ||
at the gdb prompt. The symbols from your oct-file will only be available to gdb once the oct-file is loaded in Octave. To do that without executing any functions from the oct-file, you can ask Octave to display the help for the oct-file: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Line 50: | Line 37: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Now halt execution of Octave by typing ctrl+c, you'll see again the gdb prompt. Set now a breakpoint in the line of interest | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Line 66: | Line 51: | ||
the debugger will stop on the above defined line and you can start debugging according to the manual of GNU debugger. | the debugger will stop on the above defined line and you can start debugging according to the manual of GNU debugger. | ||
= Tools for debugging = | |||
== Producing a stack trace == | == Producing a stack trace == | ||
Sometimes Octave | Sometimes Octave will crash, meaning, it terminates abruptly and returns control to the operating system shell. In these cases, it is very helpful to produce a stack trace to diagnose the problem. To do so, you need to (re)compile Octave with debugging symbols and run the debugger, as explained above. Then, run Octave: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
gdb> run | |||
</syntaxhighlight> | </syntaxhighlight> | ||
execute whatever commands you think are necessary to produce the crash. When Octave crashes, you will be back in a gdb session. Type <code>bt</code> here to obtain a stack trace. | |||
=== Most used commands === | |||
[http://www.gnu.org/software/gdb/documentation gdb documentation] | |||
gdb | |||
== Emacs == | |||
In short: | |||
To start Octave in debug mode within emacs type | |||
<code> | |||
M-x gud-gdb | |||
<code> | |||
then change the command in the minibuffer to run gud-gdb (like this): | |||
/path/to/octave/build/tree/run-octave -gud | |||
For | For more info use this | ||
[http://www.gnu.org/software/emacs/manual/html_node/emacs/Debuggers.html#Debuggers link] | |||
to the emacs manual section on debuggers operation | |||
== ddd == | == ddd == | ||
[http://www.gnu.org/software/ddd gui for gdb] | |||
[http://www.gnu.org/software/ddd | |||
[[Category:Development]] | [[Category:Development]] |