22.08.2013 Views

Maskinnära programmering i C och assembler

Maskinnära programmering i C och assembler

Maskinnära programmering i C och assembler

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Arbetsbok för MC12<br />

Debuggerns funktioner<br />

Du har nu sett ett mycket enkelt inledande exempel<br />

på hur du kan använda XCC <strong>och</strong> färdiga<br />

programbibliotek för att snabbt skapa en komplett<br />

applikation. Innan vi går vidare med mer intrikata<br />

detaljer så som kompilatorns kodgenerering <strong>och</strong><br />

olika programbibliotek, är det lämpligt att belysa<br />

olika möjligheter med debuggern.<br />

Programmets exekveringspunkt indikeras med en<br />

röd pil i debug-fönstret. Exekveringspunkten<br />

motsvaras oftast (inte alltid) av en enstaka rad i en<br />

källtext.<br />

EXEMPEL<br />

if( a < b ) return 1;<br />

har två exekveringspunkter:<br />

if-satsen <strong>och</strong><br />

return-satsen<br />

om du skriver samma sak enligt:<br />

if( a < b )<br />

return 1;<br />

kommer det att bli lättare att följa programflödet i<br />

debuggern.<br />

För <strong>assembler</strong>källtexter gäller att varje rad<br />

motsvarar en unik exekveringspunkt.<br />

Som du kanske redan märkt, ändras<br />

menyalternativen då du startar debuggern. Själva<br />

'Debug'-menyn omfattar då följande alternativ,<br />

observera att flera av dom kan du också välja från<br />

debug-fönstrets verktygslist.<br />

• Next - Exekvera förbi - dvs utför alla<br />

satser/instruktionen på den aktuella raden. För<br />

C-källtexter kan detta innebära flera<br />

exekveringspunkter (alla på raden). För<br />

<strong>assembler</strong>källtexter gäller det vanligtvis en<br />

instruktion, untantaget är dock<br />

programflödesinstruktioner. Exempelvis kan en<br />

hel subrutin exekveras.<br />

• Step Into - Stega in, används för att stega in i<br />

funktioner <strong>och</strong> subrutiner. För C-källtexter<br />

innebär detta att programmet utförs till nästa<br />

verkliga exekveringspunkt <strong>och</strong> man kan därför<br />

följa programflödet in i funktioner vid anrop.<br />

För <strong>assembler</strong>källtexter innebär det samma sak<br />

som instruktionsvis exekvering.<br />

84<br />

• Step Out - För att snabbt utföra programmet<br />

till funktionens sista rad. För C-källtexter<br />

innebär detta att programmet exekveras fram<br />

till den aktuella funktionens 'epilog' (beskrivs<br />

under 'kodgenerering' nedan) dvs ett<br />

väldefinierat block med kod som avslutar<br />

funktionen. För <strong>assembler</strong>källtexter innebär det<br />

exekvering fram till nästa "return from<br />

subroutine"-instruktion.<br />

• Run Nobreak - Exekvera programmet <strong>och</strong><br />

ignorera eventuella brytpunkter. Programmet<br />

startas av debuggern som därefter ignorerar<br />

samtliga brytpunkter. Debuggern stoppar<br />

programmet först då det når punkten 'exitlabel'.<br />

• Run - Exekvera programmet till nästa<br />

brytpunkt. Programmet startas av debuggern<br />

<strong>och</strong> exekveras fram till nästa brytpunkt (se<br />

brytpunktshantering nedan).<br />

• Breakpoints - Öppna dialogruta för<br />

brytpunktstabellen. Används för att sätta,<br />

aktivera/deaktivera <strong>och</strong> ta bort brytpunkter.<br />

• Restart - Starta om programmet från början.<br />

Förbereder omstart av programmet. Eventuella<br />

brytpunkter <strong>och</strong> 'Watch'-variabler behålls.<br />

Globala variabler<br />

Du kan inspektera variabler med hjälp av 'watch'funktionen.<br />

Skriv namnet på den variabel du avser<br />

eller välj från listan du får då du fäller ut 'combo'boxen.<br />

Klicka därefter på 'Add'. Alternativet<br />

'Hexadecimal Display' används för att ställa in<br />

visningsformatet.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!