Ëåêöèÿ 11
4 ñïîñîáà îòëàäêè ïðîãðàììû:
1) Ìåòîä ïðèñòàëüíîãî âçãëÿäà
2) Îòëàäî÷íàÿ ïå÷àòü
3) Îòëàä÷èê
4*) Ñèíòåòè÷åñêèé: àíàëèç, ìåòîä äåëåíèÿ ïîïîëàì
Ëèíóêñ gdb – Gnu DeBugger
GNU – GNU Not Unix
1.
Ïðîãðàììà ïàäàåò ñ
äèàãíîñòèêîé:
a) Floating point exception.
Ïðè÷èíû:
Äåëåíèå íà íîëü
Èñïîëüçîâàíèå çíà÷åíèé íåèíèöèàëèçèðîâàííûõ ïåðåìåííûõ (íå ïðèñâîåíî çíà÷åíèå)
b) Segmentation Fault:
gcc tmp11_2.c -g => gdb ./a.exe =>
Ctrl+x, Ctrl+a (Ctrl+{x, a}) =>
2. Ïðîãðàììà ðàáîòàåò íå òàê, êàê îò íåå îæèäàþò:
(íåò
âûâîäà ar[0])
3. Ïðîãðàììà çàöèêëèâàåòñÿ: Îñòàíîâêà çàöèêëèâøåéñÿ ïðîãðàììû ïðè ïîìîùè Ctrl+C ïîìîãàåò îïðåäåëèòü, â êàêîì öèêëå îíà çàñòðÿëà.
4*. Ïðîãðàììà ðàáîòàåò ìåäëåííî. Ïðåðûâàíèå ïðîãðàììû, ðàáîòàþùåé ïîä îòëàä÷èêîì, ïîìîãàåò îïðåäåëèòü, â êàêîé ÷àñòè êîäà îíà íàõîäèòñÿ áîëüøå âñåãî âðåìåíè (ñðåäñòâî profile – áîëåå ýôôåêòèâíî)
1.
Ñêîìïèëèðîâàòü ïðîãðàììó ñ îòëàäî÷íîé èíôîðìàöèåé: ñ êëþ÷îì
”-g”
Ïðèìåð: gcc tmp.c -g
Ôàéë a.out (â cygwin a.exe) â ðåçóëüòàòå òàêîé êîìïèëÿöèè áóäåò ñîäåðæàòü îòëàäî÷íóþ èíôîðìàöèÿ (íàïðèìåð, õðàíÿòñÿ èìåíà ôóíêöèé, ïåðåìåííûõ, ñîîòâåòñòâèå êîìàíä C ìàøèííûì èíñòðóêöèÿì).
tmp.c (èñõîäíûé êîä íà ÿçûêå C, â âèäå òåêñòà)
|
| (ïðîöåññ êîìïèëÿöèè)
V
tmp.o (îáúåêòíûé ôàéë - ìàøèííûå èíñòðóêöèè, ñîîòâåòñòâóþùèå èñõîäíîìó êîäó, â áèíàðíîì âèäå)
|
| (ïðîöåññ ñâÿçûâàíèÿ — ðàçðåøåíèå âíåøíèõ ññûëîê, íàïðèìåð, íà ôóíêöèè ââîäà/âûâîäà)
V
a.out (a.exe) (çàãðóçî÷íûé, èëè âûïîëíÿåìûé ôàéë, ñîäåðæèò ìàøèííûå èíñòðóêöèè, â áèíàðíîì âèäå)
2. gdb <èìÿ çàãðóçî÷íîãî ôàéë> - íà÷àòü îòëàäêó çàãðóçî÷íîãî ôàéëà <èìÿ çàãðóçî÷íîãî ôàéëà>
Ïðèìåð. gdb ./a.exe (íà Ëèíóêñå gdb ./a.out)
3. Ââîä êîìàíä îòëàä÷èêà
a) run – çàïóñòèòü ïðîãðàììó (íà÷àòü âûïîëíåíèå)
b) print <èìÿ ïåðåìåííîé> - íàïå÷àòàòü çíà÷åíèå ïåðåìåííîé <èìÿ ïåðåìåííîé>
c) breakpoint <èìÿ ôóíêöèè>/<íîìåð ñòðîêè> - óñòàíîâèòü òî÷êó ïðåðûâàíèÿ (îñòàíîâà, ïàóçû) íà íà÷àëî ôóíêöèè <èìÿ ôóíêöèè> èëè íà ñòðîêó ñ íîìåðîì <íîìåð ñòðîêè>
d*) watchpoint <èìÿ ïåðåìåííîé> - óñòàíîâèòü ïðåðûâàíèå ïðè èçìåíåíèè çíà÷åíèÿ ïåðåìåííîé <èìÿ ïåðåìåííîé>
d) continue – ïðîäîëæèòü âûïîëíåíèå ïðîãðàììû (íàïðèìåð, ïîñëå îñòàíîâêè íà òî÷êå ïðåðûâàíèÿ èëè ïîñëå îñòàíîâêè ïðè ïîìîùè Ctrl+C)
e) disable <íîìåð òî÷êè ïðåðûâàíèÿ> - îòìåíèòü òî÷êó ïðåðûâàíèÿ (ñäåëàòü íåäåéñòâóþùåé)
f) next – âûïîëíèòü òåêóùóþ èíñòðóêöèþ (íå çàõîäèò â âûçûâàåìóþ ôóíêöèþ)
g) step – âûïîëíèòü òåêóùóþ èíñòðóêöèþ è çàéòè âíóòðü âûçûâàåìîé ôóíêöèè
i*) Âêëþ÷èòü/âûêëþ÷èòü âèçóàëèçàöèþ èñõîäíîãî òåêñòà ïðîãðàììû: Ctrl+x, Ctrl+a
j) quit – âûéòè èç îòëàä÷èêà (”y” – äà/”n” - íåò)