Maskinnära programmering i C och assembler
Maskinnära programmering i C och assembler
Maskinnära programmering i C och assembler
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.