© Harry Broeders.
Op het practicum RTSYST maken we gebruik van het gcc
commando
van QNX. Dit commando roept de GNU gcc compiler aan. De bij gcc behorende
debugger heet gdb. Deze debugger heeft een commando gestuurde interface en is
daarom lastig te gebuiken. GNU heeft daarom DDD ontwikkeld; een grafische schil
die het gebuik van gdb sterk vereenvoudigd. In lokaal D1.049 is DDD op alle
QNX VMware images geïnstalleerd.
Gedetailleerde informatie over gcc, gdb en DDD kun je vinden op
de GNU website:
Als eerste voorbeeld gaan we het programma sort.c debuggen. Om gdb (en dus ook DDD) te
kunnen gebruiken moet een programma eerst worden gecompileerd met de
-g
optie.
$ qcc -g -o sort.out sort.c
Je kunt DDD starten via de Launch button (Launch
,
Development
, DDD
) of via de command line:
$ ddd
Je kunt het programma dat je wilt debuggen laden via het menu:
File
, Open program...
selecteer
sort.out
. Als je DDD vanaf de command line start, kun je meteen
opgeven welk programma geladen moet worden:
$ ddd sort.out
Je ziet nu de volgende windows:
![]() |
|
Het "Source Window" bevat de code van het programma. Het "Debug Console" toont een "gdb" prompt waar eventueel commando's kunnen worden ingevoerd. Er is ook een popup window waarmee je veelvoorkomende commando's met 1 druk op de knop kunt uitvoeren.
Je kunt het programma starten door op de Run
button te drukken.
De naam van deze button is misleidend. Het machine code programma wordt door
het run commando alleen maar geladen, de debugger stopt
automatisch bij de eerste instructie. Je kunt nu een
breakpoint zetten. Plaats de cursor op de desbetreffende plek in je programma
code en houdt de rechter muisknop ingedrukt, selecteer
Set Breakpoint
en laat de rechter muisknop weer los. Op de
desbetreffende plek in het programma code verschijnt nu een rood stopteken.
![]() |
Je kunt nu het programma uitvoeren met de
Cont
button of via het menu: Program
, Continue
. Natuurlijk
stopt het programma bij het breakpoint. Dit wordt aangegeven met een groene
pijl. Je kunt nu door het programma stappen met behulp van de buttons:
Next
met behulp van deze button stap je naar de volgende
instructie. Je springt over functieaanroepen heen. Step
met behulp van deze button ga je naar de volgende
instructie. Je springt functieaanroepen in. Het selecteren van text in het source window gaat onder QNX niet
goed! De geselecteerde text verspringt steeds. Je kunt dit probleem voorkomen
door regelnummering aan te zetten: Alt+N
.
Je kunt de waarde van een variabele op een aantal manieren zichtbaar maken:
|
||
|
![]() |
![]() |
|
![]() |
![]() |
De uitvoer van het programma wordt getoond in het gdb console. Omdat in dit
window ook alle gdb commando's worden getoond is dit niet zo handig. Door
voordat je een programma runt de menu optie: Run in
Execution Window
aan te vinken verschijnt de uitvoer in een appart
window.
![]() |
![]() |
Als tweede voorbeeld gaan we het multi-threaded programma opdr2.cpp debuggen. Als het programma in DDD is
geladen moeten we de command line parameters opgeven. Dit kan door te kiezen
voor het menu: Program
, Run...
waarna je de parameters
kunt invullen. Je kunt nu 3 breakpoints zetten: op de eerste
pthread_join
, op de aanroep van b.put(c)
en op de
aanroep van b.get()
. Je kunt het programma nu met de
Cont
button telkens tot het volgende breakpoint laten lopen. Je
kunt de globale buffer in het display window opnemen door te kiezen voor het
menu: Data
, Displays...
Create a new
display...
b
. Open de semaphoren door links te klikken
(vasthouden) en Show All
te kiezen.
Je kunt kijken welke threads draaien met het menu:
Status
, Threads
.
Als het programma gestopt is bij een breakpoint kun je ook een
QNX tool gebruiken om de threads te bekijken. Deze tool laat ook de
verschillende prioriteiten en de huidige toestand van de threads zien. Deze
tool kan gestart worden via de Lanch button: Launch
,
Utilities
, System Information
.
De toestand van de verschillende threads kan ook zichtbaar
gemaakt worden met het pidin
commando:
pidin -p opdr2.out -f abpJBK
Je kunt DDD ook gebruiken als ontwikkelomgeving. Met de
Edit
button wordt vi
gestart met daarin de source
code van het programma. Zodra het editten klaar is kun je de wijzigingen
opslaan en vi verlaten met het commando :x
. Direct wordt er
teruggesprongen naar de debugger met de nieuwe programma code erin. Voordat er
verder kan worden gegaan moet het nieuwe programma wel eerst worden
gecompileerd, alleen de C/C++ file was namelijk aangepast maar nog niet de
executable. Dit kan eenvoudig met behulp van een make file en de
Make
button. De Make
button kan de
makefile
alleen vinden als het werkdirectory correct is ingesteld.
Je kunt het huidige werkdirectory controlleren in de gdb console:
(gdb) pwd
Je kunt het werkdirectory wijzigen met behulp van het gdb
cd
commando of via het menu: File
, Change
Directory...
Als je niet z'n fan bent van vi dan kun je ook een andere
editor kiezen via het menu: Edit
, Preferences...
In
het veld Edit Sources
kun je dan bijvoorbeeld ped
@FILE@
invullen.