Debuggen met gdb van mex C-code



Gdb is een zeer handige tool om C (en c++) code te debuggen. Matlab biedt de mogelijkheid om in de vorm van mex-files C code tre gebruiken om functies efficient uit te voeren. Om deze code ook te kunnen debuggen aan de hand van gdb kan je volgende stappen gebruiken.

1. De mex-files moeten gecompileerd worden met de optie “-g” zodat, net als bij te debuggen C-code, symbol information wordt toegevoegd aan de code. Dit laat het gebruik van code-regels, variabele namen, … toe die ook in de oorspronkelijke broncode gebruikt werden.
mex -g mexfile.cc
2. Het debuggen zal een niet-grafisch proces worden, hiervoor moeten we ook matlab in niet grafisch modus uitvoeren. Hierbij moeten we vermelden dat we de gdb-debugger willen gebruiken.
matlab -Dgdb
3. De gdb-debugger wordt gestart. Hierbinnen starten we matlab
run -nojvm
4. Indien je een programma hebt waarin je slechts 1 stukje mex-code wilt debuggen, dien je eerst een matlab breakpoint te zetten net voor het oproepen van deze mex-code
dbstop cascade_detect at 35
waarbij cascade_detect de functie is en 35 de lijnnummer
5. Run je matlab-code tot het breakpoint bereikt is
cascade_demo
6. In de shell die je krijgt zet je nu mex-debugging aan. Dit zorgt dat je in gdb-prompt zal komen van zodra mex-code gebruikt wordt (wat tevens de reden is dat we dit niet van het begin van het programma mogen aanzetten).
dbmex on
7. Start de mex-functie, dit zorgt dat je in gdb terecht komt
coords = cascade(model, pyra.feat, projpyra.feat, rootscores, numrootlocs, pyra.scales, pyra.padx, pyra.pady, s);
8. zet een breakpoint bij het begin van de functie mexFunction, wat de universele gateway vormt tussen matlab en de mex-code.
(gdb) break mexFunction
9. doe “continue” om door te lopen tot het net aangemaakte breakpoint.
(gdb) continue
Continuing.
[Switching to Thread 0x7fffe3fff700 (LWP 6155)]
...
10. Je hebt nu gdb in de mex-code zodat je op je gebruikelijke manier kan debuggen (source-code doorlopen, variabelen hun waarden opvragen, …)

TIP: het gebruik van TUI mode vereenvoudigd het debuggen door grafisch de broncode te laten zien die momenteel doorlopen wordt, deze kan aan/af gezet worden met de toetsencombinatie ctrl+x+a