Debug-area unui program Terminate and Stay Resident (TSR)
Un program TSR consta din doua parti: una tranzienta si una rezidenta. Partea tranzienta are ca si sarcina incarcarea partii rezidente in RAM. Depanarea portiunii tranziente a unui astfel de TSR se face in mod obisnuit. Doar la depanarea portiunii rezidente are loc ceva nou. Iata pasii pe care trebuie sa-i urmati in procesul de debuging al programelor
TSR:
1. Compileaza si linkediteaza programul TSR (eventual cu informatii de debug complete).
2. Se incarca TSR-ul in TD (Turbo Debugger) si se executa portiunea tranzienta in mod normal. Cand aceasta portiune este gata de executat, portiunea rezidenta este instalata in RAM.
3. Se seteaza un punct de intrerupere la inceputul partii rezidente (sau oriunde in portiunea rezidenta) cu ajutorul tastei F2 (sau din meniul Breakpoints).
4. Se selecteaza optiunea File | Resident din meniu pentru a face ca TD insusi sa devina rezident. Aceasta se face pentru a reveni la prompterul de DOS.
5. Odata revenirea in DOS realizata, se activeaza portiunea rezidenta.
6. Cand executia programului ajunge la breakpoint, TD revine afisand TSR-ul in punctul respectiv. In continuare se poate depana aceasta portiune (Revenirea in TD din DOS se poate face si apasand CTRL-Break de doua ori).
1) Compilam si linkeditam programul:
Obs: Teoretic ar trebui sa mearga si daca facem din programul nostru, lab8.asm, un fisier EXE cu informatii de debug, dar mie nu mi-a reusit decat daca fac fisier COM (fara informatii de debug). De asemenea, vom compila si linkedita fisierul test.asm rezultand fisierul test.exe.
2) Incarcam TSR-ul in TD:
Obs: Desi incarc un program COM si imi apare o casuta cu mesajul "Program has no symbol table", dupa ce aleg "OK" si apas tasta F7, TD imi va afisa liniile programului meu, fara a avea
insa informatii de debug.
3) Setam (cu F2) un breakpoint la inceputul partii rezidente (la inceputul handlerului):
Obs: Inceputul partii rezidente (handler) este cu aproximativ 19 linii/instructiuni mai sus decat linia pe care ne-a pozitionat tasta F7.
4) Dupa ce executam programul (pas cu pas cu F7 sau direct cu F9) si ne apare casuta cu mesajul "Resident, exit code 0", selectam din meniu optiunea File | Resident:
5) Din DOS executam programul de test al intreruperii, test.exe:
6) TD-ul va reveni afisand linia din handler (deci din portiunea rezidenta) pe care a fost setat breakpoint-ul, dupa care pot sa duc la bun sfarsit operatiunea de debug, cu tasta F7: