LU-LKP-B10:MD4
MD
Procedūru izsaukumu steka izdruka.
Mērķi
- Apgūt steka struktūru un komunikācijas mehānismu starp procedūrām.
- Praktizēt atkļūdošanas metodes kas saistītas ar steka analīzi un procedūru izsaukumu steku.
Uzdevums
Izveidot programmatūras palīg-rīkus, kas nodrošina procedūru izsaukumu steka izdruku. Definēt tos failos md4.c un md4.h. Izveidot testa failu test.c kas demonstrē izstrādāta palīg-rīka lietojumu ar piemēru, kur izdrukāts izsaukumu steks vismaz 3 izsaukumu dziļumā.
Failā md4.h deklaretas sekojošas divas (makro) funkcijas, kas izmantojamas analizējamajā failā:
- PCS_TAG() - birkas makro ko ievieto ka pirmo izsaukumu katras procedūras sākumā.
- PCS_PRINT(depth) - funkcija, kas (uz stdout) drukā procedūru izsaukumu steku. Parametrs 'depth' norāda izsaukumu steka dziļumu (funkciju un procedūru izsaukumu skaitu), kas jādrukā.
- Minētās funkcijas daļēji vai pilnīgi realizētas failā md4.c
Izdrukas formāts ir sekojošs:
CallStack at Failavārds, rindasNr. fails, rindasNr., funkcijasVards, funkcijasAdrese, izsaucējaAtgriešanāsAdrese [,parametru vertības bonusa gadījumā] fails, rindasNr., funkcijasVards, funkcijasAdrese, izsaucējaAtgriešanāsAdrese [,parametru vertības bonusa gadījumā] fails, rindasNr., funkcijasVards, funkcijasAdrese, izsaucējaAtgriešanāsAdrese [,parametru vertības bonusa gadījumā]
Jāiesniedz
- Jāiesniedz C programmas pirmkods md4.c, md4.h, test.c un Makefile.
- Visi iesniedzamie faili jāsapako arhīvā LKP_MD4_vards_uzvards.tgz
- Arhīva fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LKP MD4 vards uzvards
Vērtējums
Uzdevums tiks vērtēts sekojoši:
- 50% - Korekta steka izdruka uz pievienota piemēra,
- 50% - Korekta steka izdruka uz jebkura (pasniedzēja) piemēra,
- +10% bonus - ja netiek izmantots un nav nepieciešams PCS_TAG(); bet var tikt izmantota kompilatora "debug" informācija.
- +10% bonus - ja tiek izdrukāti funkciju izsaukumi ar visiem parametriem.
Piemēri
Piemērs test.c failam
#include <stdio.h> #include "md4.h" int c(){ PCS_TAG(); int z=44; PCS_PRINT(4); return z-3; } int b(int i){ PCS_TAG(); int x; x=x*c(); return x; } int a(int i){ PCS_TAG(); return b(i+4); } int main(){ PCS_TAG(); int i=0; return a(i); }
Derīga informācija
- Ieteikums: izstrādājiet programmatūru pakāpeniski. Piemēram, vispirms ielasiet un izdrukājiet datus. Tad pievienojiet datu analīzi un reģistrēšanu savās datu struktūrās. Tad pievienojiet datu analīzi lai tos sakārtotu izdrukai. Testējiet vispirms uz pareiziem datiem. tad uz kļūdainiem datiem.
J&A (jautājumi un atbildes)
J: Uzdevums pārāk grūts, vai var pagarināt termiņu?
A: Noteiktais termiņš paliek spēkā. Šis ir pirmais un vieglākais uzdevums kursā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.
Uz LKP kursa sākuma lapu.