Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GDB Manual.pdf
Скачиваний:
10
Добавлен:
28.03.2015
Размер:
1.58 Mб
Скачать

oTLADKA S POMO]X@ GDB

oTLAD^IK gnu UROWNQ ISHODNOGO KODA

wOSXMAQ rEDAKCIQ, DLQ GDB WERSII 5.0 mART 2000

rI^ARD sTOLMEN, rOLAND pE[, sTAN {EBS I DRUGIE.

(pRISYLAJTE SOOB]ENIQ OB O[IBKAH I KOMMENTARII K GDB PO ADRESU bug-gdb@gnu.org.) oTLADKA S POMO]X@ GDB

TEXinfo 1999-10-01.07

Copyright c 1988-2000 Free Software Foundation, Inc. pEREWOD c 2000 dMITRIJ sIWA^ENKO.

Published by the Free Software Foundation 59 Temple Place - Suite 330,

Boston, MA 02111-1307 USA ISBN 1-882114-77-9

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modi ed versions of this manual under the conditions for verbatim copying, provided also that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modi ed versions.

i

oGLAWLENIE

oBZOR GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1

sWOBODNO RASPROSTRANQEMYE PROGRAMMY . . . . . . . . . . . . . . . . . . . . . . . . . 1 kTO WNES WKLAD W RAZWITIE GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1 pRIMER SEANSA GDB. . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 wHOD I WYHOD IZ GDB . . . . . . . . . . . . . . . . . . . . . . . . 9

2.1

wYZOW GDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. 9

 

2.1.1

wYBOR FAJLOW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

 

2.1.2

wYBOR REVIMOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

2.2

wYHOD IZ GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

2.3

kOMANDY OBOLO^KI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3 kOMANDY GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.1

sINTAKSIS KOMAND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

3.2

zAWER[ENIE KOMAND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

3.3

pOLU^ENIE SPRAWKI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

4 wYPOLNENIE PROGRAMM POD UPRAWLENIEM GDB

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.1 kOMPILQCIQ DLQ OTLADKI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.2 nA^ALO WYPOLNENIQ WA[EJ PROGRAMMY . . . . . . . . . . . . . . . . . . . . . 21

4.3 aRGUMENTY WA[EJ PROGRAMMY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.4 rABO^AQ SREDA WA[EJ PROGRAMMY . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.5 rABO^IJ KATALOG WA[EJ PROGRAMMY . . . . . . . . . . . . . . . . . . . . . . . . 24 4.6 wWOD I WYWOD WA[EJ PROGRAMMY. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.7 oTLADKA ZAPU]ENNOGO RANEE PROCESSA . . . . . . . . . . . . . . . . . . . . . . 25 4.8 uNI^TOVENIE DO^ERNEGO PROCESSA. . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.9 oTLADKA PROGRAMM S NESKOLXKIMI NITQMI . . . . . . . . . . . . . . . . . . 26 4.10 oTLADKA MNOGONITEWYH PROGRAMM . . . . . . . . . . . . . . . . . . . . . . . . . 28

5 oSTANOWKA I PRODOLVENIE ISPOLNENIQ . . . . . . . 31

5.1 tO^KI OSTANOWA, TO^KI NABL@DENIQ I TO^KI PEREHWATA . . . . . . 31 5.1.1 uSTANOWKA TO^EK OSTANOWA . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.1.2 uSTANOWKA TO^EK NABL@DENIQ . . . . . . . . . . . . . . . . . . . . . . 35 5.1.3 uSTANOWKA TO^EK PEREHWATA . . . . . . . . . . . . . . . . . . . . . . . . 37 5.1.4 uDALENIE TO^EK OSTANOWA . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.1.5 oTKL@^ENIE TO^EK OSTANOWA . . . . . . . . . . . . . . . . . . . . . . . 39 5.1.6 uSLOWIQ OSTANOWA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.1.7 kOMANDY TO^KI OSTANOWA . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.1.8 mEN@ TO^KI OSTANOWA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.1.9 \nE UDAETSQ POMESTITX TO^KI OSTANOWA". . . . . . . . . . . . 43

5.2 pRODOLVENIE I WYPOLNENIE PO [AGAM . . . . . . . . . . . . . . . . . . . . . . 44 5.3 sIGNALY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.4 oSTANOWKA I ZAPUSK MNOGONITEWYH PROGRAMM . . . . . . . . . . . . . . . 48

ii

oTLADKA S POMO]X@ GDB

6 iSSLEDOWANIE STEKA . . . . . . . . . . . . . . . . . . . . . . . . . 51

6.1 kADRY STEKA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.2 cEPO^KI WYZOWOW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

6.3 wYBOR KADRA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.4 iNFORMACIQ O KADRE STEKA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

7 iSSLEDOWANIE ISHODNYH FAJLOW. . . . . . . . . . . . . . 55

7.1 wYWOD STROK ISHODNOGO TEKSTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

7.2 pOISK W ISHODNYH FAJLAH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 7.3 oPREDELENIE KATALOGOW S ISHODNYMI FAJLAMI . . . . . . . . . . . . . . 57

7.4 iSHODNYJ TEKST I MA[INNYJ KOD . . . . . . . . . . . . . . . . . . . . . . . . . . 58

8 iSSLEDOWANIE DANNYH . . . . . . . . . . . . . . . . . . . . . . . 61

8.1 wYRAVENIQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8.2 pEREMENNYE PROGRAMMY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

8.3 iSKUSSTWENNYE MASSIWY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 8.4 fORMATY WYWODA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

8.5 iSSLEDOWANIE PAMQTI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 8.6 aWTOMATI^ESKOE OTOBRAVENIE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

8.7 pARAMETRY WYWODA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

8.8 iSTORIQ ZNA^ENIJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

8.9 wSPOMOGATELXNYE PEREMENNYE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 8.10 rEGISTRY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 8.11 aPPARATNYE SREDSTWA PODDERVKI WY^ISLENIJ S PLAWA@]EJ

TO^KOJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

9 iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI

 

PROGRAMMIROWANIQ . . . . . . . . . . . . . . . . . . . . . . . . .

77

9.1 pEREHOD OT ODNOGO QZYKA K DRUGOMU . . . . . . . . . . . . . . . . . . . . . . . .

77

 

9.1.1 sOOTWETSTWIE RAS[IRENIJ FAJLOW I QZYKOW . . . . . . . .

77

 

9.1.2

uSTANOWKA RABO^EGO QZYKA . . . . . . . . . . . . . . . . . . . . . . . . .

78

 

9.1.3 rASPOZNAWANIE GDB ISHODNOGO QZYKA . . . . . . . . . . . . . .

78

9.2

oTOBRAVENIE QZYKA PROGRAMMIROWANIQ. . . . . . . . . . . . . . . . . . . . .

78

9.3 pROWERKA DIAPAZONA I PRINADLEVNOSTI TIPU . . . . . . . . . . . . . . .

79

 

9.3.1 kRATKIJ OBZOR PROWERKI SOOTWETSTWIQ TIPOW. . . . . . .

79

 

9.3.2 kRATKIJ OBZOR PROWERKI DIAPAZONA . . . . . . . . . . . . . . . .

80

9.4

pODDERVIWAEMYE QZYKI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

81

 

9.4.1

sI I sI++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

81

 

 

9.4.1.1 oPERATORY sI I sI++ . . . . . . . . . . . . . . . . . . . .

81

 

 

9.4.1.2 kONSTANTY sI I sI++ . . . . . . . . . . . . . . . . . . . .

83

 

 

9.4.1.3

wYRAVENIQ sI++ . . . . . . . . . . . . . . . . . . . . . . . . .

84

 

 

9.4.1.4 zNA^ENIQ sI I sI++ PO UMOL^ANI@ . . . . . . .

85

 

 

9.4.1.5 pROWERKI DIAPAZONA I PRINADLEVNOSTI TIPU

 

 

W sI I sI++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

85

 

 

9.4.1.6

GDB I sI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

85

 

 

9.4.1.7 wOZMOVNOSTI GDB DLQ sI++. . . . . . . . . . . . . .

85

 

9.4.2

mODULA-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87

 

 

9.4.2.1

oPERATORY mODULY-2. . . . . . . . . . . . . . . . . . . . .

87

 

 

9.4.2.2 wSTROENNYE FUNKCII I PROCEDURY . . . . . . . .

88

 

 

9.4.2.3

kONSTANTY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

89

 

 

9.4.2.4 uSTANOWKI PO UMOL^ANI@ mODULY-2. . . . . . .

90

 

 

9.4.2.5 oTKLONENIQ OT STANDARTA mODULY-2 . . . . . .

90

 

 

9.4.2.6 pROWERKI DIAPAZONA I PRINADLEVNOSTI TIPU

 

 

mODULY-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

90

iii

9.4.2.7 oPERATORY OPREDELENIQ OBLASTI WIDIMOSTI

:: I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

9.4.2.8 GDB I mODULA-2 . . . . . . . . . . . . . . . . . . . . . . . . . 91 9.4.3 Chill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

9.4.3.1 kAK OTOBRAVA@TSQ REVIMY. . . . . . . . . . . . . . . 91 9.4.3.2 mESTOPOLOVENIQ I DOSTUP K NIM . . . . . . . . . . 93 9.4.3.3 zNA^ENIQ I OPERACII S NIMI . . . . . . . . . . . . . . 93 9.4.3.4 pROWERKA DIAPAZONA I TIPOW W Chill . . . . . . . 96 9.4.3.5 uSTANOWKI PO UMOL^ANI@ Chill . . . . . . . . . . . . 96

10 iSSLEDOWANIE TABLICY SIMWOLOW . . . . . . . . . . . 97

11 iZMENENIE WYPOLNENIQ. . . . . . . . . . . . . . . . . . . . 101

11.1 pRISWAIWANIE ZNA^ENIJ PEpEMENNYM . . . . . . . . . . . . . . . . . . . . . 101 11.2 pRODOLVENIE ISPOLNENIQ S DRUGOGO ADRESA . . . . . . . . . . . . . . . 102 11.3 pODA^A SIGNALA WA[EJ PROGRAMME . . . . . . . . . . . . . . . . . . . . . . . . 103

11.4 wOZWRAT IZ FUNKCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 11.5 wYZOW FUNKCIJ PROGRAMMY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

11.6 wNESENIE IZMENENIJ W PROGRAMMU . . . . . . . . . . . . . . . . . . . . . . . . 104

12 fAJLY GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

12.1 kOMANDY DLQ ZADANIQ FAJLOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 12.2 o[IBKI ^TENIQ FAJLOW S SIMWOLAMI . . . . . . . . . . . . . . . . . . . . . 108

13 oPREDELENIE OTLADO^NOJ CELI. . . . . . . . . . . . . 111

13.1 aKTIWNYE CELI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

13.2 kOMANDY DLQ UPRAWLENIQ CELQMI . . . . . . . . . . . . . . . . . . . . . . . . 111 13.3 wYBOR CELEWOGO PORQDKA BAJTOW . . . . . . . . . . . . . . . . . . . . . . . . . . 113 13.4 uDALENNAQ OTLADKA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 13.4.1 uDALENNYJ POSLEDOWATELXNYJ PROTOKOL GDB . . . . 114 13.4.1.1 ~TO ZAGLU[KA MOVET SDELATX DLQ WAS . . . 115 13.4.1.2 ~TO WY DOLVNY SDELATX DLQ ZAGLU[KI . . 115 13.4.1.3 sOBIRAEM WSE WMESTE . . . . . . . . . . . . . . . . . . . 116 13.4.1.4 kOMMUNIKACIONNYJ PROTOKOL. . . . . . . . . . . 118 13.4.1.5 iSPOLXZOWANIE PROGRAMMY gdbserver . . . 130

13.4.1.6 iSPOLXZOWANIE PROGRAMMY gdbserve.nlm

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 13.5 oTOBRAVENIE OB_EKTOW QDRA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

iv

oTLADKA S POMO]X@ GDB

14 iNFORMACIQ O KONFIGURACII. . . . . . . . . . . . . . 133

14.1 ~ISTAQ KONFIGURACIQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 14.1.1 HP-UX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

14.1.2 iNFORMACIQ O PROCESSAH SVR4 . . . . . . . . . . . . . . . . . . 133 14.2 wSTROENNYE OPERACIONNYE SISTEMY . . . . . . . . . . . . . . . . . . . . . . 134

14.2.1 iSPOLXZOWANIE GDB S VxWorks. . . . . . . . . . . . . . . . . . 134 14.2.1.1 sOEDINENIE K VxWorks . . . . . . . . . . . . . . . . . 134

14.2.1.2 zAGRUZKA NA VxWorks . . . . . . . . . . . . . . . . . . . 135

14.2.1.3 zAPUSK ZADA^ . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 14.3 wSTROENNYE PROCESSORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 14.3.1 wSTROENNYJ AMD A29K . . . . . . . . . . . . . . . . . . . . . . . . 136 14.3.1.1 A29K UDI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

14.3.1.2 pROTOKOL EBMON DLQ AMD29K . . . . . . . . 136

14.3.1.3 uSTANOWKA SWQZI. . . . . . . . . . . . . . . . . . . . . . . . 136 14.3.1.4 kROSS-OTLADKA EB29K . . . . . . . . . . . . . . . . . . 138

14.3.1.5 uDALENNYJ VURNAL. . . . . . . . . . . . . . . . . . . . . 138 14.3.2 ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

14.3.3 Hitachi H8/300 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 14.3.3.1 sOEDINENIE S PLATAMI Hitachi . . . . . . . . . . 139 14.3.3.2 iSPOLXZOWANIE WSTROENNOGO \MULQTORA E7000

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 14.3.3.3 sPECIALXNYE KOMANDY GDB DLQ Hitachi

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

14.3.4 H8/500 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

14.3.5 Intel i960 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

14.3.5.1 wYZOW Nindy . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

14.3.5.2 pARAMETRY DLQ Nindy . . . . . . . . . . . . . . . . . . 142

14.3.5.3 kOMANDA SBROSA Nindy . . . . . . . . . . . . . . . . . . 142

14.3.6 Mitsubishi M32R/D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

14.3.7 M68k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

14.3.8 M88K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 14.3.9 wSTROENNYJ MIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 14.3.10 PowerPC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 14.3.11 wSTROENNYJ HP PA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 14.3.12 Hitachi SH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 14.3.13 Tsqware Sparclet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

14.3.13.1 uSTANOWKA FAJLA DLQ OTLADKI . . . . . . . . . 146 14.3.13.2 sOEDINENIE K Sparclet . . . . . . . . . . . . . . . . . 146 14.3.13.3 zAGRUZKA NA Sparclet. . . . . . . . . . . . . . . . . . . 147

14.3.13.4 wYPOLNENIE I OTLADKA . . . . . . . . . . . . . . . . 147

14.3.14 Fujitsu Sparclite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 14.3.15 Tandem ST2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 14.3.16 Zilog Z8000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 14.4 aRHITEKTURY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 14.4.1 A29K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 14.4.2 Alpha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 14.4.3 MIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

15 uPRAWLENIE GDB . . . . . . . . . . . . . . . . . . . . . . . . . 151

15.1 pRIGLA[ENIE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 15.2 rEDAKTIROWANIE KOMAND. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 15.3 iSTORIQ KOMAND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 15.4 rAZMER \KRANA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 15.5 ~ISLA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 15.6 nEOBQZATELXNYE PREDUPREVDENIQ I SOOB]ENIQ . . . . . . . . . . . . 154 15.7 nEOBQZATELXNYE SOOB]ENIQ O WNUTRENNIH SOBYTIQH . . . . . . . 155

v

16 fIKSIROWANNYE POSLEDOWATELXNOSTI KOMAND

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

16.1 kOMANDY, OPREDELQEMYE POLXZOWATELEM. . . . . . . . . . . . . . . . . . . 157 16.2 oPREDELQEMYE POLXZOWATELEM KOMANDY-LOWU[KI . . . . . . . . . . 158

16.3 kOMANDNYE FAJLY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

16.4 kOMANDY DLQ UPRAWLQEMOGO WYWODA . . . . . . . . . . . . . . . . . . . . . . 159

17 iSPOLXZOWANIE GDB POD UPRAWLENIEM gnu

Emacs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

18 pRIME^ANIQ GDB. . . . . . . . . . . . . . . . . . . . . . . . . 163

18.1 ~TO TAKOE PRIME^ANIE? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 18.2 pREFIKS server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

18.3 zNA^ENIQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 18.4 kADRY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

18.5 oTOBRAVENIQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 18.6 pRIME^ANIQ KO WWODU GDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

18.7 o[IBKI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

18.8 iNFORMACIQ O TO^KE OSTANOWA. . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 18.9 sOOB]ENIQ O NEDOSTOWERNOSTI. . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

18.10 wYPOLNENIE PROGRAMMY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 18.11 wYWOD ISHODNOGO TEKSTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

18.12 pRIME^ANIQ, KOTORYE MOGUT PONADOBITXSQ S BUDU]EM. . . . 170

19 iNTERFEJS gdb/mi . . . . . . . . . . . . . . . . . . . . . . . . 171

nAZNA^ENIE I CELX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 sISTEMA OBOZNA^ENIJ I TERMINOLOGIQ . . . . . . . . . . . . . . . . . . . . . . . . . . 171 19.1 sINTAKSIS KOMAND gdb/mi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 19.1.1 wHODNOJ SINTAKSIS gdb/mi . . . . . . . . . . . . . . . . . . . . . . 171

19.1.2 wYHODNOJ SINTAKSIS gdb/mi . . . . . . . . . . . . . . . . . . . . 172

19.1.3 pROSTYE PRIMERY WZAIMODEJSTWIQ S gdb/mi . . . . . 174 19.2 sOWMESTIMOSTX gdb/mi S CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 19.3 wYHODNYE ZAPISI gdb/mi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 19.3.1 rEZULXTIRU@]IE ZAPISI gdb/mi . . . . . . . . . . . . . . . . 175 19.3.2 pOTO^NYE ZAPISI gdb/mi. . . . . . . . . . . . . . . . . . . . . . . . 175 19.3.3 wNEO^EREDNYE ZAPISI gdb/mi. . . . . . . . . . . . . . . . . . . . 175

19.4 fORMAT OPISANIQ KOMAND gdb/mi . . . . . . . . . . . . . . . . . . . . . . . . 175

19.5 kOMANDY gdb/mi DLQ TABLICY TO^EK OSTANOWA . . . . . . . . . . . 176 19.6 uPRAWLENIE DANNYMI gdb/mi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 19.7 uPRAWLENIE PROGRAMMOJ gdb/mi . . . . . . . . . . . . . . . . . . . . . . . . . 193 19.8 rAZNYE KOMANDY GDB W gdb/mi . . . . . . . . . . . . . . . . . . . . . . . . . 203 19.9 kOMANDY UPRAWLENIQ STEKOM W gdb/mi . . . . . . . . . . . . . . . . . . . 204 19.10 kOMANDY gdb/mi ZAPROSOW O SIMWOLAH . . . . . . . . . . . . . . . . . . 209 19.11 kOMANDY gdb/mi UPRAWLENIQ CELX@ . . . . . . . . . . . . . . . . . . . . 212 19.12 kOMANDY gdb/mi DLQ NITEJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 19.13 kOMANDY gdb/mi DLQ TO^EK TRASSIROWKI . . . . . . . . . . . . . . . . 218 19.14 iZMENQEMYE OB_EKTY gdb/mi . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 19.15 ~ERNOWIK IZMENENIJ K WYHODNOMU SINTAKSISU gdb/mi . . . 222

20 oT^ETY OB O[IBKAH W GDB . . . . . . . . . . . . . . . 225

20.1 wY NA[LI O[IBKU? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 20.2 kAK SOSTAWLQTX OT^ETY OB O[IBKAH . . . . . . . . . . . . . . . . . . . . . . 225

vi

oTLADKA S POMO]X@ GDB

21 rEDAKTIROWANIE KOMANDNOJ STROKI . . . . . . . . 229

21.1 wWEDENIE W REDAKTIROWANIE STROK . . . . . . . . . . . . . . . . . . . . . . . . 229 21.2 wZAIMODEJSTWIE S Readline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

21.2.1 sWEDENIQ PERWOJ NEOBHODIMOSTI . . . . . . . . . . . . . . . . . 229 21.2.2 kOMANDY PEREME]ENIQ Readline . . . . . . . . . . . . . . . . . 230 21.2.3 kOMANDY UNI^TOVENIQ Readline . . . . . . . . . . . . . . . . . 230 21.2.4 pARAMETRY KOMAND Readline . . . . . . . . . . . . . . . . . . . . . 231

21.2.5 pOISK KOMAND W ISTORII. . . . . . . . . . . . . . . . . . . . . . . . . 231

21.3 fAJL INICIALIZACII Readline. . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 21.3.1 sINTAKSIS FAJLA INICIALIZACII Readline . . . . . . . 232 21.3.2 uSLOWNYE KONSTRUKCII INICIALIZACII . . . . . . . . . . 235 21.3.3 pRIMER FAJLA INICIALIZACII. . . . . . . . . . . . . . . . . . . 236

21.4 pRIWQZYWAEMYE KOMANDY Readline. . . . . . . . . . . . . . . . . . . . . . . . 239

21.4.1 kOMANDY DLQ PEREME]ENIQ. . . . . . . . . . . . . . . . . . . . . . 239 21.4.2 kOMANDY DLQ MANIPULQCII ISTORIEJ . . . . . . . . . . . . 239 21.4.3 kOMANDY DLQ IZMENENIQ TEKSTA . . . . . . . . . . . . . . . . . 240 21.4.4 uNI^TOVENIE I WOSSTANOWLENIE . . . . . . . . . . . . . . . . . . 241 21.4.5 oPREDELENIE ^ISLOWYH PARAMETROW . . . . . . . . . . . . . . 242 21.4.6 Readline WWODIT ZA WAS . . . . . . . . . . . . . . . . . . . . . . . . . . 242 21.4.7 kLAWIATURNYE MAKROSY . . . . . . . . . . . . . . . . . . . . . . . . . 243

21.4.8 nEKOTORYE DRUGIE KOMANDY . . . . . . . . . . . . . . . . . . . . . 243 21.5 rEVIM vi Readline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

22 iSPOLXZOWANIE ISTORII W INTERAKTIWNOM REVIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

22.1 rASKRYWANIE ISTORII. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 22.1.1 uKAZATELI SOBYTIJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 22.1.2 uKAZATELI SLOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

22.1.3 mODIFIKATORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

pRILOVENIE A fORMATIROWANIE DOKUMENTACII

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

pRILOVENIE B uSTANOWKA GDB . . . . . . . . . . . . . .

249

B.1 kOMPILQCIQ GDB W DRUGOM KATALOGE. . . . . . . . . . . . . . . . . . . . . . 250 B.2 oPREDELENIE IMEN RABO^IH I CELEWYH MA[IN. . . . . . . . . . . . . . 251

B.3 kL@^I configure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

aLFAWITNYJ UKAZATELX . . . . . . . . . . . . . . . . . . . . . . . 253

oBZOR GDB

1

oBZOR GDB

nAZNA^ENIE OTLAD^IKA, TAKOGO KAK GDB|POZWOLITX WAM UWIDETX, ^TO PROISHODIT \WNUTRI" DRUGOJ PROGRAMMY WO WREMQ EE WYPOLNENIQ, ILI ^TO DELALA DRUGAQ PROGRAMMA W MOMENT KRAHA.

GDB MOVET WYPOLNQTX DEJSTWIQ ^ETYREH OSNOWNYH TIPOW (A TAKVE DRUGIE, PODDERVIWA@]IE \TI OSNOWNYE), ^TOBY POMO^X WAM WYQWITX O[IBKU:

nA^ATX WYPOLNENIE WA[EJ PROGRAMMY, ZADAW WSE, ^TO MOVET POWLIQTX NA EE POWEDENIE.

oSTANOWITX WA[U PROGRAMMU PRI UKAZANNYH USLOWIQH.

iSSLEDOWATX, ^TO SLU^ILOSX, KOGDA WA[A PROGRAMMA OSTANOWILASX.

iZMENITX WA[U PROGRAMMU, TAK ^TO WY MOVETE \KSPERIMENTIROWATX S USTRANENIEM \FFEKTOW ODNOJ O[IBKI I PRODOLVITX WYQWLENIE DRUGIH.

wY MOVETE ISPOLXZOWATX GDB DLQ OTLADKI PROGRAMM, NAPISANNYH NA sI I sI++. dLQ POLU^ENIQ BOLEE PODROBNOJ INFORMACII, SMOTRITE rAZDEL 9.4 [pODDERVIWAEMYE QZYKI], S. 81. dLQ DOPOLNITELXNOJ INFORMACII, SMOTRITE rAZDEL 9.4.1 [sI I sI++], S. 81.

GDB ^ASTI^NO PODDERVIWAET QZYKI mODULA-2 I Chill. dLQ POLU^ENIQ INFORMACII O mODULE-2, SMOTRITE rAZDEL 9.4.2 [mODULA-2], S. 87. dLQ POLU^ENIQ INFORMACII O Chill, SM. rAZDEL 9.4.3 [Chill], S. 91

oTLADKA PROGRAMM NA pASKALE, KOTORYE ISPOLXZU@T MNOVESTWA, PODDIAPAZONY, FAJLOWYE PEREMENNYE ILI WLOVENNYE FUNKCII, W NASTOQ]EE WREMQ NE RABOTAET. GDB NE PODDERVIWAET WWOD WYRAVENIJ, WYWOD ZNA^ENIJ, I ANALOGI^NYE WOZMOVNOSTI, ISPOLXZU@]IE SINTAKSIS pASKALQ.

GDB MOVET ISPOLXZOWATXSQ DLQ OTLADKI PROGRAMM, NAPISANNYH NA fORTRANE, HOTQ MOVET WOZNIKNUTX NEOBHODIMOSTX SSYLATXSQ NA NEKOTORYE PEREMENNYE S ISPOLXZOWANIEM ZNAKA POD^ERKIWANIQ NA KONCE.

sWOBODNO RASPROSTRANQEMYE PROGRAMMY

GDB|SWOBODNAQ PROGRAMMA, ZA]I]ENNAQ uNIWERSALXNOJ oB]ESTWENNOJ lICENZIEJ gnu (GPL). GPL PREDOSTAWLQET WAM SWOBODU KOPIROWATX ILI IZMENQTX PROGRAMMU, NO KAVDYJ ^ELOWEK, POLU^AQ KOPI@, TAKVE POLU^AET SWOBODU IZMENQTX \TU KOPI@ (\TO OZNA^AET, ^TO ON DOLVEN POLU^ITX DOSTUP K ISHODNOMU KODU), I SWOBODU RASPROSTRANQTX POSLEDU- @]IE KOPII. oBY^NYE KOMPANII, RAZRABATYWA@]IE PROGRAMMY, ISPOLXZU@T AWTORSKIE PRAWA DLQ OGRANI^ENIQ WA[IH SWOBOD; fOND sWOBODNOGO pROGRAMMNOGO oBESPE^ENIQ ISPOLXZUET GPL DLQ SOHRANENIQ \TIH SWOBOD.

gLAWNOE, uNIWERSALXNAQ oB]ESTWENNAQ lICENZIQ|\TO LICENZIQ, GOWORQ]AQ, ^TO WY IMEETE \TI SWOBODY I ^TO WY NE MOVETE IH U KOGO-LIBO OTNQTX.

kTO WNES WKLAD W RAZWITIE GDB

pERWONA^ALXNYM AWTOROM GDB, KAK I MNOGIH DRUGIH PROGRAMM gnu, BYL rI^ARD sTOLMEN. mNOGIE DRUGIE L@DI WNESLI WKLAD W EGO RAZRABOTKU. |TOT RAZDEL PYTAETSQ OTDATX DOLVNOE OSNOWNYM U^ASTNIKAM RAZRABOTKI. oDNIM IZ DOSTOINSTW SWOBODNYH PROGRAMM QWLQETSQ TO, ^TO L@BOJ ^ELOWEK IMEET SWOBODU DELATX WKLAD W IH RAZWITIE; K SOVALENI@, MY NE MOVEM W DEJSTWITELXNOSTI POBLAGODARITX ZDESX WSEH. fAJL `ChangeLog' W POSTAWKE GDB PREDSTAWLQET DETALXNEJ[IJ OT^ET.

iZMENENIQ, SDELANNYE ZADOLGO DO WERSII 2.0 POTERQNY W TUMANE WREMEN.

oPRAWDANIE: dOPOLNENIQ K \TOMU RAZDELU OSOBENNO PRIWETSTWU@TSQ. eSLI WY ILI WA[I DRUZXQ (ILI WRAGI, ^TOBY SOBL@DATX SPRAWEDLIWOSTX) BYLI NEZASLUVENNO PROPU]ENY W \TOM SPISKE, MY BUDEM RADY DOBAWITX WA[I IMENA!

2

oTLADKA S POMO]X@ GDB

oSOBENNO MY HOTIM SKAZATX SPASIBO TEM, KTO PRISMATRIWAL ZA GDB MEVDU OSNOWNYMI WYPUSKAMI, ^TOBY ONI NE SO^LI SWOI MNOGO^ISLENNYE ZASLUGI OSTAWLENNYMI BEZ BLAGODARNOSTI: |NDR@ kAGNI (WYPUSK 5.0); dVIM bLENDI (WYPUSK 4.18); dVESON mOLENDA (WYPUSK

4.17); sTAN {EBS (WYPUSK 4.14); fRED fI[ (WYPUSKI 4.16, 4.15, 4.13, 4.12, 4.11, 4.10, I 4.9); sTU gROSSMAN I dVON gILMOR (WYPUSKI 4.8, 4.7, 4.6, 4.5, I 4.4); dVON gILMOR (WYPUSKI 4.3, 4.2, 4.1, 4.0, I 3.9); dVIM kINGDON (WYPUSKI 3.5, 3.4, I 3.3) I rENDI sMIT (WYPUSKI

3.2, 3.1, I 3.0).

rI^ARD sTOLMEN, KOTOROMU W RAZLI^NYE WREMENA POMOGALI pETER tERmAAT, kRIS hENSON I rI^ARD mLINARIK, ZANIMALSQ WYPUSKAMI DO 2.8.

mIHA\LX tIMANN QWLQETSQ AWTOROM BOLX[EJ ^ASTI PODDERVKI gnu sI++ W GDB, SO ZNA- ^ITELXNYM DOPOLNITELXNYM WKLADOM OT pERA bOZERA. dVEJMS kLARK NAPISAL DE[IFROW- ]IK1 IMEN gnu sI++. rANNQQ RABOTA PO sI++ BYLA SDELANA pETEROM tERmAATOM (KOTORYJ TAKVE SDELAL MNOGO OB]EJ RABOTY PO OBNOWLENI@, PRIWED[EJ K WYPUSKU 3.0).

dLQ ISSLEDOWANIQ MNOGIH FORMATOW OB_EKTNYH FAJLOW, GDB 4 ISPOLXZUET BIBLIOTEKU PODPROGRAMM BFD. BFD BYL SOWMESTNYM PROEKTOM d\WIDA w. hENKEL-wOLLASA, rI^A pIKSLI, sTIWA ~EMBERLENA, I dVONA gILMORA.

d\WID dVONSON PERWONA^ALXNO NAPISAL PODDERVKU COFF; pEJS wILLISON PERWONA^ALXNO SDELAL PODDERVKU INKAPSULIROWANNOGO COFF.

bRENT bENSON IZ Harris Computer Systems SDELAL PODDERVKU DWARF 2.

aDAM dEbUR I bR\NDLI d\WIS SDELALI PODDERVKU ISI Optimum V. pER bOZER, nOBO- @KI hIKI^I, I aLESSANDRO fORIN SDELALI PODDERVKU MIPS. vAN-dANI\LX fEKET SDELAL PODDERVKU Sun 386i. kRIS hENSON ULU^[IL PODDERVKU HP9000. nOBO@KI hIKI^I I tOMO- @KI hASI SDELALI PODDERVKU Sony/News OS 3. d\WID dVONSON SDELAL PODDERVKU Encore Umax. `RKI kUOPPALA SDELAL PODDERVKU Altos 3068. dVEFF lO SDELAL PODDERVKU HP PA I SOM. kEJS pAKKARD SDELAL PODDERVKU NS32K. dOUG rEBSON SDELAL PODDERVKU Acorn Risc Machine. bOB rASK SDELAL PODDERVKU Harris Nighthawk CX-UX. kRIS sMIT SDELAL PODDERVKU Convex (I OTLADKU PROGRAMM NA fORTRANE). dVONATAN sTOUN SDELAL PODDERVKU Pyramid. mIHA\LX tIMANN SDELAL PODDERVKU SPARC. tIM tAKER SDELAL PODDERVKU DLQ Gould NP1 I Gould Powernode. pEJS wILLISON SDELAL PODDERVKU Intel 386. dVEJ wOSBURG SDELAL PODDERVKU Symmetry.

1w sI++ I DRUGIH OB_EKTNO-ORIENTIROWANNYH QZYKAH PROGRAMMIROWANIQ, U WAS MOVET BYTX NESKOLXKO FUNKCIJ S ODNIM IMENEM, NO S ARGUMENTAMI RAZNYH TIPOW. nAPRIMER:

int add_two(int a, int b);

double add_two(double a, double b);

double add_two(double a, int b);

kOMPILQTOR GENERIRUET KOD DLQ WYZOWA WERNOJ FUNKCII PO ZADANNYM ARGUMENTAM. |TO NAZYWAETSQ PERE-

GRUZKOJ FUNKCIJ.

oDNAKO, KOMPONOW]IK TREBUET, ^TOBY WSE SIMWOLY IMELI NEDWUSMYSLENNYE IMENA. pO\TOMU KOMPILQTOR [IFRUET (OT ANGLIJSKOGO \mangle") IMENA PEREGRUVENNYH FUNKCIJ TAK, ^TOBY ONI WKL@^ALI TIPY ARGUMENTOW I WOZWRA]AEMYE ZNA^ENIQ. k PRIMERU, PRIWEDENNYE WY[E FUNKCII MOGUT BYTX MOGUT BYTX ZA[IFROWANY PRIMERNO TAK:

add_two_Ret_int_int_int

add_two_Ret_double_double_double

add_two_Ret_double_double_int

(W DEJSTWITELXNOSTI [IFROWANNYE IMENA WYGLQDQT BEZOBRAZNEE). w REZULXTATE KOMPONOW]IK MOVET PRAWILXNO OBRABOTATX PEREGRUVENNYE FUNKCII. dE[IFROW]IK (OT ANGLIJSKOGO \demangler")|\TO PROGRAMMA (ILI FUNKCIQ), KOTORAQ WYPOLNQET OBRATNU@ OPERACI@: ANALIZIRUQ ZA[IFROWANNYE IMENA, ONA WYDAET ISHODNU@ SIGNATURU FUNKCII. |TO NEOBHODIMO, ^TOBY OTOBRAZITX TO, ^TO PROGRAMMIST SMOVET PONQTX I SWQZATX S ISHODNYM TEKSTOM SWOEJ PROGRAMMY. dLQ \TOGO L@BOMU SREDSTWU OTLADKI, PODDERVIWA@]EMU sI++, OBY^NO TREBUETSQ DE[IFROW]IK. (pRIM. PEREWOD^IKA)

oBZOR GDB

3

aNDREAS {WAB SDELAL PODDERVKU M68K Linux.

rI^ {AEFER I pETER {AUER POMOGLI REALIZOWATX PODDERVKU RAZDELQEMYH BIBLIOTEK

SunOS.

dVEJ fENLASON I rOLAND mAKgRES PROWERILI SOWMESTIMOSTX GDB I GAS PO NESKOLXKIM NABORAM MA[INNYH INSTRUKCIJ.

pATRIK d@WAL, tED gOLDSTEJN, wIKRAM kOKA I gLENN iNVEL POMOGLI RAZRABOTATX UDALENNU@ OTLADKU. Intel Corporation, Wind River Systems, AMD I ARM SDELALI MODULI UDALENNOJ OTLADKI DLQ CELEJ i960, VxWorks, A29K UDI, I RDI SOOTWETSTWENNO.

bRAJAN fOKS QWLQETSQ AWTOROM BIBLIOTEK Readline, PREDOSTAWLQ@]IH ISTORI@ KOMAND I WOZMOVNOSTX REDAKTIROWANIQ KOMANDNOJ STROKI.

|NDR@ bIRS IZ SUNY Bu alo NAPISAL KOD DLQ PEREKL@^ENIQ QZYKOW, PODDERVKU mODULY-2, GLAWU `qZYKI' \TOGO RUKOWODSTWA.

fRED fI[ NAPISAL BOLX[U@ ^ASTX PODDERVKI Unix System Vr4. oN TAKVE ULU^[IL PODDERVKU ZAWER[ENIQ KOMAND DLQ PODDERVKI PEREGRUVENNYH SIMWOLOW sI++.

Hitachi America, Ltd. SPONSIROWALA PODDERVKU DLQ PROCESSOROW H8/300, H8/500 I Super-

H.

NEC SPONSIROWALA PODDERVKU PROCESSOROW v850, Vr4xxx I Vr5xxx. Mitsubishi SPONSIROWALA PODDERVKU PROCESSOROW D10V, D30V I M32R/D. Toshiba SPONSIROWALA PODDERVKU PROCESSORA TX39 Mips.

Matsushita SPONSIROWALA PODDERVKU PROCESSOROW MN10200 I MN10300. Fujitsu SPONSIROWALA PODDERVKU PROCESSOROW SPARClite I FR30.

kUNG {U, dVEFF lO I rIK sL\DKI DOBAWILI PODDERVKU APPARATNYH TO^EK NABL@DENIQ. mIHA\LX sNAJDER DOBAWIL PODDERVKU TO^EK TRASSIROWKI.

sTU gROSSMAN NAPISAL gdbserver.

dVIM kINGDON, pETER {AUER, qN tEJLOR I sTU gROSSMAN SDELALI PO^TI BES^ISLENNOE KOLI^ESTWO ISPRAWLENIJ I ULU^[ENIJ WO WSEM GDB.

sLEDU@]IE L@DI IZ Hewlett-Packard Company SDELALI PODDERVKU ARHITEKTURY PARISC 2.0, HP-UX 10.20, 10.30 I 11.0 (USE^ENNYJ REVIM), REALIZACII NITEJ HP W QDRE, KOMPILQTORA HP aC++, I KONE^NOGO INTERFEJSA POLXZOWATELQ: bEN kREPP, rI^ARD tAJTL, dVON bI[OP, s@ZAN mAK^IA, k\SI mANN, s\TI[ pAJ, iNDIA pOUL, sTIW rEJRAUR I eLENA zANNONI. kIM hAAS PREDOSTAWIL SPECIFI^NU@ DLQ HP INFORMACI@ DLQ \TOGO RUKOWODSTWA.

Cygnus Solutions SPONSIROWALA PODDERVKU GDB I BOLX[U@ ^ASTX EGO RAZWITIQ S 1991 GODA. sREDI INVENEROW Cygnus, RABOTAW[IH NAD GDB NA POSTOQNNOJ OSNOWE, mARK aLEKSANDER, dVIM bLENDI, pER bOZER, kEWIN bETTNER, |DIT |P[TEJN, kRIS fEJLOR, fRED fI[, mARTIN hANT, dVIM iNGAM, dVON gILMOR, sTU gROSSMAN, kUNG {U, dVIM kINGDON, dVON mECLER, fERNANDO nASSER, dVEFFRI nOER, dON pER^IK, rI^ pIKSLI, zDENEK rADU^, kEJS sEJC, sTAN {EBS, d\WID tEJLOR I eLENA zANNONI. kROME TOGO, dEJW bROLLI, qN kARMIHA\LX, sTIW ~EMBERLEN, nIK kLIFTON, dV\J tI kONKLIN, sTEN kOKS, dI dVEJ dELORI, uLXRIH dREPPER, fR\NK |JGLER, dUG |WANS, sIN fAGAN, d\WID hENKELXwOLLAS, rI^ARD hENDERSON, dVEFF hOLKOM, dVEFF lO, dVIM lEMKE, tOM lORD, bOB mANSON, mIHA\LX mEJSSNER, dVEJSON mERRILL, k\TRIN mUR, dR@ mOSLI, kEN rOBURN, gAWIN rOMIG-kOH, rOB sAWOJ, dVEJMI sMIT, mAJK sTAMP, qN tEJLOR, aNVELA tOMAS, mIHA\LX tIMANN, tOM tROMEJ, rON uNRO, dVIM wILSON I d\WID zUN TAKVE SDELALI SWOJ WKLAD W BOLX[EJ ILI MENX[EJ STEPENI.

4

oTLADKA S POMO]X@ GDB

gLAWA 1: pRIMER SEANSA GDB

5

1 pRIMER SEANSA GDB

wY MOVETE POLXZOWATXSQ \TIM RUKOWODSTWOM W SWOE UDOWOLXSTWIE, ^TOBY PRO^ITATX O GDB WSE. oDNAKO, DOSTATO^NO NEBOLX[OGO KOLI^ESTWA KOMAND, ^TOBY NA^ATX POLXZOWATXSQ OTLAD^IKOM. |TA GLAWA ILL@STRIRUET \TI KOMANDY.

w \TOM PRIMERE SEANSA MY WYDELQEM WWOD POLXZOWATELQ TAK: WWOD, ^TOBY EGO BYLO PRO]E OTLI^ITX OT NAHODQ]EGOSQ RQDOM WYWODA PROGRAMMY.

w ODNOJ IZ PREDWARITELXNYH WERSIJ PROGRAMMY gnu m4 (NASTRAIWAEMYJ MAKROPROCESSOR), BYLA DOPU]ENA SLEDU@]AQ O[IBKA: INOGDA, PRI ZAMENE STROK, OPREDELQ@]IH KAWY^KI, SO ZNA^ENIJ PO UMOL^ANI@, KOMANDY, ISPOLXZOWAW[IESQ DLQ POISKA ODNOGO MAKROOPREDELENIQ WNUTRI DRUGOGO, PREKRA]ALI RABOTATX. w SLEDU@]EM KOROTKOM SEANSE m4, MY OPREDELIM MAKROS foo, KOTORYJ RAS[IRQETSQ DO 0000; ZATEM MY ISPOLXZUEM WSTROENNU@ PROCEDURU m4 defn, ^TOBY OPREDELITX bar TO^NO TAKVE. oDNAKO, KOGDA MY IZMENIM OTKRYWA@]U@ KAWY^KU NA <QUOTE>, A ZAKRYWA@]U@ NA <UNQUOTE>, TA VE SAMAQ PROCEDURA NE SMOVET OPREDELITX NOWYJ SINONIM baz:

$ cd gnu/m4 $ ./m4

de ne(foo,0000)

foo

0000 de ne(bar,defn(`foo'))

bar

0000 changequote(<QUOTE>,<UNQUOTE>)

de ne(baz,defn(<QUOTE>foo<UNQUOTE>)) baz

C-d

m4: End of input: 0: fatal error: EOF in string1 pOPYTAEMSQ S POMO]X@ GDB PONQTX, ^TO VE PROISHODIT.

$ gdb m4

GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions.

There is absolutely no warranty for GDB; type "show warranty" for details.

GDB 5.0, Copyright 1999 Free Software Foundation, Inc...

(gdb)

GDB ^ITAET TOLXKO MINIMUM SIMWOLXNYH DANNYH, DOSTATO^NYJ DLQ TOGO, ^TOBY ZNATX, GDE W SLU^AE NEOBHODIMOSTI ISKATX OSTALXNYE; W REZULXTATE PERWOE PRIGLA[ENIE POQWLQETSQ O^ENX BYSTRO. tEPERX MY WELIM GDB ISPOLXZOWATX MENX[U@ [IRINU \KRANA, ^EM OBY^NO, ^TOBY PRIMERY UME]ALISX NA STRANICAH \TOGO RUKOWODSTWA.

(gdb) set width 70

nAM NEOBHODIMO UWIDETX, KAK RABOTAET WSTROENNAQ PROCEDURA m4 changequote. pOSMOTREW ISHODNYJ TEKST, MY ZNAEM, ^TO SOOTWETSTWU@]EJ PODPROGRAMMOJ QWLQETSQ m4_ changequote, TAK ^TO MY USTANAWLIWAEM TAM TO^KU OSTANOWA S POMO]X@ KOMANDY GDB break.

1 m4: kONEC WWODA: 0: FATALXNAQ O[IBKA: EOF W STROKE (pRIM. PEREWOD^IKA)

6

oTLADKA S POMO]X@ GDB

(gdb) break m4 changequote

Breakpoint 1 at 0x62f4: file builtin.c, line 879.

iSPOLXZUQ KOMMANDU run, MY ZAPUSKAEM m4 POD UPRAWLENIEM GDB; DO TEH POR, POKA UPRAWLENIE NE DOSTIGLO PODPROGRAMMY m4_changequote, PROGRAMMA WYPOLNQETSQ KAK OBY^NO:

(gdb) run

Starting program: /work/Editorial/gdb/gnu/m4/m4 de ne(foo,0000)

foo

0000

~TOBY AKTIWIROWATX TO^KU OSTANOWA, MY WYZYWAEM changequote. GDB PRIOSTANAWLIWAET WYPOLNENIE m4, WYWODQ NA \KRAN INFORMACI@ O TOM MESTE, GDE ON OSTANOWILSQ.

changequote(<QUOTE>,<UNQUOTE>)

Breakpoint 1, m4_changequote (argc=3, argv=0x33c70) at builtin.c:879

879 if (bad_argc(TOKEN_DATA_TEXT(argv[0]),argc,1,3))

tEPERX MY ISPOLXZUEM KOMANDU n (next), ^TOBY PRODOLVITX WYPOLNENIE DO SLEDU@]EJ STROKI TEKU]EJ FUNKCII.

(gdb) n

882 set_quotes((argc >= 2) ? TOKEN_DATA_TEXT(argv[1])\ : nil,

set_quotes WYGLQDIT KAK NUVNAQ NAM PODPROGRAMMA. mY MOVEM WOJTI W NEE, ISPOLXZUQ KOMANDU s (step) WMESTO next. step PEREHODIT NA SLEDU@]U@ ISPOLNQEMU@ STROKU L@BOJ PODPROGRAMMY, TAK ^TO ONA WHODIT W set_quotes.

(gdb) s

set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>") at input.c:530

530 if (lquote != def_lquote)

oTOBRAVENIE, POKAZYWA@]EE PODPROGRAMMU (I EE PARAMETRY), GDE m4 SEJ^AS PRIOSTANOWLEN, NAZYWAETSQ OTOBRAVENIEM KADRA STEKA. oNO POKAZYWAET OBZOR STEKA. mY MOVEM ISPOLXZOWATX KOMANDU backtrace (KOTORAQ MOVET SOKRA]ATXSQ KAK bt), ^TOBY POSMOTRETX, W KAKOM MESTE STEKA MY NAHODIMSQ: KOMANDA backtrace WYWODIT KADR STEKA DLQ KAVDOJ AKTIWNOJ PODPROGRAMMY.

(gdb) bt

#0 set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>") at input.c:530

#1 0x6344 in m4_changequote (argc=3, argv=0x33c70) at builtin.c:882

#2 0x8174 in expand_macro (sym=0x33320) at macro.c:242

#3 0x7a88 in expand_token (obs=0x0, t=209696, td=0xf7fffa30) at macro.c:71

#4 0x79dc in expand_input () at macro.c:40

#5 0x2930 in main (argc=0, argv=0xf7fffb20) at m4.c:195

~TOBY POSMOTRETX, ^TO VE PROISHODIT, MY PROHODIM PO [AGAM E]E NESKOLXKO STROK. pERWYE DWA RAZA MY MOVEM ISPOLXZOWATX `s'; SLEDU@]IE DWA RAZA MY POLXZUEMSQ KOMANDOJ n, ^TOBY IZBEVATX WHOVDENIQ W PODPROGRAMMU xstrdup.

(gdb) s

0x3b5c 532 if (rquote != def_rquote) (gdb) s

len_lquote = strlen(rquote);

gLAWA 1: pRIMER SEANSA GDB

7

0x3b80 535 lquote = (lq == nil || *lq == '\0') ? \ def_lquote : xstrdup(lq);

(gdb) n

536 rquote = (rq == nil || *rq == '\0') ? def_rquote\ : xstrdup(rq);

(gdb) n 538

pOSLEDNQQ WYWEDENNAQ STROKA WYGLQDIT NESKOLXKO STRANNO; MY MOVEM ISSLEDOWATX PEREMENNYE lquote I rquote, ^TOBY PONQTX, DEJSTWITELXNO LI \TO OPREDELENNYE NAMI NOWYE LEWAQ I PRAWAQ KAWY^KI. mY ISPOLXZUEM KOMANDU p (print), ^TOBY POSMOTRETX IH ZNA^E- NIQ.

(gdb) p lquote

$1 = 0x35d40 "<QUOTE>" (gdb) p rquote

$2 = 0x35d50 "<UNQUOTE>"

dEJSTWITELXNO, lquote I rquote QWLQ@TSQ NOWYMI KAWY^KAMI. dLQ PROSMOTRA KONTEKSTA, MY MOVEM WYWESTI DESQTX STROK ISHODNOGO TEKSTA, OKRUVA@]IH TEKU]U@ STROKU, ISPOLXZUQ KOMANDU l (list).

(gdb) l

 

533

xfree(rquote);

534

 

535lquote = (lq == nil || *lq == '\0') ? def_lquote\ : xstrdup (lq);

536rquote = (rq == nil || *rq == '\0') ? def_rquote\ : xstrdup (rq);

537

538len_lquote = strlen(rquote);

539len_rquote = strlen(lquote);

540}

541

542 void

dAWAJTE PROJDEM E]E DWE STROKI, KOTORYE USTANAWLIWA@T len_lquote I len_rquote, I ZATEM ISSLEDUEM ZNA^ENIQ \TIH PEREMENNYH.

(gdb) n

539len_rquote = strlen(lquote);

(gdb) n

540}

(gdb) p len lquote $3 = 9

(gdb) p len rquote $4 = 7

|TO, O^EWIDNO, NEPRAWILXNO, TAK KAK len_lquote I len_rquote OBOZNA^A@T DLINY PEREMENNYH lquote I rquote SOOTWETSTWENNO. mY MOVEM PRISWOITX IM LU^[IE ZNA^ENIQ, ISPOLXZUQ KOMANDU p, TAK KAK ONA MOVET WYWODITX ZNA^ENIE L@BOGO WYRAVENIQ, A WYRAVENIE MOVET SODERVATX WYZOWY PODPROGRAMM I PRISWAIWANIQ.

(gdb) p len lquote=strlen(lquote) $5 = 7

(gdb) p len rquote=strlen(rquote) $6 = 9

8

oTLADKA S POMO]X@ GDB

dOSTATO^NO LI \TOGO, ^TOBY RE[ITX PROBLEMU ISPOLXZOWANIQ NOWYH KAWY^EK WO WSTROENNOJ PROCEDURE m4 defn? mY MOVEM PRODOLVITX WYPOLNENIE m4 KOMANDOJ c (continue), I ZATEM POPROBOWATX PRIMER, PERWONA^ALXNO WYZYWAW[IJ O[IBKU:

(gdb) c Continuing.

de ne(baz,defn(<QUOTE>foo<UNQUOTE>))

baz 0000

uSPEH! tEPERX NOWYE KAWY^KI RABOTA@T TAK VE HORO[O, KAK I STANDARTNYE. kAVETSQ, PROBLEMA ZAKL@^ALASX LI[X W DWUH OPE^ATKAH, PRIWODIW[IH K NEPRAWILXNOMU OPREDELENI@ DLIN. mY POZWOLIM m4 WYJTI, PODAWAQ EMU NA WHOD EOF:

C-d

Program exited normally.2

sOOB]ENIE `Program exited normally.' ISHODIT OT GDB; ONO POKAZYWAET, ^TO m4 ZAKON^IL WYPOLNENIE. mY MOVEM ZAWER[ITX NA[ SEANS RABOTY S GDB KOMANDOJ quit.

(gdb) quit

2 pROGRAMMA ZAWER[ILASX NORMALXNO. (pRIM. PEREWOD^IKA)

gLAWA 2: wHOD I WYHOD IZ GDB

9

2 wHOD I WYHOD IZ GDB

|TA GLAWA POSWQ]ENA TOMU, KAK ZAPUSTITX GDB I KAK IZ NEGO WYJTI. oSNOWNYE PRINCIPY:

WWEDITE `gdb' DLQ WYZOWA GDB.

WWEDITE quit ILI C-d DLQ WYHODA IZ NEGO.

2.1 wYZOW GDB

wYZYWAJTE GDB PUTEM ZAPUSKA PROGRAMMY gdb. nA^AW RABOTU, GDB S^ITYWAET KOMANDY S TERMINALA DO TEH POR, POKA WY NE SKAVETE EMU WYJTI.

wY TAKVE MOVETE ZAPUSTITX gdb S RAZLI^NYMI ARGUMENTAMI I KL@^AMI, ^TOBY W SAMOM NA^ALE LU^[E NASTROITX SREDU OTLAVIWANIQ.

kL@^I KOMANDNOJ STROKI, OPISANNYE ZDESX, PREDNAZNA^ENY DLQ OHWATA RAZLI^NYH SITUACIJ; W DEJTSWITELXNOSTI, W NEKOTORYH SREDAH ^ASTX \TIH KL@^EJ MOVET BYTX NEDOSTUPNA.

~A]E WSEGO GDB WYZYWAETSQ S ODNIM ARGUMENTOM, KOTORYJ OPREDELQET ISPOLNQEMU@ PROGRAMMU:

gdb PROGRAMMA

wY TAKVE MOVETE UKAZATX PRI STARTE KAK ISPOLNQEMU@ PROGRAMMU, TAK I FAJL DAMPA PAMQTI:

gdb PROGRAMMA DAMP

eSLI WY HOTITE OTLADITX WYPOLNQ@]IJSQ W DANNYJ MOMENT PROCESS, TO WMESTO \TOGO, WY MOVETE UKAZATX WTORYM ARGUMENTOM IDENTIFIKATOR \TOGO PROCESSA:

gdb PROGRAMMA 1234

PRISOEDINIT GDB K PROCESSU 1234 (ESLI, KONE^NO, U WAS NET FAJLA S IMENEM `1234', GDB SNA^ALA PROWERQET NALI^IE FAJLA DAMPA PAMQTI).

pREIMU]ESTWA, KOTORYE MOVNO POLU^ITX PRI ISPOLXZOWANII WTOROGO ARGUMENTA KOMANDNOJ STROKI, TREBU@T NALI^IQ DOSTATO^NO SOWER[ENNOJ OPERACIONNOJ SISTEMY; ESLI WY ISPOLXZUETE GDB KAK UDALENNYJ OTLAD^IK, PRISOEDINENNYJ K KOMPX@TERU BEZ OPERACIONNOJ SISTEMY, TAM WOOB]E MOVET NE BYTX PONQTIQ \PROCESSA", I ^ASTO NET NIKAKOGO SPOSOBA POLU^ITX DAMP. GDB PREDUPREDIT WAS, ESLI EMU NE UDAETSQ PRISOEDINITXSQ K PROCESSU ILI S^ITATX FAJL DAMPA PAMQTI.

wY MOVETE ZAPUSTITX gdb BEZ WYWODA NA^ALXNOGO SOOB]ENIQ, OPISYWA@]EGO OTSUTSTWIE GARANTII NA NEGO, UKAZAW -silent:

gdb -silent

kROME TOGO, WY MOVETE KONTROLIROWATX PROCESS ZAPUSKA GDB S POMO]X@ KL@^EJ KOMANDNOJ STROKI. GDB MOVET SAM NAPOMNITX WAM O DOSTUPNYH KL@^AH.

wWEDITE

gdb -help

^TOBY WYWESTI NA \KRAN WSE DOSTUPNYE OPCII S KRATKIM OPISANIEM IH ISPOLXZOWANIQ (SOKRA]ENNYJ \KWIWALENT|`gdb -h').

wSE ZADANNYE WAMI KL@^I I PARAMETRY KOMANDNOJ STROKI OBRABATYWA@TSQ POSLEDOWATELXNO. pORQDOK STANOWITSQ WAVNYM PRI ISPOLXZOWANII KL@^A `-x'.

10

oTLADKA S POMO]X@ GDB

2.1.1 wYBOR FAJLOW

pRI ZAPUSKE, GDB S^ITYWAET PARAMETRY, OTLI^NYE OT KL@^EJ, KAK UKAZATELI NA ISPOLNQEMU@ PROGRAMMU I FAJL DAMPA (ILI IDENTIFIKATOR PROCESSA), TO^NO TAK VE, KAK ESLI BY \TI PARAMETRY ZADAWALISX KL@^AMI `-se' I `-c' SOOTWETSTWENNO. (GDB S^ITAET PERWYJ PARAMETR, NE IME@]IJ SOOTWETSTWU@]EGO FLAGA KL@^A, \KWIWALENTOM KL@^A `-se', ZA KOTORYM SLEDUET \TOT PARAMETR; A WTOROJ PARAMETR, NE IME@]IJ SOOTWETSTWU@]EGO FLAGA KL@^A, ESLI ON ESTX, \KWIWALENTOM KL@^A `-c', ZA KOTORYM SLEDUET \TOT PARAMETR.)

eSLI GDB BYL SKONFIGURIROWAN BEZ WKL@^ENIQ PODDERVKI FAJLOW DAMPA, ^TO IMEET MESTO DLQ BOLX[INSTWA WSTROENNYH CELEJ, TO ON WYRAZIT NEDOWOLXSTWO WTORYM ARGUMENTOM I PROIGNORIRUET EGO.

mNOGIE KL@^I IME@T KAK DLINNU@, TAK I KRATKU@ FORMY; W SLEDU@]EM SPISKE PRIWODQTSQ OBE. GDB TAKVE RASPOZNAET SOKRA]ENIQ DLINNYH FORM, NE QWLQ@]IESQ DWUSMYSLENNYMI. (wY MOVETE, PO VELANI@, OBOZNA^ATX KL@^I S POMO]X@ `-', A NE `-', HOTQ MY POKAZYWAEM NAIBOLEE UPOTREBLQEMYJ FORMAT.)

-symbols FAJL

-s FAJL ~ITATX TABLICU SIMWOLOW IZ FAJLA FAJL.

-exec FAJL

-e FAJL iSPOLXZOWATX FAJL KAK ISPOLNQEMYJ DLQ WYPOLNENIQ I ISSLEDOWANIQ DANNYH WMESTE S DAMPOM PAMQTI, KOGDA \TO NEOBHODIMO.

-se FAJL ~ITATX TABLICU SIMWOLOW IZ FAJLA FAJL I ISPOLXZOWATX EGO KAK ISPOLNQEMYJ FAJL.

-core FAJL

-c FAJL iSPOLXZOWATX FAJL KAK DAMP PAMQTI DLQ ISSLEDOWANIQ.

-c NOMER pRISOEDINITXSQ K PROCESSU S IDENTIFIKATOROM NOMER, TAKVE, KAK PO KOMANDE attach (PRI USLOWII, ^TO NET FAJLA W FORMATE DAMPA PAMQTI S IMENEM NOMER; W \TOM SLU^AE `-c' OPREDELQET \TOT FAJL KAK DAMP DLQ S^ITYWANIQ).

-command FAJL

-x FAJL wYPOLNITX KOMANDY GDB IZ FAJLA FAJL. sM. rAZDEL 16.3 [kOMANDNYE FAJLY],

S. 158.

-directory KATALOG

-d KATALOG

dOBAWITX KATALOG K PUTQM POISKA FAJLOW S ISHODNYMI TEKSTAMI.

-m

-mapped pREDUPREVDENIE: \TOT KL@^ ZAWISIT OT WOZMOVNOSTEJ OPERACIONNOJ SISTEMY, KOTORYE REALIZOWANY NE WEZDE.

eSLI OTOBRAVAEMYE W PAMQTX FAJLY PODDERVIWA@TSQ W WA[EJ SISTEME ^E- REZ SISTEMNYJ WYZOW mmap, WY MOVETE ISPOLXZOWATX \TOT KL@^, ^TOBY GDB ZAPISYWAL SIMWOLY IZ WA[EJ PROGRAMMY W FAJL W TEKU]EM KATALOGE, DOPUSKA@]IJ POWTORNOE ISPOLXZOWANIE. eSLI PROGRAMMA, KOTORU@ WY OTLAVIWAETE, NAZYWAETSQ `/tmp/fred', TO OTOBRAVAEMYM SIMWOLXNYM FAJLOM BUDET `/tmp/fred.syms'. pOSLEDU@]IE OTLADO^NYE SEANSY GDB ZAME^A@T NALI^IE \TOGO FAJLA I MOGUT BYSTRO OTOBRAZITX W PAMQTX SIMWOLXNU@ INFORMACI@ IZ NEGO, A NE ^ITATX TABLICU SIMWOLOW IZ WYPOLNQEMOGO FAJLA.

fAJL `.syms' SPECIFI^EN DLQ RABO^EJ MA[INY, NA KOTOROJ ZAPUSKAETSQ GDB. oN SODERVIT TO^NYJ OBRAZ WNUTRENNEJ SIMWOLXNOJ TABLICY GDB. oN NE MOVET BYTX RAZDELEN MEVDU NESKOLXKIMI RABO^IMI PLATFORMAMI.

-r

-readnow ~ITATX SIMWOLXNU@ TABLICU KAVDOGO FAJLA, SODERVA]EGO TABLICU SIMWOLOW, SRAZU CELIKOM, A NE STANDARTNYM OBRAZOM, PRI KOTOROM ONA S^ITYWAETSQ POSTE-

gLAWA 2: wHOD I WYHOD IZ GDB

11

PENNO PO MERE NEOBHODIMOSTI. |TA KOMANDA ZAMEDLQET ZAPUSK, NO DALXNEJ[IE OPERACII PROIZWODQTSQ BYSTREE.

kL@^I -mapped I -readnow OBY^NO ISPOLXZU@TSQ WMESTE, ^TOBY POSTROITX FAJL `.syms', KOTORYJ SODERVIT POLNU@ INFORMACI@ O SIMWOLAH. (sM. rAZDEL 12.1 [kOMANDY DLQ ZADANIQ FAJLOW], S. 105, DLQ INFORMACII O FAJLAH `.syms'.) wOT PROSTOJ WYZOW GDB, NE DELA@]IJ NI^EGO, KROME POSTROENIQ FAJLA `.syms' DLQ ISPOLXZOWANIQ W BUDU]EM:

gdb -batch -nx -mapped -readnow IMQ-PROGRAMMY

2.1.2 wYBOR REVIMOW

wY MOVETE WYZYWATX GDB W RAZLI^NYH ALXTERNATIWNYH REVIMAH|NAPRIMER, W PAKETNOM ILI W \TIHOM" REVIME.

-nx

-n nE WYPOLNQTX KOMANDY NI IZ KAKIH FAJLOW INICIALIZACII (OBY^NO NAZWAEMYH `.gdbinit', ILI `gdb.ini' NA PC). w NORMALXNOM REVIME, GDB WYPOLNQET KOMANDY IZ \TIH FAJLOW POSLE OBRABOTKI WSEH KOMANDNYH KL@^EJ I PARAMETROW. sM. rAZDEL 16.3 [kOMANDNYE FAJLY], S. 158.

-quiet -silent

-q \tIHIJ". nE PE^ATATX WWODNOE SOOB]ENIE I INFORMACI@ OB AWTORSKIH PRAWAH. |TI SOOB]ENIQ TAKVE PODAWLQ@TSQ W PAKETNOM REVIME.

-batch wYPOLNQTXSQ W PAKETNOM REVIME. wYJTI SO ZNA^ENIEM 0 POSLE OBRABOTKI WSEH KOMANDNYH FAJLOW, ZADANNYH KL@^EM `-x' (I WSEH KOMAND IZ INICIALIZACIONNYH FAJLOW, ESLI \TO NE ZAPRE]ENO KL@^EM `-n'). wYJTI S NENULEWYM ZNA^ENIEM, ESLI WO WREMQ WYPOLNENIQ KOMAND GDB IZ KOMANDNYH FAJLOW PROIZOJDET O[IBKA.

pAKETNYJ REVIM MOVET BYTX POLEZEN PRI WYZOWE GDB KAK FILXTRA; NAPRIMER, ^TOBY ZAGRUZITX PROGRAMMU I ZAPUSTITX EE NA DRUGOM KOMPX@TERE. dLQ TOGO, ^TOBY SDELATX \TO BOLEE UDOBNYM, SOOB]ENIE

Program exited normally.

(KOTOROE OBY^NO WYDAETSQ PRI ZAWER[ENII PROGRAMMY, WYPOLNQEMOJ POD UPRAWLENIEM GDB), PRI WYPOLNENII W PAKETNOM REVIME NE WYDAETSQ.

-nowindows

-nw \bEZ OKON". eSLI GDB IMEET WSTROENNYJ GRAFI^ESKIJ INTERFEJS POLXZOWATELQ (GUI), TO \TOT KL@^ WELIT GDB ISPOLXZOWATX TOLXKO INTERFEJS KOMANDNOJ STROKI. eSLI GUI NEDOSTUPEN, \TOT KL@^ NE OKAZYWAET NIKAKOGO DEJSTWIQ.

-windows

-w eSLI GDB WKL@^AET GUI, \TOT KL@^ TREBUET ISPOLXZOWATX EGO, ESLI TOLXKO WOZMOVNO.

-cd KATALOG

zAPUSTITX GDB, ISPOLXZUQ W KA^ESTWE RABO^EGO KATALOGA KATALOG, WMESTO TEKU]EGO.

-fullname

-f gnu Emacs USTANAWLIWAET \TOT KL@^, KOGDA WYZYWAET GDB KAK PODPROCESS. |TO WELIT GDB WYWODITX POLNOE IMQ FAJLA I NOMER STROKI W STANDARTNOM, RASPOZNAWAEMOM STILE WSQKIJ RAZ, KOGDA OTOBRAVAETSQ KADR STEKA (^TO WKL@- ^AET KAVDU@ OSTANOWKU WA[EJ PROGRAMMY). |TOT RASPOZNAWAEMYJ FORMAT WYGLQDIT KAK DWA ZNAKA `\032', ZA KOTORYMI SLEDUET IMQ FAJLA, NOMER STROKI

12

oTLADKA S POMO]X@ GDB

I SIMWOLXNAQ POZICIQ, RAZDELENNYE DWOETO^IQMI, I ZNAK NOWOJ STROKI. pROGRAMMA INTERFEJSA Emacs-GDB ISPOLXZUET DWA ZNAKA `\032' KAK SIGNAL DLQ OTOBRAVENIQ ISHODNOGO TEKSTA DLQ KADRA.

-epoch iNTERFEJS Emacs-GDB Epoch USTANAWLIWAET \TOT KL@^, KOGDA WYZYWAET GDB KAK PODPROCESS. |TO WELIT GDB IZMENITX SWOI PODPROGRAMMY PE^ATI TAK, ^TOBY POZWOLITX Epoch OTOBRAVATX ZNA^ENIQ WYRAVENIJ W OTDELXNOM OKNE.

-annotate UROWENX

|TOT KL@^ USTANAWLIWAET UROWENX PRIME^ANIJ WNUTRI GDB. eGO \FFEKT ANALOGI^EN ISPOLXZOWANI@ `set annotate UROWENX' (SM. gLAWA 18 [pRIME^ANIQ], S. 163). uROWENX PRIME^ANIJ KONTROLIRUET, KAKOE KOLI^ESTWO INFORMACII GDB WYWODIT WMESTE S PRIGLA[ENIEM, ZNA^ENIQMI WYRAVENIJ, STROKAMI ISHODNOGO TEKSTA I DRUGIMI TIPAMI WYWODA. uROWENX 0 QWLQETSQ OBY^NYM, UROWENX 1 ISPOLXZUETSQ, KOGDA GDB WYPOLNQETSQ KAK PODPROCESS gnu Emacs, UROWENX 2 WYWODIT MAKSIMALXNOE KOLI^ESTWO PRIME^ANIJ I PODHODIT DLQ PROGRAMM, KOTORYE UPRAWLQ@T GDB.

-async iSPOLXZOWATX ASINHRONNYJ CIKL SOBYTIJ DLQ INTERFEJSA KOMANDNOJ STROKI. GDB OBRABATYWAET WSE SOBYTIQ, TAKIE KAK WWOD POLXZOWATELQ S KLAWIATURY, ^EREZ SPECIALXNYJ CIKL SOBYTIJ. |TO POZWOLQET GDB PRINIMATX I OBRABATYWATX KOMANDY POLXZOWATELQ PARALLELXNO S WYPOLNENIEM OTLAVIWAEMOGO PROCESSA1, TAK ^TO WY NE DOLVNY VDATX WOZWRA]ENIQ UPRAWLENIQ GDB, PREVDE ^EM WWESTI SLEDU@]U@ KOMANDU. (zAME^ANIE: W WERSII 5.0, ASINHRONNOE WYPOLNENIE NA CELEWOJ SISTEME E]E NE PODDERVIWAETSQ, TAK ^TO REVIM `-async' E]E REALIZOWAN NE POLNOSTX@.)

kOGDA STANDARTNYJ WWOD SOEDINEN S TERMINALXNYM USTROJSTWOM, GDB PO UMOL- ^ANI@ ISPOLXZUET ASINHRONNYJ CIKL SOBYTIJ, ESLI \TO NE OTKL@^ENO KL@^EM

`-noasync'.

-noasync oTKL@^ITX ASINHRONNYJ CIKL SOBYTIJ DLQ INTERFEJSA KOMANDNOJ STROKI.

-baud BOD-W-SEK -b BOD-W-SEK

uSTANAWLIWAET SKOROSTX LINII (SKOROSTX W BODAH, ILI W BITAH W SEKUNDU) L@BOGO POSLEDOWATELXNOGO INTERFEJSA, ISPOLXZUEMOGO GDB DLQ UDALENNOJ OTLADKI.

-tty USTROJSTWO -t USTROJSTWO

zAPUSTITXSQ, ISPOLXZUQ USTROJSTWO DLQ STANDARTNOGO WWODA I WYWODA WA[EJ PROGRAMMY.

-interpreter INTERP

iSPOLXZOWATX INTERPRETATOR INTERP K KA^ESTWE INTERFEJSA S UPRAWLQ@]EJ PROGRAMMOJ ILI USTROJSTWOM. pODRAZUMEWAETSQ, ^TO \TOT KL@^ DOLVET USTANAWLIWATXSQ PROGRAMMAMI, KOTORYE WZAIMODEJSTWU@T S GDB, ISPOLXZUQ EGO KAK WYHODNOJ BUFER. nAPRIMER, `-interpreter=mi' WELIT GDB ISPOLXZOWATX INTERFEJS gdbmi (SM. gLAWA 19 [iNTERFEJS gdb/mi], S. 171).

-write oTKRYTX WYPOLNQEMYJ FAJL I FAJL DAMPA PAMQTI KAK DLQ ^TENIQ, TAK I DLQ ZAPISI. |TO \KWIWALENTNO KOMANDE GDB `set write on' (SM. rAZDEL 11.6 [wNESENIE IZMENENIJ], S. 104).

-statistics

|TOT KL@^ WELIT GDB PE^ATATX STATISTIKU O WREMENI I ISPOLXZOWANII PAMQTI POSLE ZAWER[ENIQ KAVDOJ KOMANDY I WOZWRATA K PRIGLA[ENI@.

1GDB, SOBRANNYJ SO SREDSTWAMI djgpp DLQ MS-DOS/MS-Windows, PODDERVIWAET \TOT REVIM FUNKCIONIROWANIQ, NO CIKL SOBYTIJ PRIOSTANAWLIWAETSQ, KOGDA WYPOLNQETSQ OTLAVIWAEMAQ PROGRAMMA.

gLAWA 2: wHOD I WYHOD IZ GDB

13

-version |TOT KL@^ WELIT GDB NAPE^ATATX NOMER SWOEJ WERSII I OB_QWLENIE OB OTSUTSTWII GARANTIJ, I ZATEM ZAWER[ITXSQ.

2.2 wYHOD IZ GDB

quit [WYRAVENIE]

q~TOBY WYJTI IZ GDB, ISPOLXZUJTE KOMANDU quit (SOKRA]ENNO q), ILI WWEDITE ZNAK KONCA FAJLA (OBY^NO C-d). eSLI WY NE UKAVETE WYRAVENIE, GDB ZAKON^IT RABOTU NORMALXNO; W PROTIWNOM SLU^AE, ON ISPOLXZUET REZULXTAT WYRAVENIQ KAK KOD O[IBKI.

pRERYWANIE (^ASTO C-c) NE PRIWODIT K WYHODU IZ GDB, A ZAWER[AET L@BU@ WYPOLNQ- @]U@SQ KOMANDU I WOZWRA]AET WAS NA KOMANDNYJ UROWENX. wY MOVETE BEZOPASNO POLXZOWATXSQ PRERYWANIEM W L@BOE WREMQ, POTOMU ^TO GDB NE POZWOLQET EMU WSTUPITX W SILU DO TOGO, KAK \TO STANET BEZOPASNYM.

eSLI WY ISPOLXZOWALI GDB DLQ UPRAWLENIQ PRISOEDINENNYM PROCESSOM ILI USTROJSTWOM, WY MOVETE OSWOBODITX EGO KOMANDOJ detach (SM. rAZDEL 4.7 [oTLADKA ZAPU]ENNOGO RANEE PROCESSA], S. 25).

2.3 kOMANDY OBOLO^KI

eSLI WAM SLU^AJNO POTREBOWALOSX WYPOLNITX KOMANDY OBOLO^KI W TE^ENIE SEANSA OTLADKI, NET SMYSLA PRIOSTANAWLIWATX ILI POKIDATX GDB; WAM DOSTATO^NO WOSPOLXZOWATXSQ KOMANDOJ shell.

shell KOMANDNAQ STROKA

wYZWATX STANDARTNU@ OBOLO^KU DLQ WYPOLNENIQ KOMANDNOJ STROKI. pEREMENNAQ OKRUVENIQ SHELL, ESLI ONA SU]ESTWUET, OPREDELQET, KAKU@ OBOLO^KU ZAPUSTITX. w PROTIWNOM SLU^AE, GDB ISPOLXZUET OBOLO^KU PO UMOL^ANI@

(`/bin/sh' W SISTEMAH Unix, `COMMAND.COM' W MS-DOS, I TAK DALEE).

w SREDAH RAZRABOTKI ^ASTO BYWAET NEOBHODIMO WOSPOLXZOWATXSQ UTILITOJ make. dLQ \TOJ CELI WAM NE OBQZATELXNO POLXZOWATXSQ KOMANDOJ shell W GDB:

make make-ARG

wYPOLNITX PROGRAMMU make S UKAZANNYMI ARGUMENTAMI. |TO \KWIWALENTNO

`shell make make-ARG'.

14

oTLADKA S POMO]X@ GDB

gLAWA 3: kOMANDY GDB

15

3 kOMANDY GDB

wY MOVETE SOKRA]ATX KOMANDY GDB PO NESKOLXKIM PERWYM SIMWOLAM IMENI KOMANDY, ESLI \TO SOKRA]ENIE ODNOZNA^NO; I WY MOVETE POWTORQTX OPREDELENNYE KOMANDY GDB PROSTYM NAVATIEM hRETi. wY TAKVE MOVETE ISPOLXZOWATX KLAWI[U hTABi DLQ TOGO, ^TOBY GDB SAM DOPOLNIL OSTATOK SLOWA W KOMANDE (ILI POKAZAL WAM WOZMOVNYE ALXTERNATIWY, ESLI SU]ESTWUET NESKOLXKO WARIANTOW).

3.1 sINTAKSIS KOMAND

kOMANDA GDB PREDSTAWLQET SOBOJ ODNU STROKU WWODA. nIKAKIH OGRANI^ENIJ NA EE DLINU NET. oNA NA^INAETSQ IMENEM KOMANDY, ZA KOTORYM SLEDU@T PARAMETRY, ZNA^ENIE KOTORYH OPREDELQETSQ EE NAZWANIEM. nAPRIMER, KOMANDA step DOPUSKAET W KA^ESTWE PARAMETRA ^ISLO [AGOW, KAK W `step 5'. wY TAKVE MOVETE ISPOLXZOWATX KOMANDU step I BEZ PARAMETROW. nEKOTORYE KOMANDY NE DOPUSKA@T NIKAKIH PARAMETROW.

nAZWANIQ KOMAND GDB WSEGDA MOGUT BYTX SOKRA]ENY, ESLI \TO SOKRA]ENIE ODNOZNA^- NO. dRUGIE WOZMOVNYE SOKRA]ENIQ KOMAND PERE^ISLENY W DOKUMENTACII PO OTDELXNYM KOMANDAM. w NEKOTORYH SLU^AQH, DOPUSKA@TSQ DAVE NEODNOZNA^NYE SOKRA]ENIQ; NAPRMER, s SPECIALXNO OPREDELENO KAK \KWIWALENT step, DAVE ESLI SU]ESTWU@T DRUGIE KOMANDY, ^XI NAZWANIQ NA^INA@TSQ NA s. wY MOVETE PROWERITX SOKRA]ENIQ, ZADAWAQ IH KAK PARAMETR DLQ KOMANDY help.

wWEDENNAQ PUSTAQ STROKA (PROSTO NAVATIE hRETi), OZNA^AET POWTOR PREDYDU]EJ KOMANDY. oPREDELENNYE KOMANDY (NAPRIMER, run) NE POWTORQ@TSQ TAKIM SPOSOBOM; \TO TE KOMANDY, NEPREDNAMERENNOE POWTORENIE KOTORYH MOVET WYZWATX PROBLEMY I KOTORYE WY WRQD LI ZAHOTITE POWTORQTX.

kOMANDY list I x, PRI IH POWTORE NAVATIEM hRETi, WMESTO TO^NOGO POWTORA SOZDA@T NOWYE PARAMETRY. |TO POZWOLQET LEGKO PROSMATRIWATX ISHODNYJ TEKST ILI PAMQTX.

GDB MOVET TAKVE ISPOLXZOWATX hRETi PO-DRUGOMU: DLQ RAZDELENIQ DLINNOGO WYWODA, ANALOGI^NO OBY^NOJ UTILITE more (SM. rAZDEL 15.4 [rAZMER \KRANA], S. 153). tAK KAK W TAKOJ SITUACII LEGKO NAVATX hRETi SLI[KOM MNOGO RAZ, GDB BLOKIRUET POWTOR POSLE L@BOJ KOMANDY, GENERIRU@]EJ TAKOJ TIP WYWODA.

l@BOJ TEKST, RASPOLOVENNYJ OT # DO KONCA STROKI QWLQETSQ KOMMENTARIEM; ON NI^EGO NE DELAET. w OSNOWNOM, \TO POLEZNO W KOMANDNYH FAJLAH (SM. rAZDEL 16.3 [kOMANDNYE FAJLY], S. 158).

3.2 zAWER[ENIE KOMAND

GDB MOVET DOPOLNITX ZA WAS OKON^ANIE SLOWA W KOMANDE, ESLI SU]ESTWUET TOLXKO ODIN WARIANT; ON TAKVE MOVET W L@BOJ MOMENT POKAZATX, KAKIE ZAWER[ENIQ WOZMOVNY DLQ SLEDU@]EGO SLOWA W KOMANDE. |TO RABOTAET DLQ KOMAND I PODKOMAND GDB, A TAKVE DLQ IMEN SIMWOLOW W WA[EJ PROGRAMME.

nAVMITE hTABi W L@BOJ MOMENT, KOGDA ZAHOTITE, ^TOBY GDB DOPOLNIL OSTAW[U@SQ ^ASTX SLOWA. eSLI SU]ESTWUET TOLXKO ODNA WOZMOVNOSTX, GDB DOPOLNQET SLOWO I VDET, POKA WY ZAKON^ITE KOMANDU (ILI NAVMETE hRETi, ^TOBY WWESTI EE). nAPRIMER, ESLI WY WWEDETE

(gdb) info bre hTABi

GDB DOPOLNIT OSTATOK SLOWA `breakpoints', TAK KAK U KOMANDY info ESTX EDINSTWENNAQ PODKOMANDA, NA^INA@]AQSQ S `bre':

(gdb) info breakpoints

16

oTLADKA S POMO]X@ GDB

tEPERX WY MOVETE NAVATX LIBO hRETi, ^TOBY WYPOLNITX KOMANDU info breakpoints, LIBO UDALITX ^ASTX SIMWOLOW I WWESTI ^TO-TO DRUGOE, ESLI `breakpoints' NE QWLQETSQ TOJ KOMANDOJ, KOTORU@ WY OVIDALI. (eSLI WY S SAMOGO NA^ALA BYLI UWERENY, ^TO HOTITE info breakpoints, WY TAKVE MOGLI PROSTO NAVATX hRETi, SRAZU POSLE `info bre', ISPOLXZOWAW SOKRA]ENIE KOMANDY WMESTO ZAWER[ENIQ).

eSLI PRI NAVATII hTABi SU]ESTWUET NESKOLXKO WARIANTOW DLQ SLEDU@]EGO SLOWA, GDB IZDAET ZWUK. wY MOVETE LIBO WWESTI BOLX[E SIMWOLOW I POPROBOWATX SNOWA, LIBO NAVATX hTABi WTOROJ RAZ; GDB WYWEDET WSE WOZMOVNYE ZAWER[ENIQ DLQ \TOGO SLOWA. nAPRIMER, WY MOVETE ZAHOTETX USTANOWITX TO^KU OSTANOWA NA PODPROGRAMME, ^XE IMQ NA^INAETSQ S `make_', NO KOGDA WY WWODITE b make_hTABi, GDB LI[X IZDAET ZWUK. pOWTORNOE NAVATIE hTABi OTOBRAVAET WSE IMENA FUNKCIJ W WA[EJ PROGRAMME, NA^INA@]IESQ S \TIH SIMWOLOW. nAPRIMER:

(gdb) b make_ hTABi

GDB IZDAET ZWUK; NAVAW hTABi E]E RAZ, WIDIM:

make_a_section_from_file

make_environ

make_abs_section

make_function_type

make_blockvector

make_pointer_type

make_cleanup

make_reference_type

make_command

make_symbol_completion_list

(gdb) b make_

 

pOSLE OTOBRAVENIQ WOZMOVNYH WARIANTOW, GDB KOPIRUET WA[ ^ASTI^NYJ WWOD (`b make_' W \TOM PRIMERE), TAK ^TO WY MOVETE ZAKON^ITX KOMANDU.

eSLI WY SNA^ALA HOTITE TOLXKO UWIDETX SPISOK ALXTERNATIW, WY MOVETE NAVATX M-?, A NE NAVIMATX hTABi DWAVDY. M-? OZNA^AET hMETAi ?. wY MOVETE WWESTI \TO LIBO UDERVIWAQ KLAWI[U, OBOZNA^ENNU@ NA WA[EJ KLAWIATURE KAK hMETAi (ESLI TAKAQ ESTX), I NAVATX ?, ILI KAK hESCi, ZA KOTOROJ SLEDUET ?.

iNOGDA NUVNAQ WAM STROKA, QWLQQSX LOGI^ESKI \SLOWOM", MOVET SODERVATX SKOBKI ILI DRUGIE SIMWOLY, KOTORYE GDB OBY^NO ISKL@^AET IZ SWOEGO PONQTIQ O SLOWE. ~TOBY POZWOLITX ZAWER[ENI@ SLOW RABOTATX W TAKOJ SITUACII, WY MOVETE ZAKL@^ITX SLOWA W KOMANDAH GDB W ' (ZNAKI ODINARNYH KAWY^EK).

nAIBOLEE WEROQTNAQ SITUACIQ, GDE WAM \TO MOVET POTREBOWATXSQ, \TO PRI WWODE IMENI FUNKCII W sI++. |TO PROISHODIT POTOMU, ^TO sI++ DOPUSKAET PEREGRUZKU FUNKCIJ (MNOVESTWENNYE OPREDELENIQ ODNOJ I TOJ VE FUNKCII, RAZLI^A@]IESQ TIPOM PARAMETROW). nAPRIMER, KOGDA WY HOTITE USTANOWITX TO^KU OSTANOWA, WAM MOVET POTREBOWATXSQ RAZLI^ATX, IMEETE WY W WIDU WERSI@ name S PARAMETROM CELOGO TIPA, name(int), ILI VE WERSI@ S PARAMETROM WE]ESTWENNOGO TIPA, name(float). dLQ ISPOLXZOWANIQ WOZMOVNOSTEJ ZAWER[ENIQ SLOW W TAKOJ SITUACII, WWEDITE ODINARNU@ KAWY^KU ' W NA^ALE IMENI FUNKCII. |TO PREDUPREVDAET GDB, ^TO EMU MOVET POTREBOWATXSQ PRINQTX WO WNIMANIE BOLX[E INFORMACII, ^EM OBY^NO, KOGDA WY NAVIMAETE hTABi ILI M-? DLQ ZAPROSA ZAWER[ENIQ SLOWA:

(gdb) b 'bubble( M-? bubble(double,double) bubble(int,int) (gdb) b 'bubble(

w NEKOTORYH SLU^AQH, GDB MOVET SAM OPREDELITX, ^TO ZAWER[ENIE IMENI TREBUET ISPOLXZOWANIQ KAWY^EK. kOGDA \TO PROISHODIT, GDB WSTAWLQET KAWY^KU ZA WAS (WYPOLNQQ ZAWER[ENIE NA STOLXKO, NA SKOLXKO \TO WOZMOVNO), ESLI WY NE WWELI EE W PERWOJ POZICII:

(gdb) b bub hTABi

GDB IZMENQET WA[U STROKU WWODA NA SLEDU@]U@, I IZDAET ZWUK:

(gdb) b 'bubble(

wOOB]E, GDB MOVET OPREDELITX, ^TO KAWY^KA NUVNA (I WSTAWLQET EE), ESLI WY ZAPRA[IWAETE ZAWER[ENIE PEREGRUVENNOGO SIMWOLA DO TOGO, KAK NA^ALI WWODITX SPISOK PARAMETROW.

gLAWA 3: kOMANDY GDB

17

dLQ BOLX[EJ INFORMACII O PEREGRUVENNYH FUNKCIQH, SMOTRITE rAZDEL 9.4.1.3 [wYRAVENIQ sI++], S. 84. wY MOVETE ISPOLXZOWATX KOMANDU set overload-resolution off DLQ OTKL@^ENIQ RASPOZNAWANIQ PEREGRUVENNYH SIMWOLOW; SMOTRITE rAZDEL 9.4.1.7 [wOZMOVNOSTI GDB DLQ sI++], S. 85.

3.3 pOLU^ENIE SPRAWKI

iSPOLXZUQ KOMANDU help, WY WSEGDA MOVETE ZAPROSITX INFORMACI@ O KOMANDAH U SAMOGO

GDB.

help

hwY MOVETE ISPOLXZOWATX help (SOKRA]ENNO h) BEZ PARAMETROW, DLQ OTOBRAVENIQ KOROTKOGO SPISKA IMENOWANNYH KLASSOW KOMAND:

(gdb) help

List of classes of commands:

aliases - Aliases of other commands

breakpoints - Making program stop at certain points data - Examining data

files - Specifying and examining files internals - Maintenance commands obscure - Obscure features

running - Running the program stack - Examining the stack status - Status inquiries support - Support facilities

tracepoints - Tracing of program execution without stopping the program

user-defined - User-defined commands

Type "help" followed by a class name for a list of commands in that class.

Type "help" followed by command name for full documentation.

Command name abbreviations are allowed if unambiguous. (gdb)

help KLASS

iSPOLXZUQ ODIN IZ OB]IH KLASSOW SPRAWKI KAK PARAMETR, WY MOVETE POLU^ITX SPISOK OTDELXNYH KOMAND \TOGO KLASSA. wOT, NAPRIMER, OTOBRAVENIE SPRAWKI DLQ KLASSA status:

(gdb) help status Status inquiries.

List of commands:

info - Generic command for showing things about the program being debugged

show - Generic command for showing things about the debugger

Type "help" followed by command name for full

18

oTLADKA S POMO]X@ GDB

documentation.

Command name abbreviations are allowed if unambiguous. (gdb)

help KOMANDA

eSLI UKAZATX IMQ KOMANDY W KA^ESTWE PARAMETRA help, GDB WYWEDET KOROTKU@ SPRAWKU O TOM, KAK EJ POLXZOWATXSQ.

apropos ARG

kOMANDA apropos ARG PROIZWODIT POISK PO REGULQRNOMU WYRAVENI@, ZADANNOMU W ARG, WO WSEH KOMANDAH GDB I IH DOKUMENTACII. oNA WYWODIT WSE NAJDENNYE SOWPADENIQ. nAPRIMER:

apropos reload

PRIWODIT K:

set symbol-reloading - Set dynamic symbol table reloading multiple times in one run

show symbol-reloading - Show dynamic symbol table reloading multiple times in one run

complete ARG

kOMANDA complete ARG PERE^ISLQET WSE WOZMOVNYE ZAWER[ENIQ DLQ NA^ALA KOMANDY. iSPOLXZUJTE ARG DLQ ZADANIQ NA^ALA KOMANDY, KOTORU@ WY HOTITE ZAWER[ITX. nAPRIMER,

complete i

PRIWODIT K: if ignore info inspect

|TO PREDNAZNA^ENO DLQ ISPOLXZOWANIQ gnu Emacs.

w DOPOLNENIE K help, WY MOVETE ISPOLXZOWATX KOMANDY GDB info I show DLQ POLU- ^ENIQ INFORMACII O SOSTOQNII WA[EJ PROGRAMMY, ILI O SOSTOQNII SAMOGO GDB. kAVDAQ KOMANDA PODDERVIWAET MNOGO TEM ZAPROSOW; \TO RUKOWODSTWO OPISYWAET KAVDU@ TEMU W SOOTWETSTWU@]EM MESTE. sPISKI W RAZDELAH info I show W aLFAWITNOM UKAZATELE UKAZYWA@T NA WSE PODKOMANDY. sM. [aLFAWITNYJ UKAZATELX], S. 253.

info |TA KOMANDA (SOKRA]ENNO i) PREDNAZNA^ENA DLQ OPISANIQ SOSTOQNIQ WA[EJ PROGRAMMY. nAPRIMER, WY MOVETE S POMO]X@ info args PROSMOTRETX ARGUMENTY, PEREDANNYE WA[EJ PROGRAMME, S POMO]X@ info registers PERE^ISLITX ISPOLXZUEMYE W NASTOQ]IJ MOMENT REGISTRY, ILI ISPOLXZUQ info breakpoints WYWESTI USTANOWLENNYE WAMI TO^KI OSTANOWA. wY MOVETE POLU^ITX POLNYJ SPISOK PODKOMAND KOMANDY info S POMO]X@ help info.

set wY MOVETE PRISWOITX PEREMENNOJ SREDY REZULXTAT WYRAVENIQ S POMO]X@ set. nAPRIMER, WY MOVETE USTANOWITX PRIGLA[ENIE GDB W ZNAK $ ISPOLXZUQ set prompt $.

show w OTLI^IE OT info, KOMANDA show PREDNAZNA^ENA DLQ OPISANIQ SOSTOQNIQ SAMOGO GDB. wY MOVETE IZMENITX PO^TI WSE, ^TO POKAZYWAET show, ISPOLXZUQ SOOTWETSTWU@]U@ KOMANDU set. nAPRIMER, KOMANDOJ set radix WY MOVETE ZADATX, KAKU@ SISTEMU S^ISLENIQ ISPOLXZOWATX DLQ WYWODA, ILI PROSTO UZNATX, KAKAQ SISTEMA ISPOLXZUETSQ W DANNYJ MOMENT S POMO]X@ KOMANDY show radix. dLQ OTOBRAVENIQ WSEH USTANAWLIWAEMYH PARAMETROW I IH TEKU]IH ZNA^ENIJ, WY MOVETE ISPOLXZOWATX show BEZ ARGUMENTOW; TAKVE MOVNO ISPOLXZOWATX info set. oBE KOMANDY PRIWODQT K ODINAKOWOMU REZULXTATU.

gLAWA 3: kOMANDY GDB

19

wOT TRI RAZNOOBRAZNYE PODKOMANDY show, KOTORYE NE IME@T SOOTWETSTWU@]IH setKOMAND:

show version

pOKAZYWAET, KAKAQ WERSIQ GDB ZAPU]ENA. wAM SLEDUET WKL@^ATX \TU INFORMACI@ W OT^ETY OB O[IBKAH W GDB. eSLI WY ISPOLXZUETE NESKOLXKO WERSIJ GDB, WAM MOVET POTREBOWATXSQ OPREDELITX, KAKAQ IZ NIH ZAPU]ENA; PO MERE RAZWITIQ OTLAD^IKA POQWLQ@TSQ NOWYE KOMANDY, A STARYE MOGUT IS^EZNUTX. kROME TOGO, MNOGIE RASPROSTRANITELI OPERACIONNYH SISTEM POSTAWLQ@T MODIFICIROWANNYE WERSII GDB, TAKVE SU]ESTWU@T MODIFICIROWANNYE WERSII GDB W gnu/Linux. nOMER WERSII|\TO NOMER, POQWLQ@]IJSQ PRI STARTE.

show copying

wYWODIT INFORMACI@ O PRAWAH NA RASPROSTRANENIE GDB.

show warranty

oTOBRAVAET ZAQWLENIE gnu OB OTSUTSTWII GARANTIJ, ILI GARANTII, ESLI WA[A WERSIQ GDB POSTAWLQETSQ S GARANTIQMI.

20

oTLADKA S POMO]X@ GDB

gLAWA 4: wYPOLNENIE PROGRAMM POD UPRAWLENIEM GDB

21

4 wYPOLNENIE PROGRAMM POD UPRAWLENIEM GDB

pREVDE ^EM WYPOLNQTX PROGRAMMU POD UPRAWLENIEM GDB, PRI KOMPILQCII WY DOLVNY SGENERIROWATX OTLADO^NU@ INFORMACI@.

wY MOVETE ZAPUSTITX GDB S PARAMETRAMI ILI BEZ, W L@BOJ SREDE PO WA[EMU WYBORU. eSLI WY OTLAVIWAETE PROGRAMMU NA TOJ VE MA[INE, NA KOTOROJ WYPOLNQETSQ GDB, WY MOVETE PERENAPRAWITX WWOD I WYWOD WA[EJ PROGRAMMY, OTLAVIWATX UVE WYPOLNQ@]IJSQ PROCESS, ILI UBITX DO^ERNIJ PROCESS.

4.1 kOMPILQCIQ DLQ OTLADKI

dLQ \FFEKTIWNOJ OTLADKI PROGRAMMY, PRI KOMPILQCII WY DOLVNY SGENERIROWATX OTLADO^NU@ INFORMACI@. |TA OTLADO^NAQ INFORMACIQ SOHRANQETSQ W OB_EKTNOM FAJLE; ONA OPISYWAET TIP DANNYH KAVDOJ PEREMENNOJ ILI FUNKCII, I SOOTWETSTWIE MEVDU NOMERAMI STROK ISHODNOGO TEKSTA I ADRESAMI W WYPOLNQEMOM KODE.

~TOBY ZAPROSITX GENERACI@ OTLADO^NOJ INFORMACII, UKAVITE KL@^ `-g' PRI WYZOWE KOMPILQTORA.

mNOGIE KOMPILQTORY sI NE MOGUT OBRABATYWATX KL@^I `-g' I `-O' WMESTE. iSPOLXZUQ TAKIE KOMPILQTORY, WY NE MOVETE SOZDAWATX OPTIMIZIROWANNYE WYPOLNQEMYE FAJLY, SODERVA]IE OTLADO^NU@ INFORMACI@.

GCC, gnu KOMPILQTOR sI, PODDERVIWAET `-g' S ILI BEZ `-O', DELAQ WOZMOVNYM OTLADKU OPTIMIZIROWANNOGO KODA. mY REKOMENDUEM, ^TOBY WY WSEGDA ISPOLXZOWALI `-g' PRI KOMPILQCII PROGRAMM. wY MOVETE DUMATX, ^TO WA[A PROGRAMMA PRAWILXNAQ, NO NET NIKAKOGO SMYSLA ISPYTYWATX UDA^U.

kOGDA WY OTLAVIWAETE PROGRAMMU, OTKOMPILIROWANNU@ S `-g -O', POMNITE, ^TO OPTIMIZATOR PERESTRAIWAET WA[ KOD; OTLAD^IK VE POKAZYWAET TO, ^TO TAM NAHODITSQ W DEJSTWITELXNOSTI. nE UDIWLQJTESX, ESLI PORQDOK WYPOLNENIQ NE BUDET W TO^NOSTI SOOTWETSTWOWATX WA[EMU ISHODNOMU FAJLU! kRAJNIJ PRIMER: ESLI WY OPREDELQETE PEREMENNU@, NO NIGDE EE NE ISPOLXZUETE, GDB NIKOGDA NE UWIDIT \TOJ PEREMENNOJ, POTOMU ^TO PRI OPTIMIZACII KOMPILQTOR EE ISKL@^IT.

nEKOTORYE WE]I NE RABOTA@T S `-g -O' TAKVE, KAK PROSTO S `-g', W ^ASTNOSTI, NA MA[I- NAH S PLANIROWANIEM INSTRUKCIJ. eSLI SOMNEWAETESX, PEREKOMPILIRUJTE S ODNIM KL@^EM `-g', I ESLI \TO USTRANIT PROBLEMU, POVALUJSTA, SOOB]ITE NAM OB \TOM KAK OB O[IBKE (WKL@^ITE TESTOWYJ PRIMER!).

rANNIE WERSII KOMPILQTORA gnu sI DOPUSKALI WARIANT KL@^A DLQ OTLADO^NOJ INFORMACII `-gg'. GDB BOLX[E NE PODDERVIWAET \TOT FORMAT; ESLI \TOT KL@^ ESTX U WA[EGO KOMPILQTORA gnu sI, NE ISPOLXZUJTE EGO.

4.2 nA^ALO WYPOLNENIQ WA[EJ PROGRAMMY

run

riSPOLXZUJTE KOMANDU run DLQ ZAPUSKA WA[EJ PROGRAMMY POD UPRAWLENIEM GDB. sNA^ALA WY DOLVNY ZADATX IMQ PROGRAMMY (KROME KAK NA VxWorks) S PARAMETRAMI GDB (SM. gLAWA 2 [wHOD I WYHOD IZ GDB], S. 9), ILI ISPOLXZUQ KOMANDY file ILI exec-file (SM. rAZDEL 12.1 [kOMANDY DLQ ZADANIQ FAJLOW],

S. 105).

eSLI WY ZAPUSKAETE WA[U PROGRAMMU W SREDE WYPOLNENIQ, PODDERVIWA@]EJ PROCESSY, run SOZDAET POD^INENNYJ PROCESS, I \TOT PROCESS WYPOLNQET WA[U PROGRAMMU. (w SREDAH, NE PODDERVIWA@]IH PROCESSY, run WYPOLNQET PEREHOD NA NA^ALO WA[EJ PROGRAMMY.)

22

oTLADKA S POMO]X@ GDB

wYPOLNENIE PROGRAMMY ZAWISIT OT OPREDELENNOJ INFORMACII, KOTORU@ ONA POLU^AET OT PORODIW[EGO EE PROCESSA. GDB PREDOSTAWLQET SPOSOBY ZADATX \TU INFORMACI@, ^TO WY DOLVNY SDELATX DO ZAPUSKA PROGRAMMY. (wY MOVETE IZMENITX EE POSLE STARTA, NO TAKIE IZMENENIQ WOZDEJSTWU@T NA WA[U PROGRAMMU TOLXKO PRI SLEDU@]EM ZAPUSKE.) |TA INFORMACIQ MOVET BYTX RAZDELENA NA ^ETYRE KATEGORII:

pARAMETRY.

zADAJTE PARAMETRY, KOTORYE NUVNO PEREDATX WA[EJ PROGRAMME, KAK PARAMETRY KOMANDY run. eSLI NA WA[EJ SISTEME DOSTUPNA OBOLO^KA, ONA ISPOLXZUETSQ DLQ PEREDA^I PARAMETROW, TAK ^TO PRI IH OPISANII WY MOVETE ISPOLXZOWATX OBY^NYE SOGLA[ENIQ (TAKIE KAK RASKRYWANIE [ABLONOW ILI PODSTANOWKA PEREMENNYH). w SISTEMAH Unix, WY MOVETE KONTROLIROWATX, KAKAQ OBOLO^KA ISPOLXZUETSQ, S POMO]X@ PEREMENNOJ SREDY SHELL. sM. rAZDEL 4.3 [aRGUMENTY WA[EJ PROGRAMMY], S. 22.

sREDA. oBY^NO WA[A PROGRAMMA NASLEDUET SWO@ SREDU OT GDB, NO WY MOVETE ISPOLX-

ZOWATX KOMANDY GDB set environment I unset environment, ^TOBY IZMENITX ^ASTX NASTROEK SREDY, WLIQ@]IH NA NEE. sM. rAZDEL 4.4 [rABO^AQ SREDA WA[EJ PROGRAMMY], S. 23.

rABO^IJ KATALOG.

wA[A PROGRAMMA NASLEDUET SWOJ RABO^IJ KATALOG OT GDB. wY MOVETE USTANOWITX RABO^IJ KATALOG GDB KOMANDOJ cd. sM. rAZDEL 4.5 [rABO^IJ KATALOG WA[EJ PROGRAMMY], S. 24.

sTANDARTNYJ WWOD I WYWOD.

oBY^NO WA[A PROGRAMMA ISPOLXZUET TE VE USTROJSTWA DLQ STANDARTNOGO WWODA I WYWODA, ^TO I GDB. wY MOVETE PERENAPRAWITX WWOD I WYWOD W STROKE KOMANDY run, ILI ISPOLXZOWATX KOMANDU tty, ^TOBY USTANOWITX DRUGOE USTROJSTWO DLQ WA[EJ PROGRAMMY. sM. rAZDEL 4.6 [wWOD I WYWOD WA[EJ PROGRAMMY], S. 24.

pREDUPREVDENIE: hOTQ PERENAPRAWLENIE WWODA I WYWODA RABOTAET, WY NE MOVETE ISPOLXZOWATX KANALY DLQ PEREDA^I WYHODNYH DANNYH OTLAVIWAEMOJ PROGRAMMY DRUGOJ PROGRAMME; ESLI WY POPYTAETESX \TO SDELATX, SKOREE WSEGO GDB PEREJDET K OTLADKE NEPRAWILXNOJ PROGRAMMY.

kOGDA WY PODAETE KOMANDU run, WA[A PROGRAMMA NA^INAET WYPOLNQTXSQ NEMEDLENNO. sM. gLAWA 5 [oSTANOWKA I PRODOLVENIE], S. 31, DLQ OBSUVDENIQ TOGO, KAK OSTANOWITX WA[U PROGRAMMU. kAK TOLXKO WA[A PROGRAMMA OSTANOWILASX, WY MOVETE WYZYWATX FUNKCII WA- [EJ PROGRAMMY, ISPOLXZUQ KOMANDY print ILI call. sM. gLAWA 8 [iSSLEDOWANIE DANNYH],

S. 61.

eSLI WREMQ MODIFIKACII WA[EGO SIMWOLXNOGO FAJLA IZMENILOSX S TOGO MOMENTA, KOGDA GDB POSLEDNIJ RAZ S^ITYWAL SIMWOLY, ON UNI^TOVAET SWO@ SIMWOLXNU@ TABLICU I S^ITYWAET EE ZANOWO. pRI \TOM GDB STARAETSQ SOHRANITX WA[I TEKU]IE TO^KI OSTANOWA.

4.3 aRGUMENTY WA[EJ PROGRAMMY

aRGUMENTY K WA[EJ PROGRAMME MOGUT BYTX ZADANY KAK ARGUMENTY K KOMANDE run. oNI PEREDA@TSQ OBOLO^KE, KOTORAQ RASKRYWAET SIMWOLY [ABLONOW I WYPOLNQET PERENAPRAWLENIE WWODA-WYWODA, I S TOGO MOMENTA POPADA@T W WA[U PROGRAMMU. wA[A PEREMENNAQ SREDY SHELL (ESLI ONA SU]ESTWUET) OPREDELQET, KAKU@ OBOLO^KU ISPOLXZUET GDB. eSLI WY NE OPREDELITE SHELL, ON ISPOLXZUET OBOLO^KU PO UMOL^ANI@ (`/bin/sh' W Unix).

w NE-Unix SISTEMAH, PROGRAMMU OBY^NO ZAPUSKAET NEPOSREDSTWENNO GDB, KOTORYJ \MULIRUET PERENAPRAWLENIE WWODA-WYWODA ^EREZ SOOTWETSTWU@]IE SISTEMNYE WYZOWY, I SIMWOLY [ABLONOW RASKRYWA@TSQ KODOM ZAPUSKA, A NE OBOLO^KOJ.

run BEZ ARGUMENTOW ISPOLXZUET TE VE ARGUMENTY, KOTORYE ISPOLXZOWALISX PREDYDU]EJ KOMANDOJ run, ILI KOTORYE USTANOWLENY KOMANDOJ set args.

gLAWA 4: wYPOLNENIE PROGRAMM POD UPRAWLENIEM GDB

23

set args zADAET ARGUMENTY, KOTORYE BUDUT ISPOLXZOWATXSQ PRI SLEDU@]EM ZAPUSKE WA- [EJ PROGRAMMY. eSLI U set args NET ARGUMENTOW, run WYPOLNQET WA[U PROGRAMMU BEZ ARGUMENTOW. eSLI WY ZAPUSTILI WA[U PROGRAMMU S ARGUMENTAMI, TO EDINSTWENNYJ SPOSOB ZAPUSTITX EE SNOWA BEZ ARGUMENTOW|\TO ISPOLXZOWATX set args DO SLEDU@]EGO ZAPUSKA KOMANDOJ run.

show args pOKAZATX ARGUMENTY, KOTORYE BUDUT PEREDANY WA[EJ PROGRAMME PRI EE WYZOWE.

4.4 rABO^AQ SREDA WA[EJ PROGRAMMY

sREDA SOSTOIT IZ NABORA PEREMENNYH SREDY I IH ZNA^ENIJ. pEREMENNYE SREDY OBY^NO HRANQT TAKIE DANNYE, KAK WA[E IMQ POLXZOWATELQ, DOMA[NIJ KATALOG, TIP TERMINALA I PUTX POISKA DLQ ZAPUSKA PROGRAMM. kAK PRAWILO, WY USTANAWLIWAETE PEREMENNYE SREDY S POMO]X@ OBOLO^KI I ONI NASLEDU@TSQ WSEMI DRUGIMI PROGRAMMAMI, KOTORYE WY WYZYWAETE. pRI OTLADKE MOVET OKAZATXSQ POLEZNYM POPROBOWATX ZAPUSTITX PROGRAMMU W IZMENENNOJ SREDE, NE PEREZAPUSKAQ GDB.

path KATALOG

dOBAWITX KATALOG W NA^ALO PEREMENNOJ SREDY PATH (PUTI POISKA WYPOLNQEMYH FAJLOW), KAK DLQ GDB, TAK I DLQ WA[EJ PROGRAMMY. wY MOVETE UKAZATX NAZWANIQ NESKOLXKIH KATALOGOW, RAZDELIW IH PROBELOM ILI SISTEMNO-ZAWISIMYM RAZDELITELEM (`:' W Unix, `;' W MS-DOS I MS-Windows). eSLI KATALOG UVE NAHODITSQ W SPISKE PUTEJ, ON PERENOSITSQ W NA^ALO, TAK ^TO POISK W NEM BUDET PROIZWODITXSQ RANX[E.

wY MOVETE ISPOLXZOWATX STROKU `cwd', ^TOBY SOSLATXSQ NA RABO^IJ KATALOG, KOTORYJ QWLQETSQ TEKU]IM W TOT MOMENT, KOGDA GDB PROIZWODIT POISK. eSLI WMESTO \TOGO WY ISPOLXZUETE `.', TO ONA BUDET UKAZYWATX NA TOT KATALOG, W KOTOROM WY WYPOLNILI KOMANDU path. GDB ZAMENQET `.' W ARGUMENTE KATALOG (NA TEKU]IJ PUTX) DO DOBAWLENIQ KATALOGA K SPISKU PUTEJ POISKA.

show paths

oTOBRAZITX SPISOK PUTEJ DLQ POISKA WYPOLNQEMYH FAJLOW (PEREMENNU@ SREDY

PATH).

show environment [IMQ-PEREM]

wYWESTI ZNA^ENIE PEREMENNOJ SREDY IMQ-PEREM, KOTOROE BUDET PEREDANO WA[EJ PROGRAMME PRI EE STARTE. eSLI WY NE UKAZYWAETE IMQ-PEREM, WYWESTI NAZWANIQ I ZNA^ENIQ WSEH PEREMENNYH SREDY, PEREDAWAEMYH WA[EJ PROGRAMME. wY MOVETE SOKRATITX environment KAK env.

set environment IMQ-PEREM [=ZNA^ENIE]

pRISWAIWAET ZNA^ENIE PEREMENNOJ SREDY IMQ-PEREM. zNA^ENIE MENQETSQ TOLXKO DLQ WA[EJ PROGRAMMY, NO NE DLQ SAMOGO GDB. ZNA^ENIE MOVET BYTX L@BOJ STROKOJ; ZNA^ENIQMI PEREMENNYH SREDY QWLQ@TSQ PROSTO STROKI, A IH INTERPRETACI@ OBESPE^IWAET WA[A PROGRAMMA. pARAMETR ZNA^ENIE QWLQETSQ NEOBQZATELXNYM; ESLI ON OPU]EN, PEREMENNAQ USTANAWLIWAETSQ W PUSTOE ZNA^ENIE.

nAPRIMER, \TA KOMANDA:

set env USER = foo

GOWORIT OTLAVIWAEMOJ PROGRAMME, ^TO PRI POSLEDU@]IH ZAPUSKAH IMENEM POLXZOWATELQ QWLQETSQ `foo'. (pROBELY, OKRUVA@]IE `=', ISPOLXZOWANY ZDESX DLQ QSNOSTI; W DEJSTWITELXNOSTI, ONI NE OBQZATELXNY.)

unset environment IMQ-PEREM

uDALITX PEREMENNU@ IMQ-PEREM IZ SREDY, PEREDAWAEMOJ WA[EJ PROGRAMME. |TO OTLI^AETSQ OT `set env IMQ-PEREM ='; unset environment UDALQET PEREMENNU@ IZ SREDY, A NE PRISWAIWAET EJ PUSTOE ZNA^ENIE.

24

oTLADKA S POMO]X@ GDB

pREDUPREVDENIE: w SISTEMAH Unix, GDB WYZYWAET WA[U PROGRAMMU, ISPOLXZUQ OBOLO^- KU, UKAZANNU@ WA[EJ PEREMENNOJ SREDY SHELL, ESLI ONA OPREDELENA (ILI /bin/sh, ESLI NE OPREDELENA). eSLI WA[A PEREMENNAQ SHELL UKAZYWAET NA OBOLO^KU, KOTORAQ WYPOLNQET FAJL INICIALIZACII|TAKOJ KAK `.cshrc' DLQ OBOLO^KI C-shell, ILI `.bashrc' DLQ BASH|L@BAQ PEREMENNAQ, KOTORU@ WY USTANOWITE W \TOM FAJLE, WOZDEJSTWUET NA WA[U PROGRAMMU. w \TOJ SWQZI, WY MOVETE ZAHOTETX PERENESTI USTANOWKU PEREMENNYH SREDY W FAJLY, KOTORYE WYPOLNQ@TSQ TOLXKO PRI WA[EM WHODE W SISTEMU, TAKIE KAK `.login' ILI `.profile'.

4.5 rABO^IJ KATALOG WA[EJ PROGRAMMY

kAVDYJ RAZ, KOGDA WY ZAPUSKAETE SWO@ PROGRAMMU KOMANDOJ run, ONA NASLEDUET RABO^IJ KATALOG OT TEKU]EGO RABO^EGO KATALOGA GDB. w NA^ALXNYJ MOMENT, RABO^IJ KATALOG GDB NASLEDUETSQ OT EGO RODITELXSKOGO PROCESSA (OBY^NO OBOLO^KI), NO WY MOVETE ZADATX NOWYJ RABO^IJ KATALOG KOMANDOJ cd IZ GDB.

rABO^IJ KATALOG GDB TAKVE SLUVIT KATALOGOM PO UMOL^ANI@ DLQ KOMAND OTLAD^IKA, OPREDELQ@]IH DEJSTWIQ S FAJLAMI. sM. rAZDEL 12.1 [kOMANDY DLQ ZADANIQ FAJLOW], S. 105.

cd KATALOG

uSTANOWITX RABO^IJ KATALOG GDB W KATALOG.

pwd wYWESTI RABO^IJ KATALOG GDB.

4.6 wWOD I WYWOD WA[EJ PROGRAMMY

pO UMOL^ANI@, PROGRAMMA, KOTORU@ WY ZAPUSKAETE POD UPRAWLENIEM GDB, OSU]ESTWLQET WWOD I WYWOD NA TOT VE TERMINAL, ^TO I GDB. dLQ WZAIMODEJSTWIQ S WAMI, GDB PEREKL@^AET TERMINAL W SWOJ SOBSTWENNYJ TERMINALXNYJ REVIM, NO ON ZAPISYWAET TERMINALXNYE REVIMY, KOTORYE ISPOLXZOWALA WA[A PROGRAMMA, I PEREKL@^AETSQ NAZAD K NIM, KOGDA WY PRODOLVAETE WYPOLNENIE PROGRAMMY.

info terminal

oTOBRAVAET INFORMACI@, ZAPISANNU@ GDB O TERMINALXNYH REVIMAH, KOTORYE ISPOLXZUET WA[A PROGRAMMA.

wY MOVETE PERENAPRAWITX WWOD I/ILI WYWOD WA[EJ PROGRAMMY, ISPOLXZUQ PERENAPRAWLENIE OBOLO^KI S POMO]X@ KOMANDY run. nAPRIMER,

run > WYHODNOJ-FAJL

ZAPUSKAET WA[U PROGRAMMU, PERENAPRAWLQQ EE WYWOD W `WYHODNOJ-FAJL'.

dRUGOJ SPOSOB ZADATX, KAK WA[A PROGRAMMA DOLVNA OSU]ESTWLQTX WWOD I WYWOD| ISPOLXZOWATX KOMANDU tty. |TA KOMANDA PRINIMAET W KA^ESTWE AGRUMENTA IMQ FAJLA, KOTORYJ BUDET ISPOLXZOWATXSQ PO UMOL^ANI@ DLQ BUDU]IH KOMAND run. |TA KOMANDA TAKVE SBRASYWAET UPRAWLQ@]IJ TERMINAL DLQ DO^ERNEGO PROCESSA DLQ BUDU]IH KOMAND run. nAPRIMER,

tty /dev/ttyb

UKAZYWAET, ^TO PROCESSY, ZAPU]ENNYE POSLEDU@]IMI KOMANDAMI run, DLQ WWODA I WYWODA ISPOLXZU@T PO UMOL^ANI@ TERMINAL `/dev/ttyb', I ^TO ON BUDET IH UPRAWLQ@]IM TERMINALOM.

qWNOE PERENAPRAWLENIE W run ZAME]AET \FFEKT KOMANDY tty DLQ USTROJSTW WWODAWYWODA, NO NE EE WOZDEJSTWIE NA UPRAWLQ@]IJ TERMINAL.

kOGDA WY ISPOLXZUETE KOMANDU tty ILI PERENAPRAWLQETE WWOD W KOMANDE run, IZMENQETSQ TOLXKO WWOD DLQ WA[EJ PROGRAMMY. wWOD DLQ GDB PO PREVNEMU PROISHODIT ^EREZ WA[ TERMINAL.

gLAWA 4: wYPOLNENIE PROGRAMM POD UPRAWLENIEM GDB

25

4.7 oTLADKA ZAPU]ENNOGO RANEE PROCESSA

attach IDENT-PROCESSA

|TA KOMANDA PRISOEDINQETSQ K WYPOLNQ@]EMUSQ PROCESSU|PROCESSU, KOTORYJ BYL ZAPU]EN WNE GDB. (kOMANDA info files POKAZYWAET WA[I AKTIWNYE CELI.) w KA^ESTWE ARGUMENTA KOMANDA POLU^AET IDENTIFIKATOR PROCESSA. oBY^- NYJ SPOSOB UZNATX IDENTIFIKATOR Unix-PROCESSA|WOSPOLXZOWATXSQ UTILITOJ ps ILI KOMANDOJ OBOLO^KI `jobs -l'.

attach NE POWTORQETSQ, ESLI WY NAVMETE hRETi WTOROJ RAZ POSLE WYPOLNENIQ KOMANDY.

~TOBY ISPOLXZOWATX attach, WA[A PROGRAMMA DOLVNA WYPOLNQTXSQ W SREDE, PODDERVIWA@]EJ PROCESSY; NAPRIMER, attach NE RABOTAET NA SPECIALXNYH MA[INAH, NE IME@]IH OPERACIONNOJ SISTEMY. wY TAKVE DOLVNY OBLADATX POLNOMO^IQMI DLQ POSYLKI SIGNALA PROCESSU.

kOGDA WY ISPOLXZUETE attach, OTLAD^IK NAHODIT PROGRAMMU WYPOLNQ@]EGOSQ PROCESSA, PROIZWODQ POISK SPERWA W TEKU]EM RABO^EM KATALOGE, A ZATEM (ESLI PROGRAMMA NE NAJDENA), ISPOLXZUQ PUTI POISKA ISHODNYH FAJLOW (SM. rAZDEL 7.3 [oPREDELENIE KATALOGOW S ISHODNYMI FAJLAMI], S. 57). tAKVE, DLQ ZAGRUZKI PROGRAMMY WY MOVETE ISPOLXZOWATX KOMANDU file. sM. rAZDEL 12.1 [kOMANDY DLQ ZADANIQ FAJLOW], S. 105.

pERWOE, ^TO GDB DELAET POSLE PODGOTOWKI UKAZANNOGO PROCESSA K OTLADKE| OSTANAWLIWAET EGO. wY MOVETE ISSLEDOWATX I IZMENQTX PRISOEDINENNYJ PROCESS WSEMI KOMANDAMI GDB, KOTORYE OBY^NO DOSTUPNY, KOGDA WY ZAPUSKAETE PROCESSY S POMO]X@ run. wY MOVETE USTANAWLIWATX TO^KI OSTANOWA; WY MOVETE PO[AGOWO WYPOLNQTX PROGRAMMU I PRODOLVITX EE OBY^NOE WYPOLNENIE, WY MOVETE IZMENQTX OBLASTI DANNYH. eSLI WY RE[ITE PRODOLVITX WYPOLNENIE PROCESSA POSLE PRISOEDINENIQ K NEMU GDB, WY MOVETE ISPOLXZOWATX KOMANDU continue.

detach kOGDA WY ZAKON^ILI OTLAVIWATX PRISOEDINENNYJ PROCESS, DLQ EGO OSWOBOVDENIQ IZ POD UPRAWLENIQ GDB WY MOVETE ISPOLXZOWATX KOMANDU detach. oTSOEDINENIE PROCESSA PRODOLVAET EGO WYPOLNENIE. pOSLE KOMANDY detach, \TOT PROCESS I GDB SNOWA STANOWQTSQ SOWER[ENNO NEZAWISIMYMI, I WY GOTOWY PRISOEDINITX ILI ZAPUSTITX S POMO]X@ run DRUGOJ PROCESS. detach NE POWTORQETSQ, ESLI WY NAVMETE hRETi E]E RAZ POSLE WYPOLNENIQ KOMANDY.

eSLI WY WYJDETE IZ GDB ILI ISPOLXZUETE KOMANDU run, POKA U WAS ESTX PRISOEDINENNYJ PROCESS, WY UBXETE \TOT PROCESS. pO UMOL^ANI@, GDB ZAPRA[IWAET PODTWERVDENIE, ESLI WY PYTAETESX SDELATX ODNU IZ \TIH WE]EJ; WY MOVETE KONTROLIROWATX, NUVNO WAM \TO PODTWERVDENIE ILI NET, ISPOLXZUQ KOMANDU set confirm (SM. rAZDEL 15.6 [nEOBQZATELXNYE PREDUPREVDENIQ I SOOB]ENIQ], S. 154).

4.8 uNI^TOVENIE DO^ERNEGO PROCESSA

kill uNI^TOVITX DO^ERNIJ PROCESS, W KOTOROM WA[A PROGRAMMA WYPOLNQETSQ POD UPRAWLENIEM GDB.

|TA KOMANDA POLEZNA, ESLI WY HOTITE OTLADITX DAMP PAMQTI, A NE WYPOLNQ@]IJSQ PROCESS. GDB IGNORIRUET L@BYE DAMPY PAMQTI, POKA WA[A PROGRAMMA WYPOLNQETSQ.

w NEKOTORYH OPERACIONNYH SISTEMAH, PROGRAMMA NE MOVET BYTX WYPOLNENA WNE GDB, POKA U WAS ESTX W NEJ TO^KI OSTANOWA, USTANOWLENNYE OTLAD^IKOM. w \TOJ SITUACII WY MOVETE ISPOLXZOWATX KOMANDU kill, ^TOBY RAZRE[ITX WYPOLNENIE WA[EJ PROGRAMMY WNE OTLAD^IKA.

26

oTLADKA S POMO]X@ GDB

kOMANDA kill TAKVE POLEZNA, ESLI WY HOTITE PEREKOMPILIROWATX I PEREKOMPONOWATX WA[U PROGRAMMU, TAK KAK WO MNOGIH SISTEMAH NEWOZMOVNO MODIFICIROWATX ISPOLNQEMYJ FAJL WO WREMQ WYPOLNENIQ PROCESSA. w \TOM SLU^AE, KOGDA WY W SLEDU@]IJ RAZ WWEDETE run, GDB ZAMETIT, ^TO FAJL IZMENILSQ, I ZANOWO PRO^ITAET SIMWOLXNU@ TABLICU (STARAQSX PRI \TOM SOHRANITX WA[I TO^KI OSTANOWA).

4.9 oTLADKA PROGRAMM S NESKOLXKIMI NITQMI

w NEKOTORYH OPERACIONNYH SISTEMAH, TAKIH KAK HP-UX I Solaris, ODNA PROGRAMMA MOVET IMETX NESKOLXKO NITEJ WYPOLNENIQ. tO^NAQ SEMANTIKA NITEJ MENQETSQ OT ODNOJ OPERACIONNOJ SISTEMY K DRUGOJ, NO W OB]EM, NITI ODNOJ PROGRAMMY SRODNI NESKOLXKIM PROCESSAM|ZA ISKL@^ENIEM TOGO, ^TO ONI RAZDELQ@T ODNO ADRESNOE PROSTRANSTWO (TO ESTX, WSE ONI MOGUT ISSLEDOWATX I MODIFICIROWATX ODNI I TE VE PEREMENNYE). s DRUGOJ STORONY, KAVDAQ NITX IMEET SWOI SOBSTWENNYE REGISTRY I STEK WYPOLNENIQ, I, WOZMOVNO, SWOI SOBSTWENNYE U^ASTKI PAMQTI.

GDB PREDOSTAWLQET SLEDU@]IE WOZMOVNOSTI DLQ OTLADKI MNOGONITEWYH PROGRAMM:

AWTOMATI^ESKOE UWEDOMLENIE O NOWYH NITQH

`thread NOMER-NITI', KOMANDA DLQ PEREKL@^ENIQ MEVDU NITQMI

`info threads', KOMANDA DLQ ZAPROSA INFORMACII O SU]ESTWU@]IH NITQH

`thread apply [NOMER-NITI] [all] ARG', KOMANDA DLQ PRIMENENIQ NEKOTOROJ KOMANDY K SPISKU NITEJ

TO^KI OSTANOWA, OPREDELQEMYE OTDELXNO DLQ KAVDOJ NITI

pREDUPREVDENIE: |TI WOZMOVNOSTI DOSTUPNY E]E NE W L@BOJ KONFIGURACII GDB, GDE OPERACIONNAQ SISTEMA PODDERVIWAET NITI. eSLI WA[ GDB NE PODDERVIWAET NITI, \TI KOMANDY NE IME@T \FFEKTA. nAPRIMER, W SISTEMAH BEZ PODDERVKI NITEJ, GDB NI^EGO NE WYWODIT NA KOMANDU `info threads', I WSEGDA OTWERGAET KOMANDU thread, KAK W \TOM PRIMERE:

(gdb) info threads (gdb) thread 1

Thread ID 1 not known. Use the "info threads" command to see the IDs of currently known threads.1

wOZMOVNOSTI OTLADKI NITEJ GDB POZWOLQ@T WAM NABL@DATX WSE NITI WO WREMQ WYPOLNENIQ WA[EJ PROGRAMMY, NO KOGDA UPRAWLENIE PEREHODIT K GDB, ODNA KONKRETNAQ NITX WYDELQETSQ DLQ OTLADKI. oNA NAZYWAETSQ TEKU]EJ NITX@. oTLADO^NYE KOMANDY POKAZYWA@T INFORMACI@ O PROGRAMME S TO^KI ZRENIQ TEKU]EJ NITI.

kOGDA GDB OBNARUVIWAET NOWU@ NITX W WA[EJ PROGRAMME, ON WYWODIT DLQ NEE IDENTIFIKATOR NA CELEWOJ SISTEME S SOOB]ENIEM W FORME `[New SIST-TEG]'. sIST-TEG QWLQETSQ IDENTIFIKATOROM NITI, ^XQ FORMA RAZLI^AETSQ W ZAWISIMOSTI OT KONKRETNOJ SISTEMY. nAPRIMER, W LynxOS WY MOVETE UWIDETX

[New process 35 thread 27]

KOGDA GDB ZAME^AET NOWU@ NITX. nAPROTIW, W SISTEME SGI, SIST-TEG WYGLQDIT PROSTO KAK `process 368', BEZ DOPOLNITELXNYH SPECIFIKACIJ.

dLQ OTLADO^NYH CELEJ, GDB PRISWAIWAET SWOI SOBSTWENNYE NOMERA NITEJ|WSEGDA W WIDE ODNOGO CELOGO ^ISLA|KAVDOJ NITI W WA[EJ PROGRAMME.

info threads

wYWESTI KRATKU@ INFORMACI@ OBO WSEH IME@]IHSQ W DANNYJ MOMENT W WA[EJ PROGRAMME NITQH. dLQ KAVDOJ NITI, GDB OTOBRAVAET (W \TOM PORQDKE):

1nITX S IDENTIFIKATOROM 1 NEIZWESTNA. iSPOLXZUJTE KOMANDU "info threads", ^TOBY POLU^ITX IDENTIFIKATORY IZWESTNYH NITEJ. (pRIM. PEREWOD^IKA)

gLAWA 4: wYPOLNENIE PROGRAMM POD UPRAWLENIEM GDB

27

1.NOMER NITI, NAZNA^ENNYJ GDB

2.IDENTIFIKATOR NITI NA CELEWOJ SISTEME (SIST-TEG)

3.KRATKIE SWEDENIQ O TEKU]EM KADRE STEKA DLQ \TOJ NITI

zWEZDO^KA `*' SLEWA OT NOMERA NITI GDB OBOZNA^AET TEKU]U@ NITX. nAPRIMER,

(gdb) info threads

3 process 35 thread 27 0x34e5 in sigpause ()

2 process 35 thread 23 0x34e5 in sigpause ()

*1 process 35 thread 13 main (argc=1, argv=0x7ffffff8) at threadtest.c:68

w SISTEMAH HP-UX:

dLQ OTLADO^NYH CELEJ, GDB PRISWAIWAET SWOI SOBSTWENNYE NOMERA NITEJ|NEBOLX[IE CELYE, PRISWAIWAEMYE W PORQDKE SOZDANIQ NITEJ| KAVDOJ NITI W WA[EJ PROGRAMME.

kOGDA GDB OBNARUVIWAET NOWU@ NITX W WA[EJ PROGRAMME, ON WYWODIT KAK NOMER NITI, PRISWOENNYJ GDB, TAK I IDENTIFIKATOR NA CELEWOJ SISTEME DLQ NITI S SOOB]ENIEM W FORME `[New SIST-TEG]'. SIST-TEG QWLQETSQ IDENTIFIKATOROM NITI, ^XQ FORMA RAZLI^AETSQ W ZAWISIMOSTI OT KONKRETNOJ SISTEMY. nAPRIMER, W HP-UX, KOGDA GDB ZAME^AET NOWU@ NITX, WY UWIDITE

[New thread 2 (system thread 26594)]

info threads

wYWESTI KRATKU@ INFORMACI@ OBO WSEH IME@]IHSQ W DANNYJ MOMENT W WA[EJ PROGRAMME NITQH. dLQ KAVDOJ NITI, GDB OTOBRAVAET (W \TOM PORQDKE):

1.NOMER NITI, NAZNA^ENNYJ GDB

2.IDENTIFIKATOR NITI NA CELEWOJ SISTEME (SIST-TEG)

3.KRATKIE SWEDENIQ O TEKU]EM KADRE STEKA DLQ \TOJ NITI

zWEZDO^KA `*' SLEWA OT NOMERA NITI GDB OZNA^AET TEKU]U@ NITX. nAPRIMER,

(gdb) info threads

* 3 system thread 26607 worker (wptr=0x7b09c318 "@") \

at quicksort.c:137

2 system thread 26606 0x7b0030d8 in __ksleep () \

from /usr/lib/libc.2 1 system thread 27905 0x7b003498 in _brk () \

from /usr/lib/libc.2

thread NOMER-NITI

sDELATX NITX S NOMEROM NOMER-NITI TEKU]EJ. aRGUMENT KOMANDY, NOMER-NITI, QWLQETSQ WNUTRENNIM NOMEROM NITI GDB, KOTORYJ POKAZAN W PERWOM POLE `info threads'. GDB OTWE^AET, WYWODQ SISTEMNYJ IDENTIFIKATOR WYBRANNOJ WAMI NITI, I OBZOR EE KADRA STEKA:

(gdb) thread 2

[Switching to process 35 thread 23] 0x34e5 in sigpause ()

tAKVE KAK I S SOOB]ENIEM `[New ...]', FORMA TEKSTA POSLE `Switching to' ZAWISIT OT SOGLA[ENIJ DLQ IDENTIFIKACII NITEJ W WA[EJ SISTEME.

28

oTLADKA S POMO]X@ GDB

threads apply [NOMER-NITI] [all] ARG

kOMANDA thread apply POZWOLQET WAM PRIMENITX KOMANDU K ODNOJ ILI NESKOLXKIM NITQM. zADAJTE NOMERA NITEJ, NA KOTORYE WY HOTITE WOZDEJSTWOWATX, W ARGUMENTE NOMER-NITI. nOMER-NITI|\TO WNUTRENNIJ NOMER NITI GDB, KOTORYJ POKAZAN W PERWOM POLE `info threads'. ~TOBY PRIMENITX KOMANDU KO WSEM NITQM, ISPOLXZUJTE thread apply all ARG.

kOGDA GDB OSTANAWLIWAET WA[U PROGRAMMU, WSLEDSTWIE TO^KI OSTANOWA ILI PO SIGNALU, ON AWTOMATI^ESKI WYBIRAET NITX, W KOTOROJ POQWILASX TO^KA OSTANOWA ILI SIGNAL. GDB PREDUPREVDAET WAS O PEREKL@^ENII KONTEKSTA SOOB]ENIEM W FORME `[Switching to SISTTEG]' DLQ IDENTIFIKACII NITI.

sM. rAZDEL 5.4 [oSTANOWKA I ZAPUSK MNOGONITEWYH PROGRAMM], S. 48, DLQ DOPOLNITELXNOJ INFORMACII O POWEDENII GDB, KOGDA WY OSTANAWLIWAETE I ZAPUSKAETE MNOGONITEWU@ PROGRAMMU.

sM. rAZDEL 5.1.2 [uSTANOWKA TO^EK NABL@DENIQ], S. 35, DLQ INFORMACII O TO^KAH NABL@- DENIQ W MNOGONITEWYH PROGRAMMAH.

4.10 oTLADKA MNOGONITEWYH PROGRAMM

w BOLX[INSTWE SISTEM, GDB NE IMEET SPECIALXNOJ PODDERVKI DLQ OTLADKI PROGRAMM, SOZDA@]IH DOPOLNITELXNYE PROCESSY S POMO]X@ FUNKCII fork. kOGDA PROGRAMMA WYZYWAET fork, GDB BUDET PRODOLVATX OTLADKU RODITELXSKOGO PROCESSA, A DO^ERNIJ PROCESS BUDET WYPOLNQTXSQ BESPREPQTSTWENNO. eSLI WYPOLNENIE DO^ERNEGO PROCESSA DOJDET DO MESTA, GDE WY USTANOWILI TO^KU OSTANOWA, DO^ERNIJ PROCESS POLU^IT SIGNAL SIGTRAP, KOTORYJ PRIWEDET K OSTANOWKE PROCESSA (ESLI ON NE PEREHWATYWAET \TOT SIGNAL).

oDNAKO, ESLI WY HOTITE OTLADITX DO^ERNIJ PROCESS, SU]ESTWUET DOSTATO^NO PROSTOE RE[ENIE. pOMESTITE WYZOW sleep W KOD PROGRAMMY, KOTORYJ DO^ERNIJ PROCESS WYPOLNIT POSLE fork. mOVET BYTX UDOBNYM WYZYWATX sleep TOLXKO ESLI USTANOWLENA OPREDELENNAQ PEREMENNAQ SREDY ILI ESLI SU]ESTWUET OPREDELENNYJ FAJL, TAK ^TO ZADERVKA NE BUDET PROISHODITX, ESLI WY NE ZAHOTITE OTLAVIWATX DO^ERNIJ PROCESS. pOKA DO^ERNIJ PROCESS SPIT, ISPOLXZUJTE PROGRAMMU ps DLQ POLU^ENIQ EE IDENTIFIKATORA PROCESSA. zATEM UKAVITE GDB (NOWOMU \KZEMPLQRU GDB, ESLI WY OTLAVIWAETE TAKVE I RODITELXSKIJ PROCESS) PRISOEDINITXSQ K DO^ERNEMU PROCESSU (SM. rAZDEL 4.7 [pRISOEDINENIE], S. 25). nA^INAQ S \TOGO MOMENTA, WY MOVETE OTLAVIWATX DO^ERNIJ PROCESS TO^NO TAKVE, KAK L@BOJ DRUGOJ PROCESS, K KOTOROMU WY PRISOEDINILISX.

w SISTEME HP-UX (TOLXKO W WERSIQH 11.x I BOLEE POZDNIH?) GDB PREDOSTAWLQET SREDSTWA DLQ OTLADKI PROGRAMM, KOTORYE SOZDA@T DOPOLNITELXNYE PROCESSY, ISPOLXZUQ FUNK-

CII fork ILI vfork.

pO UMOL^ANI@, KOGDA PROGRAMMA WETWITSQ, GDB BUDET PRODOLVATX OTLADKU RODITELXSKOGO PROCESSA, A DO^ERNIJ PROCESS BUDET WYPOLNQTXSQ BESPREPQTSTWENNO.

eSLI WY HOTITE OTLAVIWATX DO^ERNIJ PROCESS WMESTO RODITELXSKOGO, ISPOLXZUJTE KO-

MANDU set follow-fork-mode.

set follow-fork-mode REVIM

uSTANAWLIWAET REAKCI@ OTLAD^IKA NA WYZOW fork ILI vfork W PROGRAMME. wYZOW fork ILI vfork SOZDAET NOWYJ PROCESS. REVIM MOVET BYTX:

parent pOSLE WETWLENIQ OTLAVIWAETSQ ISHODNYJ PROCESS. dO^ERNIJ PROCESS WYPOLNQETSQ BESPREPQTSTWENNO. |TO POWEDENIE PO UMOL^ANI@.

child pOSLE WETWLENIQ OTLAVIWAETSQ NOWYJ PROCESS. rODITELXSKIJ PROCESS WYPOLNQETSQ BESPREPQTSTWENNO.

ask oTLAD^IK BUDET ZAPRA[IWATX ODIN IZ \TIH WARIANTOW.

gLAWA 4: wYPOLNENIE PROGRAMM POD UPRAWLENIEM GDB

29

show follow-fork-mode

oTOBRAVAET TEKU]U@ REAKCI@ OTLAD^IKA NA WYZOW fork ILI vfork.

eSLI WY ZAPRA[IWAETE OTLADKU DO^ERNEGO PROCESSA I ZA vfork SLEDUET exec, GDB WYPOLNQET NOWU@ PROGRAMMU DO PERWOJ TO^KI OSTANOWA, USTANOWLENNOJ W NEJ. eSLI U WAS BYLA USTANOWLENA TO^KA OSTANOWA NA FUNKCII main W WA[EJ ISHODNOJ PROGRAMME, ONA BUDET TAKVE USTANOWLENA NA main W DO^ERNEM PROCESSE.

kOGDA DO^ERNIJ PROCESS POROVDAETSQ WYZOWOM vfork, WY NE MOVETE OTLAVIWATX DO^ERNIJ ILI RODITELXSKIJ PROCESS DO TEH POR, POKA NE ZAWER[ITSQ WYZOW exec.

eSLI WY DAETE GDB KOMANDU run POSLE WYPOLNENIQ exec, NOWAQ PROGRAMMA STARTUET ZANOWO. ~TOBY PEREZAPUSTITX RODITELXSKIJ PROCESS, ISPOLXZUJTE KOMANDU file S IMENEM WYPOLNQEMOGO FAJLA RODITELXSKOJ PROGRAMMY W KA^ESTWE ARGUMENTA.

wY MOVETE ISPOLXZOWATX KOMANDU catch, ^TOBY OSTANOWITX GDB, KOGDA SDELAN WYZOW fork, vfork ILI exec. sM. rAZDEL 5.1.3 [uSTANOWKA TO^EK PEREHWATA], S. 37.

30

oTLADKA S POMO]X@ GDB

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

31

5 oSTANOWKA I PRODOLVENIE ISPOLNENIQ

oSNOWNYE CELI PRIMENENIQ OTLAD^IKA|OSTANOWKA WA[EJ PROGRAMMY DO EE ZAWER[ENIQ, ILI ^TOBY W SLU^AE NARU[ENIJ W RABOTE WA[EJ PROGRAMMY WY MOGLI WYQSNITX IH PRI^INU.

wNUTRI GDB WA[A PROGRAMMA MOVET OSTANOWITXSQ PO NESKOLXKIM PRI^INAM, TAKIM KAK SIGNAL, TO^KA OSTANOWA, ILI DOSTIVENIE NOWOJ STROKI POSLE KOMANDY GDB, TAKOJ KAK step. zATEM WY MOVETE ISSLEDOWATX I IZMENQTX ZNA^ENIQ PEREMENNYH, USTANAWLIWATX NOWYE TO^- KI OSTANOWA I UDALQTX STARYE, I ZATEM PRODOLVITX WYPOLNENIE. oBY^NO, WYWODIMYE GDB SOOB]ENIQ PREDOSTAWLQ@T DOSTATO^NU@ INFORMACI@ O SOSTOQNII WA[EJ PROGRAMMY, NO WY TAKVE MOVETE ZAPROSITX \TU INFORMACI@ QWNO W L@BOE WREMQ.

info program

oTOBRAZITX INFORMACI@ O SOSTOQNII WA[EJ PROGRAMMY: WYPOLNQETSQ ONA ILI NET, KAKIM PROCESSOM ONA QWLQETSQ I PO^EMU OSTANOWLENA.

5.1 tO^KI OSTANOWA, TO^KI NABL@DENIQ I TO^KI PEREHWATA

tO^KA OSTANOWA OSTANAWLIWAET WA[U PROGRAMMU WSQKIJ RAZ, KOGDA EE WYPOLNENIE DOSTIGAET OPREDELENNOJ TO^KI. dLQ KAVDOJ TO^KI OSTANOWA WY MOVETE DOBAWLQTX USLOWIQ DLQ LU^[EGO UPRAWLENIQ USLOWIQMI OSTANOWKI. wY MOVETE USTANAWLIWATX TO^KI OSTANOWA KOMANDOJ break I EE WARIANTAMI (SM. rAZDEL 5.1.1 [uSTANOWKA TO^EK OSTANOWA], S. 32), ^TOBY ZADATX MESTO, GDE DOLVNA OSTANOWITXSQ WA[A PROGRAMMA, PO NOMERU STROKI, IMENI FUNKCII ILI TO^NOMU ADRESU.

w KONFIGURACIQH HP-UX, SunOS 4.x, SVR4 I Alpha OSF/1, WY MOVETE USTANAWLIWATX TO^KI OSTANOWA W RAZDELQEMYH BIBLIOTEKAH DO ZAPUSKA WYPOLNQEMOGO FAJLA. w SISTEMAH HP-UX SU]ESTWUET NEBOLX[OE OGRANI^ENIE: WY DOLVNY PODOVDATX, POKA PROGRAMMA NE PERESTANET WYPOLNQTXSQ, DLQ USTANOWKI TO^EK OSTANOWA W PODPROGRAMMAH IZ RAZDELQEMOJ BIBLIOTEKI, KOTORYE NE WYZYWA@TSQ NAPRQMU@ IZ PROGRAMMY (NAPRIMER, PODPROGRAMMAH, QWLQ@]IHSQ ARGUMENTAMI WYZOWA pthread_create).

tO^KA NABL@DENIQ|\TO SPECIALXNAQ TO^KA OSTANOWA, KOTORAQ OSTANAWLIWAET WA[U PROGRAMMU PRI IZMENENII ZNA^ENIQ WYRAVENIQ. wY DOLVNY ISPOLXZOWATX DRUGU@ KOMANDU DLQ USTANOWKI TO^KI NABL@DENIQ (SM. rAZDEL 5.1.2 [uSTANOWKA TO^EK NABL@DENIQ], S. 35), NO POMIMO \TOGO, WY MOVETE OBRA]ATXSQ S NEJ TAK VE, KAK S L@BOJ DRUGOJ TO^KOJ OSTANOWA: WY WKL@^AETE, OTKL@^AETE I UDALQETE TO^KI OSTANOWA I TO^KI NABL@DENIQ PRI POMO]I ODNIH I TEH VE KOMAND.

wY MOVETE USTANOWITX, ^TO ZNA^ENIQ IZ WA[EJ PROGRAMMY DOLVNY OTOBRAVATXSQ AWTOMATI^ESKI, KOGDA GDB OSTANAWLIWAETSQ W TO^KE OSTANOWA. sM. rAZDEL 8.6 [aWTOMATI^ESKOE OTOBRAVENIE], S. 66.

tO^KA PEREHWATA|\TO DRUGAQ SPECIALIZIROWANNAQ TO^KA OSTANOWA, KOTORAQ OSTANAWLIWAET WA[U PROGRAMMU PRI WOZNIKNOWENII SOBYTIQ OPREDELENNOGO TIPA, TAKOGO KAK WYBRASYWANIE ISKL@^ENIQ W sI++ ILI ZAGRUZKA BIBLIOTEKI. tAKVE KAK S TO^KAMI NABL@DENIQ, WY ISPOLXZUETE DRUGU@ KOMANDU DLQ USTANOWKI TO^KI PEREHWATA, (SM. rAZDEL 5.1.3 [uSTANOWKA TO^EK PEREHWATA], S. 37), NO POMIMO \TOGO, WY MOVETE OBRA]ATXSQ S NEJ TAK VE, KAK S L@BOJ DRUGOJ TO^KOJ OSTANOWA. (dLQ OSTANOWKI, KOGDA WA[A PROGRAMMA POLU^AET SIGNAL, ISPOLXZUJTE KOMANDU handle; SMOTRITE rAZDEL 5.3 [sIGNALY], S. 46.)

kOGDA WY SOZDAETE TO^KU OSTANOWA, NABL@DENIQ ILI PEREHWATA, GDB PRISWAIWAET EJ NOMER; \TI NOMERA QWLQ@TSQ POSLEDOWATELXNYMI CELYMI ^ISLAMI, NA^INA@]IMISQ S EDINICY. wO MNOGIH KOMANDAH DLQ UPRAWLENIQ RAZLI^NYMI WOZMOVNOSTQMI TO^EK OSTANOWA, WY ISPOLXZUETE \TI NOMERA DLQ UKAZANIQ, KAKU@ TO^KU OSTANOWA WY HOTITE IZMENITX. kAVDAQ TO^KA OSTANOWA MOVET BYTX WKL@^ENA ILI OTKL@^ENA; ESLI TO^KA OSTANOWA OTKL@^ENA, ONA NE OKAZYWAET NIKAKOGO WLIQNIQ NA WA[U PROGRAMMU, POKA WY SNOWA NE WKL@^ITE EE.

32

oTLADKA S POMO]X@ GDB

nEKOTORYE KOMANDY GDB DOPUSKA@T W KA^ESTWE UKAZANIQ TO^EK OSTANOWA, NA KOTORYE ONI DEJSTWU@T, IH DIAPAZONY. dIAPAZON TO^EK OSTANOWA|\TO ILI NOMER ODNOJ TO^KI, NAPRIMER `5', ILI DWA TAKIH NOMERA, W PORQDKE UWELI^ENIQ, RAZDELENNYE DEFISOM, NAPRIMER `5-7'. kOGDA KOMANDE ZADAETSQ DIAPAZON TO^EK OSTANOWA, ONA DEJSTWUET NA WSE TO^KI OSTANOWA W \TOM DIAPAZONE.

5.1.1 uSTANOWKA TO^EK OSTANOWA

tO^KI OSTANOWA USTANAWLIWA@TSQ KOMANDOJ break (SOKRA]ENNO b). wSPOMOGATELXNAQ PEREMENNAQ OTLAD^IKA `$bpnum' HRANIT NOMER POSLEDNEJ USTANOWLENNOJ WAMI TO^KI OSTANOWA; SMOTRITE rAZDEL 8.9 [wSPOMOGATELXNYE PEREMENNYE], S. 73, DLQ OBSUVDENIQ TOGO, ^TO WY MOVETE DELATX SO WSPOMOGATELXNYMI PEREMENNYMI.

wY MOVETE ZADAWATX MESTO DLQ USTANOWKI NOWOJ TO^KI OSTANOWA NESKOLXKIMI SPOSOBAMI.

break FUNKCIQ

uSTANOWITX TO^KU OSTANOWA NA WHODE W FUNKCI@ FUNKCIQ. pRI ISPOLXZOWANII QZYKOW, DOPUSKA@]IH PEREGRUZKU SIMWOLOW, TAKIH KAK sI++, FUNKCIQ MOVET SSYLATXSQ BOLEE ^EM NA ODNO WOZMOVNOE MESTO OSTANOWA. sM. rAZDEL 5.1.8 [mEN@ TO^KI OSTANOWA], S. 42, DLQ OBSUVDENIQ TAKOJ SITUACII.

break +SME]ENIE break -SME]ENIE

uSTANOWITX TO^KU OSTANOWA ^EREZ NESKOLXKO STROK WPEREDI ILI SZADI OT POZICII, NA KOTOROJ WYPOLNENIE OSTANOWILOSX W TEKU]EM WYBRANNOM KADRE STEKA. (sM. rAZDEL 6.1 [kADRY STEKA], S. 51, DLQ OPISANIQ KADROW STEKA.)

break NOMER-STROKI

uSTANOWITX TO^KU OSTANOWA NA STROKE NOMER-STROKI W TEKU]EM ISHODNOM FAJLE. tEKU]IJ ISHODNYJ FAJL|\TO FAJL, ISHODNYJ TEKST KOTOROGO OTOBRAVALSQ POSLEDNIM. tO^KA OSTANOWA OSTANOWIT WA[U PROGRAMMU SRAZU PERED WYPOLNENIEM KAKOGO-LIBO KODA NA \TOJ STROKE.

break IMQ-FAJLA:NOMER-STROKI

uSTANOWITX TO^KU OSTANOWA NA STROKE NOMER-STROKI W ISHODNOM FAJLE IMQ-

FAJLA.

break IMQ-FAJLA:FUNKCIQ

uSTANOWITX TO^KU OSTANOWA NA WHODE W FUNKCI@, NAHODQ]U@SQ W FAJLE IMQFAJLA. uKAZANIE IMENI FAJLA WMESTE S IMENEM FUNKCII QWLQETSQ IZLI[NIM, ZA ISKL@^ENIEM SITUACIJ, KOGDA NESKOLXKO FAJLOW SODERVAT ODINAKOWO NAZWANNYE FUNKCII.

break *ADRES

uSTANOWITX TO^KU OSTANOWA PO ADRESU ADRES. wY MOVETE ISPOLXZOWATX \TO DLQ USTANOWKI TO^EK OSTANOWA W TEH ^ASTQH WA[EJ PROGRAMMY, KOTORYE NE IME@T OTLADO^NOJ INFORMACII ILI ISHODNYH FAJLOW.

break pRI WYZOWE BEZ ARGUMENTOW, break USTANAWLIWAET TO^KU OSTANOWA NA INSTRUKCII, KOTORAQ DOLVNA BYTX WYPOLNENA SLEDU@]EJ W WYBRANNOM KADRE STEKA (SM. gLAWA 6 [iSSLEDOWANIE STEKA], S. 51). w L@BOM WYBRANNOM KADRE, KROME SAMOGO WNUTRENNEGO, \TO OSTANAWLIWAET WA[U PROGRAMMU, KAK TOLXKO UPRAWLENIE WOZWRA]AETSQ W \TOT KADR. |TO POHOVE NA REZULXTAT KOMANDY finish W KADRE WNUTRI WYBRANNOGO KADRA|ZA ISKL@^ENIEM TOGO, ^TO finish NE OSTAWLQET AKTIWNOJ TO^KI OSTANOWA. eSLI WY ISPOLXZUETE break BEZ ARGUMENTOW W SAMOM WNUTRENNEM KADRE, GDB OSTANAWLIWAETSQ, KOGDA W SLEDU@]IJ RAZ DOSTIGAET TEKU]EGO MESTA; \TO MOVET BYTX POLEZNO WNUTRI CIKLOW.

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

33

oBY^NO GDB IGNORIRUET TO^KI OSTANOWA, KOGDA ON WOZOBNOWLQET WYPOLNENIE, POKA NE BUDET WYPOLNENA HOTQ BY ODNA INSTRUKCIQ. eSLI BY ON \TOGO NE DELAL, WY NE MOGLI BY PRODOLVATX WYPOLNENIE POSLE TO^KI OSTANOWA, NE OTKL@^IW SPERWA \TU TO^KU OSTANOWA. |TO PRAWILO PRIMENQETSQ WNE ZAWISIMOSTI OT TOGO, SU]ESTWOWALA ILI NET TO^KA OSTANOWA, KOGDA WA[A PROGRAMMA OSTANOWILASX.

break ... if USL

uSTANOWITX TO^KU OSTANOWA S USLOWIEM USL; KAVDYJ RAZ, KOGDA DOSTIGAETSQ TO^KA OSTANOWA, PROISHODIT WY^ISLENIE WYRAVENIQ USL, I OSTANOWKA PROISHODIT TOLXKO ESLI \TA WELI^INA NE RAWNA NUL@|TO ESTX, ESLI USL ISTINNO. `...' OZNA^AET ODIN IZ WOZMOVNYH ARGUMENTOW, PERE^ISLENNYH WY[E (ILI OTSUTSTWIE ARGUMENTOW), OPISYWA@]IH MESTO OSTANOWKI. sM. rAZDEL 5.1.6 [uSLOWIQ OSTANOWKI], S. 40, DLQ BOLX[EJ INFORMACII OB USLOWNYH TO^KAH OSTANOWA.

tbreak ARG

uSTANOWITX TO^KU OSTANOWA TOLXKO DO PERWOJ AKTIWIZACII. aRGUMENTY ARG TAKIE VE, KAK DLQ KOMANDY break, I TO^KA OSTANOWA USTANAWLIWAETSQ ANALOGI^NYM OBRAZOM, NO ONA AWTOMATI^ESKI UNI^TOVAETSQ POSLE TOGO, KAK WA[A PROGRAMMA PERWYJ RAZ NA NEJ OSTANOWITSQ. sM. rAZDEL 5.1.5 [oTKL@^ENIE TO^EK OSTANOWA], S. 39.

hbreak ARG

uSTANOWITX APPARATNO-PODDERVIWAEMU@ TO^KU OSTANOWA. aRGUMENTY ARG TAKIE VE, KAK I DLQ KOMANDY break, I TO^KA OSTANOWA USTANAWLIWAETSQ ANALOGI^NYM OBRAZOM, NO ONA TREBUET APPARATNOJ PODDERVKI I NEKOTORYE CELEWYE PLATFORMY MOGUT EE NE IMETX. oSNOWNOJ CELX@ \TOGO QWLQETSQ OTLADKA KODA EPROM/ROM, TAK ^TO WY MOVETE USTANOWITX TO^KU OSTANOWA NA INSTRUKCII BEZ IZMENENIQ INSTRUKCII. |TO MOVET BYTX ISPOLXZOWANO S NOWOJ GENERACIEJ LOWU[EK, PREDOSTAWLQEMOJ SPARClite DSU I NEKOTORYMI MA[INAMI NA BAZE x86. |TI PLATFORMY BUDUT GENERIROWATX LOWU[KI, KOGDA PROGRAMMA OBRA]AETSQ K NEKOTORYM DANNYM ILI ADRESU INSTRUKCII, KOTORYE NAZNA^ENY REGISTRAM OTLADKI. oDNAKO, REGISTRY APPARATNYH TO^EK OSTANOWA MOGUT HRANITX OGRANI^ENNOE ^ISLO TO^EK OSTANOWA. nAPRIMER, NA DSU, TOLXKO DWE TO^KI OSTANOWA MOGUT BYTX USTANOWLENY ODNOWREMENNO, I GDB BUDET OTWERGATX \TU KOMANDU, ESLI ISPOLXZUETSQ BOLX[E. uDALITE ILI OTKL@^ITE NEISPOLXZUEMYE APPARATNYE TO^KI OSTANOWA PERED USTANOWKOJ NOWYH (SM. rAZDEL 5.1.5 [oTKL@^ENIE TO^EK OSTANOWA], S. 39). sM. rAZDEL 5.1.6 [uSLOWIQ], S. 40.

thbreak ARG

uSTANOWITX APPARATNO-PODDERVIWAEMU@ TO^KU OSTANOWA, WKL@^ENNU@ TOLXKO DO PERWOJ AKTIWIZACII. aRGUMENTY ARG TAKIE VE, KAK I DLQ KOMANDY hbreak, I TO^KA OSTANOWA USTANAWLIWAETSQ ANALOGI^NYM OBRAZOM. oDNAKO, KAK W SLU- ^AE KOMANDY tbreak, TO^KA OSTANOWA AWTOMATI^ESKI UNI^TOVAETSQ POSLE TOGO, KAK PROGRAMMA PERWYJ RAZ NA NEJ OSTANOWITSQ. tAKVE, KAK I W SLU^AE KOMANDY hbreak, TO^KA OSTANOWA TREBUET APPARATNOJ PODDERVKI I NEKOTORYE APPARATNYE PLATFORMY MOGUT EE NE IMETX. sM. rAZDEL 5.1.5 [oTKL@^ENIE TO^EK OSTANOWA], S. 39. sMOTRITE TAKVE rAZDEL 5.1.6 [uSLOWIQ OSTANOWKI], S. 40.

rbreak REG-WYR

uSTANOWITX TO^KI OSTANOWA NA WSEH FUNKCIQH, UDOWLETWORQ@]IH REGULQRNOMU WYRAVENI@ REG-WYR. |TA KOMANDA USTANAWLIWAET BEZUSLOWNYE TO^KI OSTANOWA PRI WSEH SOWPADENIQH, WYWODQ SPISOK WSEH USTANOWLENNYH TO^EK OSTANOWA. pOSLE USTANOWKI, ONI RASSMATRIWA@TSQ TO^NO TAK VE, KAK TO^KI OSTANOWA, USTANOWLENNYE KOMANDOJ break. wY MOVETE UDALQTX IH, OTKL@^ATX, ILI DELATX IH USLOWNYMI TAKIM VE SPOSOBOM, KAK L@BYE DRUGIE TO^KI OSTANOWA. rEGULQRNYE WYRAVENIQ IME@T STANDARTNYJ SINTAKSIS, ISPOLXZUEMYJ TAKIMI SREDSTWAMI, KAK `grep'. zAMETXTE, ^TO \TO OTLI^AETSQ OT SINTAKSISA, ISPOLX-

34

oTLADKA S POMO]X@ GDB

ZUEMOGO OBOLO^KAMI; TAK, NAPRIMER, foo* PODHODIT DLQ WSEH FUNKCIJ, KOTORYE WKL@^A@T fo, ZA KOTORYM SLEDUET L@BOE ^ISLO BUKW o. sU]ESTWUET NEQWNOE .* W NA^ALE I W KONCE WWEDENNOGO WAMI REGULQRNOGO WYRAVENIQ, TAK ^TO DLQ NAHOVDENIQ TOLXKO TEH FUNKCIJ, KOTORYE NA^INA@TSQ NA foo, ISPOLXZUJTE ^foo.

pRI OTLADKE PROGRAMM, NAPISANNYH NA sI++, rbreak POLEZNA DLQ USTANOWKI TO^EK OSTANOWA NA PEREGRUVENNYH FUNKCIQH, NE QWLQ@]IHSQ ^LENAMI NIKAKOGO SPECIALXNOGO KLASSA.

info breakpoints [n] info break [n]

info watchpoints [n]

wYWESTI TABLICU WSEH USTANOWLENNYH I NE UDALENNYH TO^EK OSTANOWA, NABL@- DENIQ I PEREHWATA, SO SLEDU@]IMI KOLONKAMI DLQ KAVDOJ TO^KI:

nOMER TO^KI OSTANOWA

tIP tO^KA OSTANOWA, NABL@DENIQ ILI PEREHWATA.

pLAN pOME^ENA LI TO^KA OSTANOWA DLQ OTKL@^ENIQ ILI UDALENIQ POSLE AKTIWACII.

wKL@^ENA ILI OTKL@^ENA

wKL@^ENNYE TO^KI OSTANOWA POME^A@TSQ KAK `y'. `n' OTME^AET OTKL@^ENNYE TO^KI.

aDRES aDRES PAMQTI, GDE RASPOLOVENA TO^KA OSTANOWA W WA[EJ PROGRAMME.

gDE fAJL I NOMER STROKI, GDE RASPOLOVENA TO^KA OSTANOWA W ISHODNOM FAJLE.

eSLI TO^KA OSTANOWA USLOWNAQ, info break POKAZYWAET USLOWIE NA STROKE, SLEDU@]EJ ZA \TOJ TO^KOJ; KOMANDY TO^KI OSTANOWA, ESLI ONI ESTX, PERE^ISLQ@TSQ POSLE \TOGO.

info break S NOMEROM TO^KI OSTANOWA n W KA^ESTWE ARGUMENTA OTOBRAVAET TOLXKO \TU TO^KU. wSPOMOGATELXNAQ PEREMENNAQ $_ I ADRES PO UMOL^ANI@ DLQ ISSLEDOWANIQ DLQ KOMANDY x USTANAWLIWA@TSQ RAWNYMI ADRESU POSLEDNEJ IZ PERE^ISLENNYH TO^EK OSTANOWA (SM. rAZDEL 8.5 [iSSLEDOWANIE PAMQTI], S. 65).

info break OTOBRAVAET TO ^ISLO RAZ, KOTOROE TO^KA OSTANOWA BYLA AKTIWIROWANA. |TO OSOBENNO POLEZNO PRI ISPOLXZOWANII WMESTE S KOMANDOJ ignore. wY MOVETE IGNORIROWATX BOLX[OE ^ISLO AKTIWACIJ TO^KI OSTANOWA, POSMOTRETX INFORMACI@ O TO^KE OSTANOWA ^TOBY UZNATX, SKOLXKO RAZ ONA AKTIWIROWALASX, I ZATEM ZAPUSTITX ZANOWO, IGNORIRUQ NA EDINICU MENX[E, ^EM \TO ^ISLO. |TO BYSTRO PRIWEDET WAS K POSLEDNEJ AKTIWACII \TOJ TO^KI OSTANOWA.

GDB POZWOLQET WAM USTANOWITX L@BOE ^ISLO TO^EK OSTANOWA W ODNOM I TOM VE MESTE WA[EJ PROGRAMMY. w \TOM NET NI^EGO GLUPOGO ILI BESSMYSLENNOGO. kOGDA TO^KI OSTANOWA QWLQ@TSQ USLOWNYMI, \TO DAVE POLEZNO (SM. rAZDEL 5.1.6 [uSLOWIQ OSTANOWA], S. 40).

GDB SAM INOGDA USTANAWLIWAET TO^KI OSTANOWA W WA[EJ PROGRAMME DLQ SPECIALXNYH CELEJ, TAKIH KAK PRAWILXNAQ OBRABOTKA longjmp (W PROGRAMMAH NA sI). |TIM WNUTRENNIM TO^KAM OSTANOWA PRISWAIWA@TSQ OTRICATELXNYE NOMERA, NA^INAQ S -1; `info breakpoints' NE OTOBRAVAET IH.

wY MOVETE UWIDETX \TI TO^KI OSTANOWA S POMO]X@ SLUVEBNOJ KOMANDY GDB `maint info breakpoints'.

maint info breakpoints

iSPOLXZUQ TOT VE FORMAT, ^TO I `info breakpoints', OTOBRAZITX KAK TO^KI OSTANOWA, USTANOWLENNYE WAMI QWNO, TAK I TE, KOTORYE GDB ISPOLXZUET DLQ WNUTRENNIH CELEJ. wNUTRENNIE TO^KI OSTANOWA POKAZYWA@TSQ S OTRICATELXNYMI NOMERAMI. kOLONKA TIPA OPREDELQET, KAKOGO TIPA TO^KA OSTANOWA POKAZANA:

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

35

breakpoint

oBY^NAQ, QWNO USTANOWLENNAQ TO^KA OSTANOWA.

watchpoint

oBY^NAQ, QWNO USTANOWLENNAQ TO^KA NABL@DENIQ.

longjmp wNUTRENNQQ TO^KA OSTANOWA, ISPOLXZUEMAQ DLQ KORREKTNOJ OBRABOTKI PO[AGOWOGO WYPOLNENIQ WYZOWOW longjmp.

longjmp resume

wNUTRENNQQ TO^KA OSTANOWA NA CELI longjmp.

until wREMENNAQ WNUTRENNQQ TO^KA OSTANOWA, ISPOLXZUEMAQ KOMANDOJ

GDB until.

finish wREMENNAQ WNUTRENNQQ TO^KA OSTANOWA, ISPOLXZUEMAQ KOMANDOJ

GDB finish.

shlib events

sOBYTIQ W RAZDELQEMYH BIBLIOTEKAH.

5.1.2 uSTANOWKA TO^EK NABL@DENIQ

wY MOVETE ISPOLXZOWATX TO^KU NABL@DENIQ DLQ OSTANOWKI WYPOLNENIQ, KAK TOLXKO IZMENITSQ ZNA^ENIE KAKOGO-LIBO WYRAVENIQ, NE PREDSKAZYWAQ KONKRETNOE MESTO, GDE \TO MOVET PROIZOJTI.

w ZAWISIMOSTI OT WA[EJ SISTEMY, TO^KI NABL@DENIQ MOGUT BYTX REALIZOWANY PROGRAMMNO ILI APPARATNO. GDB OSU]ESTWLQET PROGRAMMNU@ REALIZACI@ TO^EK NABL@DENIQ PUTEM PO[AGOWOGO WYPOLNENIQ WA[EJ PROGRAMMY I PROWERKI ZNA^ENIQ PEREMENNOJ NA KAVDOM [AGE, ^TO W SOTNI RAZ MEDLENNEE NORMALXNOGO WYPOLNENIQ. (nO TEM NE MENEE \TO MOVET STOITX TOGO, NAJTI O[IBKU W PROGRAMME, KOGDA WY NE PREDSTAWLQETE, W KAKOJ EE ^ASTI ONA NAHODITSQ, MOVET BYTX O^ENX NELEGKO.)

w NEKOTORYH SISTEMAH, TAKIH KAK HP-UX, Linux I NEKOTORYH DRUGIH PLATFORMAH, BAZIRU@]IHSQ NA x86, GDB WKL@^AET PODDERVKU DLQ APPARATNYH TO^EK NABL@DENIQ, KOTORYE NE ZAMEDLQ@T WYPOLNENIE WA[EJ PROGRAMMY.

watch WYRAV

uSTANAWLIWAET TO^KU NABL@DENIQ ZA WYRAVENIEM. GDB OSTANOWIT PROGRAMMU, KOGDA WYRAV SOHRANQETSQ PROGRAMMOJ I EGO WELI^INA IZMENQETSQ.

rwatch WYRAV

uSTANAWLIWAET TO^KU NABL@DENIQ, KOTORAQ OSTANOWIT PROGRAMMU, KOGDA NABL@- DAEMOE WYRAV S^ITYWAETSQ PROGRAMMOJ.

awatch WYRAV

uSTANAWLIWAET TO^KU NABL@DENIQ, KOTORAQ OSTANOWIT PROGRAMMU, KOGDA WYRAV LIBO S^ITYWAETSQ, LIBO SOHRANQETSQ PROGRAMMOJ.

info watchpoints

|TA KOMANDA PE^ATAET SPISOK TO^EK NABL@DENIQ, OSTANOWA I PEREHWATA; \TO TO VE SAMOE, ^TO I info break.

kOGDA \TO WOZMOVNO, GDB USTANAWLIWAET APPARATNU@ TO^KU NABL@DENIQ. aPPARATNYE TO^KI NABL@DENIQ WYPOLNQ@TSQ O^ENX BYSTRO, I OTLAD^IK SOOB]AET OB IZMENENII WELI^INY TO^NO W MESTE INSTRUKCII, GDE \TO IZMENENIE PROIZO[LO. eSLI GDB NE MOVET USTANOWITX APPARATNU@ TO^KU NABL@DENIQ, ON USTANAWLIWAET PROGRAMMNU@ TO^KU NABL@- DENIQ, KOTORAQ WYPOLNQETSQ NAMNOGO MEDLENNEE I SOOB]AET OB IZMENENII WELI^INY NA SLEDU@]EM OPERATORE, A NE INSTRUKCII, POSLE POQWLENIQ IZMENENIQ.

kOGDA WY DAETE KOMANDU watch, GDB SOOB]AET

36

oTLADKA S POMO]X@ GDB

Hardware watchpoint NOMER: WYRAV

ESLI EMU UDALOSX USTANOWITX APPARATNU@ TO^KU NABL@DENIQ.

w NASTOQ]EE WREMQ, KOMANDY awatch I rwatch MOGUT USTANAWLIWATX TOLXKO APPARATNYE TO^KI NABL@DENIQ, TAK KAK DOSTUPY K DANNYM, KOTORYE NE IZMENQ@T WELI^INY NABL@DAEMOGO WYRAVENIQ, NE MOGUT BYTX ZAME^ENY BEZ ISSLEDOWANIQ KAVDOJ INSTRUKCII WO WREMQ EE WYPOLNENIQ, A GDB POKA \TOGO NE DELAET. eSLI GDB OBNARUVIWAET, ^TO NE MOVET USTANOWITX APPARATNU@ TO^KU OSTANOWA KOMANDAMI awatch ILI rwatch, ON NAPE^ATAET SOOB]ENIE, ANALOGI^NOE \TOMU:

Expression cannot be implemented with read/access watchpoint.1

iNOGDA GDB NE MOVET USTANOWITX APPARATNU@ TO^KU NABL@DENIQ IZ-ZA TOGO, ^TO TIP DANNYH NABL@DAEMOGO WYRAVENIQ ZANIMAET BOLX[E MESTA, ^EM DOPUSKAET APPARATNAQ TO^- KA NABL@DENIQ NA CELEWOJ PLATFORME. nAPRIMER, NEKOTORYE SISTEMY POZWOLQ@T NABL@- DATX ZA OBLASTQMI, ZANIMA@]IMI DO 4 BAJT; NA TAKIH SISTEMAH WY NE MOVETE USTANAWLIWATX APPARATNYE TO^KI NABL@DENIQ ZA WYRAVENIQMI, KOTORYE W REZULXTATE DA@T ^ISLO S PLAWA@]EJ TO^KOJ DWOJNOJ TO^NOSTI (KOTOROE OBY^NO ZANIMAET 8 BAJT). w KA^ESTWE ODNOGO IZ RE[ENIJ, MOVNO RAZBITX BOLX[U@ OBLASTX NA NESKOLXKO MENX[IH OBLASTEJ, I ZATEM NABL@DATX ZA KAVDOJ IZ NIH S POMO]X@ OTDELXNOJ TO^KI NABL@DENIQ.

eSLI WY USTANOWITE SLI[KOM MNOGO APPARATNYH TO^EK NABL@DENIQ, GDB MOVET BYTX NE W SOSTOQNII ZADEJSTWOWATX IH WSE, KOGDA WY WOZOBNOWITE WYPOLNENIE WA[EJ PROGRAMMY. tAK KAK TO^NOE KOLI^ESTWO AKTIWNYH TO^EK NABL@DENIQ NEIZWESTNO DO TOGO MOMENTA, KOGDA WA[A PROGRAMMA DOLVNA WOZOBNOWITX WYPOLNENIE, GDB MOVET BYTX NE W SOSTOQNII PREDUPREDITX WAS OB \TOM, KOGDA WY USTANAWLIWAETE TO^KU NABL@DENIQ, I PREDUPREVDENIE BUDET NAPE^ATANO TOLXKO KOGDA PROGRAMMA WOZOBNOWIT WYPOLNENIE:

Hardware watchpoint NOMER: Could not insert watchpoint2

eSLI \TO PROISHODIT, UDALITE ILI OTKL@^ITE NEKOTORYE TO^KI NABL@DENIQ.

SPARClite DSU BUDET GENERIROWATX LOWU[KI, KOGDA PROGRAMMA OBRA]AETSQ K NEKOTORYM DANNYM ILI ADRESU INSTRUKCII, KOTORYE OTWEDENY DLQ OTLADO^NYH REGISTROW. dLQ ADRESOW DANNYH, DSU UPRO]AET KOMANDU watch. oDNAKO, APPARATNYE REGISTRY TO^EK OSTANOWA MOGUT PRINQTX TOLXKO DWE TO^KI NABL@DENIQ ZA DANNYMI, I OBE TO^KI NABL@DENIQ DOLVNY BYTX ODNOGO TIPA. nAPRIMER, WY MOVETE USTANOWITX DWE TO^KI NABL@DENIQ S POMO]X@ KOMANDY watch, DWE S POMO]X@ KOMANDY rwatch, ILI DWE S POMO]X@ KOMANDY awatch, NO WY NE MOVETE USTANOWITX ODNU TO^KU NABL@DENIQ S POMO]X@ ODNOJ KOMANDY, A DRUGU@ S POMO]X@ DRUGOJ. GDB NE PRIMET KOMANDU, ESLI WY POPYTAETESX SME[ATX RAZLI^NYE TO^KI NABL@DENIQ. uDALITE ILI OTKL@^ITE NEISPOLXZUEMYE TO^KI NABL@DENIQ PERED USTANOWKOJ NOWYH.

eSLI WY WYZYWAETE FUNKCI@ INTERAKTIWNO, ISPOLXZUQ print ILI call, WSE USTANOWLENNYE WAMI TO^KI NABL@DENIQ BUDUT NEAKTIWNYMI, DO TEH POR POKA GDB NE DOSTIGNET TO^KI OSTANOWA DRUGOGO TIPA, ILI POKA WYZOW NE ZAWER[ITSQ.

GDB AWTOMATI^ESKI UDALQET TO^KI NABL@DENIQ, KOTORYE NABL@DA@T ZA LOKALXNYMI PEREMENNYMI, ILI ZA WYRAVENIQMI, KOTORYE ISPOLXZU@T TAKIE PEREMENNYE, KOGDA ONI WYHODQT IZ OBLASTI WIDIMOSTI, TO ESTX KOGDA WYPOLNENIE POKIDAET BLOK, W KOTOROM \TI PEREMENNYE BYLI OPREDELENY. w ^ASTNOSTI, KOGDA OTLAVIWAEMAQ PROGRAMMA ZAWER[AETSQ, WSE LOKALXNYE PEREMENNYE WYHODQT IZ OBLASTI WIDIMOSTI, I TAKIM OBRAZOM OSTA@TSQ USTANOWLENNYMI TOLXKO TE TO^KI NABL@DENIQ, KOTORYE NABL@DA@T ZA GLOBALXNYMI PEREMENNYMI. eSLI WY SNOWA ZAPUSTITE PROGRAMMU, WY DOLVNY BUDETE ZANOWO USTANOWITX WSE

1wYRAVENIE NE MOVET BYTX REALIZOWANO S POMO]X@ TO^KI NABL@DENIQ ^TENIQ/DOSTUPA. (pRIM. PERE-

WOD^IKA)

2 aPPARATNAQ TO^KA NABL@DENIQ NOMER: nE UDAETSQ POMESTITX TO^KU NABL@DENIQ (pRIM. PEREWOD^IKA)

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

37

TAKIE TO^KI NABL@DENIQ. oDNIM IZ SPOSOBOW SDELATX \TO BUDET USTANOWITX TO^KU OSTANOWA NA WHODE W FUNKCI@ main, I, KOGDA PROGRAMMA OSTANOWITSQ, USTANOWITX WSE TO^KI NABL@DENIQ.

pREDUPREVDENIE: w MNOGONITEWYH PROGRAMMAH TO^KI NABL@DENIQ QWLQ@TSQ LI[X ^ASTI^NO POLEZNYMI. s TEKU]EJ REALIZACIEJ TO^EK NABL@DENIQ, GDB MOVET NABL@DATX TOLXKO ZA WELI^INOJ WYRAVENIQ W ODNOJ NITI. eSLI WY UWERENY, ^TO WYRAVENIE MOVET IZMENITXSQ TOLXKO WSLEDSTWIE DEJSTWIJ WNUTRI TEKU]EJ NITI (I ESLI WY TAKVE UWERENY, ^TO NIKAKAQ DRUGAQ NITX NE MOVET STATX TEKU]EJ), TO WY MOVETE ISPOLXZOWATX TO^KI NABL@DENIQ KAK OBY^NO. oDNAKO, GDB MOVET NE ZAMETITX, KOGDA DEJSTWIQ W NE TEKU]EJ NITI IZMENQ@T WYRAVENIE.

pREDUPREVDENIE DLQ HP-UX: w MNOGONITEWYH PROGRAMMAH, PROGRAMMNYE TO^- KI NABL@DENIQ QWLQ@TSQ LI[X ^ASTI^NO POLEZNYMI. eSLI GDB SOZDAET PROGRAMMNU@ TO^KU NABL@DENIQ, ONA MOVET NABL@DATX TOLXKO ZA WELI^INOJ WYRAVENIQ W ODNOJ NITI. eSLI WY UWERENY, ^TO WYRAVENIE MOVET IZMENITXSQ TOLXKO WSLEDSTWIE DEJSTWIJ WNUTRI TEKU]EJ NITI (I ESLI WY TAKVE UWERENY, ^TO NIKAKAQ DRUGAQ NITX NE MOVET STATX TEKU]EJ), TO WY MOVETE ISPOLXZOWATX PROGRAMMNYE TO^KI NABL@DENIQ KAK OBY^NO. oDNAKO, GDB MOVET NE ZAMETITX, KOGDA DEJSTWIQ W NE TEKU]EJ NITI IZMENQ@T WYRAVENIE. (aPPARATNYE VE TO^KI NABL@DENIQ NAPROTIW, NABL@DA@T ZA WYRAVENIEM WO WSEH NITQH.)

5.1.3 uSTANOWKA TO^EK PEREHWATA

wY MOVETE ISPOLXZOWATX TO^KI PEREHWATA, ^TOBY WYZWATX OSTANOWKU OTLAD^IKA W OTWET NA OPREDELENNYE TIPY SOBYTIJ W PROGRAMME, TAKIE KAK ISKL@^ENIQ W sI++ ILI ZAGRUZKA RAZDELQEMOJ BIBLIOTEKI. dLQ USTANOWKI TO^KI PEREHWATA ISPOLXZUJTE KOMANDU catch.

catch SOBYTIE

oSTANOWITXSQ, KOGDA PROISHODIT SOBYTIE. sOBYTIE MOVET BYTX ODNIM IZ:

throw wYBRASYWANIE ISKL@^ENIQ sI++. catch pEREHWAT ISKL@^ENIQ sI++.

exec wYZOW exec. w NASTOQ]EE WREMQ \TO DOSTUPNO TOLXKO NA HP-UX.

fork wYZOW fork. w NASTOQ]EE WREMQ \TO DOSTUPNO TOLXKO NA HP-UX.

vfork wYZOW vfork. w NASTOQ]EE WREMQ \TO DOSTUPNO TOLXKO NA HP-UX.

load

load IMQ-BIBL

dINAMI^ESKAQ ZAGRUZKA L@BOJ RAZDELQEMOJ BIBLIOTEKI, ILI ZAGRUZKA BIBLIOTEKI IMQ-BIBL. w NASTOQ]EE WREMQ \TO DOSTUPNO TOLXKO NA HP-UX.

unload

unload IMQ-BIBL

wYGRUZKA L@BOJ DINAMI^ESKI ZAGRUVENNOJ RAZDELQEMOJ BIBLIOTEKI, ILI WYGRUZKA BIBLIOTEKI IMQ-BIBL. w NASTOQ]EE WREMQ \TO DOSTUPNO TOLXKO NA HP-UX.

tcatch SOBYTIE

uSTANOWITX TO^KU PEREHWATA, KOTORAQ WKL@^ENA TOLXKO DO PERWOJ AKTIWACII. tO^KA PEREHWATA AWTOMATI^ESKI UNI^TOVAETSQ POSLE TOGO, KAK SOBYTIE PEREHWA^ENO PERWYJ RAZ.

38

oTLADKA S POMO]X@ GDB

iSPOLXZUJTE KOMANDU info break DLQ POLU^ENIQ SPISKA TEKU]IH TO^EK PEREHWATA.

w NASTOQ]EE WREMQ, W GDB SU]ESTWU@T NEKOTORYE OGRANI^ENIQ NA OBRABOTKU ISKL@^E-

NIJ sI++ (catch throw I catch catch):

eSLI WY WYZYWAETE FUNKCI@ INTERAKTIWNO, GDB OBY^NO WOZWRA]AET WAM UPRAWLENIE POSLE TOGO, KAK FUNKCIQ ZAKON^ILA WYPOLNENIE. oDNAKO, ESLI WYZOW WOZBUVDAET ISKL@^ENIE, ON MOVET OBOJTI MEHANIZM, WOZWRA]A@]IJ WAM UPRAWLENIE, I ZASTAWITX WA[U PROGRAMMU LIBO OSTANOWITXSQ, LIBO PROSTO PRODOLVITX WYPOLNENIE DO TEH POR, POKA ONA NE AKTIWIRUET TO^KU OSTANOWA, POLU^IT SIGNAL, KOTORYJ VDET GDB, ILI WYJDET. |TO IMEET MESTO DAVE ESLI WY USTANOWITE TO^KU PEREHWATA DLQ ISKL@^ENIQ; TO^KI PEREHWATA DLQ ISKL@^ENIJ OTKL@^ENY PRI INTERAKTIWNYH WYZOWOW.

wY NE MOVETE WOZBUVDATX ISKL@^ENIQ INTERAKTIWNO.

wY NE MOVETE INTERAKTIWNO USTANOWITX OBRABOT^IK ISKL@^ENIQ.

iNOGDA catch NE QWLQETSQ LU^[IM SPOSOBOM OTLADKI OBRABOTKI ISKL@^ENIJ: ESLI WAM NEOBHODIMO TO^NO ZNATX, GDE ISKL@^ENIE WOZBUVDENO, TO LU^[E OSTANOWITXSQ DO TOGO, KAK WYZWAN OBRABOT^IK ISKL@^ENIQ, TAK KAK W \TOM SLU^AE WY MOVETE UWIDETX STEK DO TOGO, KAK PROIZOJDET KAKOE-LIBO RAZWERTYWANIE. eSLI WMESTO \TOGO WY USTANOWITE TO^KU OSTANOWA W OBRABOT^IKE ISKL@^ENIJ, TO MOVET BYTX NELEGKO OPREDELITX, GDE ISKL@^ENIE BYLO WOZBUVDENO.

dLQ OSTANOWKI SRAZU PERED WYZOWOM OBRABOT^IKA ISKL@^ENIJ, WAM NEOBHODIMY NEKOTORYE ZNANIQ O REALIZACII. w SLU^AE gnu sI++, ISKL@^ENIQ WOZBUVDA@TSQ PUTEM WYZOWA BIBLIOTE^NOJ FUNKCII __raise_exception, KOTORAQ IMEET SLEDU@]IJ INTERFEJS ANSI sI:

/* addr - GDE HRANITSQ IDENTIFIKATOR ISKL@^ENIQ. id - IDENTIFIKATOR ISKL@^ENIQ. */

void __raise_exception (void **addr, void *id);

dLQ TOGO, ^TOBY OTLAD^IK PEREHWATYWAL WSE ISKL@^ENIQ DO TOGO, KAK PROIZOJTET RAZWERTYWANIE STEKA, USTANOWITE TO^KU OSTANOWA NA __raise_exception (SM. rAZDEL 5.1 [tO^KI OSTANOWA], S. 31).

s POMO]X@ USLOWNYH TO^EK OSTANOWA (SM. rAZDEL 5.1.6 [uSLOWIQ OSTANOWA], S. 40), ZAWISQ]IH OT WELI^INY id, WY MOVETE OSTANOWITX WA[U PROGRAMMU, KOGDA WOZBUVDAETSQ OPREDELENNOE ISKL@^ENIE. wY MOVETE ISPOLXZOWATX NESKOLXKO USLOWNYH TO^EK OSTANOWA, ^TOBY OSTANOWITX PROGRAMMU, KOGDA WOZBUVDAETSQ L@BOE IZ NESKOLXKIH ISKL@^ENIJ.

5.1.4 uDALENIE TO^EK OSTANOWA

~ASTO BYWAET NEOBHODIMO UNI^TOVITX TO^KU OSTANOWA, NABL@DENIQ ILI PEREHWATA, KOGDA ONA SDELALA SWOE DELO I WY BOLX[E NE HOTITE OSTANAWLIWATX TAM SWO@ PROGRAMMU. |TO NAZYWAETSQ UNI^TOVENIEM TO^KI OSTANOWA. tO^KA OSTANOWA, KOTORAQ BYLA UNI^TOVENA, BOLEE NE SU]ESTWUET; ONA ZABYTA.

s POMO]X@ KOMANDY clear WY MOVETE UDALQTX TO^KI OSTANOWA W SOOTWETSTWII S TEM, GDE ONI NAHODQTSQ W WA[EJ PROGRAMME. s POMO]X@ KOMANDY delete WY MOVETE UDALQTX OTDELXNYE TO^KI OSTANOWA, NABL@DENIQ ILI PEREHWATA, UKAZYWAQ IH NOMERA.

nE OBQZATELXNO UDALQTX TO^KU OSTANOWA, ^TOBY PRODOLVITX WYPOLNENIE POSLE NEE. GDB AWTOMATI^ESKI IGNORIRUET TO^KI OSTANOWA NA PERWOJ INSTRUKCII, KOTORAQ DOLVNA BYTX WYPOLNENA, KOGDA WY PRODOLVAETE ISPOLNENIE BEZ IZMENENIQ ADRESA WYPOLNENIQ.

clear uDALQET L@BYE TO^KI OSTANOWA, USTANOWLENNYE NA SLEDU@]EJ INSTRUKCII, KOTORAQ DOLVNA BYTX WYPOLNENA W WYBRANNOM KADRE STEKA (SM. rAZDEL 6.3 [wYBOR KADRA], S. 52). kOGDA WYBRAN SAMYJ WNUTRENNIJ KADR, \TO HORO[IJ SPOSOB UDALITX TU TO^KU OSTANOWA, NA KOTOROJ WA[A PROGRAMMA TOLXKO ^TO OSTANOWILASX.

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

39

clear FUNKCIQ

clear IMQ-FAJLA:FUNKCIQ

uDALITX L@BYE TO^KI OSTANOWA, USTANOWLENNYE NA WHODE W FUNKCI@.

clear NOMER-STROKI

clear IMQ-FAJLA:NOMER-STROKI

uDALITX WSE TO^KI OSTANOWA, USTANOWLENNYE NA ILI WNUTRI KODA NA UKAZANNOJ STROKE.

delete [breakpoints] [DIAPAZON...]

uDALITX TO^KI OSTANOWA, NABL@DENIQ ILI PEREHWATA IZ DIAPAZONA, UKAZANNOGO W KA^ESTWE ARGUMENTA. eSLI ARGUMENT NE ZADAN, UDALITX WSE TO^KI OSTANOWA (GDB ZAPRA[IWAET PODTWERVDENIE, ESLI U WAS NE USTANOWLENO set confirm off). wY MOVETE SOKRATITX \TO KOMANDU KAK d.

5.1.5 oTKL@^ENIE TO^EK OSTANOWA

wMESTO TOGO, ^TOBY UDALQTX TO^KU OSTANOWA, NABL@DENIQ ILI PEREHWATA, WAM MOVET BYTX UDOBNEE OTKL@^ITX EE. |TO DELAET TO^KU OSTANOWA BEZDEJSTWU@]EJ, KAK ESLI BY ONA BYLA UDALENA, NO INFORMACIQ O NEJ ZAPOMINAETSQ, TAK ^TO WY MOVETE POZVE WKL@^ITX EE SNOWA.

wY OTKL@^AETE I WKL@^AETE TO^KI OSTANOWA, NABL@DENIQ I PEREHWATA KOMANDAMI enable I disable, WOZMOVNO UKAZYWAQ ODIN ILI BOLEE NOMEROW TO^EK OSTANOWA W KA^E- STWE ARGUMENTOW. iSPOLXZUJTE info break ILI info watch DLQ RASPE^ATKI SPISKA TO^EK OSTANOWA, NABL@DENIQ I PEREHWATA, ESLI WY NE ZNAETE KAKIE NOMERA ISPOLXZOWATX.

tO^KA OSTANOWA, NABL@DENIQ ILI PEREHWATA MOVET NAHODITXSQ W ODNOM IZ ^ETYREH SOSTOQNIJ:

wKL@^ENA. tO^KA OSTANOWA OSTANAWLIWAET WA[U PROGRAMMU. tO^KA OSTANOWA, USTANOWLENNAQ KOMANDOJ break, IZNA^ALXNO NAHODITSQ W TAKOM SOSTOQNII.

oTKL@^ENA. tO^KA OSTANOWA NE OKAZYWAET WOZDEJSTWIQ NA WA[U PROGRAMMU.

wKL@^ENA DO PERWOGO SRABATYWANIQ. tO^KA OSTANOWA OSTANAWLIWAET WA[U PROGRAMMU, NO POTOM STANOWITSQ OTKL@^ENNOJ.

wKL@^ENA DLQ UDALENIQ. tO^KA OSTANOWA OSTANAWLIWAET WA[U PROGRAMMU, NO SRAZU POSLE \TOGO ONA UDALQETSQ NAWSEGDA. tO^KA OSTANOWA, USTANOWLENNAQ KOMANDOJ tbreak, IZNA^ALXNO NAHODITSQ W \TOM SOSTOQNII.

wY MOVETE ISPOLXZOWATX SLEDU@]IE KOMANDY DLQ WKL@^ENIQ ILI OTKL@^ENIQ TO^EK OSTANOWA, NABL@DENIQ I PEREHWATA:

disable [breakpoints] [DIAPAZON...]

oTKL@^ITX UKAZANNYE TO^KI OSTANOWA, ILI WSE TO^KI OSTANOWA, ESLI NI ODNA NE PERE^ISLENA. oTKL@^ENNAQ TO^KA OSTANOWA NE OKAZYWAET NIKAKOGO DEJSTWIQ, NO ONA NE ZABYWAETSQ. wSE PARAMETRY, TAKIE KAK S^ET^IK IGNORIROWANIJ, USLOWIQ I KOMANDY ZAPOMINA@TSQ, NA SLU^AJ, ESLI TO^KA OSTANOWA POZVE BUDET SNOWA WKL@^ENA. wY MOVETE SOKRA]ATX disable KAK dis.

enable [breakpoints] [DIAPAZON...]

wKL@^AET UKAZANNYE (ILI WSE OPREDELENNYE) TO^KI OSTANOWA. oNI SNOWA STANOWQTSQ ZNA^IMYMI DLQ OSTANOWKI WA[EJ PROGRAMMY.

enable [breakpoints] once DIAPAZON...

wREMENNO WKL@^ITX UKAZANNYE TO^KI OSTANOWA. GDB OTKL@^AET L@BU@ IZ \TIH TO^EK OSTANOWA NEMEDLENNO POSLE SRABATYWANIQ.

40

oTLADKA S POMO]X@ GDB

enable [breakpoints] delete DIAPAZON...

wKL@^ITX UKAZANNYE TO^KI OSTANOWA DO PERWOGO SRABATYWANIQ, ZATEM UNI^TOVITX. GDB UDALQET L@BU@ IZ \TIH TO^EK OSTANOWA, KAK TOLXKO WA[A PROGRAMMA OSTANAWLIWAETSQ NA NEJ.

kROME TO^EK OSTANOWA, USTANOWLENNYH KOMANDOJ tbreak (SM. rAZDEL 5.1.1 [uSTANOWKA TO^EK OSTANOWA], S. 32), USTANOWLENNYE WAMI TO^KI OSTANOWA IZNA^ALXNO WKL@^ENY; SLEDOWATELXNO, ONI STANOWQTSQ OTKL@^ENNYMI ILI WKL@^ENNYMI TOLXKO KOGDA WY ISPOLXZUETE ODNU IZ WY[EPERE^ISLENNYH KOMAND. (kOMANDA until MOVET USTANAWLIWATX I UDALQTX SWO@ SOBSTWENNU@ TO^KU OSTANOWA, NO ONA NE IZMENQET SOSTOQNIE WA[IH DRUGIH TO^EK OSTANOWA; SM. rAZDEL 5.2 [pRODOLVENIE I WYPOLNENIE PO [AGAM], S. 44.)

5.1.6 uSLOWIQ OSTANOWA

pROSTEJ[AQ TO^KA OSTANOWA OSTANAWLIWAET WA[U PROGRAMMU KAVDYJ RAZ, KOGDA UPRAWLENIE DOSTIGAET ZADANNOGO MESTA. wY MOVETE TAKVE UKAZATX USLOWIE DLQ TO^KI OSTANOWA. uSLOWIE QWLQETSQ PROSTO BULEWYM WYRAVENIEM W WA[EM QZYKE PROGRAMMIROWANIQ (SM. rAZDEL 8.1 [wYRAVENIQ], S. 61). tO^KA OSTANOWA S USLOWIEM WY^ISLQET WYRAVENIE KAVDYJ RAZ, KOGDA WA[A PROGRAMMA DOSTIGAET EE, I WA[A PROGRAMMA OSTANOWITSQ TOLXKO W TOM SLU^AE, ESLI USLOWIE ISTINNO.

|TO PROTIWOPOLOVNO ISPOLXZOWANI@ UTWERVDENIJ DLQ PROWERKI PRAWILXNOSTI PROGRAMMY; W \TOM SLU^AE, WY HOTITE OSTANOWITXSQ, KOGDA UTWERVDENIE NARU[AETSQ|TO ESTX, KOGDA USLOWIE LOVNO. w sI, ESLI WY HOTITE PROWERITX UTWERVDENIE, WYRAVENNOE USLOWIEM assert, WY DOLVNY USTANOWITX USLOWIE `! assert' NA SOOTWETSTWU@]EJ TO^KE OSTANOWA.

uSLOWIQ TAKVE DOPUSKA@TSQ DLQ TO^EK NABL@DENIQ; WAM ONI MOGUT NE PONADOBITXSQ, TAK KAK TO^KA NABL@DENIQ TAK ILI INA^E KONTROLIRUET ZNA^ENIE WYRAVENIQ|NO MOVET OKAZATXSQ PRO]E, SKAVEM, PROSTO USTANOWITX TO^KU NABL@DENIQ NA IMQ PEREMENNOJ I UKAZATX USLOWIE, PROWERQ@]EE, QWLQETSQ LI NOWOE ZNA^ENIE TEM, KOTOROE NAS INTERESUET.

uSLOWIQ OSTANOWA MOGUT IMETX POBO^NYE \FFEKTY, I DAVE MOGUT WYZYWATX FUNKCII W WA[EJ PROGRAMME. |TO MOVET BYTX POLEZNYM, NAPRIMER, DLQ AKTIWACII FUNKCIJ, KOTORYE ZAPOMINA@T PRODWIVENIE WYPOLNENIQ WA[EJ PROGRAMMY, ILI DLQ ISPOLXZOWANIQ WA[IH SOBSTWENNYH FUNKCIJ PE^ATI DLQ FORMATIROWANIQ SPECIALXNYH STRUKTUR DANNYH. rEZULXTATY POLNOSTX@ PREDSKAZUEMY, ESLI NET DRUGOJ WKL@^ENNOJ TO^KI OSTANOWA PO TOMU VE ADRESU. (w \TOM SLU^AE, GDB MOVET SNA^ALA UWIDETX DRUGU@ TO^KU OSTANOWA I OSTANOWITX WA[U PROGRAMMU PROGRAMMU BEZ PROWERKI USLOWIQ PERWOJ TO^KI OSTANOWA.) zAMETXTE, ^TO KOMANDY TO^EK OSTANOWA OBY^NO BOLEE UDOBNY I GIBKI, ^EM USLOWIQ OSTANOWA, DLQ WYPOLNENIQ POBO^NYH \FFEKTOW, KOGDA DOSTIGAETSQ TO^KA OSTANOWA (SM. rAZDEL 5.1.7 [kOMANDY TO^KI OSTANOWA], S. 41).

uSLOWIQ OSTANOWA MOGUT BYTX ZADANY W MOMENT USTANOWKI TO^KI OSTANOWA, ISPOLXZUQ `if' W ARGUMENTAH KOMANDY break. sM. rAZDEL 5.1.1 [uSTANOWKA TO^EK OSTANOWA], S. 32. oNI MOGUT BYTX TAKVE IZMENENY W L@BOJ MOMENT S POMO]X@ KOMANDY condition.

wY TAKVE MOVETE ISPOLXZOWATX KL@^EWOE SLOWO if S KOMANDOJ watch. kOMANDA catch NE RASPOZNAET KL@^EWOE SLOWO if; condition QWLQETSQ EDINSTWENNYM SPOSOBOM NALOVITX DALXNEJ[IE USLOWIQ NA TO^KU PEREHWATA.

condition NOMER WYRAVENIE

zADAJTE WYRAVENIE KAK USLOWIE OSTANOWKI DLQ TO^KI OSTANOWA, NABL@DENIQ ILI PEREHWATA S NOMEROM NOMER. pOSLE TOGO, KAK WY USTANOWILI USLOWIE, DANNAQ TO^KA OSTANOWA OSTANOWIT WA[U PROGRAMMU TOLXKO ESLI ZNA^ENIE WYRAVENIQ BUDET ISTINNYM (NENULEWYM, W sI). kOGDA WY ISPOLXZUETE condition, GDB NEMEDLENNO PROWERQET WYRAVENIE NA SINTAKSI^ESKU@ KORREKTNOSTX I DLQ OPREDELENIQ, ^TO SIMWOLY W NEM IME@T OB_EKTY SSYLKI W KONTEKSTE WA[EJ TO^KI OSTANOWA. eSLI WYRAVENIE ISPOLXZUET SIMWOLY, NE SU]ESTWU@]IE W KONTEKSTE TO^KI OSTANOWA, GDB WYWEDET SOOB]ENIE OB O[IBKE:

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

41

No symbol "foo" in current context.3

oDNAKO, GDB W DEJSTWITELXNOSTI NE WY^ISLQET WYRAVENIE W MOMENT PODA^I KOMANDY condition (ILI KOMANDY, USTANAWLIWA@]EJ TO^KU OSTANOWA S USLOWIEM, TAKOJ KAK break if ...). sM. rAZDEL 8.1 [wYRAVENIQ], S. 61.

condition NOMER

sNIMAET USLOWIE S TO^KI OSTANOWA S NOMEROM NOMER. oNA STANOWITSQ OBY^NOJ BEZUSLOWNOJ TO^KOJ OSTANOWA.

sPECIALXNYM SLU^AEM USLOWIQ DLQ TO^KI OSTANOWA QWLQETSQ OSTANOWKA TOLXKO KOGDA TO^KA OSTANOWA BYLA DOSTIGNUTA OPREDELENNOE ^ISLO RAZ. |TO NASTOLXKO POLEZNO, ^TO SU]E- STWUET SPECIALXNYJ SPOSOB SDELATX \TO, ISPOLXZUQ S^ET^IK IGNORIROWANIQ TO^KI OSTANOWA. kAVDAQ TO^KA OSTANOWA IMEET S^ET^IK IGNORIROWANIQ, QWLQ@]IJSQ CELYM ^ISLOM. kAK PRAWILO, S^ET^IK IGNORIROWANIQ RAWEN NUL@, I, SLEDOWATELXNO, NE PROIZWODIT NIKAKOGO DEJSTWIQ. nO ESLI WA[A PROGRAMMA DOSTIGAET TO^KI OSTANOWA, ^EJ S^ET^IK IGNORIROWANIQ POLOVITELEN, TOGDA WMESTO TOGO ^TOBY OSTANOWITXSQ, ONA LI[X UMENX[IT EGO NA EDINICU I PRODOLVIT WYPOLNENIE. w REZULXTATE, ESLI WELI^INA S^ET^IKA IGNORIROWANIQ RAWNA n, TO^KA OSTANOWA NE OSTANOWIT PROGRAMMU SLEDU@]IE n RAZ, KOGDA PROGRAMMA EGO DOSTIGNET.

ignore NOMER ZNA^ENIE

uSTANAWLIWAET S^ET^IK IGNORIROWANIJ TO^KI OSTANOWA S NOMEROM NOMER W ZNA- ^ENIE. sLEDU@]IE ZNA^ENIE RAZ, KOGDA TO^KA OSTANOWA BUDET DOSTIGNUTA, WYPOLNENIE WA[EJ PROGRAMMY NE BUDET OSTANOWLENO; KROME KAK UMENX[ITX S^ET- ^IK IGNORIROWANIJ, GDB NE PROIZWODIT NIKAKIH DEJSTWIJ.

~TOBY TO^KA OSTANOWA SRABOTALA PRI SLEDU@]EM DOSTIVENII, USTANOWITE S^ET- ^IK W NOLX.

kOGDA WY ISPOLXZUETE continue DLQ WOZOBNOWLENIQ WYPOLNENIQ WA[EJ PROGRAMMY OT TO^KI OSTANOWA, WY MOVETE USTANOWITX S^ET^IK IGNORIROWANIJ NEPOSREDSTWENNO KAK ARGUMENT K continue, A NE ISPOLXZOWATX ignore. sM. rAZDEL 5.2 [pRODOLVENIE I WYPOLNENIE PO [AGAM], S. 44.

eSLI TO^KA OSTANOWA IMEET POLOVITELXNYJ S^ET^IK IGNORIROWANIJ I USLOWIE, TO USLOWIE NE PROWERQETSQ. kAK TOLXKO S^ET^IK IGNORIROWANIJ DOSTIGNET NULQ, GDB WOZOBNOWIT PROWERKU USLOWIQ.

wY MOVETE DOSTIGNUTX \FFEKTA S^ET^IKA IGNORIROWANIJ S POMO]X@ TAKOGO USLOWIQ, KAK `$foo- <= 0', ISPOLXZUQ WSPOMOGATELXNU@ PEREMENNU@ OTLAD^IKA, KOTORAQ UMENX[AETSQ KAVDYJ RAZ. sM. rAZDEL 8.9 [wSPOMOGATELXNYE PEREMEN-

NYE], S. 73.

s^ET^IKI IGNORIROWANIJ MOVNO ISPOLXZOWATX S TO^KAMI OSTANOWA, TO^KAMI NABL@DENIQ I TO^KAMI PEREHWATA.

5.1.7 kOMANDY TO^KI OSTANOWA

wY MOVETE PODATX L@BOJ TO^KE OSTANOWA (NABL@DENIQ ILI PEREHWATA) RQD KOMAND, KOTORYE BUDUT WYPOLNQTXSQ PRI OSTANOWKE WA[EJ PROGRAMMY NA \TOJ TO^KE OSTANOWA. nAPRIMER, WY MOVETE ZAHOTETX WYWESTI ZNA^ENIQ OPREDELENNYH WYRAVENIJ, ILI WKL@^ITX DRUGIE TO^KI OSTANOWA.

commands [NOMER]

... SPISOK-KOMAND ...

end oPREDELQET SPISOK KOMAND DLQ TO^KI OSTANOWA S NOMEROM NOMER. sAMI KOMANDY UKAZYWA@TSQ W SLEDU@]IH STROKAH. dLQ ZAWER[ENIQ SPISKA KOMAND, WWEDITE STROKU, SODERVA]U@ TOLXKO end.

3 w TEKU]EM KONTEKSTE NET SIMWOLA "foo". (pRIM. PEREWOD^IKA)

42

oTLADKA S POMO]X@ GDB

~TOBY UDALITX WSE KOMANDY OT TO^KI OSTANOWA, WWEDITE commands I NEMEDLENNO ZA \TIM end, TO ESTX ZADAJTE PUSTOJ SPISOK KOMAND.

bEZ ARGUMENTA NOMER, commands OTNOSITSQ K POSLEDNEJ USTANOWLENNOJ TO^KE OSTANOWA, NABL@DENIQ ILI PEREHWATA (NO NE K POSLEDNEJ WSTRE^ENNOJ).

nAVATIE hRETi, KAK SREDSTWO POWTORENIQ POSLEDNEJ KOMANDY GDB, OTKL@^ENO WNUTRI

SPISKA-KOMAND.

wY MOVETE ISPOLXZOWATX KOMANDY DLQ TO^KI OSTANOWA, ^TOBY SNOWA ZAPUSTITX WA[U PROGRAMMU NA WYPOLNENIE. pROSTO ISPOLXZUJTE KOMANDU continue, ILI step, ILI L@BU@ DRUGU@ KOMANDU, WOZOBNOWLQ@]U@ WYPOLNENIE.

pOSLE KOMANDY, WOZOBNOWLQ@]EJ WYPOLNENIE, L@BYE DRUGIE KOMANDY W SPISKE IGNORIRU@TSQ. tAK SDELANO POTOMU, ^TO KAVDYJ RAZ, KOGDA WY WOZOBNOWLQETE WYPOLNENIE (DAVE PROSTO S POMO]X@ next ILI step), WY MOVETE WSTRETITX DRUGU@ TO^KU OSTANOWA|KOTORAQ MOVET IMETX SWOJ SOBSTWENNYJ SPISOK KOMAND, ^TO PRIWEDET K NEODNOZNA^NOSTI, KAKOJ IZ SPISKOW WYPOLNQTX.

eSLI W KA^ESTWE PERWOJ KOMANDY W SPISKE KOMAND WY UKAVETE silent, OBY^NOE SOOB]E- NIE OB OSTANOWKE NA TO^KE OSTANOWA NE BUDET WYWODITXSQ. |TO MOVET BYTX VELATELXNO DLQ TO^EK OSTANOWA, KOTORYE DOLVNY WYWESTI OPREDELENNOE SOOB]ENIE, I ZATEM PRODOLVITX WYPOLNENIE. eSLI NIKAKAQ IZ OSTAW[IHSQ KOMAND NI^EGO NE WYWODIT, WY NE UWIDITE NIKAKOGO ZNAKA O TOM, ^TO TO^KA OSTANOWA BYLA DOSTIGNUTA. silent IMEET SMYSL TOLXKO W NA^ALE SPISKA KOMAND TO^KI OSTANOWA.

kOMANDY echo, output I printf POZWOLQ@T WAM BOLEE TO^NO KONTROLIROWATX WYWODIMYJ TEKST, I ^ASTO POLEZNY W \TIHIH" TO^KAH OSTANOWA. sM. rAZDEL 16.4 [kOMANDY UPRAWLENIQ WYWODOM], S. 159.

nAPRIMER, WOT KAK WY MOVETE ISPOLXZOWATX KOMANDY TO^KI OSTANOWA DLQ WYWODA WELI- ^INY x NA WHODE W foo, KOGDA x POLOVITELXNA.

break foo if x>0 commands

silent

printf "x is %d\n",x cont

end

oDNIM IZ PRIMENENIJ KOMAND TO^KI OSTANOWA QWLQETSQ KOMPENSACIQ ODNOJ O[IBKI, TAK, ^TOBY WY MOGLI ISKATX DRUGU@. pOMESTITE TO^KU OSTANOWA SRAZU POSLE STROKI KODA, SODERVA]EJ O[IBKU, ZADAJTE EJ USLOWIE DLQ OPREDELENIQ SLU^AQ, W KOTOROM BYLO SDELANO ^TO-TO O[IBO^NOE, I OPREDELITE KOMANDY DLQ PRISWOENIQ PRAWILXNYH ZNA^ENIJ TEM PEREMENNYM, DLQ KOTORYH \TO TREBUETSQ. zAKON^ITE KOMANDOJ continue, ^TOBY WA[E PROGRAMMA NE OSTANAWLIWALASX, A NA^NITE S KOMANDY silent, ^TOBY NE BYLO NIKAKOGO WYWODA. wOT PRIMER:

break 403 commands silent

set x = y + 4 cont

end

5.1.8 mEN@ TO^KI OSTANOWA

nEKOTORYE QZYKI PROGRAMMIROWANIQ (OSOBENNO sI++) DOPUSKA@T, ^TOBY ODNO I TO VE IMQ FUNKCII BYLO OPREDELENO NESKOLXKO RAZ, DLQ PRIMENENIQ W RAZLI^NYH KONTEKSTAH. |TO NAZYWAETSQ PEREGRUZKOJ. kOGDA IMQ FUNKCII PEREGRUVAETSQ, `break FUNKCIQ' NE DOSTATO^- NO, ^TOBY UKAZATX GDB, GDE WY HOTITE USTANOWITX TO^KU OSTANOWA. eSLI WY STOLKNULISX

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

43

S \TOJ PROBLEMOJ, WY MOVETE ISPOLXZOWATX ^TO-TO TIPA `break FUNKCIQ(TIPY)' DLQ UKAZANIQ, KAKU@ KONKRETNU@ WERSI@ FUNKCII WY IMEETE W WIDU. w PROTIWNOM SLU^AE, GDB PREDLAGAET WAM WYBOR IZ PRONUMEROWANNYH WARIANTOW DLQ RAZLI^NYH WOZMOVNYH TO^EK OSTANOWA, I VDET WA[EGO WYBORA S PRIGLA[ENIEM `>'. pERWYMI DWUMQ WARIANTAMI WSEGDA QWLQ@TSQ `[0] cancel' I `[1] all'. wWOD 1 USTANAWLIWAET TO^KU OSTANOWA NA KAVDOM OPREDELENII FUNKCII, I WWOD 0 PRERYWAET KOMANDU break BEZ USTANOWKI NOWYH TO^EK OSTANOWA.

nAPRIMER, SLEDU@]AQ WYDERVKA IZ SEANSA ILL@STRIRUET POPYTKU USTANOWITX TO^KU OSTANOWA NA PEREGRUVENNOM SIMWOLE String::after. mY WYBRALI TRI KONKRETNYH OPREDELENIQ IMENI FUNKCII:

(gdb) b String::after

[0]cancel

[1]all

[2]file:String.cc; line number:867

[3]file:String.cc; line number:860

[4]file:String.cc; line number:875

[5]file:String.cc; line number:853

[6]file:String.cc; line number:846

[7]file:String.cc; line number:735 > 2 4 6

Breakpoint 1 at 0xb26c: file String.cc, line 867. Breakpoint 2 at 0xb344: file String.cc, line 875. Breakpoint 3 at 0xafcc: file String.cc, line 846. Multiple breakpoints were set.

Use the "delete" command to delete unwanted breakpoints.

(gdb)

5.1.9\nE UDAETSQ POMESTITX TO^KI OSTANOWA"

w NEKOTORYH OPERACIONNYH SISTEMAH TO^KI OSTANOWA NE MOGUT BYTX ISPOLXZOWANY W PROGRAMME, ESLI KAKOJ-LIBO DRUGOJ PROCESS WYPOLNQET \TU PROGRAMMU. w \TOM SLU^AE, POPYTKA WYPOLNITX ILI PRODOLVITX WYPOLNENIE PROGRAMMY S TO^KOJ OSTANOWA PRIWODIT TOMU, ^TO GDB PE^ATAET SOOB]ENIE OB O[IBKE:

Cannot insert breakpoints.

The same program may be running in another process.4

kOGDA \TO PROISHODIT, U WAS ESTX TRI WARIANTA DALXNEJ[IH DEJSTWIJ:

1.uDALITX ILI OTKL@^ITX TO^KI OSTANOWA, I ZATEM PRODOLVITX.

2.pRIOSTANOWITX GDB I SKOPIROWATX FAJL, SODERVA]IJ WA[U PROGRAMMU, POD DRUGIM INENEM. wOZOBNOWITX RABOTU GDB I ISPOLXZOWATX KOMANDU exec-file DLQ UKAZANIQ, ^TO GDB DOLVEN WYPOLNQTX WA[U PROGRAMMU POD \TIM IMENEM. zATEM ZAPUSTITE WA[U PROGRAMMU SNOWA.

3.sKOMPONOWATX ZANOWO WA[U PROGRAMMU TAK, ^TOBY SEGMENT TEKSTA BYL NERAZDELQEMYM, ISPOLXZUQ KL@^ KOMPONOW]IKA `-N'. oGRANI^ENIQ OPERACIONNOJ SISTEMY MOGUT NE RASPROSTRANQTXSQ NA NERAZDELQEMYE WYPOLNQEMYE FAJLY.

aNALOGI^NOE SOOB]ENIE MOVET WYWODITXSQ, ESLI WY ZAPRA[IWAETE SLI[KOM MNOGO AKTIWNYH APPARATNO-PODDERVIWAEMYH TO^EK OSTANOWA I NABL@DENIQ:

Stopped; cannot insert breakpoints.

4nE UDAETSQ POMESTITX TO^KI OSTANOWA. |TA PROGRAMMA MOVET WYPOLNQTXSQ W DRUGOM PROCESSE. (pRIM. PE-

REWOD^IKA)

44

oTLADKA S POMO]X@ GDB

You may have requested too many hardware breakpoints and watchpoints.5

|TO SOOB]ENIE WYWODITSQ, KOGDA WY PYTAETESX WOZOBNOWITX WYPOLNENIE PROGRAMMY, TAK KAK TOLXKO TOGDA GDB ZNAET TO^NO, SKOLXKO APPARATNYH TO^EK OSTANOWA I NABL@DENIQ EMU NUVNO USTANOWITX.

kOGDA \TO SOOB]ENIE WYWODITSQ, WAM NEOBHODIMO OTKL@^ITX ILI UDALITX NEKOTORYE APPARATNO-PODDERVIWAEMYE TO^KI OSTANOWA I NABL@DENIQ, I ZATEM PRODOLVITX.

5.2 pRODOLVENIE I WYPOLNENIE PO [AGAM

pRODOLVENIE OZNA^AET WOZOBNOWLENIE WYPOLNENIQ PROGRAMMY DO EE NORMALXNOGO ZAWER- [ENIQ. nAPROTIW, PO[AGOWOE WYPOLNENIE OZNA^AET WYPOLNENIE E]E ODNOGO \[AGA" WA[EJ PROGRAMMY, GDE \[AG" BYTX LIBO ODNOJ STROKOJ ISHODNOGO KODA, LIBO ODNOJ MA[INNOJ INSTRUKCIEJ (W ZAWISIMOSTI OT TOGO, KAKU@ IMENNO KOMANDU WY ISPOLXZUETE). i W SLU^AE PRODOLVENIQ, I W SLU^AE WYPOLNENIQ PO [AGAM, WA[A PROGRAMMA MOVET OSTANOWITXSQ I RANX[E, WSLEDSTWIE TO^KI OSTANOWA ILI SIGNALA. (eSLI ONA OSTANAWLIWAETSQ PO SIGNALU, WY MOVETE ISPOLXZOWATX handle, ILI `signal 0' DLQ WOZOBNOWLENIQ WYPOLNENIQ. sM. rAZDEL 5.3 [sIGNALY], S. 46.)

continue [S^ET^IK-IGNOR] c [S^ET^IK-IGNOR]

fg [S^ET^IK-IGNOR]

wOZOBNOWITX WYPOLNENIE PROGRAMMY, S TOGO ADRESA, GDE WA[A PROGRAMMA OSTANOWILASX POSLEDNIJ RAZ; WSE TO^KI OSTANOWA, USTANOWLENNYE PO \TOMU ADRESU, PROPUSKA@TSQ. nEOBQZATELXNYJ ARGUMENT S^ET^IK-IGNOR POZWOLQET WAM ZADATX KOLI^ESTWO POSLEDU@]IH IGNORIROWANIJ TO^KI OSTANOWA W \TOM MESTE; EGO DEJSTWIE SOWPADAET S DEJSTWIEM ignore (SM. rAZDEL 5.1.6 [uSLOWIQ OSTANOWA], S. 40).

aRGUMENT S^ET^IK-IGNOR IMEET SMYSL TOLXKO ESLI WA[A PROGRAMMA OSTANOWILASX W TO^KE OSTANOWA. w OSTALXNYH SLU^AQH, ARGUMENT K continue IGNORIRUETSQ.

sINONIMY c I fg (OT foregroung, TAK KAK OTLAVIWAEMAQ PROGRAMMA S^ITAETSQ FONOWOJ), PREDOSTAWLQ@TSQ ISKL@^ITELXNO DLQ UDOBSTWA, I IME@T W TO^NOSTI TOT VE SMYSL, ^TO I continue.

~TOBY WOZOBNOWITX WYPOLNENIE S DRUGOGO MESTA, WY MOVETE ISPOLXZOWATX return (SM. rAZDEL 11.4 [wOZWRAT IZ FUNKCII], S. 103) ^TOBY WERNUTXSQ NAZAD K WYZYWA@]EJ FUNKCII; ILI jump (SM. rAZDEL 11.2 [pRODOLVENIE S DRUGOGO ADRESA], S. 102) DLQ PEREHODA K PROIZWOLXNOMU MESTU W WA[EJ PROGRAMME.

tIPI^NAQ TEHNIKA DLQ ISPOLXZOWANIQ PO[AGOWOGO WYPOLNENIQ ZAKL@^AETSQ W USTANOWKE TO^KI OSTANOWA (SM. rAZDEL 5.1 [tO^KI OSTANOWA], S. 31) NA NA^ALE FUNKCII ILI RAZDELA WA[EJ PROGRAMMY, GDE PREDPOLOVITELXNO NAHODITSQ O[IBKA, WYPOLNENII WA[EJ PROGRAMMY DO OSTANOWKI NA \TOJ TO^KE OSTANOWA, I ZATEM PO[AGOWOM WYPOLNENII PODOZREWAEMOGO U^ASTKA, S ISSLEDOWANIEM INTERESUEMYH PEREMENNYH, POKA WY NE UWIDITE, ^TO SLU^ILASX O[IBKA.

step pRODOLVITX WYPOLNENIE WA[EJ PROGRAMMY, POKA UPRAWLENIE NE DOSTIGNET DRUGOJ STROKI ISHODNOGO TEKSTA, ZATEM OSTANOWITX EE I WOZWRATITX UPRAWLENIE GDB. |TU KOMANDU MOVNO SOKRA]ATX DO s.

pREDUPREVDENIE: eSLI WY ISPOLXZUETE KOMANDU step, KOGDA UPRAWLENIE NAHODITSQ WNUTRI FUNKCII, KOTORAQ BYLA SKOMPILIROWANA BEZ

5oSTANOWLENO; NE UDAETSQ POMESTITX TO^KI OSTANOWA. wY MOGLI ZAPROSITX SLI[KOM MNOGO APPARATNOPODDERVIWAEMYH TO^EK OSTANOWA I NABL@DENIQ. (pRIM. PEREWOD^IKA)

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

45

OTLADO^NOJ INFORMACII, WYPOLNENIE PRODOLVAETSQ, POKA UPRAWLENIE NE DOSTIGNET FUNKCII, KOTORAQ IMEET EE. aNALOGI^NO, PO[A- GOWOE WYPOLNENIE NE BUDET ZAHODITX W FUNKCI@, SKOMPILIROWANNU@ BEZ OTLADO^NOJ INFORMACII. dLQ PO[AGOWOGO WYPOLNENIQ TAKIH FUNKCIJ ISPOLXZUJTE KOMANDU stepi, OPISANNU@ NIVE.

kOMANDA step OSTANAWLIWAETSQ TOLXKO NA PERWOJ INSTRUKCII STROKI ISHODNOGO TEKSTA. |TO PREDOTWRA]AET MNOVESTWENNYE OSTANOWKI, KOTORYE W PROTIWNOM SLU^AE MOGUT WOZNIKNUTX W OPERATORE switch, CIKLE for, I TAK DALEE. step PRODOLVAET OSTANAWLIWATXSQ, ESLI FUNKCIQ, IME@]AQ OTLADO^NU@ INFORMACI@, WYZYWAETSQ WNUTRI STROKI. dRUGIMI SLOWAMI, step ZAHODIT WNUTRX FUNKCIJ, WYZYWAEMYH W DANNOJ STROKE.

tAKVE, KOMANDA step WHODIT W FUNKCI@ TOLXKO ESLI DLQ NEE SU]ESTWUET INFORMACIQ O NOMERAH STROK. iNA^E ONA DEJSTWUET KAK KOMANDA next. |TO POZWOLQET IZBEVATX PROBLEM, POQWLQ@]IHSQ PRI ISPOLXZOWANII cc -gl NA MA[INAH MIPS. rANX[E step ZAHODILA W PODPROGRAMMU, ESLI SU]ESTWOWALA HOTX KAKAQ-NIBUDX OTLADO^NAQ INFORMACIQ O PODPROGRAMME.

step ^ISLO

pRODOLVAET WYPOLNENIE KAK PO KOMANDE step, NO DELAET \TO ^ISLO RAZ. eSLI DOSTIGAETSQ TO^KA OSTANOWA, ILI PRIHODIT SIGNAL, NE SWQZANNYJ S PO[AGOWYM WYPOLNENIEM, DO WYPOLNENIQ ^ISLA [AGOW, PO[AGOWOE WYPOLNENIE SRAZU OSTANAWLIWAETSQ.

next [^ISLO]

pRODOLVAET WYPOLNENIE DO SLEDU@]EJ STROKI ISHODNOGO TEKSTA W TEKU]EM (WNUTRENNEM) KADRE STEKA. |TO ANALOGI^NO step, NO WYZOWY FUNKCIJ, KOTORYE POQWLQ@TSQ WNUTRI STROKI KODA, WYPOLNQ@TSQ BEZ OSTANOWKI. wYPOLNENIE OSTANAWLIWAETSQ, KOGDA UPRAWLENIE DOSTIGAET DRUGOJ STROKI KODA W ISHODNOM UROWNE STEKA, KOTORYJ WYPOLNQLSQ, KOGDA WY DALI KOMANDU next. |TA KOMANDA SOKRA]AETSQ KAK n.

aRGUMENT ^ISLO QWLQETSQ S^ET^IKOM POWTORENIJ, KAK DLQ step.

kOMANDA next OSTANAWLIWAETSQ TOLXKO NA PERWOJ INSTRUKCII ISHODNOJ STROKI. |TO PREDOTWRA]AET MNOVESTWENNYE OSTANOWKI, KOTORYE INA^E MOGUT WOZNIKNUTX W OPERATORAH switch, CIKLAH for, I TAK DALEE.

finish pRODOLVITX WYPOLNENIE DO WOZWRATA IZ FUNKCII W WYBRANNOM KADRE STEKA. nAPE^ATATX WOZWRA]ENNOE ZNA^ENIE (ESLI TAKOWOE SU]ESTWUET).

sRAWNITE \TO S KOMANDOJ return (SM. rAZDEL 11.4 [wOZWRAT IZ FUNKCII], S. 103).

until

upRODOLVITX WYPOLNENIE DO DOSTIVENIQ STROKI ISHODNOGO TEKSTA, SLEDU@]EJ ZA TEKU]EJ, W TEKU]EM KADRE STEKA. |TA KOMANDA ISPOLXZUETSQ DLQ IZBEVANIQ WYPOLNENIQ CIKLA PO [AGAM BOLX[E ODNOGO RAZA. oNA POHOVA NA KOMANDU next, ZA ISKL@^ENIEM TOGO, ^TO KOGDA until WSTRE^AET PEREHOD, ONA AWTOMATI- ^ESKI PRODOLVAET WYPOLNENIE, POKA S^ET^IK WYPOLNENIQ PROGRAMMY NE STANET BOLX[E, ^EM ADRES PEREHODA.

|TO OZNA^AET, ^TO KOGDA WY DOSTIGAETE KONCA CIKLA POSLE EGO WYPOLNENIQ PO [AGAM, until PRODOLVAET WYPOLNENIE WA[EJ PROGRAMMY, POKA ONA NE WYJDET IZ CIKLA. nAPROTIW, KOMANDA next W KONCE CIKLA PROSTO PEREHODIT NAZAD W NA^ALO CIKLA, ^TO ZASTAWLQET WAS WYPOLNQTX PO [AGAM SLEDU@]U@ ITERACI@.

until WSEGDA OSTANAWLIWAET WA[U PROGRAMMU, ESLI ONA PYTAETSQ WYJTI IZ TEKU]EGO KADRA STEKA.

until MOVET PRIWESTI K NESKOLXKO NEOVIDANNYM REZULXTATAM, ESLI PORQDOK MA[INNYH KODOW NE SOWPADAET S PORQDKOM STROK ISHODNOGO TEKSTA. nAPRIMER,

46

oTLADKA S POMO]X@ GDB

W SLEDU@]EM OTRYWKE SEANSA OTLADKI, KOMANDA f (frame) POKAZYWAET, ^TO WYPOLNENIE OSTANOWILOSX NA STROKE 206; HOTQ, KOGDA MY ISPOLXZUEM until, MY PEREHODIM K STROKE 195:

(gdb) f

#0 main (argc=4, argv=0xf7fffae8) at m4.c:206

206

expand_input();

(gdb) until

 

195

for ( ; argc > 0; NEXTARG) {

|TO PROIZO[LO POTOMU, ^TO DLQ \FFEKTWNOSTI WYPOLNENIQ KOMPILQTOR SGENERIROWAL KOD DLQ PROWERKI OKON^ANIQ CIKLA W KONCE, A NE W NA^ALE CIKLA|DAVE ESLI PROWERKA W CIKLE for sI NAPISANA DO TELA CIKLA. kAVETSQ, ^TO KOMANDA until PEREMESTILASX NAZAD K NA^ALU CIKLA, KOGDA DWIGALASX K \TOMU WYRAVENI@; ODNAKO, W DEJSTWITELXNOSTI ONA NE PEREHODILA K BOLEE RANNEMU OPERATORU|W TERMINAH FAKTI^ESKOGO MA[INNOGO KODA.

until BEZ ARGUMENTOW RABOTAET POSREDSTWOM PO[AGOWOGO WYPOLNENIQ OTDELXNYH INSTRUKCIJ, I, SLEDOWATELXNO, QWLQETSQ BOLEE MEDLENNOJ, ^EM until S ARGUMENTOM.

until POLOVENIE u POLOVENIE

pRODOLVITX WYPOLNENIE WA[EJ PROGRAMMY, POKA LIBO UKAZANNOE MESTO NE BUDET DOSTIGNUTO, LIBO NE PROIZOJDET WOZWRAT IZ TEKU]EGO KADRA STEKA. POLOVENIE MOVET BYTX L@BOJ IZ DOSTUPNYH FORM ARGUMENTA DLQ break (SM. rAZDEL 5.1.1 [uSTANOWKA TO^EK OSTANOWA], S. 32). |TA FORMA KOMANDY ISPOLXZUET TO^KI OSTANOWA, I, SLEDOWATELXNO, QWLQETSQ BOLEE BYSTROJ, ^EM until BEZ ARGUMENTA.

stepi stepi ARG

si wYPOLNITX ODNU MA[INNU@ INSTRUKCI@, ZATEM OSTANOWITXSQ I WERNUTXSQ W OTLAD^IK.

pRI PO[AGOWOM WYPOLNENII MA[INNYH INSTRUKCIJ, ^ASTO BYWAET POLEZNYM SDELATX `display/i $pc'. |TO WELIT GDB AWTOMATI^ESKI OTOBRAVATX INSTRUKCI@, KOTORAQ BUDET WYPOLNQTXSQ SLEDU@]EJ, KAVDYJ RAZ, KOGDA WA[A PROGRAMMA OSTANAWLIWAETSQ. sM. rAZDEL 8.6 [aWTOMATI^ESKOE OTOBRAVENIE], S. 66.

aRGUMENT QWLQETSQ S^ET^IKOM POWTORENIJ, KAK DLQ step.

nexti nexti ARG

ni wYPOLNITX ODNU MA[INNU@ INSTRUKCI@, NO ESLI \TO WYZOW FUNKCII, PRODOLVATX DO WOZWRATA IZ NEE.

aRGUMENT QWLQETSQ S^ET^IKOM POWTORENIJ, KAK DLQ next.

5.3 sIGNALY

sIGNAL|\TO ASINHRONNOE SOBYTIE, KOTOROE MOVET PROIZOJTI W PROGRAMME. oPERACIONNAQ SISTEMA OPREDELQET WOZMOVNYE TIPY SIGNALOW I DAET KAVDOMU TIPU IMQ I NOMER. w Unix, NAPRIMER, SIGINT|\TO SIGNAL, POLU^AEMYJ PROGRAMMOJ, KOGDA WY WWODITE ZNAK PRERYWANIQ (^ASTO C-c); SIGSEGV|SIGNAL, POLU^AEMYJ PROGRAMMOJ PRI SSYLKE NA OBLASTX PAMQTI, OTLI^NU@ OT WSEH ISPOLXZUEMYH OBLASTEJ; SIGALRM POQWLQETSQ PRI SRABATYWANII INTERWALXNOGO TAJMERA (WOZNIKAET TOLXKO, ESLI WA[A PROGRAMMA ZAPROSILA WREMENNOJ SIGNAL).

nEKOTORYE SIGNALY, TAKIE KAK SIGALRM, QWLQ@TSQ OBY^NOJ ^ASTX@ FUNKCIONIROWANIQ WA[EJ PROGRAMMY. dRUGIE, TAKIE KAK SIGSEGV, OBOZNA^A@T O[IBKI; \TI SIGNALY QWLQ@TSQ

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

47

FATALXNYMI (ONI NEMEDLENNO UBIWA@T WA[U PROGRAMMU), ESLI PROGRAMMA NE OPREDELILA ZARANEE DRUGOJ SPOSOB IH OBRABOTKI. SIGINT NE UKAZYWAET NA O[IBKU W WA[EJ PROGRAMME, NO OBY^NO QWLQETSQ FATALXNYM, TAK ^TO ON MOVET WYPOLNQTX FUNKCI@ PRERYWANIQ: UBITX PROGRAMMU.

GDB SPOSOBEN OBNARUVITX L@BOE POQWLENIE SIGNALA W WA[EJ PROGRAMME. wY MOVETE ZARANEE SOOB]ITX GDB, ^TO DELATX DLQ KAVDOGO TIPA SIGNALA.

oBY^NO, GDB USTANOWLEN TAK, ^TOBY IGNORIROWATX NEO[IBO^NYE SIGNALY, TAKIE KAK SIGALRM (^TOBY NE ME[ATX IH DEJSTWI@ PRI ISPOLNENII WA[EJ PROGRAMMY), NO NEMEDLENNO OSTANAWLIWATX WA[U PROGRAMMU WSQKIJ RAZ, KOGDA WOZNIKAET SIGNAL OB O[IBKE. wY MOVETE IZMENITX \TI USTANOWKI KOMANDOJ handle.

info signals info handle

nAPE^ATATX TABLICU WSEH TIPOW SIGNALOW I OPISANIQ, KAK GDB BUDET OBRABATYWATX KAVDYJ IZ NIH. wY MOVETE ISPOLXZOWATX \TU KOMANDU, ^TOBY POSMOTRETX NOMERA WSEH OPREDELENNYH TIPOW SIGNALOW.

info handle QWLQETSQ SINONIMOM DLQ info signals.

handle SIGNAL KL@^EWYE-SLOWA...

iZMENITX SPOSOB, KOTORYM GDB OBRABATYWAET SIGNAL. SIGNAL MOVET BYTX NOMEROM SIGNALA ILI EGO IMENEM (S `SIG' ILI BEZ NEGO W NA^ALE). kL@^EWYESLOWA OPREDELQ@T, KAKIE SDELATX IZMENENIQ.

kL@^EWYE SLOWA, DOPUSKAEMYE KOMANDOJ handle, MOGUT BYTX SOKRA]ENY. wOT IH POLNYE IMENA:

nostop GDB NE DOLVEN OSTANAWLIWATX WA[U PROGRAMMU PRI POLU^ENII \TOGO SIGNALA. wSE VE ON MOVET WYWESTI SOOB]ENIE, UWEDOMLQ@]EE O POLU^ENII SIGNALA.

stop GDB DOLVEN OSTANOWITX WA[U PROGRAMMU PRI POLU^ENII \TOGO SIGNALA. |TO TAKVE PODRAZUMEWAET KL@^EWOE SLOWO print.

print GDB DOLVEN WYWESTI SOOB]ENIE PRI WOZNIKNOWENII DANNOGO SIGNALA.

noprint GDB WOOB]E NE DOLVEN ZAME^ATX WOZNIKNOWENIE SIGNALA. |TO TAKVE PODRAZUMEWAET KL@^EWOE SLOWO nostop.

pass GDB DOLVEN POZWOLITX WA[EJ PROGRAMME UWIDETX \TOT SIGNAL; WA[A PROGRAMMA MOVET OBRABOTATX SIGNAL, ILI VE ONA MOVET ZAWER[ITXSQ, ESLI SIGNAL FATALXNYJ I NE OBRABOTAN.

nopass GDB NE DOLVEN POZWOLQTX WA[EJ PROGRAMME WIDETX \TOT SIGNAL.

kOGDA SIGNAL OSTANAWLIWAET WA[U PROGRAMMU, ON NEWIDIM DLQ NEE, POKA WY NE PRODOLVITE WYPOLNENIE. zATEM WA[A PROGRAMMA WIDIT SIGNAL, ESLI W DANNYJ MOMENT NA RASSMATRIWAEMYJ SIGNAL RASPROSTRANQETSQ DEJSTWIE KOMANDY pass. dRUGIMI SLOWAMI, POSLE TOGO, KAK GDB SOOB]IT O SIGNALE, WY MOVETE ISPOLXZOWATX KOMANDU handle c pass ILI nopass, ^TOBY UKAZATX, DOLVNA LI WA[A PROGRAMMA UWIDETX \TOT SIGNAL PRI PRODOLVENII.

wY TAKVE MOVETE ISPOLXZOWATX KOMANDU signal DLQ TOGO, ^TOBY POME[ATX WA[EJ PROGRAMME UWIDETX SIGNAL ILI, NAOBOROT, ZASTAWITX EE ZAMETITX OBY^NO IGNORIRUEMYJ SIGNAL, ILI ^TOBY PODATX EJ PROIZWOLXNYJ SIGNAL W L@BOE WREMQ. nAPRIMER, ESLI WA[A PROGRAMMA OSTANOWILASX WSLEDSTWIE KAKOJ-LIBO O[IBKI OBRA]ENIQ K PAMQTI, WY MOVETE SOHRANITX PRAWILXNYE ZNA^ENIQ W O[IBO^NYE PEREMENNYE I PRODOLVITX WYPOLNENIE, W NADEVDE POSMOTRETX NA DALXNEJ[EE WYPOLNENIE, NO WA[A PROGRAMMA WEROQTNO NEMEDLENNO OSTANOWILASX BY IZ-ZA FATALXNOGO SIGNALA, KAK TOLXKO ONA BY EGO ZAMETILA. ~TOBY POME[ATX \TOMU, WY MOVETE PRODOLVITX WYPOLNENIE S `signal 0'. sM. rAZDEL 11.3 [pODA^A SIGNALA WA[EJ PROGRAMME], S. 103.

48

oTLADKA S POMO]X@ GDB

5.4 oSTANOWKA I ZAPUSK MNOGONITEWYH PROGRAMM

kOGDA WA[A PROGRAMMA IMEET NESKOLXKO NITEJ WYPOLNENIQ (SM. rAZDEL 4.9 [oTLADKA MNOGONITEWYH PROGRAMM], S. 26), WY MOVETE WYBRATX, USTANOWITX TO^KI OSTANOWA LIBO WO WSEH, LIBO W KAKIH-TO OTDELXNYH NITQH.

break NOM-STROKI thread NOMER-NITI break NOM-STROKI thread NOMER-NITI if ...

NOM-STROKI OPREDELQET STROKI ISHODNOGO TEKSTA; SU]ESTWUET NESKOLXKO SPOSOBOW IH ZADANIQ, NO REZULXTAT WSEGDA ODIN I TOT VE|UKAZATX STROKU ISHODNOGO TEKSTA.

iSPOLXZUJTE KLASSIFIKATOR `thread NOMER-NITI' S KOMANDOJ TO^KI OSTANOWA, ^TOBY UKAZATX GDB, ^TO WY HOTITE OSTANOWITX PROGRAMMU, TOLXKO KOGDA OPREDELENNAQ NITX DOSTIGNET \TOJ TO^KI. NOMER-NITI|\TO ODIN IZ ^ISLOWYH IDENTIFIKATOROW NITI, PRISWOENNYJ GDB, POKAZYWAEMYJ W PERWOJ KOLONKE PRI WYWODE `info threads'.

eSLI PRI USTANOWKE TO^KI OSTANOWA WY NE UKAVETE `thread NOMER-NITI', TO^KA OSTANOWA BUDET DEJSTWOWATX DLQ WSEH NITEJ WA[EJ PROGRAMMY.

wY TAKVE MOVETE ISPOLXZOWATX KLASSIFIKATOR thread DLQ USLOWNYH TO^EK OSTANOWA; W \TOM SLU^AE, POMESTITE `thread NOMER-NITI' PERED USLOWIEM TO^- KI OSTANOWA, WOT TAK:

(gdb) break frik.c:13 thread 28 if bartab > lim

pRI L@BOJ OSTANOWKE WA[EJ PROGRAMMY POD UPRAWLENIEM GDB, PREKRA]AETSQ WYPOLNENIE WSEH NITEJ, A NE TOLXKO TEKU]EJ. |TO POZWOLQET WAM ISSLEDOWATX POLNOE SOSTOQNIE PROGRAMMY, WKL@^AQ PEREKL@^ENIE MEVDU NITQMI, NE OPASAQSX, ^TO \TO MOVET IZMENITX ^TO-LIBO W DALXNEJ[EM.

nAOBOROT, KOGDA WY SNOWA ZAPUSKAETE PROGRAMMU, WSE NITI NA^INA@T WYPOLNQTXSQ. |TO WERNO DAVE PRI PO[AGOWOM WYPOLNENII TAKIMI KOMANDAMI, KAK step ILI next.

w ^ASTNOSTI, GDB NE MOVET PO[AGOWO WYPOLNQTX WSE NITI PARALLELXNO. tAK KAK PLANIROWANIEM WYPOLNENIQ NITI ZANIMAETSQ OPERACIONNAQ SISTEMA OTLAVIWAEMOJ CELI (NE KONTROLIRUEMAQ GDB), TO POKA W TEKU]EJ NITI WYPOLNQETSQ ODIN [AG, W DRUGIH MOVET WYPOLNITXSQ NESKOLXKO. bOLEE TOGO, KOGDA WYPOLNENIE PROGRAMMY OSTANAWLIWAETSQ, DRUGIE POTOKI WOOB]E MOGUT OSTANOWITXSQ W SEREDINE OPERATOROW, A NE NA GRANICE MEVDU NIMI.

wY DAVE MOVETE OBNARUVITX, ^TO POSLE PRODOLVENIQ ISPOLNENIQ ILI POSLE PO[AGOWOGO WYPOLNENIQ WA[A PROGRAMMA OSTANOWILASX W DRUGOJ NITI. |TO SLU^AETSQ WSQKIJ RAZ, KOGDA DRUGAQ NITX DOSTIGAET TO^KI OSTANOWA, POLU^AET SIGNAL ILI W NEJ WOZNIKAET ISKL@^ITELXNAQ SITUACIQ, PREVDE ^EM PERWAQ NITX ZAWER[AET WYPOLNENIE TOGO, ^TO WY ZAPROSILI.

w NEKOTORYH OPERACIONNYH SISTEMAH WY MOVETE ZABLOKIROWATX PLANIROW]IK ZADANIJ I TEM SAMYM POZWOLITX WYPOLNQTXSQ TOLXKO ODNOJ NITI.

set scheduler-locking REVIM

uSTANAWLIWAET REVIM BLOKIROWKI PLANIROW]IKA ZADANIJ. eSLI ON USTANOWLEN W off, TO BLOKIROWKI NET I L@BAQ NITX MOVET WYPOLNQTXSQ W L@BOE WREMQ. eSLI \TOT REVIM USTANOWLEN W on, TO TOLXKO TEKU]AQ NITX MOVET WYPOLNQTXSQ, KOGDA WYPOLNENIE PRODOLVAETSQ. rEVIM step PROIZWODIT OPTIMIZACI@ DLQ PO[AGOWOGO WYPOLNENIQ. oN NE DAET DRUGIM NITQM \ZAHWATYWATX PRIGLA[E- NIE" PUTEM PRIORITETNOGO PRERYWANIQ OBSLUVIWANIQ TEKU]EJ NITI WO WREMQ PO[AGOWOGO WYPOLNENIQ. dRUGIE NITI EDWA LI POLU^AT WOZMOVNOSTX NA^ATX WYPOLNENIE, KOGDA WY WYPOLNQETE O^EREDNOJ [AG. s BOLX[EJ WEROQTNOSTX@ ONI NA^NUT WYPOLNQTXSQ, KOGDA WY WYPOLNQETE KOMANDU next NA WYZOWE FUNKCII, I

gLAWA 5: oSTANOWKA I PRODOLVENIE ISPOLNENIQ

49

IM NE ^TO NE POME[AET WYPOLNQTXSQ, KOGDA WY ISPOLXZUETE TAKIE KOMANDY, KAK `continue', `until' ILI `finish'. oDNAKO, ESLI DRUGIE NITI NE DOSTIGNUT TO^KI OSTANOWA W TE^ENIE OTWEDENNOGO EMU DLQ WYPOLNENIQ WREMENI, ONI NIKOGDA NE PEREHWATQT PRIGLA[ENIE GDB U OTLAVIWAEMOJ WAMI NITI.

show scheduler-locking

oTOBRAZITX TEKU]IJ REVIM BLOKIROWKI.

50

oTLADKA S POMO]X@ GDB

gLAWA 6: iSSLEDOWANIE STEKA

51

6 iSSLEDOWANIE STEKA

kOGDA WA[A PROGRAMMA OSTANOWILASX, PERWOE, ^TO WAM NUVNO ZNATX|GDE ONA OSTANOWILASX I KAK ONA TUDA POPALA.

kAVDYJ RAZ, KOGDA WA[A PROGRAMMA PROIZWODIT WYZOW FUNKCII, O NEM SOZDAETSQ OPREDELENNAQ INFORMACIQ. oNA WKL@^AET POLOVENIE WYZOWA W WA[EJ PROGRAMME, PARAMETRY WYZOWA I LOKALXNYE PEREMENNYE WYZYWAEMOJ FUNKCII. iNFORMACIQ SOHRANQETSQ W BLOKE DANNYH, NAZYWAEMOM KADROM STEKA. kADRY STEKA RAZME]A@TSQ W OBLASTI PAMQTI, NAZYWA-

EMOJ STEKOM WYZOWOW.

kOMANDY GDB DLQ ISSLEDOWANIQ STEKA POZWOLQ@T WAM UWIDETX WS@ \TU INFORMACI@ PRI OSTANOWKE WA[EJ PROGRAMMY.

oDIN IZ KADROW STEKA QWLQETSQ WYBRANNYM GDB, I MNOGIE KOMANDY GDB NEQWNO OTNOSQTSQ K NEMU. w ^ASTNOSTI, KOGDA WY ZAPRA[IWAETE U GDB ZNA^ENIE PEREMENNOJ WA[EJ PROGRAMMY, \TO ZNA^ENIE NAHODITSQ W WYBRANNOM KADRE. dLQ WYBORA INTERESU@]EGO WAS KADRA SU]ESTWU@T SPECIALXNYE KOMANDY GDB. sM. rAZDEL 6.3 [wYBOR KADRA], S. 52.

kOGDA WA[A PROGRAMMA OSTANAWLIWAETSQ, GDB AWTOMATI^ESKI WYBIRAET TEKU]IJ WYPOLNQ@]IJSQ KADR I WYDAET EGO KRATKOE OPISANIE, ANALOGI^NO KOMANDE frame (SM. rAZDEL 6.4 [iNFORMACIQ O KADRE STEKA], S. 53).

6.1 kADRY STEKA

CTEK WYZOWOW RAZDELEN NA NEPRERYWNYE U^ASTKI, NAZYWAEMYE KADRAMI STEKA, ILI KADRAMI DLQ KRATKOSTI; KAVDYJ KADR QWLQETSQ DANNYMI, SWQZANNYMI S ODNIM WYZOWOM ODNOJ FUNKCII. kADR SODERVIT ARGUMENTY, PEREDANNYE FUNKCII, EE LOKALXNYE PEREMENNYE I ADRES, S KOTOROGO ONA WYPOLNQETSQ.

kOGDA WA[A PROGRAMMA STARTUET, STEK SODERVIT TOLXKO ODIN KADR|DLQ FUNKCII main. oN NAZYWAETSQ NA^ALXNYM ILI WNE[NIM KADROM. kAVDYJ RAZ PRI WYZOWE FUNKCII SOZDAETSQ NOWYJ KADR. pRI KAVDOM WYHODE IZ FUNKCII, KADR \TOGO WYZOWA FUNKCII UNI^TOVAETSQ. eSLI FUNKCIQ QWLQETSQ REKURSIWNOJ, DLQ NEE MOVET SU]ESTWOWATX MNOVESTWO KADROW. kADR DLQ FUNKCII, ISPOLNQEMOJ W DANNYJ MOMENT, NAZYWAETSQ WNUTRENNIM KADROM. |TO KADR, SOZDANNYJ SAMYM POSLEDNIM IZ WSEH SU]ESTWU@]IH KADROW STEKA.

wNUTRI WA[EJ PROGRAMMY KADRY STEKA IDENTIFICIRU@TSQ SWOIM ADRESOM. kADR STEKA SOSTOIT IZ MNOVESTWA BAJT, KAVDYJ IZ KOTORYH IMEET SWOJ SOBSTWENNYJ ADRES; KAVDYJ TIP KOMPX@TEROW IMEET SWOJ SPOSOB DLQ WYBORA ODNOGO BAJTA, ^EJ ADRES SLUVIT ADRESOM KADRA. oBY^NO, POKA WYPOLNENIE PROISHODIT W DANNOM KADRE, \TOT ADRES SODERVITSQ W REGISTRE, NAZYWAEMOM REGISTROM UKAZATELQ KADRA.

GDB PRISWAIWAET NOMERA WSEM SU]ESTWU@]IM KADRAM STEKA, NA^INAQ S NULQ DLQ WNUTRENNEGO KADRA, EDINICU|WYZWAW[EMU EGO KADRU, I TAK DALEE. w DEJSTWITELXNOSTI, \TI NOMERA NE SU]ESTWU@T W WA[EJ PROGRAMME; ONI NAZNA^A@TSQ GDB, ^TOBY PREDOSTAWITX WAM SPOSOB RAZLI^ATX KADRY STEKA W KOMANDAH GDB.

nEKOTORYE KOMPILQTORY POZWOLQ@T KOMPILIROWATX FUNKCII TAK, ^TOBY ONI WYPOLNQLISX BEZ SOZDANIQ KADROW STEKA. (nAPRIMER, KL@^ gcc

`-fomit-frame-pointer'

SOZDAET FUNKCII BEZ KADRA.) |TO INOGDA DELAETSQ S ^ASTO ISPOLXZUEMYMI BIBLIOTE^- NYMI FUNKCIQMI, ^TOBY SOHRANITX WREMQ, TREBUEMOE DLQ USTANOWKI KADRA. GDB IMEET OGRANI^ENNYE WOZMOVNOSTI DLQ OBRABOTKI TAKIH FUNKCIONALXNYH WYZOWOW. eSLI WYZOW WNUTRENNEJ FUNKCII PROISHODIT BEZ SOZDANIQ KADRA STEKA, GDB, TEM NE MENEE, OPISYWAET EGO TAK, KAK ESLI BY ON IMEL OTDELXNYJ KADR, KOTORYJ IMEET, KAK OBY^NO, NOMER 0, POZWOLQQ KORREKTNO TRASSIROWATX CEPO^KU FUNKCIONALXNYH WYZOWOW. oDNAKO, GDB NE IMEET SREDSTW DLQ RABOTY S FUNKCIQMI BEZ KADRA W DRUGOM MESTE STEKA.

52 oTLADKA S POMO]X@ GDB

frame ARG kOMANDA frame POZWOLQET WAM PEREME]ATXSQ OT ODNOGO KADRA STEKA K DRUGOMU, I RASPE^ATYWATX WYBRANNYJ WAMI KADR. aRG MOVET BYTX LIBO ADRESOM KADRA, LIBO EGO NOMEROM. bEZ ARGUMENTA, frame WYWODIT TEKU]IJ KADR STEKA.

select-frame

kOMANDA select-frame POZWOLQET WAM PEREME]ATXSQ OT ODNOGO KADRA STEKA K DRUGOMU BEZ EGO RASPE^ATKI. |TO \TIHAQ" WERSIQ frame.

6.2 cEPO^KI WYZOWOW

cEPO^KA WYZOWOW PREDOSTAWLQET SOBOJ INFORMACI@ O TOM, KAK WA[A PROGRAMMA OKAZALASX TAM, GDE ONA ESTX. oNA OTOBRAVAET PO ODNOJ STROKE DLQ KAVDOGO KADRA, NA^INAQ S TEKU]EGO WYPOLNQ@]EGOSQ KADRA (KADRA 0), ZA KOTORYM SLEDUET KADR, IZ KOTOROGO ON BYL WYZWAN (KADR 1), I DALEE WWERH PO STEKU.

backtrace

 

bt

wYWESTI CEPO^KU WYZOWOW WSEGO STEKA: PO ODNOJ STROKE NA KADR, DLQ WSEH KADROW

 

W STEKE.

 

wY MOVETE PRERWATX CEPO^KU WYZOWOW W L@BOE WREMQ, WWEDQ ZNAK SISTEMNOGO

 

PRERYWANIQ, OBY^NO C-c.

backtrace n

bt n

tO VE SAMOE, NO WYWODQTSQ TOLXKO n WNUTRENNIH KADROW.

backtrace -n

bt -n

tO VE SAMOE, NO WYWODQTSQ TOLXKO n WNE[NIH KADROW.

where I info stack (SOKRA]ENNO info s)|DOPOLNITELXNYE SINONIMY DLQ backtrace.

kAVDAQ STROKA W CEPO^KE WYZOWOW POKAZYWAET NOMER KADRA I IMQ FUNKCII. s^ET^IK KOMAND TAKVE POKAZYWAETSQ, ESLI TOLXKO WY NE ISPOLXZUETE set print address off. cEPO^KA WYZOWOW TAKVE POKAZYWAET IMQ ISHODNOGO FAJLA, NOMER STROKI I ARGUMENTY FUNKCII. zNA- ^ENIE S^ET^IKA KOMAND OPUSKAETSQ, ESLI ON UKAZYWAET NA NA^ALO KODA DLQ DANNOJ STROKI.

nIVE PRIWEDEN PRIMER CEPO^KI WYZOWOW. oNA BYLA POLU^ENA KOMANDOJ `bt 3', TAK ^TO ONA POKAZYWAET TRI WNUTRENNIH KADRA.

#0 m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8) at builtin.c:993

#1 0x6e38 in expand_macro (sym=0x2b600) at macro.c:242

#2 0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08) at macro.c:71

(More stack frames follow...)

iNFORMACIQ O NULEWOM KADRE NE NA^INAETSQ SO ZNA^ENIQ S^ET^IKA KOMAND, ^TO UKAZYWAET NA TO, ^TO WA[A PROGRAMMA OSTANOWILASX W NA^ALE KODA DLQ STROKI 993 FAJLA builtin.c.

6.3 wYBOR KADRA

bOLX[INSTWO KOMAND DLQ ISSLEDOWANIQ STEKA I DRUGIH DANNYH W WA[EJ PROGRAMME PRIMENQ@TSQ WYBRANNOMU W DANNYJ MOMENT KADRU. zDESX PRIWEDENY KOMANDY DLQ WYBORA KADRA STEKA; WSE ONI ZAWER[A@TSQ WYWODOM KRATKOGO OPISANIQ WYBRANNOGO KADRA STEKA.

frame n

f n wYBRATX KADR NOMER n. nAPOMINAEM, ^TO NULEWOJ KADR|\TO WNUTRENNIJ (ISPOLNQEMYJ W DANNYJ MOMENT) KADR, PERWYJ KADR|TOT, IZ KOTOROGO WYZWAN NULEWOJ, I TAK DALEE. kADR S NAIBOLX[IM NOMEROM|\TO KADR DLQ FUNKCII main.

gLAWA 6: iSSLEDOWANIE STEKA

53

frame ADRES

f ADRES wYBRATX KADR, RASPOLOVENNYJ PO ADRESU ADRES. w OSNOWNOM \TO POLEZNO, ESLI FORMIROWANIE CEPO^KI KADROW STEKA BYLO NARU[ENO IZ-ZA O[IBKI, SDELAW[EJ NEWOZMOVNYM DLQ GDB PRAWILXNOE PRISWOENIE NOMEROW WSEM KADRAM. kROME TOGO, \TO MOVET BYTX POLEZNYM, KOGDA U WA[EJ PROGRAMMY ESTX NESKOLXKO STEKOW I PROISHODIT PEREKL@^ENIE OT ODNOGO K DRUGOMU.

w ARHITEKTURE SPARC, KOMANDE frame DLQ WYBORA PROIZWOLXNOGO KADRA NEOBHODIMO UKAZATX DWA ADRESA: UKAZATELX KADRA I UKAZATELX WER[INY STEKA.

w ARHITEKTURAH MIPS I Alpha TREBUETSQ DWA ADRESA: UKAZATELX WER[INY STEKA I UKAZATELX KOMAND.

w ARHITEKTURE 29k TREBUETSQ TRI ADRESA: UKAZATELX WER[INY STEKA REGISTROW, UKAZATELX KOMAND I UKAZATELX WER[INY STEKA PAMQTI.

up n pEREMESTITXSQ WWERH PO STEKU NA n KADROW. dLQ POLOVITELXNYH ZNA^ENIJ n, \TO PEREME]ENIE PROISHODIT PO NAPRAWLENI@ K WNE[NEMU KADRU, K KADRAM S BOLX[IMI NOMERAMI, K KADRAM, KOTORYE SU]ESTWU@T DOLX[E. pO UMOL^ANI@ n PRINIMAETSQ RAWNYM EDINICE.

down n pEREDWINUTXSQ WNIZ PO STEKU NA n KADROW. dLQ POLOVITELXNYH ZNA^ENIJ n, \TO PRODWIVENIE PROISHODIT PO NAPRAWLENI@ K WNUTRENNEMU KADRU, K KADRU S MENX[IM NOMEROM, K KADRAM, KOTORYE BYLI SOZDANY POZVE. pO UMOL^ANI@, ZNA^ENIE n PRINIMAETSQ RAWNYM EDINICE. wY MOVETE SOKRA]ATX down KAK do.

wSE \TI KOMANDY ZAKAN^IWA@TSQ WYWODOM DWUH STROK, OPISYWA@]IH KADR. pERWAQ STROKA POKAZYWAET NOMER KADRA, IMQ FUNKCII, ARGUMENTY, IMQ ISHODNOGO FAJLA I NOMER WYPOLNQEMOJ STROKI W \TOM KADRE. wTORAQ STROKA POKAZYWAET SODERVIMOE \TOJ STROKI ISHODNOGO TEKSTA.

nAPRIMER:

(gdb) up

#1 0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc) at env.c:10

10

read_input_file (argv[i]);

pOSLE TAKOGO WYWODA, KOMANDA list BEZ ARGUMENTOW WYWODIT DESQTX STROK, RASPOLOVENNYH WOKRUG TO^KI WYPOLNENIQ W KADRE. sM. rAZDEL 7.1 [wYWOD STROK ISHODNOGO TEKSTA],

S. 55.

up-silently n down-silently n

|TI DWE KOMANDY QWLQ@TSQ WARIANTAMI up I down SOOTWETSTWENNO, OTLI^AQSX OT NIH TEM, ^TO DELA@T SWO@ RABOTU \TIHO", NE OTOBRAVAQ NOWYJ KADR. oNI PREDNAZNA^ENY DLQ ISPOLXZOWANIQ W OSNOWNOM W KOMANDNYH SCENARIQH GDB, GDE WYWOD MOVET BYTX NENUVNYM I OTWLEKA@]IM.

6.4 iNFORMACIQ O KADRE STEKA

sU]ESTWU@T NESKOLXKO DRUGIH KOMAND DLQ WYWODA INFORMACII O WYBRANNOM KADRE STE-

KA.

frame

fpRI ISPOLXZOWANII BEZ ARGUMENTOW, \TA KOMANDA NE WYBIRAET NOWYJ KADR, A WYWODIT KRATKOE OPISANIE TEKU]EGO WYBRANNOGO KADRA STEKA. |TU KOMANDU MOVNO SOKRA]ATX KAK f. s ARGUMENTOM, \TA KOMANDA ISPOLXZUETSQ DLQ WYBORA KADRA STEKA. sM. rAZDEL 6.3 [wYBOR KADRA STEKA], S. 52.

54

oTLADKA S POMO]X@ GDB

info frame

info f |TA KOMANDA WYWODIT PODROBNOE OPISANIE WYBRANNOGO KADRA STEKA, WKL@^A@- ]EE:

ADRES KADRA

ADRES SLEDU@]EGO WNIZ PO STEKU KADRA (WYZYWAEMOGO IZ DANNOGO)

ADRES SLEDU@]EGO WWERH PO STEKU KADRA (TOGO, IZ KOTOROGO BYL WYZWAN DANNYJ)

QZYK, NA KOTOROM NAPISAN ISHODNYJ KOD, SOOTWETSTWU@]IJ \TOMU KADRU

ADRES ARGUMENTOW KADRA

ADRES LOKALXNYH PEREMENNYH KADRA

SOHRANENNYJ W KADRE S^ET^IK KOMAND (ADRES WYPOLNENIQ W KADRE, WYZWAW- [EM DANNYJ)

REGISTRY, KOTORYE BYLI SOHRANENY W KADRE

pODROBNOE OPISANIE POLEZNO, ESLI IZ-ZA KAKOJ-LIBO O[IBKI FORMAT STEKA NE SOOTWETSTWUET OBY^NYM SOGLA[ENIQM.

info frame ADRES info f ADRES

wYWESTI PODROBNOE OPISANIE KADRA STEKA, RASPOLOVENNOGO PO ADRESU ADRES, NE WYBIRAQ \TOT KADR. wYBRANNYJ KADR \TOJ KOMANDOJ NE IZMENQETSQ. oNA TREBUET PARAMETR ADRES TOGO VE TIPA, ^TO I KOMANDA frame (DLQ NEKOTORYH ARHITEKTUR NE ODIN, A NESKOLXKO). sM. rAZDEL 6.3 [wYBOR KADRA STEKA], S. 52.

info args wYWESTI ARGUMENTY WYBRANNOGO KADRA, KAVDYJ NA OTDELXNOJ STROKE.

info locals

wYWESTI LOKALXNYE PEREMENNYE WYBRANNOGO KADRA, KAVDU@ NA OTDELXNOJ STROKE. wYWODQTSQ WSE PEREMENNYE (OB_QWLENNYE KAK STATI^ESKIE ILI KAK AWTOMATI^ESKIE), DOSTUPNYE W TO^KE WYPOLNENIQ WYBRANNOGO KADRA STEKA.

info catch

wYWODIT SPISOK WSEH OBRABOT^IKOW ISKL@^ITELXNYH SITUACIJ, QWLQ@]IHSQ AKTIWNYMI W TEKU]EJ TO^KE WYPOLNENIQ TEKU]EGO KADRA STEKA. ~TOBY UWIDETX DRUGIE OBRABOT^IKI ISKL@^ITELXNYH SITUACIJ, PEREJDITE W SOOTWETSTWU@]U@ SEKCI@ (ISPOLXZUQ KOMANDY up, down ILI frame); ZATEM NABERITE info catch. sM. rAZDEL 5.1.3 [uSTANOWKA TO^EK PEREHWATA], S. 37.

gLAWA 7: iSSLEDOWANIE ISHODNYH FAJLOW

55

7 iSSLEDOWANIE ISHODNYH FAJLOW

GDB MOVET WYWODITX ^ASTI ISHODNYH TEKSTOW WA[EJ PROGRAMMY, TAK KAK OTLADO^NAQ INFORMACIQ, ZAPISANNAQ W NEJ, SOOB]AET GDB, KAKIE ISHODNYE FAJLY ISPOLXZOWALISX PRI SOZDANII PROGRAMMY. kOGDA WA[A PROGRAMMA OSTANAWLIWAETSQ, GDB SAM WYWODIT STROKU, NA KOTOROJ ONA OSTANOWILASX. aNALOGI^NO, KOGDA WY WYBIRAETE KADR STEKA (SM. rAZDEL 6.3 [wYBOR KADRA STEKA], S. 52), GDB WYWODIT STROKU, NA KOTOROJ OSTANOWILOSX WYPOLNENIE W \TOM KADRE. wY MOVETE WYWODITX DRUGIE ^ASTI ISHODNYH FAJLOW S POMO]X@ QWNYH KOMAND.

eSLI WY ISPOLXZUETE GDB ^EREZ INTERFEJS K gnu Emacs, WY MOVETE PREDPO^ESTX WOSPOLXZOWATXSQ SREDSTWAMI Emacs DLQ PROSMOTRA ISHODNYH TEKSTOW; SMOTRITE gLAWA 17 [iSPOLXZOWANIE GDB POD UPRAWLENIEM gnu Emacs], S. 161.

7.1 wYWOD STROK ISHODNOGO TEKSTA

~TOBY WYWESTI STROKI FAJLA S ISHODNYM TEKSTOM, ISPOLXZUJTE KOMANDU list (SOKRA- ]ENNO l). pO UMOL^ANI@ WYWODQTSQ DESQTX STROK. sU]ESTWUET NESKOLXKO SPOSOBOW OPREDELENIQ TOGO, KAKU@ ^ASTX FAJLA WY HOTITE WYWESTI.

zDESX PREDSTAWLENY NAIBOLEE UPOTREBITELXNYE FORMY KOMANDY list:

list NOMER-STROKI

wYWESTI STROKI, RASPOLOVENNYE WOKRUG STROKI S NOMEROM NOMER-STROKI W TEKU]EM ISHODNOM FAJLE.

list FUNKCIQ

wYWESTI STROKI, RASPOLOVENNYE WOKRUG NA^ALA FUNKCII FUNKCIQ.

list wYWESTI E]E OPREDELENNOE KOLI^ESTWO STROK. eSLI POSLEDNIE WYWEDENNYE STROKI WYWODILISX S POMO]X@ KOMANDY list, TO WYWODQTSQ STROKI, SLEDU@]IE ZA POSLEDNIMI WYWEDENNYMI; ESLI, ODNAKO, POSLEDNEJ WYWEDENNOJ STROKOJ BYLA ODINO^NAQ STROKA, WYWEDENNAQ KAK ^ASTX OTOBRAVENIQ KADRA STEKA (SM. gLAWA 6 [iSSLEDOWANIE STEKA], S. 51), TO WYWODQTSQ STROKI, RASPOLOVENNYE WOKRUG NEE.

list - wYWESTI STROKI, RASPOLOVENNYE NEPOSREDSTWENNO PERED POSLEDNIMI WYWEDENNYMI.

pO UMOL^ANI@, DLQ L@BOJ IZ \TIH FORM KOMANDY list GDB WYWODIT DESQTX STROK ISHODNOGO TEKSTA. wY MOVETE IZMENITX \TO KOMANDOJ set listsize:

set listsize ^ISLO

uSTANOWITX KOLI^ESTWO WYWODIMYH KOMANDOJ list STROK W ^ISLO (ESLI ARGUMENT KOMANDY list NE ZADAET QWNO KAKOE-NIBUDX DRUGOE ^ISLO).

show listsize

oTOBRAZITX KOLI^ESTWO STROK, WYWODIMYH PO KOMANDE list.

pOWTORENIE KOMANDY list NAVATIEM hRETi OTBRASYWAET ARGUMENT, TAK ^TO \TO \KWIWALENTNO WWODU PROSTO list. |TO POLEZNEE, ^EM WYWOD TEH VE SAMYH STROK SNOWA. iSKL@^ENIE SDELANO DLQ PARAMETRA `-'; \TOT PARAMETR SOHRANQETSQ PRI POWTORE KOMANDY, TAK ^TO KAVDOE POWTORENIE PRIWODIT K PEREME]ENI@ WWERH PO ISHODNOMU FAJLU.

oBY^NO KOMANDA list OVIDAET OT WAS NOLX, ODIN ILI DWA UKAZATELQ STROK. uKAZATELI STROK OPREDELQ@T STROKI ISHODNOGO TEKSTA; SU]ESTWUET NESKOLXKO SPOSOBOW IH ZADANIQ, NO REZULXTAT WSEGDA ZAKL@^AETSQ W ZADANII STROKI ISHODNOGO TEKSTA. wOT POLNOE OPISANIE WOZMOVNYH PARAMETROW KOMANDY list:

list UKAZ-STR

wYWESTI STROKI, RASPOLOVENNYE WOKRUG STROKI, OPREDELQEMOJ UKAZ-STR.

56

oTLADKA S POMO]X@ GDB

list PERW,POSL

wYWESTI STROKI S PERW DO POSL. oBA PARAMETRA QWLQ@TSQ UKAZATELQMI STROK.

list ,POSL

wYWESTI STROKI, RASPOLOVENNYE PERED POSL.

list PERW,

wYWESTI STROKI, NA^INAQ S PERW.

list + wYWESTI STROKI, RASPOLOVENNYE SRAZU ZA POSLEDNIMI WYWEDENNYMI.

list - wYWESTI STROKI, RASPOLOVENNYE NEPOSREDSTWENNO PERED POSLEDNIMI WYWEDENNYMI.

list oPISANO W PREDYDU]EJ TABLICE.

nIVE PERE^ISLENY SPOSOBY UKAZANIQ ODINO^NOJ STROKI ISHODNOGO TEKSTA|WSE WIDY UKAZATELEJ STROK.

NOMER oPREDELQET STROKU S NOMEROM NOMER IZ TEKU]EGO ISHODNOGO FAJLA. eSLI W KA^ESTWE PARAMETROW K KOMANDE list ZADANO DWA UKAZATELQ STROK, \TO OTNOSITSQ K TOMU VE ISHODNOMU FAJLU, ^TO I PERWYJ UKAZATELX STROKI.

+SME]ENIE

uKAZYWAET NA STROKU, SME]ENNU@ WPERED NA SME]ENIE STROK OTNOSITELXNO POSLEDNEJ WYWEDENNOJ STROKI. kOGDA ISPOLXZUETSQ W KA^ESTWE WTOROGO UKAZATELQ STROKI DLQ KOMANDY list, IME@]EJ DWA UKAZATELQ, ZADAET STROKU, SME]ENNU@ NA SME]ENIE STROK WNIZ OTNOSITELXNO STROKI, OPREDELENNOJ PERWYM UKAZATELEM.

-SME]ENIE

uKAZYWAET NA STROKU, RASPOLOVENNU@ NA SME]ENIE STROK RANX[E POSLEDNEJ WYWEDENNOJ STROKI.

IMQ-FAJLA:NOMER

zADAET STROKU NOMER IZ ISHODNOGO FAJLA IMQ-FAJLA.

FUNKCIQ oPREDELQET STROKU, S KOTOROJ NA^INAETSQ TELO FUNKCII FUNKCIQ. nAPRIMER, W sI \TO STROKA S OTKRYWA@]EJSQ FIGURNOJ SKOBKOJ.

IMQ-FAJLA:FUNKCIQ

oPREDELQET STROKU S OTKRYWA@]EJSQ FIGURNOJ SKOBKOJ, S KOTOROJ NA^INAETSQ TELO FUNKCII FUNKCIQ W FAJLE IMQ-FAJLA. iMQ FAJLA NEOBHODIMO LI[X DLQ TOGO, ^TOBY IZBEVATX NEODNOZNA^NOSTI, KOGDA W RAZLI^NYH ISHODNYH FAJLAH ESTX ODINAKOWO NAZWANNYE FUNKCII.

*ADRES oPREDELQET STROKU, SOOTWETSTWU@]U@ ADRESU ADRES PROGRAMMY. ADRES MOVET BYTX L@BYM WYRAVENIEM.

7.2 pOISK W ISHODNYH FAJLAH

sU]ESTWU@T DWE KOMANDY DLQ POISKA PO REGULQRNOMU WYRAVENI@ W TEKU]EM ISHODNOM FAJLE.

forward-search REG-WYRAV search REG-WYRAV

kOMANDA `forward-search REG-WYRAV' PROWERQET NA SOOTWETSTWIE REGULQRNOMU WYRAVENI@ REG-WYRAV KAVDU@ STROKU, NA^INAQ SO STROKI, SLEDU@]EJ ZA POSLEDNEJ WYWEDENNOJ. nAJDENNAQ STROKA WYWODITSQ. wY MOVETE ISPOLXZOWATX SINONIM `search REG-WYRAV' ILI SOKRA]ATX IMQ KOMANDY KAK fo.

gLAWA 7: iSSLEDOWANIE ISHODNYH FAJLOW

57

reverse-search REG-WYRAV

kOMANDA `reverse-search REG-WYRAV', DWIGAQSX NAZAD, PROWERQET NA SOOTWETSTWIE REGULQRNOMU WYRAVENI@ REG-WYRAV KAVDU@ STROKU, NA^INAQ S PRED[E- STWU@]EJ POSLEDNEJ WYWEDENNOJ. nAJDENNAQ STROKA WYWODITSQ. wY MOVETE SOKRA]ATX \TU KOMANDU KAK rev.

7.3 oPREDELENIE KATALOGOW S ISHODNYMI FAJLAMI

iSPOLNQEMYE PROGRAMMY INOGDA NE SOHRANQ@T IMENA KATALOGOW, W KOTORYH NAHODILISX ISHODNYE FAJLY, IZ KOTORYH ONI SKOMPILIROWANY, A HRANQT LI[X IMENA FAJLOW. dAVE ESLI ONI IH SOHRANILI, KATALOGI MOGLI BYTX PEREME]ENY W PERIOD MEVDU KOMPILQCIEJ I SEANSOM OTLADKI. u GDB ESTX SPISOK KATALOGOW DLQ POISKA ISHODNYH FAJLOW; ON NAZYWAETSQ PUTX DLQ ISHODNYH FAJLOW. kAVDYJ RAZ, KOGDA GDB TREBUETSQ ISHODNYJ FAJL, ON PEREBIRAET PO PORQDKU WSE KATALOGI IZ \TOGO SPISKA, POKA NE NAHODIT FAJL S TREBUEMYM IMENEM. zAMETXTE, ^TO PUTI POISKA ISPOLNQEMYH FAJLOW DLQ \TOJ CELI NE ISPOLXZU@TSQ, KAK NE ISPOLXZUETSQ I TEKU]IJ RABO^IJ KATALOG, ESLI TOLXKO ON NE PRISUTSTWUET W PUTI DLQ ISHODNYH FAJLOW.

eSLI GDB NE MOVET NAJTI ISHODNYJ FAJL, ISPOLXZUQ PUTX DLQ ISHODNYH FAJLOW, A W OB_EKTNOM FAJLE PROGRAMMY UKAZAN KAKOJ-LIBO KATALOG, GDB PROSMATRIWAET TAKVE I EGO. w POSLEDN@@ O^EREDX, ESLI PUTX DLQ ISHODNYH FAJLOW PUST I ZAPISX O KATALOGE KOMPILQCII OTSUTSTWUET, GDB PROSMATRIWAET TEKU]IJ KATALOG.

pRI PEREUSTANOWKE ILI PEREUPORQDO^IWANII PUTI DLQ ISHODNYH FAJLOW, GDB O^I]A- ET L@BU@ ZAPOMNENNU@ IM INFORMACI@ O TOM, GDE ISHODNYE FAJLY BYLI NAJDENY I O RASPOLOVENII STROK W NIH.

kOGDA WY WYZYWAETE GDB, PUTX DLQ ISHODNYH FAJLOW SODERVIT TOLXKO `cdir' I `cwd', W \TOM PORQDKE. dLQ DOBAWLENIQ DRUGIH KATALOGOW, ISPOLXZUJTE KOMANDU directory.

directory IMQ-KATALOGA ...

dir IMQ-KATALOGA ...

dOBAWITX KATALOG IMQ-KATALOGA W NA^ALO PUTI DLQ ISHODNYH FAJLOW. |TOJ KOMANDE MOGUT BYTX ZADANY NESKOLXKO IMEN, RAZDELENNYE `:' (`;' W MS-DOS I MS-Windows, GDE `:' OBY^NO QWLQETSQ ^ASTX@ ABSOL@TNOGO IMENI FAJLA) ILI PROBELOM. wY MOVETE UKAZATX KATALOG, KOTORYJ UVE SODERVITSQ W PUTI DLQ ISHODNYH FAJLOW; \TO PEREMESTIT EGO W NA^ALO, TAK ^TO GDB BUDET PROSMATRIWATX EGO RANX[E.

wY MOVETE ISPOLXZOWATX STROKU `$cdir' DLQ SSYLKI NA KATALOG KOMPILQCII (ESLI INFORMACIQ O NEM SOHRANENA), I `$cwd' DLQ SSYLKI NA TEKU]IJ RABO^IJ KATALOG. `$cwd' NE ESTX TO VE SAMOE, ^TO `.'. pERWAQ OTSLEVIWAET TEKU]IJ RABO^IJ KATALOG, KOTORYJ MOVET MENQTXSQ WO WREMQ WA[EGO SEANSA RABOTY S GDB, TOGDA KAK WTORAQ SRAZU PREOBRAZOWYWAETSQ W TEKU]IJ KATALOG W MOMENT EGO DOBAWLENIQ W PUTX DLQ ISHODNYH FAJLOW.

directory

o^ISTITX PUTX DLQ FAJLOW S ISHODNYMI TEKSTAMI. |TA KOMANDA TREBUET PODTWERVDENIQ.

show directories

wYWESTI PUTX POISKA ISHODNYH FAJLOW: POKAZATX, KAKIE KATALOGI ON SODERVIT.

eSLI WA[ PUTX DLQ ISHODNYH FAJLOW PEREME[AN S UVE NEISPOLXZUEMYMI KATALOGAMI, GDB MOVET INOGDA WYZWATX NEDOUMENIE, NAJDQ NEPRAWILXNYJ WARIANT ISHODNOGO FAJLA. wY MOVETE ISPRAWITX SITUACI@ SLEDU@]IM OBRAZOM:

1.iSPOLXZOWATX directory BEZ PARAMETROW, ^TOBY O^ISTITX PUTX POISKA ISHODNYH FAJLOW.

58

oTLADKA S POMO]X@ GDB

2.iSPOLXZOWATX directory S PODHODQ]IMI ARGUMENTAMI, ^TOBY PEREUSTANOWITX KATALOGI, KOTORYE WY HOTITE WIDETX W PUTI DLQ ISHODNYH FAJLOW. wY MOVETE DOBAWITX WSE KATALOGI ODNOJ KOMANDOJ.

7.4 iSHODNYJ TEKST I MA[INNYJ KOD

wY MOVETE ISPOLXZOWATX KOMANDU info line, ^TOBY OTOBRAZITX cTROKI ISHODNOGO TEKSTA W PROGRAMMNYE ADRESA (I NAOBOROT), I KOMANDU disassemble, ^TOBY WYWESTI DIAPAZON ADRESOW W WIDE MA[INNYH INSTRUKCIJ. pRI ZAPUSKE W REVIME gnu Emacs, KOMANDA info line WYWODIT STRELKU, UKAZYWA@]U@ NA ZADANNU@ STROKU. tAKVE info line WYWODIT ADRESA KAK W SIMWOLXNOJ FORME, TAK I W [ESTNADCATERI^NOJ.

info line UKAZ-STR

wYWODIT NA^ALXNYJ I KONE^NYJ ADRESA SKOMPILIROWANNOGO KODA, SOOTWETSTWU- @]EGO STROKE ISHODNOGO TEKSTA UKAZ-STR. wY MOVETE OPREDELITX STROKI ISHODNOGO TEKSTA L@BYM SPOSOBOM, WOSPRINIMAEMYM KOMANDOJ list (SM. rAZDEL 7.1 [wYWOD STROK ISHODNOGO TEKSTA], S. 55).

nAPRIMER, MY MOVEM ISPOLXZOWATX info line DLQ OPREDELENIQ POLOVENIQ OB_EKTNOGO KODA PERWOJ STROKI FUNKCII m4_changequote:

(gdb) info line m4_changequote

Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.

mY TAKVE MOVEM ZAPROSITX (ISPOLXZUQ *ADRES KAK FORMU ZADANIQ UKAZ-STR), KAKAQ STROKA ISHODNOGO TEKSTA SOOTWETSTWUET OPREDELENNOMU ADRESU:

(gdb) info line *0x63ff

Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.

pOSLE info line, ADRES, ISPOLXZUEMYJ PO UMOL^ANI@ DLQ KOMANDY x, MENQETSQ NA NA- ^ALXNYJ ADRES STROKI, TAK ^TO `x/i' DOSTATO^NO DLQ NA^ALA ISSLEDOWANIQ MA[INNOGO KODA (SM. rAZDEL 8.5 [iSSLEDOWANIE PAMQTI], S. 65). |TOT ADRES TAKVE SOHRANQETSQ KAK ZNA^ENIE WSPOMOGATELXNOJ PEREMENNOJ $_ (SM. rAZDEL 8.9 [wSPOMOGATELXNYE PEREMENNYE], S. 73).

disassemble

|TA SPECIALIZIROWANNAQ KOMANDA SLUVIT DLQ DAMPA DIAPAZONA PAMQTI W WIDE MA[INNYH INSTRUKCIJ. dIAPAZONOM PAMQTI PO UMOL^ANI@ QWLQETSQ FUNKCIQ, W KOTOROJ NAHODITSQ S^ET^IK PROGRAMMY W WYBRANNOM KADRE. oDINO^NYM PARAMETROM \TOJ KOMANDY QWLQETSQ ZNA^ENIE S^ET^IKA PROGRAMMY; GDB WYWODIT DAMP FUNKCII, KOTOROJ PRINADLEVIT UKAZANNYJ ADRES. dWA PARAMETRA OPREDELQ@T DIAPAZON ADRESOW DLQ DAMPA (PERWYJ WKL@^AETSQ, WTOROJ ISKL@^AETSQ).

sLEDU@]IJ PRIMER POKAZYWAET REZULXTAT DISASSEMBLIROWANIQ DIAPAZONA ADRESOW KODA

HP PA-RISC 2.0:

(gdb) disas 0x32c4 0x32e4

Dump of assembler code from 0x32c4 to 0x32e4:

0x32c4 <main+204>:

addil 0,dp

0x32c8 <main+208>:

ldw 0x22c(sr0,r1),r26

0x32cc <main+212>:

ldil 0x3000,r31

0x32d0 <main+216>:

ble 0x3f8(sr4,r31)

0x32d4 <main+220>:

ldo 0(r31),rp

0x32d8 <main+224>:

addil -0x800,dp

0x32dc <main+228>:

ldo 0x588(r1),r26

0x32e0 <main+232>:

ldil 0x3000,r31

End of assembler dump.

 

gLAWA 7: iSSLEDOWANIE ISHODNYH FAJLOW

59

nEKOTORYE ARHITEKTURY IME@T NESKOLXKO [IROKO ISPOLXZUEMYH NABOROW MNEMONIK INSTRUKCIJ ILI DRUGOJ SINTAKSIS.

set disassembly-flavor NABOR-INSTRUKCIJ

wYBRATX NABOR INSTRUKCIJ DLQ ISPOLXZOWANIQ PRI DISASSEMBLIROWANII PROGRAMMY KOMANDAMI disassemble I x/i.

w NASTOQ]EE WREMQ, \TA KOMANDA OPREDELENA TOLXKO DLQ Intel x86. wY MOVETE USTANOWITX NABOR-INSTRUKCIJ W intel ILI att. pO UMOL^ANI@ USTANOWLENO att, DIALEKT AT&T ISPOLXZUETSQ PO UMOL^ANI@ ASSEMBLERAMI Unix NA ARHITEKTURAH, BAZIRU@]IHSQ NA x86.

60

oTLADKA S POMO]X@ GDB

gLAWA 8: iSSLEDOWANIE DANNYH

61

8 iSSLEDOWANIE DANNYH

dLQ ISSLEDOWANIQ DANNYH W WA[EJ PROGRAMME OBY^NO ISPOLXZUETSQ KOMANDA print (SOKRA]ENNO p) ILI EE SINONIM inspect. oNA WY^ISLQET I WYWODIT ZNA^ENIE WYRAVENIQ, ZAPISANNOGO NA TOM VE QZYKE, ^TO I WA[A PROGRAMMA (SM. gLAWA 9 [iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI], S. 77).

print WYRAV print /f WYRAV

WYRAV QWLQETSQ WYRAVENIEM (NA ISHODNOM QZYKE). pO UMOL^ANI@, ZNA^ENIE WYRAV WYWODITSQ W FORMATE, SOOTWETSTWU@]EM EGO TIPU DANNYH; WY MOVETE WYBRATX DRUGOJ FORMAT, UKAZAW `/f ', GDE f|BUKWA, OPREDELQ@]AQ FORMAT; SMOTRITE rAZDEL 8.4 [fORMATY WYWODA], S. 64.

print

print /f eSLI WY OPUSTITE WYRAV, GDB OTOBRAVAET POSLEDNEE ZNA^ENIE SNOWA (IZ ISTORII ZNA^ENIJ; SM. rAZDEL 8.8 [iSTORIQ ZNA^ENIJ], S. 72). |TO PREDOSTAWLQET WAM UDOBNYJ SPOSOB IZU^ITX TO VE SAMOE ZNA^ENIE W DRUGOM FORMATE.

kOMANDA x POZWOLQET ISSLEDOWATX DANNYE NA BOLEE NIZKOM UROWNE. oNA ISSLEDUET DANNYE W PAMQTI PO UKAZANNOMU ADRESU I WYWODIT IH W UKAZANNOM FORMATE. sM. rAZDEL 8.5 [iSSLEDOWANIE PAMQTI], S. 65.

eSLI WAS INTERESUET INFORMACIQ O TIPAH ILI O TOM, KAK OB_QWLENY POLQ STRUKTURY ILI KLASSA, ISPOLXZUJTE KOMANDU ptype WYRAV WMESTO print. sM. gLAWA 10 [iSSLEDOWANIE TABLICY SIMWOLOW], S. 97.

8.1 wYRAVENIQ

print I MNOGIE DRUGIE KOMANDY GDB DOPUSKA@T W KA^ESTWE PARAMETRA WYRAVENIE I WY^ISLQ@T EGO ZNA^ENIE. w WYRAVENII GDB DOPUSTIMO ISPOLXZOWANIE L@BOGO TIPA KONSTANT, PEREMENNYH ILI OPERATOROW, OPREDELENNYH W ISPOLXZUEMOM WAMI QZYKE PROGRAMMIROWANIQ, WKL@^AQ USLOWNYE WYRAVENIQ, WYZOWY FUNKCIJ, PRIWEDENIE TIPOW I STROKOWYE POSTOQNNYE. k SOVALENI@, ISKL@^ENIEM QWLQ@TSQ SIMWOLY, OPREDELENNYE KOMANDAMI PREPROCESSORA #define.

GDB PODDERVIWAET KONSTANTY-MASSIWY W WYRAVENIQH, WWEDENNYH POLXZOWATELEM. sINTAKSIS SLEDU@]IJ: {\LEMENT, \LEMENT. . .}. nAPRIMER, WY MOVETE ISPOLXZOWATX KOMANDU print {1, 2, 3}, ^TOBY SOZDATX W PAMQTI MASSIW, KOTORYJ BUDET DOSTUPEN W PROGRAMME TAK VE, KAK WYDELENNYJ FUNKCIEJ malloc.

pO PRI^INE [IROKOGO RASPROSTRANENIQ sI, BOLX[INSTWO WYRAVENIJ W PRIMERAH \TOGO RUKOWODSTWA NAPISANY NA sI. sM. gLAWA 9 [iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI], S. 77, DLQ INFORMACII OB ISPOLXZOWANII WYRAVENIJ W DRUGIH QZYKAH.

w \TOM RAZDELE MY OBSUVDAEM OPERATORY, KOTORYE WY MOVETE ISPOLXZOWATX W WYRAVENIQH GDB NEZAWISIMO OT ISPOLXZUEMOGO WAMI QZYKA PROGRAMMIROWANIQ.

pRIWEDENIQ TIPOW PODDERVIWAETSQ WO WSEH QZYKAH, A NE TOLXKO W sI, TAK KAK BYWAET O^ENX POLEZNO PREOBRAZOWATX ^ISLO W UKAZATELX, ^TOBY ISSLEDOWATX STRUKTURU, RASPOLOVENNU@ PO \TOMU ADRESU W PAMQTI.

GDB PODDERVIWAET \TI OPERATORY, W DOPOLNENII K SLEDU@]IM, QWLQ@]IMISQ OB]IMI DLQ QZYKOW PROGRAMMIROWANIQ:

@`@' QWLQETSQ BINARNYM OPERATOROM, POZWOLQ@]IM RASSMATRIWATX OBLASTI PAMQTI KAK MASSIWY. sM. rAZDEL 8.3 [iSSKUSTWENNYE MASSIWY], S. 63, DLQ DOPOLNITELXNOJ INFORMACII.

::`::' POZWOLQET WAM UKAZYWATX PEREMENNU@ W TERMINAH FAJLA ILI FUNKCII, GDE ONA OPREDELENA. sM. rAZDEL 8.2 [pEREMENNYE PROGRAMMY], S. 62.

62

oTLADKA S POMO]X@ GDB

{TIP} ADRES

sSYLAETSQ NA OB_EKT TIPA TIP, HRANQ]IJSQ W PAMQTI PO ADRESU ADRES. aDRES MOVET BYTX L@BYM WYRAVENIEM, ZNA^ENIEM KOTOROGO QWLQETSQ CELOE ^ISLO ILI UKAZATELX (NO WOKRUG BINARNYH OPERATOROW, TAKVE KAK I WOKRUG OPERATORA PRIWEDENIQ TIPA, TREBU@TSQ SKOBKI). |TA KONSTRUKCIQ DOPUSTIMA, NEZAWISIMO OT TOGO, KAKOGO TIPA DANNYE PREDPOLOVITELXNO RASPOLOVENY PO ADRESU.

8.2 pEREMENNYE PROGRAMMY

~A]E WSEGO W KA^ESTWE WYRAVENIQ ISPOLXZUETSQ IMQ PEREMENNOJ WA[EJ PROGRAMMY.

pEREMENNYE W WYRAVENIQH TRAKTU@TSQ W KONTEKSTE WYBRANNOGO KADRA STEKA (SM. rAZDEL 6.3 [wYBOR KADRA STEKA], S. 52); ONI MOGUT BYTX LIBO

GLOBALXNYMI (ILI STATI^ESKIMI)

LIBO

WIDIMYMI IZ TO^KI WYPOLNENIQ W DANNOM KADRE, W SOOTWETSTWII S PRAWILAMI OPREDELENIQ OBLASTI WIDIMOSTI QZYKA PROGRAMMIROWANIQ.

|TO OZNA^AET, ^TO W FUNKCII

foo (a) int a;

{

bar (a);

{

int b = test (); bar (b);

}

}

WY MOVETE ISSLEDOWATX I ISPOLXZOWATX PEREMENNU@ a WSQKIJ RAZ, KOGDA WA[A PROGRAMMA WYPOLNQETSQ W PREDELAH FUNKCII foo, NO WY MOVETE ISPOLXZOWATX ILI ISSLEDOWATX PEREMENNU@ b TOLXKO TOGDA, KOGDA WA[A PROGRAMMA WYPOLNQETSQ WNUTRI BLOKA, W KOTOROM ONA OB_QWLENA.

eSTX ISKL@^ENIE: WY MOVETE SSYLATXSQ NA PEREMENNU@ ILI FUNKCI@, OBLASTX@ WIDIMOSTI KOTOROJ QWLQETSQ EDINSTWENNYJ ISHODNYJ FAJL, DAVE ESLI TO^KA TEKU]EGO WYPOLNENIQ W NEM NE NAHODITSQ. dOPUSKAETSQ SU]ESTWOWANIE NESKOLXKIH PEREMENNYH ILI FUNKCIJ S ODINAKOWYM IMENEM (W RAZLI^NYH ISHODNYH FAJLAH). eSLI \TO TAK, OBRA]E- NIE K \TOMU IMENI PRIWODIT K NEPREDSKAZUEMYM REZULXTATAM. eSLI HOTITE, WY MOVETE UKAZATX STATI^ESKU@ PEREMENNU@ W KONKRETNOJ FUNKCII ILI W FAJLE, ISPOLXZUQ DWOJNOE DWOETO^IE:

FAJL::PEREMENNAQ

FUNKCIQ::PEREMENNAQ

zDESX FAJL ILI FUNKCIQ|NAZWANIE KONTEKSTA DLQ STATI^ESKOJ PEREMENNOJ. w PERWOM SLU^AE WY MOVETE ISPOLXZOWATX KAWY^KI, ^TOBY GDB RASSMATRIWAL IMQ FAJLA KAK ODNO SLOWO; NAPRIMER, ^TOBY WYWESTI GLOBALXNOE ZNA^ENIE PEREMENNOJ x, OPREDELENNOJ W `f2.c':

(gdb) p 'f2.c'::x

tAKOE ISPOLXZOWANIE `::' KRAJNE REDKO KONFLIKTUET S POHOVIM ISPOLXZOWANIEM TOJ VE ZAPISI W sI++. GDB TAKVE PODDERVIWAET ISPOLXZOWANIE OPERATORA OPREDELENIQ OBLASTI WIDIMOSTI sI++ W WYRAVENIQH.

pREDUPREVDENIE: w NEKOTORYH SLU^AQH, W OPREDELENNOJ TO^KE FUNKCII (SRAZU POSLE WHODA W NOWU@ OBLASTX WIDIMOSTI, I NEPOSREDSTWENNO PERED WYHODOM IZ NEE) MOVET POKAZATXSQ, ^TO LOKALXNAQ PEREMENNAQ IMEET NEWERNOE ZNA^ENIE.

gLAWA 8: iSSLEDOWANIE DANNYH

63

wY MOVETE STOLKNUTXSQ S \TOJ PROBLEMOJ PRI PO[AGOWOM WYPOLNENII PO ODNOJ MA[INNOJ INSTRUKCII. oNA WOZNIKAET IZ-ZA TOGO, ^TO NA BOLX[INSTWE MA[IN PROCEDURA USTANOWKI KADRA STEKA (WKL@^AQ OPREDELENIQ LOKALXNYH PEREMENNYH) ZANIMAET BOLEE ODNOJ INSTRUKCII; ESLI WY PROIZWODITE PO[AGOWOE WYPOLNENIE PO ODNOJ MA[INNOJ INSTRUKCII, MOVET POKAZATXSQ, ^TO PEREMENNAQ IMEET NEWERNOE ZNA^ENIE, POKA KADR STEKA NE BUDET POLNOSTX@ POSTROEN. pRI WYHODE, DLQ UNI^TOVENIQ KADRA STEKA OBY^NO TAKVE TREBUETSQ BOLEE ODNOJ INSTRUKCII; POSLE NA^ALA PO[AGOWOGO WYPOLNENIQ \TOJ GRUPPY INSTRUKCIJ, OPREDELENIQ LOKALXNYH PEREMENNYH MOGUT PROPASTX.

|TO TAKVE MOVET SLU^ITXSQ, KOGDA KOMPILQTOR DELAET ZNA^ITELXNU@ OPTIMIZACI@. ~TOBY BYTX UWERENNYM, ^TO WY WSEGDA WIDITE TO^NYE ZNA^ENIQ, OTKL@^ITE WS@ OPTIMIZACI@ PRI KOMPILQCII.

dRUGOJ WOZMOVNYJ \FFEKT OPTIMIZACII KOMPILQTORA ZAKL@^AETSQ W UNI^TOVENII NEISPOLXZUEMYH PEREMENNYH, ILI W PRISWOENII PEREMENNYH REGISTRAM (A NE ADRESAM PAMQTI). w ZAWISIMOSTI OT PODDERVKI TAKIH SITUACIJ, PREDOSTAWLQEMOJ FORMATOM OTLADO^NOJ INFORMACII, KOTORYJ ISPOLXZUET KOMPILQTOR, GDB MOVET NE WYWESTI ZNA^ENIQ TAKIH LOKALXNYH PEREMENNYH. eSLI \TO PROISHODIT, GDB WYWEDET SOOB]ENIE, PODOBNOE \TOMU:

No symbol "foo" in current context.

dLQ RE[ENIQ TAKIH PROBLEM, LIBO PEREKOMPILIRUJTE PROGRAMMU BEZ OPTIMIZACII, ILI ISPOLXZUJTE DRUGOJ FORMAT OTLADO^NOJ INFORMACII, ESLI KOMPILQTOR PODDERVIWAET NESKOLXKO TAKIH FORMATOW. nAPRIMER GCC, KOMPILQTOR gnu sI/sI++, OBY^NO PODDERVIWAET KL@^ `-gstabs'. `-gstabs' SOZDAET OTLADO^NU@ INFORMACI@ W FORMATE, QWLQ@]IMSQ RAZWITIEM TAKIH FORMATOW, KAK COFF. u WAS MOVET BYTX WOZMOVNOSTX ISPOLXZOWATX DWARF-2 (`-gdwarf-2'), KOTORYJ TOVE QWLQETSQ \FFEKTIWNOJ FORMOJ PREDSTAWLENIQ OTLADO^NOJ INFORMACII. sMOTRITE RAZDEL \oPCII DLQ OTLADKI WA[EJ PROGRAMMY ILI gnu CC" W iSPOLXZOWANIE gnu CC, DLQ DOPOLNITELXNOJ INFORMACII.

8.3 iSKUSSTWENNYE MASSIWY

~ASTO BYWAET POLEZNYM WYWESTI NESKOLXKO OB_EKTOW ODNOGO TIPA, RASPOLOVENNYH W PAMQTI POSLEDOWATELXNO; ^ASTX MASSIWA ILI DINAMI^ESKIJ MASSIW, DLQ KOTOROGO W PROGRAMME SU]ESTWUET TOLXKO UKAZATELX.

wY MOVETE \TO SDELATX, OBRA]AQSX K NEPRERYWNOMU U^ASTKU PAMQTI KAK K ISKUSSTWENNOMU MASSIWU, ISPOLXZUQ BINARNYJ OPERATOR `@'. lEWYM OPERANDOM DLQ `@' DOLVEN BYTX PERWYJ \LEMENT VELAEMOGO MASSIWA, I ON DOLVEN BYTX INDIWIDUALXNYM OB_EKTOM. pRAWYM OPERANDOM DOLVNA BYTX DLINA MASSIWA. rEZULXTATOM OPERACII BUDET MASSIW, WSE \LEMENTY KOTOROGO IME@T TOT VE TIP, ^TO I LEWYJ ARGUMENT. pERWYM \LEMENTOM MASSIWA QWLQETSQ LEWYJ ARGUMENT; WTOROJ \LEMENT FORMIRUETSQ IZ BAJTOW PAMQTI, NEPOSREDSTWENNO SLEDU@- ]IH ZA BAJTAMI, SODERVA]IMI PERWYJ \LEMENT, I TAK DALEE. nAPRIMER, ESLI W PROGRAMME ESTX STROKA

int *array = (int *) malloc (len * sizeof (int));

TO WY MOVETE WYWESTI SODERVIMOE array S POMO]X@

p *array@len

lEWYJ OPERAND OPERACII `@' DOLVEN NAHODITXSQ W PAMQTI. zNA^ENIQ MASSIWOW, POLU- ^ENNYH OPERACIEJ `@', PRI INDESKACII WEDUT SEBQ TO^NO TAK VE, KAK I DRUGIE MASSIWY, I PRIWODQTSQ K UKAZATELQM PRI ISPOLXZOWANII W WYRAVENIQH. iSKUSSTWENNYE MASSIWY ^A]E WSEGO POQWLQ@TSQ W WYRAVENIQH ^EREZ ISTORI@ ZNA^ENIJ (SM. rAZDEL 8.8 [iSTORIQ ZNA^ENIJ], S. 72), POSLE WYWODA ODNOGO IZ NIH.

dRUGOJ SPOSOB SOZDANIQ ISKUSSTWENNOGO MASSIWA|ISPOLXZOWANIE PRIWEDENIQ TIPOW. oNO ZANOWO INTERPRETIRUET ZNA^ENIE TAK, KAK ESLI BY ONO BYLO MASSIWOM. zNA^ENIE NE OBQZANO NAHODITXSQ W PAMQTI.

64

oTLADKA S POMO]X@ GDB

(gdb) p/x (short[2])0x12345678 $1 = {0x1234, 0x5678}

eSLI WY OPUSKAETE DLINU MASSIWA (KAK W `(TIP[])ZNA^ENIE'), GDB DLQ UDOBSTWA WY^ISLQET EGO RAZMER DLQ ZAPOLNENIQ ZNA^ENIQMI (KAK `sizeof(ZNA^ENIE)/sizeof(TIP)':

(gdb) p/x (short[])0x12345678 $2 = {0x1234, 0x5678}

iNOGDA MEHANIZMA ISKUSSTWENNYH MASSIWOW BYWAET NEDOSTATO^NO; W SRAWNITELXNO SLOVNYH STRUKTURAH DANNYH, INTERESU@]IE NAS \LEMENTY MOGUT NE BYTX SMEVNYMI| NAPRIMER, ESLI WAS INTERESU@T ZNA^ENIQ UKAZATELEJ W MASSIWE. oDNO IZ POLEZNYH RE[ENIJ \TOJ PROBLEMY|ISPOLXZOWANIE WSPOMOGATELXNOJ PEREMENNOJ (SM. rAZDEL 8.9 [wSPOMOGATELXNYE PEREMENNYE], S. 73) W KA^ESTWE S^ET^IKA W WYRAVENII, WYWODQ]EM PERWOE INTERESU@]EE NAS ZNA^ENIE, A ZATEM POWTORQTX \TO WYRAVENIE NAVATIEM hRETi. pREDPOLOVIM, NAPRIMER, U WAS ESTX MASSIW dtab UKAZATELEJ NA STRUKTURY, I WAS INTERESU@T ZNA^ENIQ POLEJ fv W KAVDOJ STRUKTURE. nIVE PRIWEDEN PRIMER WA[IH WOZMOVNYH DEJSTWIJ:

set $i = 0

p dtab[$i++]->fv

hRETi hRETi

...

8.4 fORMATY WYWODA

pO UMOL^ANI@, GDB PE^ATAET ZNA^ENIE W SOOTWETSTWII S EGO TIPOM. |TO NE WSEGDA OTWE^AET WA[EMU VELANI@. nAPRIMER, WY MOVETE ZAHOTETX WYWESTI ^ISLO W [ESTNADCATERI^NOJ ZAPISI, ILI UKAZATELX W DESQTI^NOJ. iLI WY MOVETE ZAHOTETX PROSMOTRETX DANNYE PO NEKOTOROMU ADRESU W PAMQTI W WIDE STROKI SIMWOLOW ILI W WIDE INSTRUKCIJ. dLQ \TOGO, PRI WYWODE ZNA^ENIQ UKAVITE FORMAT WYWODA.

pROSTEJ[IM PRIMENENIEM FORMATOW WYWODA QWLQETSQ FORMATIROWANIE WYWODA UVE WY- ^ISLENNOGO WYRAVENIQ. |TO OSU]ESTWLQETSQ PUTEM NA^ALA PARAMETROW KOMANDY print S KOSOJ ^ERTY I SIMWOLA FORMATA. pODDERVIWA@TSQ SLEDU@]IE SIMWOLY FORMATA:

xrASSMATRIWATX BITY ZNA^ENIQ KAK CELOE, I WYWESTI CELOE W [ESTNADCATERI^- NOM WIDE.

dwYWESTI KAK DESQTI^NOE CELOE SO ZNAKOM.

uwYWESTI KAK DESQTI^NOE CELOE BEZ ZNAKA.

owYWESTI KAK WOSXMERI^NOE CELOE.

twYWESTI KAK CELOE W DWOI^NOM WIDE. bUKWA `t' OZNA^AET \two".1

awYWESTI W WIDE ADRESA, KAK ABSOL@TNOGO W [ESTNADCATERI^NOJ ZAPISI, TAK I W WIDE SME]ENIQ OT BLIVAJ[EGO PRED[ESTWU@]EGO SIMWOLA. wY MOVETE ISPOLXZOWATX \TOT FORMAT DLQ TOGO, ^TOBY OPREDELITX, GDE (W KAKOJ FUNKCII) RASPOLOVEN KAKOJ-LIBO NEIZWESTNYJ ADRES:

(gdb) p/a 0x54320

$3 = 0x54320 <_initialize_vx+396>

crASSMATRIWATX KAK CELOE I WYWESTI W WIDE STROKOWOJ POSTOQNNOJ.

frASSMATRIWATX BITY ZNA^ENIQ KAK ^ISLO S PLAWA@]EJ TO^KOJ I WYWESTI S ISPOLXZOWANIEM OBY^NOGO SINTAKSISA DLQ ^ISEL S PLAWA@]EJ TO^KOJ.

1 `b' NE MOVET BYTX ISPOLXZOWANO, POTOMU ^TO \TI SIMWOLY FORMATA TAKVE ISPOLXZU@TSQ S KOMANDOJ x, GDE `b' OZNA^AET \byte"; SMOTRITE rAZDEL 8.5 [iSSLEDOWANIE PAMQTI], S. 65.

gLAWA 8: iSSLEDOWANIE DANNYH

65

nAPRIMER, ^TOBY WYWESTI S^ET^IK PROGRAMMY W [ESTNADCATERI^NOM WIDE (SM. rAZDEL 8.10 [rEGISTRY], S. 74), WWEDITE

p/x $pc

oBRATITE WNIMANIE, ^TO PERED KOSOJ ^ERTOJ NE TREBUETSQ PROBELA, POTOMU ^TO IMENA KOMAND W GDB NE MOGUT SODERVATX KOSU@ ^ERTU.

~TOBY WYWESTI POSLEDNEE ZNA^ENIE IZ ISTORII ZNA^ENIJ W DRUGOM FORMATE, WY MOVETE WOSPOLXZOWATXSQ KOMANDOJ print LI[X S UKAZANIEM FORMATA I BEZ WYRAVENIQ. nAPRIMER, `p/x' WYWEDET POSLEDNEE ZNA^ENIE W [ESTNADCATERI^NOJ FORME.

8.5 iSSLEDOWANIE PAMQTI

wY MOVETE ISPOLXZOWATX KOMANDU x (OT SLOWA \examine") DLQ ISSLEDOWANIQ PAMQTI W ODNOM IZ NESKOLXKIH FORMATOW, NEZAWISIMO OT TIPOW DANNYH WA[EJ PROGRAMMY.

x/nfu ADRES

xADRES

xdLQ ISSLEDOWANIQ PAMQTI ISPOLXZUJTE KOMANDU x.

n, f I u|NEOBQZATELXNYE PARAMETRY, OPREDELQ@]IE, SKOLXKO PAMQTI OTOBRAZITX I W KAKOM FORMATE; ADRES|\TO WYRAVENIE, ZADA@]EE ADRES, S KOTOROGO WY HOTITE NA^ATX OTOBRAVENIE PAMQTI. eSLI WY ISPOLXZUETE ZNA^ENIQ PO UMOL^ANI@ DLQ nfu, TO WAM NE NUVNO WWODITX KOSU@ ^ERTU `/'. nEKOTORYE KOMANDY USTANAWLIWA@T UDOBNYE ZNA^ENIQ PO UMOL^ANI@ DLQ ADRESA.

n, S^ET^IK POWTORENIJ

s^ET^IK POWTORENIJ QWLQETSQ DESQTI^NYM CELYM ^ISLOM; PO UMOL^ANI@ 1. oN OPREDELQET, SKOLXKO PAMQTI OTOBRAZITX (S^ITAQ W EDINICAH u).

f, FORMAT OTOBRAVENIQ

fORMAT OTOBRAVENIQ|\TO ODIN IZ FORMATOW, ISPOLXZUEMYH KOMANDOJ print, `s' (STROKA, OKAN^IWA@]AQSQ NULEM), ILI `i' (MA[INNAQ INSTRUKCIQ). pERWONA- ^ALXNO, ZNA^ENIEM PO UMOL^ANI@ USTANOWLENO `x' ([ESTNADCATERI^NAQ FORMA). zNA^ENIE PO UMOL^ANI@ IZMENQETSQ KAVDYJ RAZ, KOGDA WY ISPOLXZUETE LIBO x,

LIBO print.

u, RAZMER EDINICY IZMERENIJ

rAZMER EDINICY IZMERENIJ MOVET BYTX ODNIM IZ

bbAJTY.

hpOLUSLOWA (DWA BAJTA).

wsLOWA (^ETYRE BAJTA). |TO PERWONA^ALXNOE ZNA^ENIE PO UMOL^ANI@.

gdLINNYE SLOWA (WOSEMX BAJT).

kAVDYJ RAZ, KOGDA WY OPREDELQETE RAZMER EDINICY IZMERENIJ KOMANDOJ x, \TOT RAZMER STANOWITSQ RAZMEROM PO UMOL^ANI@ PRI POSLEDU@]EM ISPOLXZOWANII x. (dLQ FORMATOW `s' I `i', RAZMER EDINICY IZMERENIJ IGNORIRUETSQ I OBY^NO NE PI[ETSQ.)

ADRES, NA^ALXNYJ ADRES OTOBRAVENIQ

ADRES|\TO ADRES, S KOTOROGO WY HOTITE, ^TOBY GDB NA^INAL OTOBRAVENIE PAMQTI. zNA^ENIE WYRAVENIQ NE OBQZANO DOLVNO BYTX UKAZATELEM (HOTQ MOVET IM BYTX); ONO WSEGDA INTERPRETIRUETSQ KAK CELYJ ADRES BAJTA W PAMQTI. sM. rAZDEL 8.1 [wYRAVENIQ], S. 61, DLQ DOPOLNITELXNOJ INFORMACII O WYRAVENIQH. zNA^ENIEM PO UMOL^ANI@ DLQ ADRESA OBY^NO QWLQETSQ ADRES, SLEDU@]IJ ZA

66

oTLADKA S POMO]X@ GDB

POSLEDNIM IZU^ENNYM ADRESOM, NO NEKOTORYE DRUGIE KOMANDY TAKVE USTANAWLIWA@T \TO ZNA^ENIE: info breakpoints (W ADRES POSLEDNEJ WYWEDENNOJ TO^KI OSTANOWA), info line (W NA^ALXNYJ ADRES STROKI) I print (ESLI WY ISPOLXZUETE \TU KOMANDU DLQ OTOBRAVENIQ ZNA^ENIQ IZ PAMQTI).

nAPRIMER, `x/3uh 0x54320'|ZAPROS NA WYWOD TREH POLUSLOW (h) PAMQTI W FORMATE BEZZNAKOWYH DESQTI^NYH CELYH (`u'), NA^INAQ S ADRESA 0x54320. `x/4xw $sp' WYWODIT ^ETYRE SLOWA (`w') PAMQTI, RASPOLOVENNYE NAD UKAZATELEM STEKA (ZDESX `$sp'; SM. rAZDEL 8.10 [rEGISTRY], S. 74), W [ESTNADCATERI^NOM WIDE (`x').

tAK KAK WSE BUKWY, OBOZNA^A@]IE RAZMER EDINIC IZMERENIQ, OTLI^A@TSQ OT BUKW, OPREDELQ@]IH FORMATY WYWODA, WY NE DOLVNY ZAPOMINATX, FORMAT ILI RAZMER EDINIC IZMERENIJ UKAZYWAETSQ RANX[E; \TO MOVNO DELATX W L@BOM PORQDKE. sPECIFIKACII WYWODA `4xw' I `4wx' OZNA^A@T W TO^NOSTI ODNO I TO VE. (oDNAKO, ^ISLO n DOLVNO BYTX PERWYM; `wx4' NE SRABOTAET.)

hOTQ RAZMER EDINICY IZMERENIQ u IGNORIRUETSQ DLQ FORMATOW `s' I `i', TEM NE MENEE WY MOVETE WOSPOLXZOWATXSQ S^ET^IKOM POWTORENIJ n; NAPRIMER, `3i' UKAZYWAET, ^TO WY HOTITE WYWESTI TRI MA[INNYE INSTRUKCII, WKL@^AQ L@BYE OPERANDY. kOMANDA disassemble PREDOSTAWLQET ALXTERNATIWNYJ SPOSOB ISSLEDOWANIQ MA[INNYH INSTRUKCIJ; SMOTRITE rAZDEL 7.4 [iSHODNYJ I MA[INNYJ KOD], S. 58.

wSE ZNA^ENIQ PO UMOL^ANI@ DLQ ARGUMENTOW KOMANDY x RAZRABOTANY TAKIM OBRAZOM, ^TOBY OBLEG^ITX PRODOLVENIE SKANIROWANIQ PAMQTI S MINIMALXNYMI KONKRETIZACIQMI PRI O^EREDNOM ISPOLXZOWANII x. nAPRIMER, POSLE TOGO, KAK WY PROSMOTRELI TRI MA- [INNYE INSTRUKCII S POMO]X@ `x/3i ADRES', WY MOVETE PROSMOTRETX SLEDU@]IE SEMX, ISPOLXZUQ PROSTO `x/7'. eSLI WY POWTORQETE KOMANDU x NAVATIEM hRETi, ^ISLO POWTORENIJ n OSTAETSQ PREVNIM; DRUGIE PARAMETRY BERUTSQ PO UMOL^ANI@, KAK DLQ POSLEDOWATELXNYH ISPOLXZOWANIJ x.

aDRESA I IH SODERVIMOE, WYWODIMYE KOMANDOJ x, NE SOHRANQ@TSQ W ISTORII ZNA^ENIJ, TAK KAK ONI ME[ALI BY. wMESTO \TOGO, GDB DELAET IH DOSTUPNYMI DLQ POSLEDU@]EGO ISPOLXZOWANIQ W WYRAVENIQH KAK ZNA^ENIQ WSPOMOGATELXNYH PEREMENNYH $_ I $__. pOSLE KOMANDY x, POSLEDNIJ ISSLEDOWANNYJ ADRES DOSTUPEN DLQ ISPOLXZOWANIQ W WYRAVENIQH WO WSPOMOGATELXNOJ PEREMENNOJ $_. sODERVIMOE \TOGO ADRESA, ISSLEDOWANNOE TOLXKO ^TO, DOSTUPNO WO WSPOMOGATELXNOJ PEREMENNOJ $__.

eSLI KOMANDE x ZADAN S^ET^IK POWTORENIJ, ADRES I EGO SODERVIMOE SOHRANQ@TSQ IZ POSLEDNEGO WYWEDENNOGO \LEMENTA PAMQTI; \TO NE TO VE SAMOE, ^TO POSLEDNIJ WYWEDENNYJ ADRES, ESLI W POSLEDNEJ STROKE WYWODA BYLI OTOBRAVENY NESKOLXKO \LEMENTOW.

8.6 aWTOMATI^ESKOE OTOBRAVENIE

eSLI WAM NEOBHODIMO ^ASTO WYWODITX ZNA^ENIE KAKOGO-LIBO WYRAVENIQ (^TOBY UWIDETX, KAK ONO MENQETSQ), WY MOVETE DOBAWITX EGO W SPISOK AWTOMATI^ESKOGO OTOBRAVENIQ, ^TOBY GDB WYWODIL EGO ZNA^ENIE KAVDYJ RAZ PRI OSTANOWKE WA[EJ PROGRAMMY. kAVDOMU WYRAVENI@, DOBAWLENNOMU W SPISOK, PRISWAIWAETSQ IDENTIFIKACIONNYJ NOMER; ^TOBY UDALITX WYRAVENIE IZ SPISKA, WY UKAZYWAETE \TOT NOMER. aWTOMATI^ESKOE OTOBRAVENIE WYGLQDIT SLEDU@]IM OBRAZOM:

2:foo = 38

3:bar[5] = (struct hack *) 0x3804

|TO OTOBRAVENIE POKAZYWAET NOMERA \LEMENTOW, WYRAVENIQ I IH TEKU]IE ZNA^ENIQ. kAK I PRI OTOBRAVENII, ZAPRA[IWAEMOM WRU^NU@ S POMO]X@ x ILI print, WY MOVETE UKAZATX PREDPO^ITAEMYJ FORMAT WYWODA; FAKTI^ESKI, display OPREDELQET, SLEDUET ISPOLXZOWATX print ILI x, W ZAWISIMOSTI OT TOGO, NA SKOLXKO VESTKAQ WA[A SPECIFIKACIQ FORMATA: ISPOLXZUETSQ x, ESLI WY UKAZYWAETE RAZMER \LEMENTA ILI ODIN IZ DWUH FORMATOW (`i' I s), KOTORYE PODDERVIWA@TSQ TOLXKO x; W OSTALXNYH SLU^AQH ISPOLXZUETSQ print.

gLAWA 8: iSSLEDOWANIE DANNYH

67

display WYRAV

dOBAWLQET WYRAVENIE WYRAV K SPISKU WYRAVENIJ, OTOBRAVAEMYH KAVDYJ RAZ, KOGDA WA[A PROGRAMMA OSTANAWLIWAETSQ. sM. rAZDEL 8.1 [wYRAVENIQ], S. 61.

display NE POWTORQETSQ, ESLI WY POWTORNO NAVIMAETE hRETi POSLE EE ISPOLXZOWANIQ.

display/FORMAT WYRAV

eSLI FORMAT OPREDELQET TOLXKO FORMAT WYWODA, A NE RAZMER ILI S^ET^IK POWTORENIJ, WYRAVENIE WYRAV DOBAWLQETSQ W SPISOK AWTOMATI^ESKOGO OTOBRAVENIQ, NO EGO OTOBRAVENIE OSU]ESTWLQETSQ W UKAZANNOM FORMATE FORMAT. sM. rAZDEL 8.4 [fORMATY WYWODA], S. 64.

display/FORMAT ADRES

eSLI FORMATOM QWLQETSQ `i' ILI `s', ILI ON WKL@^AET W SEBQ RAZMER \LEMENTOW ILI IH ^ISLO, WYRAVENIE ADRES DOBAWLQETSQ KAK ADRES PAMQTI DLQ ISSLEDOWANIQ PRI KAVDOJ OSTANOWKE WA[EJ PROGRAMMY. pOD ISSLEDOWANIEM W DANNOM SLU^AE PODRAZUMEWAETSQ WYPOLNENIE `x/FORMAT ADRES'. sM. rAZDEL 8.5 [iSSLEDOWANIE PAMQTI], S. 65.

nAPRIMER, KOMANDA `display/i $pc' MOVET BYTX POLEZNA, ^TOBY PRI KAVDOJ OSTANOWKE WIDETX MA[INNU@ INSTRUKCI@, KOTORAQ BUDET WYPOLNQTXSQ SLEDU@]EJ (`$pc'|\TO OB]EE OBOZNA^ENIE S^ET^IKA PROGRAMMY; SM. rAZDEL 8.10 [rEGISTRY], S. 74).

undisplay NOMERA...

delete display NOMERA...

uDALITX \LEMENTY S NOMERAMI NOMERA IZ SPISKA WYRAVENIJ, PODLEVA]IH OTOBRAVENI@.

undisplay NE POWTORQETSQ PRI POSLEDU@]EM NAVATII hRETi. (iNA^E WY SRAZU POLU^ILI BY SOOB]ENIE OB O[IBKE `No display number ...'.)

disable display NOMERA...

oTKL@^ITX OTOBRAVENIE \LEMENTOW S NOMERAMI NOMERA. oTKL@^ENNYE \LEMENTY NE WYWODQTSQ AWTOMATI^ESKI, NO I NE ZABYWA@TSQ. wPOSLEDSTWII IH MOVNO SNOWA WKL@^ITX.

enable display NOMERA...

wKL@^ITX OTOBRAVENIE \LEMENTOW S NOMERAMI NOMERA. wYRAVENIQ, SOOTWETSTWU@]IE \TIM NOMERAM, SNOWA BUDUT WYWODITXSQ AWTOMATI^ESKI, POKA WY UKAVETE OBRATNOE.

display oTOBRAZITX TEKU]IE ZNA^ENIQ WYRAVENIJ IZ SPISKA, TO^NO TAK VE, KAK \TO PROISHODIT PRI OSTANOWKE WA[EJ PROGRAMMY.

info display

wYWESTI SPISOK WYRAVENIJ, RANEE USTANOWLENNYH DLQ AWTOMATI^ESKOGO OTOBRAVENIQ, KAVDOE S EGO NOMEROM \LEMENTA, NO NE POKAZYWAQ ZNA^ENIJ. sPISOK WKL@^AET OTKL@^ENNYE WYRAVENIQ, S SOOTWETSTWU@]EJ POMETKOJ. oN TAKVE WKL@^AET W SEBQ WYRAVENIQ, KOTORYE NE MOGUT BYTX POKAZANY PRQMO SEJ^AS, POTOMU ^TO OBRA]A@TSQ K AWTOMATI^ESKIM PEREMENNYM, NEDOSTUPNYM W DANNYJ MOMENT.

eSLI OTOBRAVAEMOE WYRAVENIE OBRA]AETSQ K LOKALXNYM PEREMENNYM, ONO NE IMEET SMYSLA WNE TOGO LEKSI^ESKOGO KONTEKSTA, DLQ KOTOROGO ONO USTANAWLIWALOSX. tAKOE WYRAVENIQ OTKL@^AETSQ, KAK TOLXKO WYPOLNENIE WHODIT W KONTEKST, GDE ODNA IZ EGO PEREMENNYH STANOWITSQ NEOPREDELENNOJ. nAPRIMER, ESLI WY DADITE KOMANDU display last_char, NAHODQSX WNUTRI FUNKCII S ARGUMENTOM last_char, GDB BUDET OTOBRAVATX \TOT ARGUMENT, POKA PROGRAMMA OSTANAWLIWAETSQ WNUTRI \TOJ FUNKCII. kAK TOLXKO ONA OSTANOWITSQ GDETO E]E|GDE NET PEREMENNOJ last_char|OTOBRAVENIE BUDET OTKL@^ENO AWTOMATI^ESKI.

68

oTLADKA S POMO]X@ GDB

wY MOVETE SNOWA WKL@^ITX EGO PRI SLEDU@]EJ OSTANOWKE PROGRAMMY TAM, GDE last_char BUDET WNOWX IMETX SMYSL.

8.7 pARAMETRY WYWODA

GDB PREDOSTAWLQET SLEDU@]IE SPOSOBY UPRAWLENIQ WYWODOM MASSIWOW, STRUKTUR I SIMWOLOW.

dANNYE PARAMETRY POLEZNY PRI OTLADKE PROGRAMM NA L@BOM QZYKE:

set print address set print address on

GDB WYWODIT ADRESA PAMQTI, POKAZYWA@]IE POLOVENIE STEKA, STRUKTUR, UKAZATELEJ, TO^EK OSTANOWA, I TAK DALEE, DAVE KOGDA ON OTOBRAVAET TAKVE SODERVIMOE \TIH ADRESOW. zNA^ENIE PO UMOL^ANI@ USTANOWLENO W on. nAPRIMER, WOT KAK WYGLQDIT OTOBRAVENIE KADRA STEKA S USTANOWLENNYM set print address on:

(gdb) f

#0 set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>") at input.c:530

530 if (lquote != def_lquote)

set print address off

nE WYWODITX ADRESA PRI OTOBRAVENII IH SODERVIMOGO. wOT, NAPRIMER, TOT VE KADR STEKA, OTOBRAVENNYJ S USTANOWKOJ set print address off:

(gdb) set print addr off (gdb) f

#0 set_quotes (lq="<<", rq=">>") at input.c:530 530 if (lquote != def_lquote)

wY MOVETE ISPOLXZOWATX `set print address off', ^TOBY UDALITX WSE MA[INNOZAWISIMYE OTOBRAVENIQ IZ INTERFEJSA GDB. nAPRIMER, S print address off, WY DOLVNY POLU^ITX ODINAKOWYJ TEKST DLQ CEPO^EK WYZOWOW NA WSEH MA[INAH, NEZAWISIMO OT TOGO, WKL@^A@T ONI UKAZATELI W KA^ESTWE ARGUMENTOW ILI NET.

show print address

pOKAZATX, DOLVNY WYWODITXSQ ADRESA ILI NET.

pRI WYWODE ADRESA W SIMWOLXNOJ FORME, GDB OBY^NO WYWODIT BLIVAJ[IJ PRED[E- STWU@]IJ SIMWOL PL@S SME]ENIE. eSLI \TOT SIMWOL NE OPREDELQET ADRES ODNOZNA^NO (NAPRIMER, \TO IMQ, OBLASTX@ DEJSTWIQ KOTOROGO QWLQETSQ ODIN ISHODNYJ FAJL), WAM MOVET POTREBOWATXSQ DATX POQSNENIQ. oDIN IZ SPOSOBOW \TO SDELATX|S POMO]X@ info line; NAPRIMER, `info line *0x4537'. aLXTERNATIWNYJ SPOSOB ZAKL@^AETSQ W TOM, ^TOBY GDB WYWODIL IMQ ISHODNOGO FAJLA I NOMER STROKI PRI WYWODE SIMWOLXNOGO ADRESA:

set print symbol-filename on

wELIT GDB WYWODITX IMQ ISHODNOGO FAJLA I NOMER STROKI SIMWOLA W SIMWOLXNOJ FORME ADRESA.

set print symbol-filename off

nE WYWODITX IMQ ISHODNOGO FAJLA I NOMER STROKI SIMWOLA. pRINIMAETSQ PO UMOL^ANI@.

show print symbol-filename

pOKAZATX, BUDET GDB WYWODITX IMQ ISHODNOGO FAJLA I NOMER STROKI W SIMWOLXNOJ FORME ADRESA ILI NET.

gLAWA 8: iSSLEDOWANIE DANNYH

69

dRUGAQ SITUACIQ, W KOTOROJ POLEZNO POKAZYWATX IMENA FAJLOW I NOMERA STROK, WOZNIKAET PRI DISASSEMBLIROWANII KODA; GDB POKAZYWAET WAM NOMER STROKI I ISHODNYJ FAJL, KOTORYE SOOTWETSTWU@T KAVDOJ INSTRUKCII.

wY TAKVE MOVETE ZAHOTETX WIDETX SIMWOLXNU@ FORMU TOLXKO W TOM SLU^AE, ESLI WYWODIMYJ ADRES DOSTATO^NO BLIZOK K BLIVAJ[EMU PRED[ESTWU@]EMU SIMWOLU:

set print max-symbolic-offset MAKS-SME]ENIE

wELIT GDB WYWODITX SIMWOLXNYE FORMY TOLXKO TEH ADRESOW, DLQ KOTORYH SME]ENIE MEVDU BLIVAJ[IM PRED[ESTWU@]IM SIMWOLOM I ADRESOM MENX[E, ^EM MAKS-SME]ENIE. pO UMOL^ANI@ ZNA^ENIE MAKS-SME]ENIE RAWNO 0; W \TOM SLU^AE GDB WSEGDA WYWODIT ADRES W SIMWOLXNOJ FORME, ESLI EMU PRED[ESTWUET HOTX KAKOJ-NIBUDX SIMWOL.

show print max-symbolic-offset

zAPRA[IWAET INFORMACI@ O MAKSIMALXNOM SME]ENII, DLQ KOTOROGO GDB WYWODIT SIMWOLXNU@ FORMU ADRESA.

eSLI U WAS ESTX UKAZATELX, I WY NE ZNAETE, NA ^TO ON UKAZYWAET, POPROBUJTE `set print symbol-filename on'. zATEM WY MOVETE OPREDELITX NAZWANIE I ISHODNYJ FAJL PEREMENNOJ, NA KOTORU@ ON UKAZYWAET, ISPOLXZUQ `p/a UKAZATELX'. |TO INTERPRETIRUET ADRES W SIMWOLXNOJ FORME. nAPRIMER, ZDESX GDB POKAZYWAET, ^TO PEREMENNAQ ptt UKAZYWAET NA DRUGU@ PEREMENNU@ t, OPREDELENNU@ W FAJLE `hi2.c':

(gdb) set print symbol-filename on (gdb) p/a ptt

$4 = 0xe008 <t in hi2.c>

pREDUPREVDENIE: dLQ UKAZATELEJ, UKAZYWA@]IH NA LOKALXNYE PEREMENNYE, `p/a' NE POKAZYWAET SIMWOLXNOE IMQ I IMQ FAJLA, KOTOROMU PRINADLEVIT OB_EKT SSYLKI, DAVE ESLI USTANOWLEN SOOTWETSTWU@]IJ PARAMETR set print.

dRUGIE USTANOWKI UPRAWLQ@T WYWODOM OB_EKTOW RAZLI^NYH TIPOW:

set print array set print array on

sTRUKTURNYJ WYWOD MASSIWOW. |TOT FORMAT UDOBENEE DLQ ^TENIQ, NO ZANIMAET BOLX[E MESTA. pO UMOL^ANI@ OTKL@^ENO.

set print array off

wERNUTXSQ K SVATOMU FORMATU WYWODA MASSIWOW.

show print array

pOKAZATX, KAKOJ FORMAT (SVATYJ ILI STRUKTURNYJ) WYBRAN DLQ OTOBRAVENIQ MASSIWOW.

set print elements ^ISLO-\LEMENTOW

uSTANOWITX OGRANI^ENIE NA KOLI^ESTWO WYWODIMYH GDB \LEMENTOW MASSIWA. eSLI GDB WYWODIT BOLX[OJ MASSIW, WYWOD PRERYWAETSQ POSLE TOGO, KAK BUDET WYWEDENO USTANOWLENNOE KOMANDOJ set print elements ^ISLO \LEMENTOW. |TO OGRANI^ENIE TAKVE DEJSTWUET PRI OTOBRAVENII STROK. kOGDA GDB STARTUET, \TOT PREDEL PRINIMAETSQ RAWNYM 200. uSTANOWKA ^ISLO-\LEMENTOW W NOLX OZNA^AET, ^TO WYWOD NE OGRANI^EN.

show print elements

pOKAZATX KOLI^ESTWO \LEMENTOW BOLX[OGO MASSIWA, KOTORYE BUDUT WYWEDENY GDB. eSLI \TO ^ISLO RAWNO 0, WYWOD NE OGRANI^IWAETSQ.

70

oTLADKA S POMO]X@ GDB

set print null-stop

uKAZYWAET GDB PREKRA]ATX WYWOD SIMWOLOW MASSIWA, KAK TOLXKO WSTRETITSQ PERWYJ null. |TO POLEZNO, KOGDA BOLX[IE MASSIWY FAKTI^ESKI SODERVAT TOLXKO KOROTKIE STROKI. pO UMOL^ANI@ OTKL@^ENO.

set print pretty on

wELIT GDB WYWODITX STRUKTURY W FORMATE S OTSTUPAMI, PO ODNOMU \LEMENTU W STROKE, NAPRIMER:

$1 = {

next = 0x0, flags = {

sweet = 1, sour = 1

},

meat = 0x54 "Pork"

}

set print pretty off

uKAZYWAET GDB WYWODITX STRUKTURY W KOMPAKTNOM FORMATE, KAK ZDESX: $1 = {next = 0x0, flags = {sweet = 1, sour = 1}, \

meat = 0x54 "Pork"}

|TOT FORMAT USTANAWLIWAETSQ PO UMOL^ANI@.

show print pretty

pOKAZATX, KAKOJ FORMAT GDB ISPOLXZUET DLQ WYWODA STRUKTUR.

set print sevenbit-strings on

oSU]ESTWLQTX WYWOD, ISPOLXZUQ TOLXKO SEMIBITNYE SIMWOLY; ESLI \TOT PARAMETR USTANOWLEN, GDB OTOBRAVAET L@BYE WOSXMIBITNYE SIMWOLY (W STROKAH ILI SIMWOLXNYH ZNA^ENIQH), ISPOLXZUQ ZAPISX \nnn. |TA USTANOWKA O^ENX UDOBNA, ESLI WY RABOTAETE NA ANGLIJSKOM (ascii) I ISPOLXZUETE STAR[IJ BIT SIMWOLOW KAK MARKER ILI \META"-BIT.

set print sevenbit-strings off

wYWODITX WOSXMIBITNYE SIMWOLY POLNOSTX@. |TO POZWOLQET ISPOLXZOWATX BOLX[EE KOLI^ESTWO MEVDUNARODNYH NABOROW SIMWOLOW, I USTANAWLIWAETSQ PO UMOL^ANI@.

show print sevenbit-strings

pOKAZATX, WYWODIT GDB TOLXKO SEMIBITNYE LITERY ILI NET.

set print union on

wELIT GDB WYWODITX OB_EDINENIQ, SODERVA]IESQ W STRUKTURAH. uSTANAWLIWAETSQ PO UMOL^ANI@.

set print union off

uKAZYWAET GDB NE WYWODITX OB_EDINENIQ, SODERVA]IESQ W STRUKTURAH.

show print union

zAPROSITX GDB, BUDET LI ON WYWODITX OB_EDINENIQ, SODERVA]IESQ W STRUKTURAH.

nAPRIMER, PUSTX DANY OPISANIQ

typedef enum {Tree, Bug} Species;

typedef enum {Big_tree, Acorn, Seedling} Tree_forms; typedef enum {Caterpillar, Cocoon, Butterfly}

Bug_forms;

pOZWOLITX GDB WYBRATX STILX DEKODIROWANIQ POSREDSTWOM IZU^E- NIQ WA[EJ PROGRAMMY.
dEKODIROWANIE OSNOWYWAETSQ NA ALGORITME KODIROWANIQ KOMPILQTORA gnu sI++ (g++). uSTANAWLIWAETSQ PO UMOL^ANI@.
dEKODIROWANIE OSNOWYWAETSQ NA ALGORITME KODIROWANIQ HP ANSI sI++ (aCC).
dEKODIROWANIE OSNOWYWAETSQ NA ALGORITME KODIROWANIQ KOMPILQTO-
RA Lucid sI++ (lcc).
dEKODIROWATX, ISPOLXZUQ ALGORITM IZ C++ Annotated Reference Manual. pREDUPREVDENIE: ODNOJ \TOJ USTANOWKI NEDOSTATO^NO, ^TOBY PROIZWODITX OTLADKU ISPOLNQEMYH PROGRAMM, SGENERIROWANNYH cfront. ~TOBY REALIZOWATX \TO, GDB TREBUET DALXNEJ[IH USOWER- [ENSTWOWANIJ.

gLAWA 8: iSSLEDOWANIE DANNYH

71

struct thing { Species it; union {

Tree_forms tree; Bug_forms bug;

} form; };

struct thing foo = {Tree, {Acorn}};

S USTANOWLENNYM set print union on, KOMANDA `p foo' WYWEDET

$1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}

A S USTANOWLENNYM set print union off, \TA VE KOMANDA WYWEDET $1 = {it = Tree, form = {...}}

sLEDU@]IE USTANOWKI PREDSTAWLQ@T INTERES PRI OTLADKE PROGRAMM NA sI++:

set print demangle set print demangle on

pE^ATATX IDENTIFIKATORY sI++ W IH IZNA^ALXNOJ, A NE W ZAKODIROWANNOJ (\ISKAVENNOJ") FORME, PEREDAWAEMOJ ASSEMBLERU I KOMPONOW]IKU DLQ SBORKI S KONTROLEM TIPA. uSTANOWLENO PO UMOL^ANI@.

show print demangle

pOKAZATX, W ISKAVENNOJ ILI WOSSTANOWLENNOJ FORME WYWODQTSQ IDENTIFIKATORY sI++.

set print asm-demangle set print asm-demangle on

wYWODITX IDENTIFIKATORY sI++ W IH ISHODNOJ FORME, A NE W ISKAVENNOJ, DAVE PRI WYWODE ASSEMBLERNOGO KODA, NAPRIMER PRI DISASSEMBLIROWANII INSTRUKCIJ. pO UMOL^ANI@ OTKL@^ENO.

show print asm-demangle

pOKAZATX, W ZAKODIROWANNOJ ILI WOSSTANOWLENNOJ FORME WYWODQTSQ IMENA sI++ PRI WYWODE KODA ASSEMBLERA.

set demangle-style STILX

wYBRATX ODNU IZ NESKOLXKIH SHEM KODIROWANIQ, ISPOLXZUEMYH RAZLI^NYMI KOMPILQTORAMI DLQ PREDSTAWLENIQ IMEN sI++. pARAMETR STILX MOVET BYTX SLEDU@]IM:

auto

gnu

hp

lucid

arm

72

oTLADKA S POMO]X@ GDB

eSLI WY OPUSTITE STILX, TO UWIDITE SPISOK WOZMOVNYH FORMATOW.

show demangle-style

oTOBRAZITX TEKU]IJ STILX KODIROWANIQ, ISPOLXZUEMYJ DLQ DEKODIROWANIQ SIMWOLOW sI++.

set print object set print object on

pRI OTOBRAVENII UKAZATELQ NA OB_EKT, IDENTIFICIROWATX FAKTI^ESKIJ (PROIZWODNYJ), A NE OB_QWLENNYJ TIP OB_EKTA, ISPOLXZUQ TABLICU WIRTUALXNYH FUNKCIJ.

set print object off

oTOBRAVATX TOLXKO OB_QWLENNYJ TIP OB_EKTA, NE SSYLAQSX NA TABLICU WIRTUALXNYH FUNKCIJ. uSTANAWLIWAETSQ PO UMOL^ANI@.

show print object

pOKAZATX, KAKOJ IZ TIPOW OB_EKTA WYWODITSQ.

set print static-members set print static-members on

wYWODITX STATI^ESKIE ^LENY PRI OTOBRAVENII OB_EKTA sI++. uSTANOWLENO PO UMOL^ANI@.

set print static-members off

nE WYWODITX STATI^ESKIE ^LENY PRI OTOBRAVENII OB_EKTA sI++.

show print static-members

pOKAZATX, WYWODQTSQ STATI^ESKIE ^LENY sI++ ILI NET.

set print vtbl set print vtbl on

oSU]ESTWLQTX STRUKTURNYJ WYWOD TABLIC WIRTUALXNYH FUNKCIJ sI++. pO UMOL^ANI@ OTKL@^ENO. (kOMANDY vtbl NE RABOTA@T DLQ PROGRAMM, SKOMPILIROWANNYH KOMPILQTOROM HP ANSI sI++ (aCC).)

set print vtbl off

nE PROIZWODITX STRUKTURNOGO WYWODA TABLIC WIRTUALXNYH FUNKCIJ sI++.

show print vtbl

pOKAZATX, PROIZWODITSQ STRUKTURNYJ WYWOD TABLIC WIRTUALXNYH FUNKCIJ sI++ ILI NET.

8.8 iSTORIQ ZNA^ENIJ

zNA^ENIQ, WYWEDENNYE KOMANDOJ print, SOHRANQ@TSQ W ISTORII ZNA^ENIJ GDB. |TO POZWOLQET WAM OBRA]ATXSQ K NIM W DRUGIH WYRAVENIQH. zNA^ENIQ SOHRANQ@TSQ, POKA TABLICA SIMWOLOW NE BUDET ZANOWO S^ITANA ILI UNI^TOVENA (NAPRIMER, KOMANDAMI file ILI symbol-file). pRI IZMENENII TABLICY SIMWOLOW, ISTORIQ ZNA^ENIJ UNI^TOVAETSQ, TAK KAK ZNA^ENIQ MOGUT SODERVATX UKAZATELI NA TIPY, OPREDELENNYE W TABLICE SIMWOLOW.

wYWEDENNYM ZNA^ENIQM PRISWAIWA@TSQ NOMERA W ISTORII, PO KOTORYM WY MOVETE NA NIH SSYLATXSQ. |TI NOMERA QWLQ@TSQ POSLEDOWATELXNYMI CELYMI ^ISLAMI, NA^INA@]IMISQ S EDINICY. kOMANDA print POKAZYWAET NOMER W ISTORII, PRISWOENNYJ ZNA^ENI@, WYWODQ PERED NIM `$NOMER = ', GDE NOMER|\TO NOMER W ISTORII.

dLQ OBRA]ENIQ K KAKOMU-LIBO PRED[ESTWU@]EMU ZNA^ENI@, ISPOLXZUJTE `$', ZA KOTORYM SLEDUET NOMER W ISTORII. sPOSOB, KOTORYM print MARKIRUET WYWOD PRODUMAN TAK, ^TOBY NAPOMINATX WAM OB \TOM. pROSTO $ SSYLAETSQ NA SAMOE POSLEDNEE ZNA^ENIE W ISTORII, A $$|NA PREDPOSLEDNEE. $$n SSYLAETSQ NA n-E S KONCA ZNA^ENIE; $$2|ZNA^ENIE, NAHODQ]EESQ PERED $$, $$1 \KWIWALENTNO $$, A $$0 \KWIWALENTNO $.

gLAWA 8: iSSLEDOWANIE DANNYH

73

pREDPOLOVIM, NAPRIMER, WY TOLXKO ^TO WYWELI UKAZATELX NA STRUKTURU I HOTITE POSMOTRETX EE SODERVIMOE. dLQ \TOGO DOSTATO^NO WWESTI

p *$

eSLI U WAS ESTX CEPO^KA STRUKTUR, GDE KOMPONENTA next UKAZYWAET NA SLEDU@]U@, WY MOVETE WYWESTI SODERVIMOE SLEDU@]EJ STRUKTURY TAK:

p *$.next

wY MOVETE WYWODITX POSLEDOWATELXNYE ZWENXQ W CEPO^KE POWTORQQ \TU KOMANDU. |TO MOVNO SDELATX PROSTYM NAVATIEM hRETi.

oBRATITE WNIMANIE, ^TO W ISTORI@ ZAPISYWA@TSQ ZNA^ENIQ, A NE WYRAVENIQ. eSLI ZNA^ENIE x RAWNO 4, I WY NABERETE:

print x set x=5

TO ZNA^ENIE, ZAPISANNOE W ISTORI@ ZNA^ENIJ KOMANDOJ print, BUDET PO-PREVNEMU RAWNO 4, HOTQ ZNA^ENIE x IZMENILOSX.

show values

wYWESTI IZ ISTORII POSLEDNIE DESQTX ZNA^ENIJ, S IH NOMERAMI. |TO POHOVE NA KOMANDU `p $$9', POWTORENNU@ DESQTX RAZ, ZA ISKL@^ENIEM TOGO, ^TO show values NE IZMENQET ISTORI@.

show values n

wYWESTI DESQTX ZNA^ENIJ IZ ISTORII, RASPOLOVENNYH WOKRUG \LEMENTA S NOMEROM n.

show values +

wYWESTI DESQTX ZNA^ENIJ IZ ISTORII, SLEDU@]IH SRAZU POSLE POSLEDNEGO WYWEDENNOGO ZNA^ENIQ. eSLI DOSTUPNYH ZNA^ENIJ BOLX[E NET, show values + NE WYWODIT NI^EGO.

nAVATIE hRETi DLQ POWTORA show values n DEJSTWUET TO^NO TAK VE, KAK `show values +'.

8.9 wSPOMOGATELXNYE PEREMENNYE

GDB PREDOSTAWLQET WSPOMOGATELXNYE PEREMENNYE, KOTORYE WY MOVETE W NEM ISPOLXZOWATX, ^TOBY SOHRANITX ZNA^ENIE I OBRATITXSQ K NEMU POZVE. |TI PEREMENNYE SU]ESTWU@T TOLXKO W GDB; ONI NE QWLQ@TSQ ^ASTX@ WA[EJ PROGRAMMY I USTANOWKA WSPOMOGATELXNOJ PEREMENNOJ NE OKAZYWAET NEPOSREDSTWENNOGO WLIQNIQ NA EE DALX[EJ[EE WYPOLNENIE. pO- \TOMU WY MOVETE POLXZOWATXSQ IMI SOWER[ENNO SWOBODNO.

iMENA WSPOMOGATELXNYH PEREMENNYH NA^INA@TSQ S `$'. l@BOE IMQ S PRISTAWKOJ `$' MOVET ISPOLXZOWATXSQ DLQ WSPOMOGATELXNOJ PEREMENNOJ, ESLI TOLXKO ONO NE QWLQETSQ PREDOPREDELENNYM MA[INNO-ZAWISIMYM IMENEM REGISTRA, (SM. rAZDEL 8.10 [rEGISTRY], S. 74). (sSYLKI NA ISTORI@ ZNA^ENIJ, NAPROTIW, ESTX ^ISLA, KOTORYM PRED[ESTWUET `$'. sM. rAZDEL 8.8 [iSTORIQ ZNA^ENIJ], S. 72.)

wY MOVETE SOHRANITX ZNA^ENIE WO WSPOMOGATELXNOJ PEREMENNOJ S POMO]X@ WYRAVENIQ PRISWAIWANIQ, KAK ESLI BY WY USTANAWLIWALI PEREMENNU@ W WA[EJ PROGRAMME. nAPRIMER:

set $foo = *object_ptr

SOHRANIT W $foo ZNA^ENIE OB_EKTA, NA KOTORYJ UKAZYWAET object_ptr.

pERWOE ISPOLXZOWANIE WSPOMOGATELXNOJ PEREMENNOJ SOZDAET EE, NO ZNA^ENIEM PEREMENNOJ BUDET void, POKA WY NE PRISWOITE EJ NOWOE. s POMO]X@ DRUGOGO PRISWAIWANIQ WY MOVETE W L@BOE WREMQ IZMENITX ZNA^ENIE.

74

oTLADKA S POMO]X@ GDB

wSPOMOGATELXNYE PEREMENNYE NE IME@T FIKSIROWANNOGO TIPA. wY MOVETE PRISWAIWATX WSPOMOGATELXNOJ PEREMENNOJ ZNA^ENIE L@BOGO TIPA, WKL@^AQ STRUKTURY I MASSIWY, DAVE ESLI U \TOJ PEREMENNOJ UVE BYLO ZNA^ENIE DRUGOGO TIPA. bUDU^I ISPOLXZOWANNOJ W WYRAVENII, WSPOMOGATELXNAQ PEREMENNAQ IMEET TIP SWOEGO TEKU]EGO ZNA^ENIQ.

show convenience

wYWESTI SPISOK ISPOLXZUEMYH WSPOMOGATELXNYH PEREMENNYH S IH ZNA^ENIQMI. sOKRA]AETSQ KAK show conv.

oDIN IZ SPOSOBOW ISPOLXZOWANIQ WSPOMOGATELXNYH PEREMENNYH|W KA^ESTWE UWELI^IWA- @]EGOSQ S^ET^IKA ILI PRODWIGA@]EGOSQ UKAZATELQ. nAPRIMER, ^TOBY NAPE^ATATX POLE IZ POSLEDOWATELXNYH \LEMENTOW MASSIWA STRUKTUR:

set $i = 0

print bar[$i++]->contents pOWTORQJTE \TU KOMANDU NAVATIEM hRETi.

nEKOTORYE WSPOMOGATELXNYE PEREMENNYE SOZDA@TSQ GDB AWTOMATI^ESKI, I IM PRISWAIWA@TSQ ZNA^ENIQ, KOTORYE WEROQTNO MOGUT OKAZATXSQ POLEZNYMI.

$_ pEREMENNAQ $_ USTANAWLIWAETSQ AWTOMATI^ESKI KOMANDOJ x W POSLEDNIJ ISSLEDOWANNYJ ADRES (SM. rAZDEL 8.5 [iSSLEDOWANIE PAMQTI], S. 65). dRUGIE KOMANDY, KOTORYE USTANAWLIWA@T ADRES PO UMOL^ANI@ DLQ ISSLEDOWANIQ KOMANDOJ x, TAKVE PRISWAIWA@T $_ UPOMQNUTYJ ADRES; \TI KOMANDY WKL@^A@T info line I info breakpoint. pEREMENNAQ $_ IMEET TIP void *, ESLI TOLXKO ONA NE USTANOWLENA KOMANDOJ x; W \TOM SLU^AE ONA QWLQETSQ UKAZATELEM NA TIP PEREMENNOJ $__.

$__ pEREMENNAQ $__ USTANAWLIWAETSQ AWTOMATI^ESKI KOMANDOJ x W ZNA^ENIE, NAHODQ]EESQ PO POSLEDNEMU ISSLEDOWANNOMU ADRESU. eE TIP WYBIRAETSQ SOOTWETSTWU@]IM FORMATU, W KOTOROM \TO ZNA^ENIE BYLO WYWEDENO.

$_exitcode

pEREMENNOJ $_exitcode AWTOMATI^ESKI PRISWAIWAETSQ KOD ZAWER[ENIQ, KOGDA OTLAVIWAEMAQ PROGRAMMA ZAWER[AETSQ.

w SISTEMAH HP-UX, ESLI WY SSYLAETESX NA FUNKCI@ ILI PEREMENNU@, ^XE IMQ NA^INAETSQ SO ZNAKA DOLLARA, GDB SNA^ALA PROIZWODIT POISK POLXZOWATELXSKOGO ILI SISTEMNOGO IMENI, PERED POISKOM WSPOMOGATELXNOJ PEREMENNOJ.

8.10 rEGISTRY

w WYRAVENIQH, WY MOVETE OBRA]ATXSQ K SODERVIMOMU MA[INNYH REGISTROW, OBOZNA- ^AQ IH KAK PEREMENNYE S IMENAMI, NA^INA@]IMSQ S `$'. iMENA REGISTROW RAZLI^A@TSQ OT MA[INY K MA[INE; DLQ WYWODA IMEN REGISTROW, ISPOLXZUEMYH NA WA[EJ MA[INE, WOSPOLXZUJTESX KOMANDOJ info registers.

info registers

wYWESTI IMENA I SODERVIMOE WSEH REGISTROW, KROME REGISTROW S PLAWA@]EJ TO^KOJ (W WYBRANNOM KADRE STEKA).

info all-registers

wYWESTI IMENA I SODERVIMOE WSEH REGISTROW, WKL@^AQ REGISTRY S PLAWA@]EJ TO^KOJ.

info registers IMQ-REG ...

wYWODIT OTNOSITELXNOE ZNA^ENIE KAVDOGO IZ UKAZANNYH W IMQ-REG REGISTROW. kAK PODROBNO OBSUVDAETSQ NIVE, ZNA^ENIQ REGISTROW OBY^NO OTNOSQTSQ K WYBRANNOMU KADRU STEKA. iMQ-REG MOVET BYTX L@BYM DOPUSTIMYM NA WA[EJ MA[INE IMENEM REGISTRA, S `$' W NA^ALE IMENI ILI BEZ.

gLAWA 8: iSSLEDOWANIE DANNYH

75

GDB RASPOZNAET ^ETYRE \STANDARTNYH" IMENI REGISTROW, KOTORYE DOSTUPNY (W WYRAVENIQH) NA BOLX[INSTWE MA[IN|ESLI TOLXKO ONI NE KONFLIKTU@T S KANONI^ESKIM DLQ ARHITEKTURY OBOZNA^ENIEM REGISTROW. nAZWANIQ REGISTROW $pc I $sp ISPOLXZU@TSQ DLQ REGISTRA S^ET^IKA PROGRAMMY I UKAZATELQ WER[INY STEKA. $fp ISPOLXZUETSQ KAK IMQ REGISTRA, SODERVA]EGO UKAZATELX NA TEKU]IJ KADR STEKA, A $ps|KAK IMQ REGISTRA, SODERVA]EGO SOSTOQNIE PROCESSORA. nAPRIMER, WY MOVETE WYWESTI S^ET^IK PROGRAMMY W [ESTNADCATERI^NOJ ZAPISI S POMO]X@

p/x $pc

ILI WYWESTI SLEDU@]U@ ISPOLNQEMU@ INSTRUKCI@, ISPOLXZUQ

x/i $pc

ILI UWELI^ITX UKAZATELX WER[INY STEKA NA ^ETYRE2 S POMO]X@

set $sp += 4

kOGDA WOZMOVNO, \TI ^ETYRE STANDARTNYH IMENI REGISTROW DOSTUPNY NA WA[EJ MA- [INE, DAVE ESLI ONA IMEET DRUGU@ KANONI^ESKU@ MNEMONIKU, ESLI NE WOZNIKAET KONFLIKTA. kOMANDA info registers POKAZYWAET KANONI^ESKIE IMENA. w SPARC, NAPRIMER, info registers OTOBRAVAET REGISTR SOSTOQNIQ PROCESSORA KAK $psr, NO WY TAKVE MOVETE NAZYWATX EGO $ps; A NA MA[INAH, BAZIRU@]IHSQ NA PLATFORME x86, $ps QWLQETSQ SINONIMOM DLQ REGISTRA eflags.

kOGDA REGISTR IZU^AETSQ TAKIM OBRAZOM, GDB WSEGDA RASSMATRIWAET SODERVIMOE OBY^- NOGO REGISTRA KAK CELOE. nEKOTORYE MA[INY IME@T SPECIALXNYE REGISTRY, KOTORYE MOGUT SODERVATX TOLXKO ZNA^ENIE S PLAWA@]EJ TO^KOJ; IH ZNA^ENIQ TRAKTU@TSQ KAK WELI^INY S PLAWA@]EJ TO^KOJ. nE SU]ESTWUET SPOSOBA SOSLATXSQ NA SODERVIMOE OBY^NOGO REGISTRA KAK NA WELI^INU S PLAWA@]EJ TO^KOJ (HOTQ WY MOVETE RASPE^ATATX EGO ZNA^ENIE KOMANDOJ print KAK WELI^INU S PLAWA@]EJ TO^KOJ, ISPOLXZUQ `print/f $IMQ-REG').

nEKOTORYE REGISTRY IME@T RAZLI^NYE \NEOBRABOTANNYE" I \WIRTUALXNYE" FORMATY DANNYH. |TO OZNA^AET, ^TO FORMAT DANNYH, W KOTOROM OPERACIONNAQ SISTEMA SOHRANQET SODERVIMOE REGISTRA, NE SOWPADAET S TEM, KOTORYJ OBY^NO WOSPRINIMAETSQ WA[EJ PROGRAMMOJ. nAPRIMER, REGISTRY SOPROCESSORA S PLAWA@]EJ TO^KOJ 68881 WSEGDA SOHRANQ- @TSQ W \RAS[IRENNOM" (NEOBRABOTANNOM) FORMATE, NO WSE PROGRAMMY NA sI RABOTA@T S \DWOJNYM" (WIRTUALXNYM) FORMATOM. w PODOBNYH SLU^AQH, GDB OBY^NO RABOTAET TOLXKO S WIRTUALXNYM FORMATOM (FORMATOM, IME@]IM SMYSL W WA[EJ PROGRAMME), NO KOMANDA info registers WYWODIT DANNYE W OBOIH FORMATAH.

oBY^NO ZNA^ENIQ REGISTROW OTNOSQTSQ K WYBRANNOMU KADRU STEKA (SM. rAZDEL 6.3 [wYBOR KADRA], S. 52). |TO ZNA^IT, ^TO WY POLU^AETE ZNA^ENIE, KOTOROE SODERVALOSX BY W REGISTRE, ESLI BY PROIZO[EL WYHOD IZ WSEH WNUTRENNIH KADROW STEKA I IH SOHRANENNYE REGISTRY BYLI BY WOSSTANOWLENY. dLQ TOGO ^TOBY UWIDETX ISTINNOE SODERVIMOE APPARATNYH REGISTROW, WY DOLVNY WYBRATX SAMYJ WNUTRENNIJ KADR (S POMO]X@ `frame 0').

oDNAKO, GDB, ISHODQ IZ MA[INNOGO KODA, SGENERIROWANNOGO WA[IM KOMPILQTOROM, DOLVEN USTANOWITX, GDE SOHRANENY REGISTRY. eSLI NEKOTORYE REGISTRY NE SOHRANENY, ILI ESLI GDB NE W SOSTOQNII NAJTI SOHRANENNYE REGISTRY, WYBRANNYJ KADR STEKA NE IMEET ZNA^ENIQ.

8.11aPPARATNYE SREDSTWA PODDERVKI WY^ISLENIJ S PLAWA@]EJ TO^KOJ

w ZAWISIMOSTI OT KONFIGURACII, GDB MOVET WYDATX WAM BOLX[E INFORMACII O SOSTOQNII APPARATNYH SREDSTW PODDERVKI WY^ISLENIJ S PLAWA@]EJ TO^KOJ.

2nA MA[INAH, GDE STEK RASTET WNIZ W PAMQTI (W NA[I DNI, NA BOLX[INSTWE MA[IN), \TO SPOSOB UDALITX ODNO SLOWO IZ STEKA. |TO PODRAZUMEWAET, ^TO WYBRAN SAMYJ WNUTRENNIJ KADR; KOGDA WYBRANY DRUGIE KADRY STEKA, USTANOWKA $sp NE RAZRE[ENA. iSPOLXZUJTE return DLQ IZWLE^ENIQ CELOGO KADRA IZ STEKA, WNE ZAWISIMOSTI OT ARHITEKTURY MA[INY; SMOTRITE rAZDEL 11.4 [wOZWRAT IZ FUNKCII], S. 103.

76

oTLADKA S POMO]X@ GDB

info float

oTOBRAZITX APPARATNO-ZAWISIMU@ INFORMACI@ O MODULE PODDERVKI WY^ISLENIJ S PLAWA@]EJ TO^KOJ. eE TO^NOE SODERVANIE I RAZME]ENIE ZAWISIT OT MIKROSHEMY PODDERVKI WY^ISLENIJ S PLAWA@]EJ TO^KOJ. w NASTOQ]EE WREMQ, `info float' PODDERVIWAETSQ NA MA[INAH ARM I x86.

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

77

9iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

hOTQ QZYKI PROGRAMMIROWANIQ OBY^NO IME@T OB]IE ASPEKTY, IH WYRAVENIQ REDKO WYGLQDQT ODINAKOWO. nAPRIMER, W ANSI sI, RAZYMENOWANIE UKAZATELQ p OSU]ESTWLQETSQ OPERACIEJ *p, A W mODULE-2 \TO WYPOLNQETSQ KAK p^. pREDSTAWLENIE (I OTOBRAVENIE) ZNA^ENIJ TAKVE MOVET BYTX RAZLI^NYM. {ESTNADCATERI^NYE ^ISLA W sI OTOBRAVA@TSQ KAK `0x1ae', W TO WREMQ KAK W mODULE-2 ONI OTOBRAVA@TSQ KAK `1AEH'.

w GDB WSTROENA SPECIALXNAQ INFORMACIQ O NEKOTORYH QZYKAH, KOTORAQ POZWOLQET OPISYWATX DEJSTWIQ, PODOBNYE UPOMQNUTYM, NA QZYKE WA[EJ PROGRAMMY, I POZWOLQET GDB WYWODITX ZNA^ENIQ W WIDE, PRINQTOM W QZYKE, NA KOTOROM NAPISANA WA[A PROGRAMMA. qZYK, KOTORYM WY POLXZUETESX DLQ POSTROENIQ WYRAVENIJ, NAZYWAETSQ RABO^IM QZYKOM.

9.1 pEREHOD OT ODNOGO QZYKA K DRUGOMU

sU]ESTWUET DWA SPOSOBA UPRAWLENIQ RABO^IM QZYKOM: LIBO GDB USTANAWLIWAET EGO AWTOMATI^ESKI, LIBO WY MOVETE SDELATX \TO SAMOSTOQTELXNO. dLQ \TIH CELEJ WY MOVETE WOSPOLXZOWATXSQ KOMANDOJ set language. pO UMOL^ANI@, PRI STARTE GDB USTANAWLIWAET QZYK AWTOMATI^ESKI. rABO^IJ QZYK ISPOLXZUETSQ ^TOBY OPREDELITX, KAK INTERPRETIRU@T- SQ WWODIMYE WAMI WYRAVENIQ, KAK WYWODQTSQ ZNA^ENIQ, I TAK DALEE.

w DOPOLNENIE K RABO^EMU QZYKU, KAVDYJ ISHODNYJ FAJL, S KOTORYM RABOTAET GDB, IMEET SWOJ SOBSTWENNYJ RABO^IJ QZYK. dLQ NEKOTORYH FORMATOW OB_EKTNYH FAJLOW KOMPILQTOR MOVET UKAZYWATX, NA KAKOM QZYKE NAPISAN KONKRETNYJ ISHODNYJ FAJL. oDNAKO, ^A]E WSEGO GDB RASPOZNAET QZYK PO IMENI FAJLA. qZYK ISHODNOGO FAJLA OPREDELQET, BUDUT LI WOSSTANAWLIWATXSQ IMENA sI++; TAKIM OBRAZOM, backtrace MOVET POKAZYWATX KAVDYJ KADR W SOOTWETSTWII S ISHODNYM QZYKOM. nE SU]ESTWUET SPOSOBA USTANOWITX QZYK ISHODNOGO FAJLA IZ GDB, NO WY MOVETE USTANOWITX QZYK, ASSOCIIROWANNYJ S RAS[IRENIEM FAJLA. sM. rAZDEL 9.2 [oTOBRAVENIE QZYKA PROGRAMMIROWANIQ], S. 78.

nAIBOLEE ^ASTO \TA PROBLEMA WOZNIKAET, KOGDA WY ISPOLXZUETE PROGRAMMU, TAKU@ KAK cfront ILI f2c, KOTORAQ SOZDAET TEKST NA sI, NO NAPISANA NA DRUGOM QZYKE. w \TOM SLU^AE NUVNO SDELATX, ^TOBY PROGRAMMA ISPOLXZOWALA DIREKTIWY #line W WYWODE TEKSTA sI; TOGDA GDB BUDET ZNATX PRAWILXNYJ QZYK ISHODNOGO TEKSTA PERWONA^ALXNOJ PROGRAMMY, I WYWEDET \TOT ISHODNYJ KOD, A NE SGENERIROWANNYJ KOD sI.

9.1.1 sOOTWETSTWIE RAS[IRENIJ FAJLOW I QZYKOW

eSLI IMQ ISHODNOGO FAJLA ZAKAN^IWAETSQ ODNIM IZ SLEDU@]IH RAS[IRENIJ, TO GDB WOSPRINIMAET \TO KAK UKAZANIE NA OBOZNA^ENNYJ QZYK.

`.c' iSHODNYJ FAJL sI

`.C' `.cc' `.cp' `.cpp' `.cxx'

`.c++' iSHODNYJ FAJL sI++

`.f'

`.F' iSHODNYJ FAJL fORTRANA

`.ch' `.c186'

`.c286' iSHODNYJ FAJL CHILL

`.mod' iSHODNYJ FAJL mODULY-2

78

oTLADKA S POMO]X@ GDB

`.s'

`.S' iSHODNYJ FAJL aSSEMBLERA. w DEJSTWITELXNOSTI, WOSPRINIMATSQ PO^TI TAKVE, KAK sI, NO GDB NE PROPUSKAET WWODNYE ^ASTI FUNKCIJ PRI PO[AGOWOM WYPOLNENII.

w DOPOLNENIE K \TOMU, WY MOVETE USTANOWITX QZYK, ASSOCIIROWANNYJ S RAS[IRENIEM IMENI FAJLA. sM. rAZDEL 9.2 [oTOBRAVENIE QZYKA PROGRAMMIROWANIQ], S. 78.

9.1.2 uSTANOWKA RABO^EGO QZYKA

eSLI WY POZWOLQETE GDB USTANAWLIWATX QZYK AWTOMATI^ESKI, WYRAVENIQ W SEANSE OTLADKI I W WA[EJ PROGRAMME INTERPRETIRU@TSQ ODINAKOWO.

pO VELANI@, WY MOVETE USTANOWITX QZYK SAMI. dLQ \TOGO WOSPOLXZUJTESX KOMANDOJ `set language QZYK', GDE QZYK|NAZWANIE QZYKA, NAPRIMER, c ILI modula-2. ~TOBY POLU^ITX PERE^ENX PODDERVIWAEMYH QZYKOW, NABERITE `set language'.

uSTANOWKA QZYKA WRU^NU@ ZAPRE]AET GDB AWTOMATI^ESKI PEREKL@^ATX RABO^IJ QZYK. |TO MOVET PRIWESTI K NEPRIQTNYM POSLEDSTWIQM, ESLI WY POPYTAETESX OTLADITX PROGRAMMU, KOGDA RABO^IJ QZYK NE SOWPADAET S ISHODNYM QZYKOM, KOGDA WYRAVENIE DOPUSTIMO W OBOIH QZYKAH, NO OZNA^AET RAZNYE WE]I. nAPRIMER, ESLI TEKU]IJ ISHODNYJ FAJL NAPISAN NA sI, A W GDB WYBRANA mODULA-2, KOMANDA

print a = b + c

MOVET NE PRIWESTI K OVIDAEMOMU REZULXTATU. w sI \TO OZNA^AET SLOVITX b I c I POMESTITX REZULXTAT W a. wYWEDENNYM REZULXTATOM BUDET ZNA^ENIE a. w mODULE-2 \TO OZNA^AET SRAWNENIE a S REZULXTATOM b+c, WYDA@]EE ZNA^ENIE TIPA BOOLEAN.

9.1.3 rASPOZNAWANIE GDB ISHODNOGO QZYKA

dLQ AWTOMATI^ESKOJ USTANOWKI GDB RABO^EGO QZYKA, ISPOLXZUJTE `set language local' ILI `set language auto'. tOGDA GDB BUDET OPREDELQTX RABO^IJ QZYK AWTOMATI^ESKI. tO ESTX PRI OSTANOWKE WA[EJ PROGRAMMY W KADRE STEKA (OBY^NO, W TO^KE OSTANOWA), GDB USTANAWLIWAET RABO^IJ QZYK W TOT, KOTORYJ ZAPISAN DLQ FUNKCII W \TOM KADRE. eSLI QZYK DLQ KADRA NEIZWESTEN (TO ESTX, ESLI FUNKCIQ ILI BLOK, SOOTWETSTWU@]IE KADRU, BYLI OPREDELENY W ISHODNOM FAJLE, NE IMEW[EM RASPOZNAWAEMOGO RAS[IRENIQ), TEKU]IJ RABO^IJ QZYK NE IZMENQETSQ, A GDB WYDAET PREDUPREVDA@]EE SOOB]ENIE.

dLQ BOLX[INSTWA PROGRAMM, KOTORYE NAPISANY CELIKOM NA ODNOM QZYKE, AWTOMATI^E- SKAQ USTANOWKA QZYKA MOVET POKAZATXSQ NENUVNOJ. oDNAKO, W OSNOWNOJ PROGRAMME, NAPISANNOJ NA ODNOM ISHODNOM QZYKE, MOGUT ISPOLXZOWATXSQ PROGRAMMNYE MODULI I BIBLIOTEKI, NAPISANNYE NA DRUGOM ISHODNOM QZYKE. iSPOLXZOWANIE W \TOM SLU^AE `set language auto' OSWOBOVDAET WAS OT USTANOWKI RABO^EGO QZYKA WRU^NU@.

9.2 oTOBRAVENIE QZYKA PROGRAMMIROWANIQ

sLEDU@]IE KOMANDY POMOGA@T WAM OPREDELITX, KAKOJ QZYK QWLQETSQ RABO^IM, A TAKVE NA KAKOM QZYKE BYLI NAPISANY ISHODNYE FAJLY.

show language

oTOBRAZITX TEKU]IJ RABO^IJ QZYK. |TO TOT QZYK, KOTORYJ WY MOVETE ISPOLXZOWATX W KOMANDAH TIPA print DLQ POSTROENIQ I WY^ISLENIQ WYRAVENIJ, W KOTORYE MOGUT WHODITX PEREMENNYE WA[EJ PROGRAMMY.

info frame

oTOBRAZITX ISHODNYJ QZYK DLQ DANNOGO KADRA STEKA. |TOT QZYK STANOWITSQ RABO^IM, ESLI ISPOLXZUETSQ IDENTIFIKATOR IZ \TOGO KADRA. sM. rAZDEL 6.4 [iNFORMACIQ O KADRE], S. 53, DLQ DOPOLNITELXNOJ INFORMACII.

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

79

info source

oTOBRAZITX ISHODNYJ QZYK DANNOGO ISHODNOGO FAJLA. sM. gLAWA 10 [iSSLEDOWANIE TABLICY SIMWOLOW], S. 97, DLQ POLU^ENIQ DOPOLNITELXNOJ INFORMACII.

pRI NEOBY^NYH OBSTOQTELXSTWAH, U WAS MOGUT BYTX ISHODNYE FAJLY S RAS[IRENIQMI, NE WHODQ]IMI W STANDARTNYJ SPISOK. wY MOVETE QWNO USTANOWITX RAS[IRENIE, ASSOCIIROWANNOE S QZYKOM:

set extension-language .RAS[ QZYK

uSTANOWITX SOOTWETSTWIE ISHODNYH FAJLOW S RAS[IRENIEM .RAS[ S ISHODNYM QZYKOM QZYK.

info extensions

pERE^ISLITX WSE RAS[IRENIQ IMEN FAJLOW I SOOTWETSTWU@]IE IM QZYKI.

9.3 pROWERKA DIAPAZONA I PRINADLEVNOSTI TIPU

pREDUPREVDENIE: w \TOT WYPUSK WKL@^ENY KOMANDY GDB DLQ PROWERKI DIAPAZONA I SOOTWETSTWIQ TIPOW, NO ONI POKA NE OKAZYWA@T NIKAKOGO DEJSTWIQ. |TOT RAZDEL OPISYWAET IH PREDPOLAGAEMYE WOZMOVNOSTI.

nEKOTORYE QZYKI OBESPE^IWA@T ZA]ITU OT DOSTATO^NO OB]IH O[IBOK S POMO]X@ NABORA PROWEROK WREMENI KOMPILQCII I WREMENI WYPOLNENIQ. |TO WKL@^AET PROWERKU TIPOW ARGUMENTOW FUNKCIJ I OPERATOROW I OBESPE^IWAET PROWERKU MATEMATI^ESKOGO PEREPOLNENIQ WO WREMQ WYPOLNENIQ. pROWERKI TAKOGO RODA POMOGA@T UBEDITXSQ W KORREKTNOSTI PROGRAMMY POSLE EE KOMPILQCII PUTEM USTRANENIQ NESOOTWETSTWIQ TIPOW, I PREDOSTAWLQQ AKTIWNU@ PROWERKU O[IBOK WYHODA ZA PREDELY DIAPAZONA WO WREMQ WYPOLNENIQ.

pO WA[EMU VELANI@, GDB MOVET PROWODITX PODOBNYE PROWERKI. hOTQ GDB NE PROWERQET OPERATORY WA[EJ PROGRAMMY, ON MOVET, NAPRIMER, PROWERQTX WYRAVENIQ, WWEDENNYE NEPOSREDSTWENNO W GDB DLQ WY^ISLENIQ KOMANDOJ print. kAK I W SLU^AE RABO^EGO QZYKA, GDB MOVET TAKVE AWTOMATI^ESKI RE[ITX, WYPOLNQTX PROWERKU ILI NET, OSNOWYWAQSX NA ISHODNOM QZYKE WA[EJ PROGRAMMY. sM. rAZDEL 9.4 [pODDERVIWAEMYE QZYKI], S. 81, DLQ INFORMACII OB USTANOWKAH PO UMOL^ANI@ DLQ PODDERVIWAEMYH QZYKOW.

9.3.1 kRATKIJ OBZOR PROWERKI SOOTWETSTWIQ TIPOW

nEKOTORYE QZYKI, TAKIE KAK mODULA-2, DOLVNY IMETX VESTKOE SOOTWETSTWIE TIPOW, TO ESTX ARGUMENTY OPERATOROW I FUNKCIJ DOLVNY IMETX PRAWILXNYJ TIP, W PROTIWNOM SLU^AE WOZNIKAET O[IBKA. oPISANNYE ZDESX PROWERKI PREDOTWRA]A@T O[IBKI NESOOTWETSTWIQ TIPOW, KOTORYE MOGUT WYZWATX O[IBKI WREMENI WYPOLNENIQ. nAPRIMER,

1 + 2 ) 3

NO

error 1 + 2.3

wO WTOROM PRIMERE O[IBKA, POTOMU ^TO CARDINAL 1 NE SOWMESTIM PO TIPU S REAL 2.3.

dLQ WYRAVENIJ, ISPOLXZUEMYH WAMI W KOMANDAH GDB, WY MOVETE UKAZATX GDB NE PROIZWODITX PROWERKU; ILI VE RASSMATRIWATX L@BOE NESOOTWETSTWIE KAK O[IBKU I PREKRA- ]ATX OBRABOTKU WYRAVENIQ; ILI TOLXKO WYWODITX PREDUPREVDENIE W SLU^AE WOZNIKNOWENIQ NESOOTWETSTWIQ, NO WY^ISLQTX WYRAVENIE W L@BOM SLU^AE. w POSLEDNEM SLU^AE, GDB WY^ISLQET WYRAVENIQ, PODOBNYE WTOROMU PRIMERU, NO TAKVE WYWODIT PREDUPREVDA@]EE SOOB]ENIE.

dAVE ESLI WY OTKL@^ILI PROWERKU TIPOW, GDB MOVET PREKRATITX OBRABOTKU WYRAVENIQ PO DRUGIM PRI^INAM, SWQZANNYM S TIPAMI. nAPRIMER, GDB NE ZNAET, KAK SLOVITX int I struct foo. tAKIE TIPY O[IBOK NE IME@T NI^EGO OB]EGO S ISPOLXZUEMYM QZYKOM I OBY^NO WOZNIKA@T IZ WYRAVENIJ, PODOBNYH OPISANNOMU WY[E, KOTORYE NET SMYSLA WY- ^ISLQTX.

80

oTLADKA S POMO]X@ GDB

kAVDYJ QZYK OPREDELQET STEPENX STROGOSTI KONTROLQ TIPOW. nAPRIMER, KAK mODULA- 2, TAK I sI TREBU@T, ^TOBY ARGUMENTY ARIFMETI^ESKIH OPERACIJ BYLI ^ISLAMI. w sI, PERE^ISLQEMYE TIPY I UKAZATELI MOGUT BYTX PREDSTAWLENY W WIDE ^ISEL, TAK ^TO ONI DOPUSTIMY W KA^ESTWE ARGUMENTOW MATEMATI^ESKIH OPERATOROW. sM. rAZDEL 9.4 [pODDERVIWAEMYE QZYKI], S. 81, DLQ BOLEE PODROBNOGO OBSUVDENIQ KONKRETNYH QZYKOW.

GDB PREDOSTAWLQET NEKOTORYE DOPOLNITELXNYE KOMANDY DLQ KONTROLQ PROWERKI TIPOW:

set check type auto

wKL@^ITX ILI OTKL@^ITX KONTROLX TIPOW, W ZAWISIMOSTI OT TEKU]EGO RABO- ^EGO QZYKA. sM. rAZDEL 9.4 [pODDERVIWAEMYE QZYKI], S. 81, DLQ USTANOWOK PO UMOL^ANI@ DLQ KAVDOGO QZYKA.

set check type on set check type off

wKL@^ITX ILI OTKL@^ITX KONTROLX TIPOW, PRENEBREGAQ USTANOWKOJ PO UMOL^A- NI@ DLQ TEKU]EGO RABO^EGO QZYKA. wYWESTI PREDUPREVDA@]EE SOOB]ENIE, ESLI USTANOWKA NE SOOTWETSTWUET ISPOLXZUEMOJ PO UMOL^ANI@. eSLI WOZNIKAET NESOOTWETSTWIE TIPOW WO WREMQ WY^ISLENIQ WYRAVENIQ PRI WKL@^ENNOM KONTROLE TIPOW, GDB WYWODIT SOOB]ENIE I PRERYWAET WY^ISLENIE WYRAVENIQ.

set check type warn

pRI WOZNIKNOWENII NESOOTWETSTWIQ TIPOW WYWESTI PREDUPREVDA@]EE SOOB]E- NIE, NO POPYTATXSQ WY^ISLITX WYRAVENIE. wY^ISLENIE WYRAVENIQ WSE VE MOVET BYTX NEWOZMOVNYM PO DRUGIM PRI^INAM. nAPRIMER, GDB NE MOVET SKLADYWATX ^ISLA SO STRUKTURAMI.

show type pOKAZATX TEKU]U@ USTANOWKU PROWERKI TIPOW, A TAKVE BYLA LI ONA USTANOWLENA GDB AWTOMATI^ESKI.

9.3.2 kRATKIJ OBZOR PROWERKI DIAPAZONA

w NEKOTORYH QZYKAH (NAPRIMER, W mODULE-2), WYHOD ZA GRANICY DIAPAZONA TIPA S^ITAETSQ O[IBKOJ; \TI O[IBKI OTSLEVIWA@TSQ S POMO]X@ KONTROLQ WREMENI WYPOLNENIQ. |TI PROWERKI DIAPAZONA SLUVAT DLQ TOGO, ^TOBY IZBEVATX PEREPOLNENIQ PRI WY^ISLENIQH I NE DOPUSTITX PREWY[ENIQ INDEKSAMI \LEMENTOW MASSIWA GRANIC INDEKSACII.

w WYRAVENIQH, ISPOLXZUEMYH WAMI W KOMANDAH GDB, WY MOVETE UKAZATX GDB OBRABATYWATX O[IBKI DIAPAZONA ODNIM IZ TREH SPOSOBOW: IGNORIROWATX IH, WSEGDA RASSMATRIWATX KAK O[IBKI I PRERYWATX OBRABOTKU WYRAVENIQ, ILI WYWODITX PREDUPREVDENIE I PRODOLVATX WY^ISLENIE WYRAVENIQ.

o[IBKI DIAPAZONA MOGUT WOZNIKATX PRI ^ISLOWOM PEREPOLNENII, PRI PREWY[ENII GRANICY INDEKSACII MASSIWA ILI PRI ISPOLXZOWANII KONSTANTY, NE PRINADLEVA]EJ NI K ODNOMU TIPU. oDNAKO, NEKOTORYE QZYKI NE S^ITA@T PEREPOLNENIE O[IBKOJ. wO MNOGIH REALIZACIQH sI, MATEMATI^ESKOE PEREPOLNENIE WYZYWAET \CIKLI^ESKIJ PEREHOD" K MENX[EMU ZNA^ENI@. nAPRIMER, ESLI m|NAIBOLX[EE CELOE ZNA^ENIE, A s|NAIMENX[EE, TO

m + 1 ) s

|TO TAKVE QWLQETSQ SPECIFI^NYM DLQ KONKRETNYH QZYKOW, A W NEKOTORYH SLU^AQH|DLQ OTDELXNOGO KOMPILQTORA ILI MA[INY. dLQ DALXNEJ[IH SWEDENIJ PO OTDELXNYM QZYKAM, sM. rAZDEL 9.4 [pODDERVIWAEMYE QZYKI], S. 81.

GDB OBESPE^IWAET NEKOTORYE DOPOLNITELXNYE KOMANDY DLQ KONTROLQ PROWERKI DIAPAZONA:

set check range auto

wKL@^ITX ILI OTKL@^ITX KONTROLX DIAPAZONA, W ZAWISIMOSTI OT TEKU]EGO RABO^EGO QZYKA. sM. rAZDEL 9.4 [pODDERVIWAEMYE QZYKI], S. 81, DLQ POLU^ENIQ INFORMACII OB USTANOWKAH PO UMOL^ANI@ DLQ KAVDOGO QZYKA.

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

81

set check range on set check range off

wKL@^ITX ILI OTKL@^ITX KONTROLX TIPOW, PRENEBREGAQ USTANOWKOJ PO UMOL^A- NI@ DLQ TEKU]EGO RABO^EGO QZYKA. eSLI USTANOWKA NE SOOTWETSTWUET ISPOLXZUEMOJ PO UMOL^ANI@, WYWODITSQ PREDUPREVDA@]EE SOOB]ENIE. eSLI PROISHODIT O[IBKA DIAPAZONA I KONTROLX WKL@^EN, WYWODITSQ SOOB]ENIE I WY^ISLENIE WYRAVENIQ PRERYWAETSQ.

set check range warn

pRI WYQWLENII O[IBKI DIAPAZONA, GDB WYWEDET PREDUPREVDA@]EE SOOB]ENIE, NO POPYTAETSQ WY^ISLITX WYRAVENIE. tEM NE MENEE, WY^ISLENIE WYRAVENIQ MOVET BYTX NEWOZMOVNYM PO DRUGIM PRI^INAM, TAKIM KAK OBRA]ENIE K PAMQTI, KOTOROJ PROCESS NE WLADEET (TIPI^NYJ PRIMER DLQ MNOGIH SISTEM Unix).

show range

pOKAZATX TEKU]U@ USTANOWKU PROWERKI DIAPAZONA I BYLA LI ONA USTANOWLENA GDB AWTOMATI^ESKI.

9.4 pODDERVIWAEMYE QZYKI

GDB PODDERVIWAET sI, sI++, fORTRAN, Java, Chill, ASSEMBLER I mODULA-2. nEKOTORYE WOZMOVNOSTI GDB MOGUT BYTX ZADEJSTWOWANY W WYRAVENIQH NEZAWISIMO OT ISPOLXZUEMOGO QZYKA: OPERATORY GDB @ I :: I KONSTRUKCIQ `{TIP}ADRES' (SM. rAZDEL 8.1 [wYRAVENIQ], S. 61) MOGUT BYTX ISPOLXZOWANY W KONSTRUKCIQH L@BOGO PODDERVIWAEMOGO QZYKA.

sLEDU@]IE RAZDELY PODROBNO OPISYWA@T, DO KAKOJ STEPENI KAVDYJ IZ ISHODNYH QZYKOW PODDERVIWAETSQ GDB. |TI RAZDELY NE ZADUMYWALISX KAK U^EBNIKI ILI RUKOWODSTWA PO QZYKAM; ONI LI[X SLUVAT SPRAWO^NYM RUKOWODSTWOM PO TOMU, ^TO DOPUSKAET ANALIZATOR WYRAVENIJ GDB, I KAK DOLVNY WYGLQDETX WHODNYE I WYHODNYE FORMATY W RAZLI^NYH QZYKAH. sU]ESTWUET MNOGO HORO[IH KNIG PO KAVDOMU IZ \TIH QZYKOW; POVALUJSTA, ZAGLQNITE W NIH, ESLI WAM NUVEN U^EBNIK ILI SPRAWO^NIK PO QZYKU.

9.4.1 sI I sI++

pOSKOLXKU sI I sI++ TESNO SWQZANY, MNOGIE WOZMOVNOSTI GDB PRIMENIMY K NIM OBOIM. kOGDA \TO IMEET MESTO, MY OBSUVDAEM \TI QZYKI WMESTE.

sREDSTWA OTLADKI sI++ OBESPE^IWA@TSQ SOWMESTNO KOMPILQTOROM sI++ I GDB. sLEDOWATELXNO, DLQ \FFEKTIWNOJ OTLADKI PROGRAMMY NA sI++, WAM SLEDUET POLXZOWATXSQ ODNIM IZ PODDERVIWAEMYH KOMPILQTOROW, NAPRIMER gnu g++, ILI KOMPILQTOROM HP ANSI sI++

(aCC).

pRI ISPOLXZOWANII gnu sI++, DLQ POLU^ENIQ NAILU^[IH REZULXTATOW ISPOLXZUJTE FORMAT OTLADO^NOJ INFORMACII stabs. wY MOVETE WYBRATX EGO QWNO S POMO]X@ KL@^A KOMANDNOJ STROKI `-gstabs' ILI `-gstabs+'. sMOTRITE RAZDEL \kL@^I DLQ OTLADKI WA[EJ PROGRAMMY ILI gnu CC" W iSPOLXZOWANIE gnu CC, DLQ DOPOLNITELXNOJ INFORMACII.

9.4.1.1 oPERATORY sI I sI++

oPERATORY DOLVNY BYTX OPREDELENY NA ZNA^ENIQH OPREDELENNYH TIPOW. nAPRIMER, + OPREDELEN NA ^ISLAH, NO NE NA STRUKTURAH. oPERATORY ^ASTO OPREDELQ@TSQ NA GRUPPAH TIPOW.

dLQ CELEJ sI I sI++, IME@T MESTO SLEDU@]IE OPREDELENIQ:

cELYE TIPY WKL@^A@T int S L@BYMI SPECIFIKATORAMI KLASSA PAMQTI; char; enum; I,

DLQ sI++, bool.

82

oTLADKA S POMO]X@ GDB

tIPY S PLAWA@]EJ TO^KOJ WKL@^A@T float, double I long double (ESLI PODDERVIWAETSQ CELEWOJ PLATFORMOJ).

tIPY UKAZATELEJ WKL@^A@T WSE TIPY, OPREDELENNYE KAK (TIP *).

sKALQRNYE TIPY WKL@^A@T WSE WY[EPERE^ISLENNYE TIPY.

pODDERVIWA@TSQ SLEDU@]IE OPERATORY, PERE^ISLENNYE ZDESX W PORQDKE WOZRASTANIQ PRIORITETA:

,zAPQTAQ, ILI OPERATOR POSLEDOWATELXNOGO WYPOLNENIQ. wYRAVENIQ, RAZDELENNYE W SPISKE ZAPQTYMI, WY^ISLQ@TSQ SLEWA NAPRAWO; REZULXTATOM WSEGO WYRAVENIQ QWLQETSQ REZULXTAT, POLU^ENNYJ POSLEDNIM.

=pRISWAIWANIE. zNA^ENIE WYRAVENIQ PRIWAIWANIQ|PRISWOENNOE ZNA^ENIE. oPREDELENO NA SKALQRNYH TIPAH.

OPER=

iSPOLXZUETSQ W

WYRAVENIQH W FORME a OPER= b

I PREOBRAZOWYWAETSQ

W

 

a = a OPER b. OPER= I = IME@T ODINAKOWYJ PRIORITET. OPER MOVET BYTX ODNIM

 

IZ OPERATOROW |,

^, &, <<, >>, +, -, *, /, %.

 

 

?:

tERNARNYJ OPERATOR. a ? b : c ISTOLKOWYWAETSQ TAK:

ESLI a, TO b, INA^E c.

a

 

DOLVNO BYTX CELOGO TIPA.

 

 

||lOGI^ESKOE ILI. oPREDELENO NA CELYH TIPAH.

&&lOGI^ESKOE I. oPREDELENO NA CELYH TIPAH.

|pOBITOWOE ILI. oPREDELENO NA CELYH TIPAH.

^pOBITOWOE ISKL@^A@]EE ILI. oPREDELENO NA CELYH TIPAH.

&pOBITOWOE I. oPREDELENO NA CELYH TIPAH.

==, != rAWENSTWO I NERAWENSTWO. oPREDELENO NA SKALQRNYH TIPAH. zNA^ENIE \TIH WYRAVENIJ OTLI^NO OT NULQ DLQ ISTINY I 0 DLQ LVI.

<, >, <=, >=

mENX[E ^EM, BOLX[E ^EM, MENX[E ILI RAWNO, BOLX[E ILI RAWNO. oPREDELENO NA SKALQRNYH TIPAH. zNA^ENIE \TIH WYRAVENIJ RAWNO 0 DLQ LVI I OTLI^NO OT NULQ DLQ ISTINY.

<<, >> lEWYJ SDWIG I PRAWYJ SDWIG. oPREDELENO NA CELYH TIPAH.

@oPERATOR GDB SOZDANIQ \ISKUSSTWENNOGO MASSIWA" (SM. rAZDEL 8.1 [wYRAVE-

NIQ], S. 61).

+, - sLOVENIE I WY^ITANIE. oPREDELENO NA CELO^ISLENNYH TIPAH, TIPAH S PLAWA@- ]EJ TO^KOJ I UKAZATELQH.

*, /, % uMNOVENIE, DELENIE I OSTATOK. uMNOVENIE I DELENIE OPREDELENY NA CELO^ISLENNYH TIPAH I TIPAH S PLAWA@]EJ TO^KOJ. oSTATOK OPREDELEN NA CELO^ISLENNYH TIPAH.

++, - iNKREMENT I DEKREMENT. pRI POQWLENII PERED PEREMENNOJ, OPERACIQ WYPOLNQETSQ PREVDE, ^EM PEREMENNAQ ISPOLXZUETSQ W WYRAVENII; PRI POQWLENII POSLE PEREMENNOJ, ZNA^ENIE PEREMENNOJ ISPOLXZUETSQ DO WYPOLNENIQ OPERACII.

*rAZYMENOWANIE UKAZATELQ. oPREDELENO DLQ UKAZATELEJ. iMEET TOT VE PRIORITET, ^TO I ++.

&oPERATOR POLU^ENIQ ADRESA. oPREDELEN NA PEREMENNYH. iMEET TOT VE PRIORITET, ^TO I ++.

dLQ OTLADKI sI++, GDB REALIZUET ISPOLXZOWANIE `&' NEZAWISIMO OT TOGO, ^TO POZWOLQET SAM QZYK sI++: WY MOVETE ISPOLXZOWATX `&(&SSYLKA)' (ILI PROSTO `&&SSYLKA'), ^TOBY ISSLEDOWATX ADRES, PO KOTOROMU HRANITSQ PEREMENNAQSSYLKA sI++ (OB_QWLENNAQ S POMO]X@ `&SSYLKA').

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

83

-uNARNYJ MINUS. oPREDELEN NA CELO^ISLENNYH TIPAH I TIPAH S PLAWA@]EJ TO^KOJ. iMEET TOT VE PRIORITET, ^TO I ++.

!lOGI^ESKOE OTRICANIE. oPREDELENO NA CELO^ISLENNYH TIPAH. iMEET TOT VE PRIORITET, ^TO I ++.

~oPERATOR POBITOWOGO DOPOLNENIQ. oPREDELEN NA CELO^ISLENNYH TIPAH. iMEET TOT VE PRIORITET, ^TO I ++.

., -> |LEMENT STRUKTURY I UKAZATELX NA \LEMENT STRUKTURY. dLQ UDOBSTWA, GDB S^ITAET IH \KWIWALENTNYMI, OPREDELQQ, SLEDUET LI RAZYMENOWYWATX UKAZATELX, OSNOWYWAQSX NA SOHRANENNOJ INFORMACII O TIPAH. oPREDELEN NA DANNYH STRUKTURY (struct) I OB_EDINENIQ (union).

.*, ->* rAZYMENOWYWANIE UKAZATELQ NA \LEMENT.

[] iNDEKSACIQ MASSIWA. a[i] OPREDELQETSQ KAK *(a+i). iMEET TOT VE PRIORITET, ^TO I ->.

()

sPISOK PARAMETROW FUNKCII. iMEET TOT VE PRIORITET, ^TO I ->.

::oPERATOR sI++ OPREDELENIQ OBLASTI WIDIMOSTI. oPREDELEN NA TIPAH struct, union I class.

::dWOJNOE DWOETO^IE TAKVE PREDSTAWLQET OPERATOR GDB OBLASTI WIDIMOSTI (SM. rAZDEL 8.1 [wYRAVENIQ], S. 61). iMEET TOT VE PRIORITET, ^TO I ::, OPISANNYJ WY[E.

eSLI OPERATOR PEREOPREDELEN W POLXZOWATELXSKOM KODE, GDB OBY^NO PYTAETSQ WYPOLNITX PEREOPREDELENNU@ WERSI@, A NE ISPOLXZOWATX PREDOPREDELENNOE ZNA^ENIE OPERATORA.

9.4.1.2 kONSTANTY sI I sI++

GDB POZWOLQET WAM WYRAVATX KONSTANTY sI I sI++ SLEDU@]IMI SPOSOBAMI:

cELO^ISLENNYE KONSTANTY|\TO POSLEDOWATELXNOSTI CIFR. wOSXMERI^NYE KONSTANTY NA^INA@TSQ S `0' (S NULQ), A [ESTNADCATERI^NYE KONSTANTY|S `0x' ILI `0X'. kONSTANTY TAKVE MOGUT ZAKAN^IWATXSQ BUKWOJ `l', UKAZYWAQ, ^TO ZNA^ENIE KONSTANTY DOLVNO RASSMATRIWATXSQ KAK DLINNOE (long).

kONSTANTY S PLAWA@]EJ TO^KOJ|\TO POSLEDOWATELXNOSTX CIFR, ZA KOTOROJ SLEDUET DESQTI^NAQ TO^KA, DRUGAQ POSLEDOWATELXNOSTX CIFR, I, WOZMOVNO, PORQDOK. pORQDOK UKAZYWAETSQ W FORME `e[[+]|-]nnn', GDE nnn|DRUGAQ POSLEDOWATELXNOSTX CIFR. dLQ POLOVITELXNYH PORQDKOW `+' QWLQETSQ NEOBQZATELXNYM. kONSTANTA S PLAWA@]EJ TO^KOJ MOVET TAKVE ZAKAN^IWATXSQ BUKWOJ `f' ILI `F', \TO UKAZYWAET NA TO, ^TO KONSTANTA DOLVNA RASSMATRIWATXSQ KAK float (W OTLI^IE OT double PO UMOL^ANI@), ILI BUKWOJ `l' ILI `L', ^TO UKAZYWAET NA KONSTANTU TIPA long double.

pERE^ISLQEMYE KONSTANTY SOSTOQT IZ PERE^ISLQEMYH IDENTIFIKATOROW, ILI IH CELO- ^ISLENNYH \KWIWALENTOW.

sIMWOLXNYE KONSTANTY|\TO ODINO^NYJ SIMWOL, ZAKL@^ENNYJ W ODINO^NYE KAWY^KI ('), ILI ^ISLO|PORQDKOWOE ZNA^ENIE SOOTWETSTWU@]EGO SIMWOLA (OBY^NO EGO ZNA^ENIE ascii). wNUTRI KAWY^EK, ODINO^NYJ SIMWOL MOVET BYTX PREDSTAWLEN LIBO BUKWOJ, LIBO

\KRANIRU@]EJ POSLEDOWATELXNOSTX@, KOTORAQ IMEET FORMU `\nnn', GDE nnn QWLQETSQ WOSXMERI^NYM PREDSTAWLENIEM PORQDKOWOGO ZNA^ENIQ SIMWOLA; ILI FORMU `\x', GDE `x'|SPECIALXNYJ PREDOPREDELENNYJ ZNAK, NAPRIMER, `\n' DLQ ZNAKA NOWOJ STROKI.

sTROKOWYE KONSTANTY|POSLEDOWATELXNOSTX SIMWOLXNYH KONSTANT (BEZ ODINO^NYH KAWY^EK), ZAKL@^ENNAQ W DWOJNYE KAWY^KI ("). tUDA MOGUT WHODITX L@BYE DOPUSTIMYE SIMWOLXNYE KONSTANTY (KAK OPISANO WY[E). dWOJNYM KAWY^KAM WNUTRI STROKI DOLVNA PRED[ESTWOWATX OBRATNAQ KOSAQ ^ERTA, TAK ^TO `"a\"b'c"', NAPRIMER, QWLQETSQ STROKOJ IZ PQTI SIMWOLOW.

84

oTLADKA S POMO]X@ GDB

kONSTANTY-UKAZATELI PREDSTAWLQ@T SOBOJ CELO^ISLENNYE ZNA^ENIQ. wY MOVETE TAKVE ZAPISYWATX UKAZATELI NA KONSTANTY, ISPOLXZUQ OPERATOR CI `&'.

kONSTANTY-MASSIWY|ZAKL@^ENNYE W FIGURNYE SKOBKI (`{' I `}') SPISKI \LEMENTOW, RAZDELENNYE ZAPQTYMI; NAPRIMER, `{1,2,3}' QWLQETSQ MASSIWOM S TREMQ CELO^ISLENNYMI \LEMENTAMI, `{{1,2}, {3,4}, {5,6}}' QWLQETSQ MASSIWOM RAZMERNOSTI TRI NA DWA, I `{&"hi", &"there", &"fred"}' QWLQETSQ TREH\LEMENTNYM MASSIWOM UKAZATELEJ.

9.4.1.3 wYRAVENIQ sI++

oBRABOT^IK WYRAVENIJ GDB MOVET INTERPRETIROWATX BOLX[INSTWO WYRAVENIJ sI++.

pREDUPREVDENIE: GDB MOVET OTLAVIWATX PROGRAMMY NA sI++ TOLXKO ESLI WY ISPOLXZUETE PODHODQ]IJ KOMPILQTOR. oBY^NO, OTLADKA sI++ ZAWISIT OT ISPOLXZOWANIQ DOPOLNITELXNOJ OTLADO^NOJ INFORMACII W TABLICE SIMWOLOW, I, TAKIM OBRAZOM, TREBUET SPECIALXNOJ PODDERVKI. w ^ASTNOSTI, ESLI WA[ KOMPILQTOR GENERIRUET a.out, MIPS ecoff, RS/6000 xcoff, ILI elf S RAS[IRENIQMI stabs K TABLICE SIMWOLOW, WSE \TI SREDSTWA DOSTUPNY. (s gnu CC WY MOVETE ISPOLXZOWATX KL@^ `-gstabs', ^TOBY QWNO ZAPROSITX RAS[IRENIQ OTLADKI stabs). s DRUGOJ STORONY, ESLI FORMAT OB_EKTNOGO KODA|STANDARTNYJ coff ILI dwarf W elf, ZNA^ITELXNAQ ^ASTX PODDERVKI sI++ W GDB NE RABOTAET.

1.dOPUSKA@TSQ WYZOWY FUNKCIJ-^LENOW; WY MOVETE ISPOLXZOWATX WYRAVENIQ TIPA count = aml->GetOriginal(x, y)

2.pOKA FUNKCIQ-^LEN AKTIWNA (W WYBRANNOM KADRE STEKA), WA[IM WYRAVENIQM DOSTUPNO TO VE PROSTRANSTWO IMEN, ^TO I FUNKCII-^LENU; TO ESTX GDB DOPUSKAET NEQWNYE SSYLKI NA UKAZATELX \KZEMPLQRA KLASSA this PO TEM VE PRAWILAM, ^TO I sI++.

3.wY MOVETE WYZYWATX PEREGRUVENNYE FUNKCII; GDB PROIZWODIT WYZOW FUNKCII S PRAWILXNYM OPREDELENIEM, NO S NEKOTORYMI OGRANI^ENIQMI. GDB NE SOWER[AET PREOBRAZOWANIQ, DLQ WYPOLNENIQ KOTORYH TREBU@TSQ PREOBRAZOWANIQ TIPOW, OPREDELENNYE POLXZOWATELEM, WYZOWY KONSTRUKTOROW ILI KONKRETIZACII NE SU]ESTWU@]IH W PROGRAMME [ABLONOW. oN TAKVE NE MOVET OBRABATYWATX SPISKI S NEOPREDELENNYM ^ISLOM ARGUMENTOW ILI ARGUMENTY SO ZNA^ENIQMI PO UMOL^ANI@.

oN PROIZWODIT PREOBRAZOWANIQ I RAS[IRENIQ CELO^ISLENNYH TIPOW, RAS[IRENIQ TIPOW S PLAWA@]EJ TO^KOJ, ARIFMETI^ESKIE PREOBRAZOWANIQ, PREOBRAZOWANIQ UKAZATELEJ, PREOBRAZOWANIQ KLASSA OB_EKTA W BAZOWYE KLASSY I STANDARTNYE PREOBRAZOWANIQ, NAPRIMER FUNKCII ILI MASSIWA K UKAZATEL@; \TO TREBUET TO^NOGO SOWPADENIQ ^ISLA ARGUMENTOW FUNKCII.

rAZRE[ENIE PEREGRUVENNYH IMEN PROIZWODITSQ WSEGDA, ESLI NE UKAZANO set overloadresolution off. sM. rAZDEL 9.4.1.7 [wOZMOVNOSTI GDB DLQ sI++], S. 85.

wY DOLVNY UKAZATX set overload-resolution off, ^TOBY ZADATX FUNKCI@ QWNO PRI WYZOWE PEREGRUVENNOJ FUNKCII, KAK W PRIMERE

p 'foo(char,int)'('x', 13)

wOZMOVNOSTI GDB DLQ ZAWER[ENIQ KOMAND MOGUT UPROSTITX \TO; SMOTRITE rAZDEL 3.2 [zAWER[ENIE KOMAND], S. 15.

4.GDB PONIMAET PEREMENNYE, OB_QWLENNYE KAK SSYLKI sI++; WY MOVETE ISPOLXZOWATX IH W WYRAVENIQH, TO^NO KAK WY DELAETE W ISHODNOM TEKSTE sI++|ONI AWTOMATI^ESKI RAZYMENOWYWA@TSQ.

w SPISKE PARAMETROW, POKAZYWAEMOM GDB PRI OTOBRAVENII KADRA STEKA, ZNA^ENIQ PEREMENNYH-SSYLOK NE OTOBRAVA@TSQ (W OTLI^IE OT DRUGIH PEREMENNYH); \TO POZWOLQET IZBEVATX NEUDOBSTW IZ-ZA TOGO, ^TO SSYLKI ^ASTO ISPOLXZU@TSQ DLQ BOLX[IH STRUKTUR. aDRES PEREMENNOJ-SSYLKI WSEGDA WYWODITSQ, ESLI TOLXKO WY NE USTANOWILI

`set print address off'.

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

85

5.GDB PODDERVIWAET OPERATOR sI++ OPREDELENIQ OBLASTI WIDIMOSTI IMENI ::|WA[I WYRAVENIQ MOGUT ISPOLXZOWATX EGO TAK VE, KAK W WA[EJ PROGRAMME. tAK KAK ODNA OBLASTX WIDIMOSTI MOVET BYTX OPREDELENA WNUTRI DRUGOJ, WY MOVETE PRI NEOBHODIMOSTI NEODNOKRATNO ISPOLXZOWATX ::, NAPRIMER, W WYRAVENII TIPA `OBL1::OBL2::IMQ'. GDB TAKVE POZWOLQET OPREDELITX OBLASTX WIDIMOSTI IMENI PUTEM SSYLKI NA ISHODNYJ FAJL, PRI OTLADKE KAK sI, TAK I sI++ (SM. rAZDEL 8.2 [pEREMENNYE PROGRAMMY],

S. 62).

kROME TOGO, PRI ISPOLXZOWANII S KOMPILQTOROM HP sI++, GDB PRAWILXNO PODDERVIWAET WYZOW WIRTUALXNYH FUNKCIJ, WYWOD WIRTUALXNYJ BAZ OB_EKTOW, WYZOW FUNKCIJ W BAZOWOM PODOB_EKTE, PRIWEDENIE OB_EKTOW I WYPOLNENIE OPERATOROW, OPREDELENNYH POLXZWATELEM.

9.4.1.4 zNA^ENIQ sI I sI++ PO UMOL^ANI@

eSLI WY RAZRE[AETE GDB USTANAWLIWATX PROWERKI DIAPAZONA I PRINADLEVNOSTI TIPU AWTOMATI^ESKI, OBE ONI PO UMOL^ANI@ OTKL@^ENY, ESLI RABO^IJ QZYK IZMENQETSQ NA sI ILI sI++. |TO PROISHODIT NEZAWISIMO OT TOGO, WYBIRAETE RABO^IJ QZYK WY ILI GDB.

eSLI WY RAZRE[AETE GDB USTANAWLIWATX QZYK AWTOMATI^ESKI, ON RASPOZNAET ISHODNYE FAJLY, ^XI IMENA ZAKAN^IWA@TSQ RAS[IRENIEM `.c', `.C' ILI `.cc', I TAK DALEE, I KOGDA GDB NA^INAET OBRABOTKU KODA, SKOMPILIROWANNOGO IZ ODNOGO IZ \TIH FAJLOW, ON USTANAWLIWAET RABO^IJ QZYK W sI ILI sI++. sM. rAZDEL 9.1.3 [rASPOZNAWANIE GDB RABO^EGO QZYKA], S. 78, DLQ BOLEE PODROBNOGO OBSUVDENIQ.

9.4.1.5 pROWERKI DIAPAZONA I PRINADLEVNOSTI TIPU W sI I sI++

kOGDA GDB PROIZWODIT RAZBOR WYRAVENIJ sI ILI sI++, PO UMOL^ANI@ PROWERKI SOOTWETSTWIQ TIPOW NE PROWODQTSQ. oDNAKO, ESLI WY IH WKL@^ITE, GDB S^ITAET TIPY DWUH PEREMENNYH \KWIWALENTNYMI, ESLI:

oBE PEREMENNYE STRUKTURIROWANY I IME@T ODIN I TOT VE TEG STRUKTURY, OB_EDINENIQ ILI PERE^ISLENIQ.

iMENA TIPOW OBEIH PEREMENNYH SOWPADA@T ILI BYLI OB_QWLENY \KWIWALENTNYMI ^EREZ typedef.

pROWERKA DIAPAZONA, ESLI ONA WKL@^ENA, WYPOLNQETSQ DLQ MATEMATI^ESKIH OPERACIJ. iNDEKSY MASSIWOW NE PROWERQ@TSQ, TAK KAK ONI ^ASTO PRIMENQ@TSQ DLQ INDEKSIROWANIQ UKAZATELEJ, KOTORYE SAMI PO SEBE MASSIWAMI NE QWLQ@TSQ.

9.4.1.6 GDB I sI

kOMANDY set print union I show print union PRIMENIMY K TIPU union. pRI USTANOWKE W `on', L@BYE OB_EDINENIQ, NAHODQ]IESQ WNUTRI STRUKTURY ILI KLASSA, TAKVE WYWODQTSQ. w PROTIWNOM SLU^AE, ONI OTOBRAVA@TSQ KAK `{...}'.

oPERATOR @ POMOGAET PRI OTLADKE DINAMI^ESKIH MASSIWOW, SFORMIROWANNYH S POMO]X@ UKAZATELEJ I FUNKCII WYDELENIQ PAMQTI. sM. rAZDEL 8.1 [wYRAVENIQ], S. 61.

9.4.1.7 wOZMOVNOSTI GDB DLQ sI++

nEKOTORYE KOMANDY GDB OSOBENNO POLEZNY PRI ISPOLXZOWANII S sI++, A NEKOTORYE RAZRABOTANY SPECIALXNO DLQ NEGO. nIVE PRIWEDENO IH KRATKOE OPISANIE:

MEN@ TO^KI OSTANOWA

kOGDA WY HOTITE USTANOWITX TO^KU OSTANOWA W PEREGRUVENNOJ FUNKCII, MEN@ TO^KI OSTANOWA GDB POMOGAET WAM UKAZATX, KAKOE OPREDELENIE FUNKCII WAM NUVNO. sM. rAZDEL 5.1.8 [mEN@ TO^KI OSTANOWA], S. 42.

86

oTLADKA S POMO]X@ GDB

rbreak REG-WYR

uSTANOWKA TO^EK OSTANOWA PRI POMO]I REGULQRNYH WYRAVENIJ POLEZNA PRI ISPOLXZOWANII PEREGRUVENNYH FUNKCIJ, NE QWLQ@]IHSQ ^LENAMI SPECIALXNYH KLASSOW. sM. rAZDEL 5.1.1 [uSTANOWKA TO^EK OSTANOWA], S. 32.

catch throw catch catch

oTLAVIWAJTE OBRABOTKU ISKL@^ENIJ sI++ S POMO]X@ \TIH KOMAND. sM. rAZDEL 5.1.3 [uSTANOWKA TO^EK PEREHWATA], S. 37.

ptype IMQ-TIPA

wYWESTI OTNO[ENIQ NASLEDOWANIQ WMESTE S DRUGOJ INFORMACIEJ DLQ TIPA IMQTIPA. sM. gLAWA 10 [iSSLEDOWANIE TABLICY SIMWOLOW], S. 97.

set print demangle show print demangle set print asm-demangle show print asm-demangle

uPRAWLQET OTOBRAVENIEM SIMWOLOW sI++ W IH ISHODNOJ FORME, KAK PRI WYWODE KODA W WIDE ISHODNOGO TEKSTA sI++, TAK I PRI WYWODE REZULXTATA DISASSEMBLIROWANIQ. sM. rAZDEL 8.7 [pARAMETRY WYWODA], S. 68.

set print object show print object

wYBRATX, WYWODITX PROIZWODNYE (REALXNYE) ILI OPISANNYE TIPY OB_EKTOW. sM. rAZDEL 8.7 [pARAMETRY WYWODA], S. 68.

set print vtbl show print vtbl

uPRAWLQET FORMATOM WYWODA TABLIC WIRTUALXNYH FUNKCIJ. sM. rAZDEL 8.7 [pARAMETRY WYWODA], S. 68. (kOMANDY vtbl NE RABOTA@T DLQ PROGRAMM, SKOMPILIROWANNYH KOMPILQTOROM HP ANSI sI++ (aCC).)

set overload-resolution on

wKL@^ITX RAZRE[ENIE PEREGRUVENNYH SIMWOLOW PRI WY^ISLENII WYRAVENIJ sI++. zNA^ENIE PO UMOL^ANI@ on. dLQ PEREGRUVENNYH FUNKCIJ, GDB WY^ISLQET ARGUMENTY I I]ET FUNKCII, ^XI SIGNATURY UDOWLETWORQ@T TIPAM ARGUMENTOW, ISPOLXZUQ STANDARTNYE PRAWILA PREOBRAZOWANIQ sI++ (SMOTRITE rAZDEL 9.4.1.3 [wYRAVENIQ sI++], S. 84, DLQ DOPOLNITELXNOJ INFORMACII). eSLI GDB NE MOVET NAJTI TAKIE FUNKCII, ON WYWODIT SOOB]ENIE.

set overload-resolution off

oTKL@^ITX RAZRE[ENIE PEREGRUVENNYH SIMWOLOW PRI WY^ISLENII WYRAVENIJ sI++. dLQ PEREGRUVENNYH FUNKCIJ, NE QWLQ@]IHSQ FUNKCIQMI-^LENAMI KLASSA, GDB WYBIRAET FUNKCI@ S UKAZANNYM IMENEM, KOTORU@ ON PERWOJ NAHODIT W TABLICE SIMWOLOW, W NE ZAWISIMOSTI OT TOGO, PRAWILXNOGO TIPA EE ARGUMENTY ILI NET. dLQ PEREGRUVENNYH FUNKCIJ, QWLQ@]IHSQ FUNKCIQMI-^LENAMI KLASSA, GDB I]ET FUNKCI@, ^XQ SIGNATURA TO^NO SOWPADAET S TIPAMI ARGUMENTOW.

pEREGRUVENNYE IMENA SMIWOLOW

wY MOVETE UKAZATX KONKRETNOE OPREDELENIE PEREGRUVENNOGO SIMWOLA, ISPOLXZUQ TU VE ZAPISX, ^TO I DLQ OB_QWLENIQ TAKIH SIMWOLOW W sI++: WWEDITE SIMWOL(TIPY) WMESTO PROSTO SIMWOL. wY TAKVE MOVETE WOSPOLXZOWATXSQ SREDSTWAMI ZAWER[ENIQ SLOWA KOMANDNOJ STROKI GDB, ^TOBY WYWESTI SPISOK WOZMOVNYH WARIANTOW, ILI ^TOBY ZAWER[ITX NABOR ZA WAS. sM. rAZDEL 3.2 [zAWER[ENIE KOMAND], S. 15, DLQ PODROBNOGO OBSUVDENIQ, KAK \TO SDELATX.

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

87

9.4.2 mODULA-2

rAS[IRENIQ, SDELANNYE W GDB DLQ PODDERVKI mODULY-2, PODDERVIWA@TSQ TOLXKO DLQ PROGRAMM, SKOMPILIROWANNYH gnu KOMPILQTOROM mODULY-2 (KOTORYJ SEJ^AS RAZRABATYWAETSQ). dRUGIE KOMPILQTORY mODULY-2 W NASTOQ]EE WREMQ NE PODDERVIWA@TSQ, I POPYTKA OTLADKI ISPOLNQEMYH PROGRAMM, POLU^ENNYH IMI, SKOREE WSEGO PRIWEDET K O[IBKE PRI S^ITYWANII GDB TABLICY SIMWOLOW \TOJ PROGRAMMY.

9.4.2.1 oPERATORY mODULY-2

oPERATORY DOLVNY BYTX OPREDELENY NA ZNA^ENIQH OPREDELENNYH TIPOW. nAPRIMER, + OPREDELEN NA ^ISLAH, NO NE NA STRUKTURAH. oPERATORY ^ASTO OPREDELQ@TSQ NA GRUPPAH TIPOW. dLQ CELEJ mODULY-2, IME@T MESTO SLEDU@]IE OPREDELENIQ:

cELYE TIPY SOSTOQT IZ INTEGER, CARDINAL I IH PODDIAPAZONOW.

sIMWOLXNYE TIPY SOSTOQT IZ CHAR I EGO PODDIAPAZONOW.

tIPY S PLAWA@]EJ TO^KOJ SOSTOQT IZ REAL.

tIPY-UKAZATELI SOSTOQT IZ WSEGO, OB_QWLENNOGO KAK POINTER TO TIP.

sKALQRNYE TIPY WKL@^A@T WSE WY[EPERE^ISLENNOE.

tIPY-MNOVESTWA SOSTOQT IZ TIPOW SET I BITSET.

bULEWYJ TIP SOSTOIT IZ BOOLEAN.

pODDERVIWA@TSQ SLEDU@]IE OPERATORY; ONI PREDSTAWLENY W PORQDKE WOZRASTANIQ PRIORITETA:

,rAZDELITELX ARGUMENTOW FUNKCII ILI INDEKSOW MASSIWA.

:=

pRISWAIWANIE. zNA^ENIEM PEREM := ZNA^ QWLQETSQ ZNA^.

<, >

mENX[E ^EM, BOLX[E ^EM DLQ CELO^ISLENNYH TIPOW, TIPOW S PLAWA@]EJ TO^KOJ

 

I PERE^ISLIMYH TIPOW.

<=, >=

mENX[E ILI RAWNO, BOLX[E ILI RAWNO. oPREDELENO NA CELO^ISLENNYH TIPAH,

 

TIPAH S PLAWA@]EJ TO^KOJ I PERE^ISLIMYH TIPAH. wKL@^ENIE DLQ MNOVESTW.

 

tAKOJ VE PRIORITET, KAK U <.

=, <>, #

rAWENSTWO I DWA SPOSOBA WYRAVENIQ NERAWENSTWA; DOPUSTIMO NA SKALQRNYH TI-

 

PAH. tAKOJ VE PRIORITET, KAK U <. w SCENARIQH GDB, DLQ NERAWENSTWA DOPU-

 

STIMO TOLXKO <>, TAK KAK # KONFLIKTUET SO ZNAKOM KOMMENTARIQ.

IN

uSTANOWKA PRINADLEVNOSTI. oPREDELENO NA MNOVESTWAH I TIPAH IH \LEMENTOW.

 

tAKOJ VE PRIORITET, KAK U <.

OR

dIZ_@NKCIQ (LOGI^ESKOE ili). oPREDELENA NA BULEWYH TIPAH.

AND, &

kON_@NKCIQ (LOGI^ESKOE i). oPREDELENA NA BULEWYH TIPAH.

@oPERATOR \ISKUSSTWENNOGO MASSIWA" GDB (SM. rAZDEL 8.1 [wYRAVENIQ], S. 61).

+, - sLOVENIE I WY^ITANIE NA CELO^ISLENNYH TIPAH I TIPAH S PLAWA@]EJ TO^KOJ, ILI OB_EDINENIE I RAZNOSTX NA MNOVESTWENNYH TIPAH.

*uMNOVENIE NA CELO^ISLENNYH TIPAH I TIPAH S PLAWA@]EJ TO^KOJ, ILI PERESE- ^ENIE NA TIPAH-MNOVESTWAH.

/dELENIE NA TIPAH S PLAWA@]EJ TO^KOJ. sIMMETRI^ESKAQ RAZNOSTX MNOVESTW NA TIPAH-MNOVESTWAH. tAKOJ VE PRIORITET, KAK U *.

DIV, MOD cELO^ISLENNOE DELENIE I OSTATOK. oPREDELENY NA CELO^ISLENNYH TIPAH. tAKOJ VE PRIORITET, KAK U *.

CHR(i) DEC(v) DEC(v,i) EXCL(m,s)
FLOAT(i)

88

oTLADKA S POMO]X@ GDB

-oTRICANIE. oPREDELENO NA DANNYH TIPOW INTEGER I REAL.

^rAZYMENOWYWANIE UKAZATELQ. oPREDELENO NA TIPAH-UKAZATELQH.

NOT bULEWO OTRICANIE. oPREDELENO NA BULEWYH TIPAH. tAKOJ VE PRIORITET, KAK U

^.

.sELEKTOR POLEJ RECORD. oPREDELEN DLQ DANNYH TIPA RECORD. tAKOE VE PRIORITET, KAK U ^.

[]

iNDEKSACIQ MASSIWA. oPREDELENA DLQ DANNYH TIPA ARRAY. tAKOJ VE PRIORITET,

 

KAK U ^.

()

sPISOK PARAMETROW PROCEDURY. oPREDELEN NA OB_EKTAH PROCEDURE. tAKOJ VE

 

PRIORITET, KAK U ^.

::, .

oPERATORY GDB I mODULY-2 OPREDELENIQ OBLASTI WIDIMOSTI.

pREDUPREVDENIE: mNOVESTWA I OPERACII NAD NIMI E]E NE PODDERVIWA@TSQ, TAK ^TO GDB TRAKTUET ISPOLXZOWANIE OPERATORA IN ILI OPERATOROW +, -, *, /, =, , <>, #, <=, I >= NA MNOVESTWAH KAK O[IBKU.

9.4.2.2 wSTROENNYE FUNKCII I PROCEDURY

mODULA-2 TAKVE DELAET DOSTUPNYMI NESKOLXKO WSTROENNYH PROCEDUR I FUNKCIJ. pRI IH OPISANII, ISPOLXZU@TSQ SLEDU@]IE METAPEREMENNYE:

aPREDSTAWLQET PEREMENNU@ TIPA ARRAY.

cPREDSTAWLQET KONSTANTU ILI PEREMENNU@ TIPA CHAR.

iPREDSTAWLQET PEREMENNU@ ILI KONSTANTU CELOGO TIPA.

mPREDSTAWLQET IDENTIFIKATOR, PRINADLEVA]IJ MNOVESTWU. oBY^NO ISPOLXZUETSQ W ODNOJ FUNKCII S METAPEREMENNOJ s. tIP s DOLVEN BYTX SET OF METATIP

(GDE METATIP|TIP m).

nPREDSTAWLQET PEREMENNU@ ILI KONSTANTU CELOGO TIPA ILI TIPA S PLAWA@]EJ TO^KOJ.

rPREDSTAWLQET PEREMENNU@ ILI KONSTANTU TIPA S PLAWA@]EJ TO^KOJ.

tPREDSTAWLQET TIP.

vPREDSTAWLQET PEREMENNU@.

xPREDSTAWLQET PEREMENNU@ ILI KONSTANTU ODNOGO IZ NESKOLXKIH TIPOW. sMOTRITE POQSNENIE K FUNKCII DLQ DOPOLNITELXNOJ INFORMACII.

nIVE OPISANY WSE WSTROENNYE PROCEDURY mODULY-2, WOZWRA]A@]IE REZULXTAT.

ABS(n) wOZWRA]AET ABSOL@TNOE ZNA^ENIE n.

CAP(c) eSLI c|SIMWOL NIVNEGO REGISTRA, PROCEDURA WOZWRA]AET EGO \KWIWALENT W WERHNEM REGISTRE, INA^E WOZWRA]AET SAM ARGUMENT.

wOZWRA]AET SIMWOL, PORQDKOWOE ZNA^ENIE KOTOROGO ESTX i.

uMENX[AET ZNA^ENIE PEREMENNOJ v NA EDINICU. wOZWRA]AET NOWOE ZNA^ENIE. uMENX[AET ZNA^ENIE PEREMENNOJ v NA i. wOZWRA]AET NOWOE ZNA^ENIE.

uDALQET \LEMENT m IZ MNOVESTWA s. wOZWRA]AET NOWOE MNOVESTWO. wOZWRA]AET \KWIWALENT CELOGO ^ISLA i W FORMATE S PLAWA@]EJ TO^KOJ.

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

89

HIGH(a) wOZWRA]AET INDEKS POSLEDNEGO \LEMENTA a.

INC(v) uWELI^IWAET ZNA^ENIE PEREMENNOJ v NA EDINICU. wOZWRA]AET NOWOE ZNA^ENIE.

INC(v,i) uWELI^IWAET ZNA^ENIE PEREMENNOJ v NA i. wOZWRA]AET NOWOE ZNA^ENIE.

INCL(m,s)

dOBAWLQET \LEMENT m W MNOVESTWO s, ESLI EGO TAM E]E NET. wOZWRA]AET NOWOE MNOVESTWO.

MAX(t) wOZWRA]AET MAKSIMALXNOE ZNA^ENIE TIPA t.

MIN(t) wOZWRA]AET MINIMALXNOE ZNA^ENIE TIPA t.

ODD(i) wOZWRA]AET BULEWO ZNA^ENIE TRUE, ESLI ^ISLO i NE^ETNO.

ORD(x) wOZWRA]AET PORQDKOWOE ZNA^ENIE SWOEGO ARGUMENTA. nAPRIMER, PORQDKOWOE ZNA- ^ENIE SIMWOLA|EGO ascii-ZNA^ENIE (NA MA[INAH, PODDERVIWA@]IH NABOR SIMWOLOW ascii). x DOLVNA PRINADLEVATX UPORQDO^ENNOMU TIPU, ^TO WKL@^AET CELO^ISLENNYE, SIMWOLXNYJ I PERE^ISLIMYJ TIPY.

SIZE(x) wOZWRA]AET RAZMER ARGUMENTA. x MOVET BYTX PEREMENNOJ ILI TIPOM.

TRUNC(r) wOZWRA]AET CELU@ ^ASTX r.

VAL(t,i) wOZWRA]AET \LEMENT TIPA t, PORQDKOWOE ZNA^ENIE KOTOROGO ESTX i.

pREDUPREVDENIE: mNOVESTWA I OPERACII NAD NIMI E]E NE PODDERVIWA@TSQ, TAK ^TO GDB RASSMATRIWAET ISPOLXZOWANIE PROCEDUR INCL I EXCL KAK O[IBKU.

9.4.2.3 kONSTANTY

GDB POZWOLQET WAM WYRAVATX KONSTANTY mODULY-2 SLEDU@]IMI SPOSOBAMI:

cELYE KONSTANTY QWLQ@TSQ PROSTO POSLEDOWATELXNOSTX@ CIFR. pRI ISPOLXZOWANII W WYRAVENII, KONSTANTA INTERPRETIRUETSQ TAK, ^TOBY BYTX SOWMESTIMOJ PO TIPU S OSTALXNOJ ^ASTX@ WYRAVENIQ. {ESTNADCATERI^NYE CELYE ^ISLA OPREDELQ@TSQ OKON- ^ANIEM `H', A WOSXMERI^NYE| OKON^ANIEM `B'.

kONSTANTY S PLAWA@]EJ TO^KOJ ZADA@TSQ KAK POSLEDOWATELXNOSTX CIFR, ZA KOTOROJ SLEDUET DESQTI^NAQ TO^KA I DRUGAQ POSLEDOWATELXNOSTX CIFR. nEOBQZATELXNYJ PORQDOK MOVET BYTX ZADAN W FORME `E[+|-]nnn', GDE `[+|-]nnn' I ESTX VELAEMYJ PORQDOK. wSE CIFRY KONSTANTY S PLAWA@]EJ TO^KOJ DOLVNY BYTX DESQTI^NYMI (PO OSNOWANI@ 10).

sIMWOLXNYE KONSTANTY SOSTOQT IZ ODINO^NYH SIMWOLOW, ZAKL@^ENNYH W PARU ODINAKOWYH KAWY^EK: LIBO ODINO^NYH ('), LIBO DWOJNYH ("). oNI TAKVE MOGUT BYTX ZADANY SWOIM PORQDKOWYM ZNA^ENIEM (OBY^NO ascii-ZNA^ENIEM), ZA KOTORYM SLEDUET `C'.

sTROKOWYE KONSTANTY SOSTOQT IZ POSLEDOWATELXNOSTI SIMWOLOW, OKRUVENNYH PAROJ ODINAKOWYH KAWY^EK: LIBO ODINO^NYH ('), LIBO DWOJNYH ("). tAKVE DOPUSKA@TSQ \KRANIRU@]IE POSLEDOWATELXNOSTI W STILE sI. sM. rAZDEL 9.4.1.2 [kONSTANTY sI I sI++], S. 83, DLQ KRATKOGO OB_QSNENIQ \KRANIRU@]IH POSLEDOWATELXNOSTEJ.

pERE^ISLIMYE KONSTANTY SOSTOQT IZ PERE^ISLIMOGO IDENTIFIKATORA.

bULEWY KONSTANTY SOSTOQT IZ IDENTIFIKATOROW TRUE I FALSE.

kONSTANTY-UKAZATELI SOSTOQT TOLXKO IZ CELO^ISLENNYH ZNA^ENIJ.

kONSTANTY-MNOVESTWA POKA NE PODDERVIWA@TSQ.

90

oTLADKA S POMO]X@ GDB

9.4.2.4 uSTANOWKI PO UMOL^ANI@ mODULY-2

eSLI PROWERKA DIAPAZONA ILI PRINADLEVNOSTI TIPU USTANAWLIWAETSQ GDB AWTOMATI- ^ESKI, TO PO UMOL^ANI@ OBE ONI USTANAWLIWA@TSQ W on, ESLI RABO^IM QZYKOM STANOWITSQ mODULA-2. |TO PROISHODIT NEZAWISIMO OT TOGO, KTO WYBRAL RABO^IJ QZYK|WY ILI GDB.

eSLI WY RAZRE[AETE GDB WYBIRATX QZYK AWTOMATI^ESKI, TO PRI ANALIZE KODA, SKOMPILIROWANNOGO IZ FAJLA, ^XE IMQ OKAN^IWAETSQ NA `.mod', GDB USTANOWIT RABO^IM QZYKOM mODULU-2. sM. rAZDEL 9.1.3 [rASPOZNAWANIE GDB ISHODNOGO QZYKA], S. 78, DLQ DOPOLNITELXNOJ INFORMACII.

9.4.2.5 oTKLONENIQ OT STANDARTA mODULY-2

dLQ UPRO]ENIQ OTLADKI PROGRAMM NA mODULE-2 BYLO SDELANO NESKOLXKO IZMENENIJ. w OSNOWNOM, \TO SDELANO PUTEM OSLABLENIQ STROGOSTI KONTROLQ TIPOW:

w OTLI^IE OT STANDARTA mODULY-2, KONSTANTY-UKAZATELI MOGUT BYTX SFORMIROWANY CELYMI ^ISLAMI. |TO POZWOLQET WAM IZMENQTX PEREMENNYE-UKAZATELI W PROCESSE OTLADKI. (w STANDARTE mODULY-2, REALXNYJ ADRES, SODERVA]IJSQ W PEREMENNOJUKAZATELE, SKRYT OT WAS; EGO MOVNO IZMENITX LI[X PRQMYM PRISWAIWANIEM ZNA^ENIQ DRUGOJ PEREMENNOJ-UKAZATELQ ILI WYRAVENIQ, WOZWRA]A@]EGO UKAZATELX.)

|KRANIRU@]IE POSLEDOWATELXNOSTI sI MOGUT ISPOLXZOWATXSQ W STROKAH I SIMWOLAH, ^TOBY PREDSTAWITX NEPE^ATAEMYE SIMWOLY. GDB WYWODIT STROKI SO WSTROENNYMI \KRANIRU@]IMI POSLEDOWATELXNOSTQMI. oDINO^NYE NEPE^ATAEMYE SIMWOLY WYWODQTSQ S POMO]X@ FORMATA `CHR(nnn)'.

oPERATOR PRISWAIWANIQ (:=) WOZWRA]AET ZNA^ENIE SWOEGO PRAWOGO ARGUMENTA.

wSE WSTROENNYE PROCEDURY KAK IZMENQ@T, TAK I WOZWRA]A@T SWOJ ARGUMENT.

9.4.2.6 pROWERKI DIAPAZONA I PRINADLEVNOSTI TIPU mODULY-2

pREDUPREVDENIE: W \TOM WYPUSKE, GDB E]E NE WYPOLNQET PROWERKI DIAPAZONA I PRINADLEVNOSTI TIPU.

GDB S^ITAET DWE PEREMENNYE mODULY-2 \KWIWALENTNYMI PO TIPU, ESLI:

iH TIPY BYLI OB_QWLENY \KWIWALENTNYMI POSREDSTWOM OPERATORA TYPE t1 = t2

oNI BYLI OB_QWLENY NA ODNOJ I TOJ VE STROKE. (pRIME^ANIE: |TO WERNO DLQ KOMPILQTORA gnu mODULA-2, NO \TO MOVET NE WYPOLNQTSQ DLQ DRUGIH KOMPILQTOROW.)

pOKA PROWERKA SOOTWETSTWIQ TIPOW WKL@^ENA, L@BAQ POPYTKA SKOMBINIROWATX PEREMENNYE NE \KWIWALENTNYH TIPOW QWLQETSQ O[IBKOJ.

pROWERKA DIAPAZONA WYPOLNQETSQ WO WSEH MATEMATI^ESKIH OPERACIQH, PRISWAIWANIQH, PRI INDEKSACII MASSIWOW I WO WSEH WSTROENNYH FUNKCIQH I PROCEDURAH.

9.4.2.7 oPERATORY OPREDELENIQ OBLASTI WIDIMOSTI :: I .

sU]ESTWUET NESKOLXKO TONKIH RAZLI^IJ MEVDU OPERATORAMI OBLASTI WIDIMOSTI mODU- LY-2 (.) I GDB (::). oBA IME@T POHOVIJ SINTAKSIS:

MODULX . IDENT

OBLASTX :: IDENT

GDE OBLASTX|IMQ MODULQ ILI PROCEDURY, MODULX|IMQ MODULQ, A IDENT|L@BOJ IDENTIFIKATOR, OPISANNYJ W PREDELAH WA[EJ PROGRAMMY, ZA ISKL@^ENIEM DRUGOGO MODULQ.

iSPOLXZOWANIE OPERATORA :: ZASTAWLQET GDB ISKATX IDENTIFIKATOR IDENT W OBLASTI. eSLI ON W NEJ NE NAJDEN, GDB I]ET EGO WO WSEH OBLASTQH, SODERVA]IH OBLASTX.

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

91

iSPOLXZOWANIE OPERATORA . ZASTAWLQET GDB ISKATX IDENTIFIKATOR IDENT, KOTORYJ BYL IMPORTIROWAN IZ MODULQ OPREDELENIQ MODULX, W TEKU]EJ OBLASTI WIDIMOSTI. w \TOM OPERATORE c^ITAETSQ O[IBKOJ, ESLI IDENTIFIKATOR IDENT NE BYL IMPORTIROWAN IZ MODULQ OPREDELENIQ MODULX, ILI ESLI IDENT NE QWLQETSQ W NEM IDENTIFIKATOROM.

9.4.2.8 GDB I mODULA-2

nEKOTORYE KOMANDY GDB IME@T MALO SMYSLA PRI OTLADKE PROGRAMM NA mODULE-2. pQTX PODKOMAND IZ KOMAND set print I show print PRIMENIMY ISKL@^ITELXNO K sI I sI++: `vtbl', `demangle', `asm-demangle', `object' I `union'. pERWYE ^ETYRE PRIMENIMY K sI++, A POSLEDNQQ K TIPU sI union, KOTORYJ NE IMEET PRQMOGO ANALOGA W mODULE-2.

oPERATOR @ (SM. rAZDEL 8.1 [wYRAVENIQ], S. 61) HOTX I DOSTUPEN PRI ISPOLXZOWANII L@BOGO QZYKA, BESPOLEZEN PRI RABOTE S mODULOJ-2. eGO CELX SOSTOIT W TOM, ^TOBY POMO^X PRI OTLADKE DINAMI^ESKIH MASSIWOW, KOTORYE NE MOGUT BYTX SOZDANY W mODULE-2 W OTLI^IE OT sI ILI sI++. oDNAKO, KONSTRUKCIQ `{TIP}ADR-WYR' WSE VE POLEZNA, TAK KAK ADRES MOVET BYTX OPREDELEN CELO^ISLENNOJ KONSTANTOJ.

w SCENARIQH GDB, OPERATOR NERAWENSTWA mODULY-2 # INTERPRETIRUETSQ KAK NA^ALO KOMMENTARIQ. iSPOLXZUJTE WMESTO NEGO <>.

9.4.3 Chill

rAS[IRENIQ, SDELANNYE W GDB DLQ PODDERVKI Chill, RABOTA@T TOLXKO S PROGRAMMAMI, SOZDANNYMI KOMPILQTOROM gnu Chill. dRUGIE KOMPILQTORY Chill W NASTOQ]EE WREMQ NE PODDERVIWA@TSQ, I POPYTKA OTLADITX PROGRAMMY, POLU^ENNYE S IH POMO]X@, SKOREE WSEGO PRIWEDET K O[IBKE W TOT MOMENT, KOGDA GDB BUDET S^ITYWATX TABLICU SIMWOLOW WYPOLNQEMOGO FAJLA.

|TOT RAZDEL OHWATYWAET TEMY, SWQZANNYE S Chill, I WOZMOVNOSTI GDB DLQ IH PODDERV-

KI.

9.4.3.1 kAK OTOBRAVA@TSQ REVIMY

pODDERVKA GDB TIPOW DANNYH (REVIMOW) Chill NEPOSREDSTWENNO SWQZANA S WOZMOVNOSTQMI KOMPILQTORA gnu Chill, I, SLEDOWATELXNO, SLEGKA OTLI^AETSQ OT STANDARTNOJ SPECIFIKACII QZYKA. wOT PREDOSTAWLQEMYE REVIMY:

dISKRETNYE REVIMY:

cELO^ISLENNYE REVIMY, KOTORYE PREDOPREDELENY KAK BYTE, UBYTE, INT, UINT, LONG, ULONG,

bULEWSKIJ REVIM, KOTORYJ PREDOPREDELEN KAK BOOL,

sIMWOLXNYJ REVIM, KOTORYJ PREDOPREDELEN KAK CHAR,

rEVIM-MNOVESTWO, KOTORYJ OTOBRAVAETSQ KL@^EWYM SLOWOM SET.

(gdb) ptype x

type = SET (karli = 10, susi = 20, fritzi = 100)

eSLI TIP QWLQETSQ NENUMEROWANNYM MNOVESTWOM, ZNA^ENIQ \LEMENTOW MNOVESTWA OPUSKA@TSQ.

rEVIM-DIAPAZON, KOTORYJ OTOBRAVAETSQ KAK

TIP = <BAZOWYJ-REVIM>(<NIVNQQ GRANICA> : <WERHNQQ GRANICA>)

GDE <NIVNQQ GRANICA>, <WERHNQQ GRANICA> MOVET BYTX L@BYM DISKRET-

NYM BUKWENNYM WYRAVENIEM (NAPRIMER, IMENA \LEMENTOW MNOVESTWA).

rEVIM powerset:

rEVIM Powerset OTOBRAVAETSQ KL@^EWYM SLOWOM POWERSET, ZA KOTORYM SLEDUET REVIM \LEMENTA.

92

oTLADKA S POMO]X@ GDB

(gdb) ptype x

type = POWERSET SET (egon, hugo, otto)

rEVIMY-SSYLKI:

rEVIM PRIWQZANNOJ SSYLKI, KOTORYJ OTOBRAVAETSQ KL@^EWYM SLOWOM REF, ZA KOTORYM SLEDUET NAZWANIE REVIMA, K KOTOROMU SSYLKA PRIWQZANA.

rEVIM SWOBODNOJ SSYLKI, KOTORYJ OTOBRAVAETSQ KL@^EWYM SLOWOM PTR.

pROCEDURNYJ REVIM

pROCEDURNYJ REVIM OTOBRAVAETSQ W WIDE TIP = PROC(<SPISOK PARAMETROW>) <WOZWRA]AEMYJ REVIM> EXCEPTIONS (<SPISOK ISKL@^ENIJ>). <SPISOK PARAMET ROW> PREDSTAWLQET SOBOJ SPISOK REVIMOW PARAMETROW. <WOZWRA]AEMYJ REVIM> UKAZYWAET REVIM REZULXTATA PROCEDURY, ESLI ONA WOZWRA]AET REZULXTAT. <SPISOK ISKL@^ENIJ> PERE^ISLQET WSE WOZMOVNYE ISKL@^ENIQ, KOTORYE MOGUT BYTX WOZBUVDENY PROCEDUROJ.

sINHRONIZACIONNYE REVIMY:

rEVIM SOBYTIQ, KOTORYJ OTOBRAVAETSQ KAK

EVENT (<DLINA SOBYTIQ>)

GDE <DLINA SOBYTIQ> QWLQETSQ NEOBQZATELXNOJ.bUFERNYJ REVIM, KOTORYJ OTOBRAVAETSQ KAK

BUFFER (<DLINA BUFERA>)<REVIM ELEMENTOW BUFERA>

GDE (<DLINA BUFERA>) QWLQETSQ NEOBQZATELXNOJ. rEVIMY WREMENI:

rEVIM DLITELXNOSTI, KOTORYJ PREDOPREDELEN KAK DURATION

rEVIM ABSOL@TNOGO WREMENI, KOTORYJ PREDOPREDELEN KAK TIME

wE]ESTWENNYE REVIMY:

wE]ESTWENNYE REVIMY PREDOPREDELENY KAK REAL I LONG_REAL.

sTROKOWYE REVIMY:

rEVIM STROKI SIMWOLOW, KOTORYJ OTOBRAVAETSQ KAK

CHARS(<DLINA STROKI>)

ZA KOTORYM SLEDUET KL@^EWOE SLOWO VARYING, ESLI STROKOWYJ REVIM QWLQETSQ IZMENQ@]IMSQ REVIMOM

rEVIM STROKI BITOW, KOTORYJ OTOBRAVAETSQ KAK

BOOLS(<DLINA STROKI>)

rEVIM MASSIWA:

rEVIM MASSIWA OTOBRAVAETSQ KL@^EWYM SLOWOM ARRAY(<DIAPAZON>), ZA KOTORYM SLEDUET REVIM \LEMENTOW (KOTORYJ, W SWO@ O^EREDX, MOVET BYTX REVIMOM MASSIWA).

(gdb) ptype x

type = ARRAY (1:42) ARRAY (1:20)

SET (karli = 10, susi = 20, fritzi = 100)

sTRUKTURNYJ REVIM

sTRUKTURNYJ REVIM OTOBRAVAETSQ KL@^EWYM SLOWOM STRUCT(<SPISOK POLEJ>). <SPISOK POLEJ> SOSTOIT IZ IMEN I REVIMOW POLEJ STRUKTURY. sTRUKTURY S WARIANTAMI IME@T KL@^EWOE SLOWO CASE <POLE> OF <WARIANTY POLQ> ESAC W IH SPISKE POLEJ. tAK KAK TEKU]AQ WERSIQ KOMPILQTORA gnu Chill NE REALIZUET OBRABOTKU TEGOW (NET PROWEROK WREMENI WYPOLNENIQ WARIANTNYH POLEJ, I, SLEDOWATELXNO, NET OTLADO^NOJ INFORMACII), WYWOD WSEGDA SODERVIT WSE WARIANTNYE POLQ.

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

93

(gdb) ptype str type = STRUCT ( as x,

bs x, CASE bs OF (karli):

cs a (ott):

ds x ESAC

)

9.4.3.2 mESTOPOLOVENIQ I DOSTUP K NIM

mESTOPOLOVENIEM W Chill QWLQETSQ OB_EKT, KOTORYJ MOVET SODERVATX ZNA^ENIQ.

dOSTUP K ZNA^ENI@ MESTOPOLOVENIQ OBY^NO PROIZWODITSQ POSREDSTWOM (OPISANNOGO) IMENI MESTOPOLOVENIQ. wYWOD UDOWLETWORQET SPECIFIKACII ZNA^ENIJ W PROGRAMMAH NA Chill. tO, KAK ZNA^ENIQ ZADA@TSQ, QWLQETSQ TEMOJ SLEDU@]EGO RAZDELA, SMOTRITE rAZDEL 9.4.3.3 [zNA^ENIQ I OPERACII S NIMI], S. 93.

pSEWDO-MESTOPOLOVENIE RESULT (ILI result) MOVET ISPOLXZOWATXSQ DLQ OTOBRAVENIQ ILI IZMENENIQ REZULXTATA PROCEDURY, AKTIWNOJ W NASTOQ]IJ MOMENT:

set result := EXPR

|TO DELAET TO VE SAMOE, ^TO I DEJSTWIE Chill RESULT EXPR (KOTOROE W GDB NEDOSTUPNO).

zNA^ENIQ MESTOPOLOVENIJ REVIMA SSYLOK WYWODQTSQ, W SLU^AE REVIMA SWOBODNOJ SSYL-

KI, POSREDSTWOM PTR(<[ESTNADCATERI^NOE ZNA^ENIE>), I S POMO]X@ (REF <REVIM SSYLKI>) (<[ESTNADCATERI^NOE ZNA^ENIE>) W SLU^AE PRIWQZANNOJ SSYLKI. <[ESTNADCATERI^NOE ZNA^ENIE> PREDSTAWLQET ADRES, NA KOTORYJ UKAZYWAET SSYLKA. dLQ DOSTUPA K ZNA^ENI@ MESTOPOLOVENIQ, UKAZYWAEMOGO SSYLKOJ, ISPOLXZUJTE OPERATOR RAZYMENOWYWANIQ `->'.

zNA^ENIQ MESTOPOLOVENIJ PROCEDURNOGO REVIMA OTOBRAVA@TSQ KAK

{ PROC

(<REVIMY ARGUMENTOW> ) <WOZWRA]AEMYJ REVIM> } <ADRES> <IMQ MESTOPOLOVENIQ PROCEDURY>

<REVIMY ARGUMENTOW>|\TO SPISOK REVIMOW, W SOOTWETSTWII SO SPECIFIKACIEJ PARAMETROW PROCEDURY, A <ADRES> UKAZYWAET ADRES TO^KI WHODA.

pODSTRUKTURY ZNA^ENIJ STROKOWYH REVIMOW, REVIMOW MASSIWOW ILI STRUKTUR (NAPRIMER, SREZY MASSIWOW, POLQ STRUKTURNYH MESTOPOLOVENIJ) DOSTUPNY PRI ISPOLXZOWANII OPREDELENNYH OPERATOROW, KOTORYE OPISANY W SLEDU@]EM RAZDELE, SMOTRITE rAZDEL 9.4.3.3 [zNA^ENIQ I OPERACII S NIMI], S. 93.

zNA^ENIE MESTOPOLOVENIQ MOVET BYTX INTERPRETIROWANO KAK IME@]EE DRUGOJ REVIM POSREDSTWOM PREOBRAZOWANIQ MESTOPOLOVENIJ. |TO PREOBRAZOWANIE REVIMOW ZAPISYWAETSQ KAK <IMQ REVIMA>(<MESTOPOLOVENIE>). pOLXZOWATELX DOLVEN U^ESTX, ^TO RAZMERY REVIMOW DOLVNY BYTX RAWNYMI, W PROTIWNOM SLU^AE WOZNIKAET O[IBKA. bOLEE TOGO, NE PROIZWODITSQ NIKAKIH PROWEROK DIAPAZONA MESTOPOLOVENIQ PO SRAWNENI@ S REVIMOM NAZNA^ENIQ, I, SLEDOWATELXNO, REZULXTAT MOVET BYTX DOSTATO^NO OBESKURAVIWA@]IM.

(gdb) print int (s(3 up 4)) XXX TO be filled in !! XXX

9.4.3.3 zNA^ENIQ I OPERACII S NIMI

zNA^ENIQ ISPOLXZU@TSQ DLQ IZMENENIQ MESTOPOLOVENIJ, DLQ BOLEE PODROBNOGO IZU^ENIQ SLOVNYH STRUKTUR I DLQ OTFILXTROWYWANIQ ZNA^IMOJ INFORMACII IZ BOLX[OGO OB_EMA

94

oTLADKA S POMO]X@ GDB

DANNYH. oPREDELENO NESKOLXKO OPERACIJ (ZAWISQ]IH OT REVIMA), KOTORYE POZWOLQ@T PROWODITX PODOBNYE IZU^ENIQ. |TI OPERACII PRIMENIMY NE TOLXKO K ZNA^ENIQM-KONSTANTAM, NO TAKVE I K MESTOPOLOVENIQM, ^TO MOVET OKAZATXSQ DOSTATO^NO POLEZNYM PRI OTLADKE SLOVNYH STRUKTUR. wO WREMQ RAZBORA KOMANDNOJ STROKI (NAPRIMER, WY^ISLQQ WYRAVENIE), GDB RASSMATRIWAET IMENA MESTOPOLOVENIJ KAK ZNA^ENIQ \TIH MESTOPOLOVENIJ.

|TOT RAZDEL OPISYWAET, KAK DOLVNY ZADAWATXSQ ZNA^ENIQ I KAKIE OPERACII DOPUSTIMO ISPOLXZOWATX S \TIMI ZNA^ENIQMI.

bUKWENNYE ZNA^ENIQ

bUKWENNYE ZNA^ENIQ OPREDELQ@TSQ TAKVE, KAK W PROGRAMMAH gnu Chill. dLQ PODROBNOJ SPECIFIKACII, SMOTRITE GLAWU 1.5 rUKOWODSTWA PO REALIZACII gnu

Chill.

zNA^ENIQ-NABORY

nABOR MOVET BYTX ZADAN KAK <IMQ REVIMA>[<NABOR>], GDE <IMQ REVIMA> MOVET BYTX OPU]ENO, ESLI REVIM NABORA OPREDELQETSQ ODNOZNA^NO. |TA ODNOZNA^- NOSTX OPREDELQETSQ IZ KONTEKSTA WY^ISLQEMOGO WYRAVENIQ. <NABOR> MOVET BYTX ODNIM IZ:

nABOR powerset

nABOR MASSIWOW

nABOR STRUKTUR

nABORY-powerset, NABORY MASSIWOW I NABORY STRUKTUR OPREDELQ@TSQ TAKVE, KAK W PROGRAMMAH NA Chill.

zNA^ENIE \LEMENTA STROKI

zNA^ENIE \LEMENTA STROKI ZADAETSQ KAK

<STROKOWOE ZNA^ENIE>(<INDEKS>)

GDE <INDEKS> QWLQETSQ CELO^ISLENNYM WYRAVENIEM. |TO DAET SIMWOLXNOE ZNA^ENIE, KOTOROE \KIWALENTNO SIMWOLU, UKAZYWAEMOMU W STROKE INDEKSOM

<INDEKS>.

zNA^ENIE SREZA STROKI

zNA^ENIE SREZA STROKI ZADAETSQ KAK <ZNA^ENIE STROKI>(<SPECIFIKACIQ SREZA>), GDE <SPECIFIKACIQ SREZA> MOVET BYTX LIBO DIAPAZONOM CELYH WYRAVENIJ, LIBO ZADAWATXSQ W WIDE <NA^ALXNOE WYRAVENIE> up <RAZMER>. <RAZMER> OBOZNA^AET ^ISLO \LEMENTOW, KOTOROE SODERVIT SREZ. pOLU^ENNAQ WELI^INA QWLQETSQ STROKOJ, KOTORAQ QWLQETSQ ^ASTX@ UKAZANNOJ STROKI.

zNA^ENIQ \LEMENTOW MASSIWA

zNA^ENIE \LEMENTA MASSIWA UKAZYWAETSQ KAK <WELI^INA MASSIWA>(<WYR>) I DAET WELI^INU \LEMENTA MASSIWA S REVIMOM KAK U UKAZANNOGO MASSIWA.

zNA^ENIE SREZA MASSIWA

sREZ MASSIWA ZADAETSQ KAK <ZNA^ENIE MASSIWA>(<SPECIFIKACIQ SREZA>), GDE

<SPECIFIKACIQ SREZA> MOVET BYTX DIAPAZONOM, OPREDELENNYM LIBO WYRAVENIQMI, LIBO KAK <NA^ALXNOE WYR> up <RAZMER>. <RAZMER> OBOZNA^AET ^ISLO \LEMENTOW MASSIWA, KOTOROE SODERVIT SREZ. pOLU^AEMOE ZNA^ENIE ESTX MASSIW, KOTORYJ QWLQETSQ ^ASTX@ UKAZANNOGO.

zNA^ENIE POLQ STRUKTURY

zNA^ENIE POLQ STRUKTURY POLU^AETSQ KAK <ZNA^ENIE STRUKTURY>.<IMQ POLQ>, GDE <IMQ POLQ> UKAZYWAET IMQ POLQ, ZADANNOE W OPREDELENII REVIMA STRUKTURY. rEVIM POLU^ENNOGO ZNA^ENIQ SOOTWETSTWUET \TOMU OPREDELENI@ REVIMA W OPREDELENII STRUKTURY.

gLAWA 9: iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ

95

zNA^ENIQ WYZOWA PROCEDURY

zNA^ENIE WYZOWA PROCEDURY POLU^AETSQ IZ ZNA^ENIQ, WOZWRA]ENNOGO PROCEDUROJ1.

zNA^ENIQ MESTOPOLOVENIJ REVIMA DLITELXNOSTI PREDSTAWLQ@TSQ BUKWAMI

ULONG.

zNA^ENIQ MESTOPOLOVENIJ REVIMA-WREMENI WYWODQTSQ KAK

TIME(<SEK>:<NSEK>).

zNA^ENIE BEZARGUMENTNOGO OPERATORA

zNA^ENIE BEZARGUMENTNOGO OPERATORA POLU^AETSQ IZ ZNA^ENIQ \KZEMPLQRA DLQ TEKU]EGO AKTIWNOGO PROCESSA.

zNA^ENIQ WYRAVENIJ

zNA^ENIE, DOSTAWLQEMOE WYRAVENIEM, QWLQETSQ REZULXTATOM WY^ISLENIQ UKAZANNOGO WYRAVENIQ. w SLU^AE O[IBKI (NESOWMESTIMOSTX REVIMOW, I TAK DALEE), WY^ISLENIE WYRAVENIQ PRERYWAETSQ S SOOTWETSTWU@]IM SOOB]ENIEM OB O[IBKE. wYRAVENIE MOVET BYTX ZAKL@^ENO W SKOBKI, ^TO PRIWODIT K WY^ISLENI@ \TOGO WYRAVENIQ DO L@BOGO DRUGOGO, ISPOLXZU@]EGO REZULXTAT WYRAVENIQ W SKOBKAH. GDB PODDERVIWA@TSQ SLEDU@]IE OPERATORY:

OR, ORIF, XOR AND, ANDIF

NOT lOGI^ESKIE OPERATORY, OPREDELENNYE NA OPERANDAH BULEWOGO REVIMA.

=, /= oPERATORY RAWENSTWA I NERAWENSTWA, OPREDELENNYE NA WSEH REVIMAH.

>, >=

<, <= oPERATORY OTNO[ENIQ, ZADANNYE NA PREDOPREDELENNYH REVIMAH.

+, -

*, /, MOD, REM

aRIFMETI^ESKIE OPERATORY, ZADANNYE NA PREDOPREDELENNYH REVIMAH.

-oPERATOR IZMENENIQ ZNAKA.

//oPERATOR SOEDINENIQ STROK.

()

oPERATOR POWTORENIQ STROKI.

-> oPERATOR SSYLKI MESTOPOLOVENIQ, KOTORYJ MOVET BYTX ISPOLXZOWAN LIBO DLQ POLU^ENIQ ADRESA MESTOPOLOVENIQ (->loc), ILI DLQ RAZYMENOWYWANIQ SSYLKI MESTOPOLOVENIQ (loc->).

OR, XOR

AND

NOT oPERATORY REVIMOW powerset I STROKI BITOW.

>, >=

<, <= oPERATORY WKL@^ENIQ REVIMA powerset.

IN

oPERATOR PRINADLEVNOSTI.

1eSLI, NAPRIMER, WYZOW PROCEDURY ISPOLXZUETSQ W WYRAVENII, TO \TA PROCEDURA WYZYWAETSQ SO WSEMI SWOIMI POBO^NYMI \FFEKTAMI. pRI NEAKKURATNOM ISPOLXZOWANII \TO MOVET PRIWESTI K PUTANICE.

96

oTLADKA S POMO]X@ GDB

9.4.3.4 pROWERKA DIAPAZONA I TIPOW W Chill

GDB S^ITAET DWA REVIMA PEREMENNYH Chill \KWIWALENTNYMI, ESLI IH RAZMERY RAWNY. |TO PRAWILO PRIMENQETSQ REKURSIWNO DLQ BOLEE SLOVNYH TIPOW DANNYH. |TO OZNA^AET, ^TO SLOVNYE REVIMY S^ITA@TSQ \KWIWALENTNYMI, ESLI REVIMY WSEH \LEMENTOW (KOTORYE TOVE MOGUT BYTX SLOVNYMI, NAPRIMER, MASSIWAMI, STRUKTURAMI, I TAK DALEE) IME@T ODINAKOWYJ RAZMER.

pROWERKA DIAPAZONA PROIZWODITSQ DLQ WSEH MATEMATI^ESKIH OPERACIJ, PRISWAIWANIJ, GRANIC INDEKSOW MASSIWA I WSEH WSTROENNYH PROCEDUR.

sTROGIE PROWERKI TIPOW WKL@^A@TSQ S POMO]X@ KOMANDY GDB set check strong. |TO NAWQZYWAET STROGU@ PROWERKU DIAPAZONA I PRINADLEVNOSTI TIPU DLQ WSEH DEJSTWIJ, GDE ISPOLXZU@TSQ KONSTRUKCII Chill (WYRAVENIQ, WSTROENNYE FUNKCII, I TAK DALEE), W SOOTWETSTWII S SEMANTIKOJ, OPREDELENNOJ W SPECIFIKACII QZYKA z.200.

wSE PROWERKI MOGUT BYTX OTKL@^ENY KOMANDOJ GDB set check off.

9.4.3.5 uSTANOWKI PO UMOL^ANI@ Chill

eSLI PROWERKI TIPA I DIAPAZONA USTANOWLENY GDB AWTOMATI^ESKI, OBE ONI PO UMOL^A- NI@ WKL@^ENY, KOGDA RABO^IJ QZYK PEREKL@^AETSQ NA Chill. |TO PROISHODIT NEZAWISIMO OT TOGO, WY WYBRALI RABO^IJ QZYK ILI GDB.

eSLI WY RAZRE[ITE GDB USTANAWLIWATX RABO^IJ QZYK AWTOMATI^ESKI, TO PRI POPADANII W KOD, SKOMPILIROWANNYJ IZ FAJLA, ^XE IMQ ZAKAN^IWAETSQ NA `.ch', ON PEREKL@^AET RABO^IJ QZYK NA Chill. sM. rAZDEL 9.1.3 [rASPOZNAWANIE GDB ISHODNOGO QZYKA], S. 78, DLQ DOPOLNITELXNOJ INFORMACII.

gLAWA 10: iSSLEDOWANIE TABLICY SIMWOLOW

97

10 iSSLEDOWANIE TABLICY SIMWOLOW

kOMANDY, OPISANNYE W \TOJ GLAWE, POZWOLQ@T WAM POLU^ITX INFORMACI@ O SIMWOLAH (IMENAH PEREMENNYH, FUNKCIJ I TIPOW), OPREDELENNYH W WA[EJ PROGRAMME. |TA INFORMACIQ PRISU]A TEKSTU WA[EJ PROGRAMMY I NE IZMENQETSQ PRI EE WYPOLNENII. GDB NAHODIT \TU INFORMACI@ W TABLICE SIMWOLOW WA[EJ PROGRAMMY, W FAJLE, OPREDELENNOM PRI EGO WYZOWE (SM. rAZDEL 2.1.1 [wYBOR FAJLOW], S. 10), ILI POSREDSTWOM ODNOJ IZ KOMAND UPRAWLENIQ FAJLAMI (SM. rAZDEL 12.1 [kOMANDY DLQ ZADANIQ FAJLOW], S. 105).

iNOGDA WAM MOVET POTREBOWATXSQ SOSLATXSQ NA SIMWOLY, SODERVA]IE NEOBY^NYE ZNAKI, KOTORYE GDB OBY^NO TRAKTUET KAK RAZDELITELI SLOW. nAIBOLEE ^ASTO \TO WSTRE^AETSQ PRI SSYLKAH NA STATI^ESKIE PEREMENNYE W DRUGIH ISHODNYH FAJLAH (SM. rAZDEL 8.2 [pEREMENNYE PROGRAMMY], S. 62). iMENA FAJLOW ZAPISANY W OB_EKTNYH FAJLAH KAK OTLADO^NYE SIMWOLY, NO GDB OBY^NO PROIZWODIT RAZBOR TIPI^NOGO IMENI FAJLA, NAPRIMER `foo.c', KAK TRI SLOWA: `foo' . c. ~TOBY GDB IDENTIFICIROWAL `foo.c' KAK ODNO SLOWO, ZAKL@^ITE EGO W ODINARNYE KAWY^KI; NAPRIMER,

p 'foo.c'::x

I]ET ZNA^ENIE x W OBLASTI WIDIMOSTI FAJLA `foo.c'.

info address SIMWOL

oPISYWAET, GDE HRANQTSQ DANNYE DLQ SIMWOLA. dLQ REGISTROWOJ PEREMENNOJ SOOB]AETSQ, W KAKOM REGISTRE ONA SODERVITSQ. dLQ NEREGISTROWOJ LOKALXNOJ PEREMENNOJ PE^ATAETSQ SME]ENIE W KADRE STEKA, PO KOTOROMU PEREMENNAQ WSEGDA HRANITSQ.

zAMETXTE OTLI^IE OT KOMANDY `print &SIMWOL', KOTORAQ WOOB]E NE RABOTAET DLQ REGISTROWYH PEREMENNYH, A DLQ LOKALXNOJ PEREMENNOJ IZ STEKA PE^ATAET TO^NYJ ADRES TEKU]EGO \KZEMPLQRA PEREMENNOJ.

whatis WYRAV

nAPE^ATATX TIP DANNYH WYRAVENIQ WYRAV. nA SAMOM DELE WYRAV NE WY^ISLQETSQ, A PRISUTSTWU@]IE W NEM POBO^NYE OPERACII (TAKIE KAK PRISWAIWANIQ ILI WYZOWY FUNKCIJ) NE WYPOLNQ@TSQ. sM. rAZDEL 8.1 [wYRAVENIQ], S. 61.

whatis wYWESTI TIP DANNYH $, POSLEDNEJ ZAPISI W ISTORII ZNA^ENIJ.

ptype IMQ-TIPA

wYWESTI OPISANIE TIPA DANNYH IMQ-TIPA. iMQ-TIPA MOVET BYTX IMENEM TIPA ILI, DLQ KODA sI, MOVET IMETX FORMU `class IMQ-KLASSA', `struct TEG-

STRUKTURY', `union TEG-OB_EDINENIQ' ILI `enum TEG-PERE^ISLENIQ'.

ptype WYRAV

ptype wYWESTI OPISANIE TIPA WYRAVENIQ WYRAV. ptype OTLI^AETSQ OT whatis TEM, ^TO WYWODITSQ DETALXNOE OPISANIE, A NE TOLXKO IMQ TIPA.

nAPRIMER, DLQ TAKOGO OPISANIQ PEREMENNOJ:

struct complex {double real; double imag;} v;

\TI DWE KOMANDY WYWEDUT SLEDU]EE:

(gdb) whatis v

type = struct complex (gdb) ptype v

type = struct complex { double real; double imag;

}

kAK I whatis, ISPOLXZOWANIE ptype BEZ PARAMETRA OTNOSITSQ K TIPU $, POSLEDNEJ ZAPISI W ISTORII ZNA^ENIJ.

98

oTLADKA S POMO]X@ GDB

info types REG-WYR info types

wYWESTI KRATKOE OPISANIE WSEH TIPOW, IMENA KOTORYH SOOTWETSTWU@T REGULQRNOMU WYRAVENI@ REG-WYR (ILI WSEH TIPOW WA[EJ PROGRAMMY, ESLI WY ISPOLXZUETE \TU KOMANDU BEZ PARAMETRA). kAVDOE POLNOE IMQ TIPA SOPOSTAWLQETSQ TAK, KAK ESLI BY ONO BYLO POLNOJ STROKOJ; TAKIM OBRAZOM, `i type value' WYDAET INFORMACI@ OBO WSEH TIPAH W WA[EJ PROGRAMME, ^XI IMENA WKL@^A@T STpOKU value, A `i type ^value$' WYDAET INFOpMACI@ TOLXKO O TIPAH S POLNYM IMENEM value.

|TA KOMANDA OTLI^AETSQ OT ptype SLEDU@]IM: WO-PEpWYH, KAK I whatis, ONA NE WYWODIT DETALXNOGO OPISANIQ; WO-WTORYH, ONA PERE^ISLQET WSE ISHODNYE FAJLY, GDE OPREDELEN TIP.

info source

pOKAZATX IMQ TEKU]EGO ISHODNOGO FAJLA|TO ESTX ISHODNOGO FAJLA DLQ FUNKCII, SODERVA]EJ TEKU]U@ TO^KU WYPOLNENIQ, I QZYK, NA KOTOpOM ONA NAPISANA.

info sources

wYWESTI IMENA WSEH ISHODNYH FAJLOW WA[EJ PROGRAMMY, DLQ KOTORYH IMEETSQ OTLADO^NAQ INFOpMACIQ, ORGANIZUQ IH W DWA SPISKA: FAJLY S UVE PRO^ITANNYMI SIMWOLAMI, I FAJLY, SIMWOLY KOTORYH BUDUT PpO^ITANY, KOGDA POTREBUETSQ.

info functions

wYWESTI IMENA I TIPY DANNYH WSEH OPpEDELENNYH FUNKCIJ.

info functions REG-WYR

wYWESTI IMENA I TIPY DANNYH WSEH OPpEDELENNYH FUNKCIJ, ^XI IMENA UDOWLETWORQ@T REGULQRNOMU WYRAVENI@ REG-WYR. tAK, `info fun step' NAHODIT WSE FUNKCII, IMENA KOTORYH SODERVAT step; `info fun ^step' NAHODIT FUNKCII S IMENAMI, NA^INA@]IMISQ SO step.

info variables

nAPE^ATATX IMENA I TIPY DANNYH WSEH PEpEMENNYH, OB_QWLENNYH WNE FUNKCIJ (TO ESTX ISKL@^AQ LOKALXNYE PEpEMENNYE).

info variables REG-WYR

wYWESTI IMENA I TIPY DANNYH WSEH PEpEMENNYH (KpOME LOKALXNYH), IMENA KOTORYH UDOWLETWORQ@T REGULQRNOMU WYRAVENI@ REG-WYR.

nEKOTORYE SISTEMY DOPUSKA@T ZAME]ENIE OTDELXNYH OB_EKTNYH FAJLOW, SOSTAWLQ@]IH WA[U PROGRAMMU, BEZ EE OSTANOWKI I PEREZAPUSKA. nAPRIMER, W VxWorks WY MOVETE PpOSTO PEREKOMPILIROWATX DEFEKTNYJ OB_EKTNYJ FAJL I PRODOLVITX WYPOLNENIE. eSLI WY RABOTAETE W ODNOJ IZ TAKIH SISTEM, WY MOVETE POZWOLITX GDB PEREZAGRUZITX SIMWOLY DLQ AWTOMATI^ESKI PERESOBRANNYH MODULEJ:

set symbol-reloading on

zAMENITX OPEDELENIQ SIMWOLOW DLQ SOOTWETSTWU@]EGO ISHODNOGO FAJLA, KOGDA OB_EKTNYJ FAJL S OPREDELENNYM IMENEM SNOWA DOSTUPEN.

set symbol-reloading off

nE ZAMENQTX OPpEDELENIQ SIMWOLOW PRI WSTRE^E OB_EKTNOGO FAJLA S TAKIM VE IMENEM BOLEE ODNOGO RAZA. |TO SOSTOQNIE PO UMOL^A- NI@; ESLI WY NE RABOTAETE W SISTEME, DOPUSKA@]EJ AWTOMATI^ESKOE PERESOBIRANIE MODULEJ, WY DOLVNY OSTAWITX symbol-reloading W SOSTOQNII off, TAK KAK INA^E GDB MOVET UNI^TOVITX SIMWOLY

gLAWA 10: iSSLEDOWANIE TABLICY SIMWOLOW

99

PpI SBORKE BOLX[IH PROGRAMM, KOTORYE MOGUT SODEpVATX NESKOLXKO

MODULEJ S ODINAKOWYM IMENEM (IZ RAZNYH KATALOGOW ILI BIBLIO-

TEK).

show symbol-reloading

pOKAZATX TEKU]U@ USTANOWKU on ILI off.

set opaque-type-resolution on

wELIT GDB PROIZWODITX RAZRE[ENIE NEODNOZNA^NYH TIPOW. nEODNOZNA^NYM QWLQETSQ TIP, OPISANNYJ KAK UKAZATELX NA struct, class ILI union|NAPRIMER, struct MyType *|TO ESTX, ISPOLXZUETSQ W ODNOM ISHODNOM FAJLE, HOTQ POLNOE OPISANIE struct MyType NAHODITSQ W DRUGOM ISHODNOM FAJLE. pO UMOL^ANIJ USTANOWLENO W on.

iZMENENIQ W USTANOWKE \TOJ PODKOMANDOJ NE WSTUPQT W SILU, POKA SIMWOLY DLQ \TOGO FAJLA NE BUDUT SNOWA ZAGRUVENY.

set opaque-type-resolution off

uKAZYWAET GDB NE PROIZWODITX RAZRE[ENIE NEODNOZNA^NYH TIPOW. w \TOM SLU^AE, TIP WYWODITSQ SLEDU@]IM OBRAZOM:

{<no data fields>}

show opaque-type-resolution

pOKAZATX, PROIZWODITSQ RAZRE[ENIE NEODNOZNA^NYH TIPOW ILI NET.

maint print symbols IMQ-FAJLA maint print psymbols IMQ-FAJLA maint print msymbols IMQ-FAJLA

zAPISATX DAMP DANNYH OTLADO^NYH SIMWOLOW W FAJL IMQ-FAJLA. |TI KOMANDY ISPOLXZU@TSQ DLQ OTLADKI KODA GDB, OSU]ESTWLQ@]EGO ^TENIE SIMWOLOW. wKL@^A@TSQ TOLXKO SIMWOLY S OTLADO^NYMI DANNYMI. eSLI WY ISPOLXZUETE `maint print symbols', GDB WKL@^AET WSE SIMWOLY, DLQ KOTORYH UVE SOBRANA POLNAQ INFORMACIQ: TO ESTX IMQ-FAJLA OTRAVAET SIMWOLY TOLXKO DLQ TEH FAJLOW, SIMWOLY KOTORYH GDB UVE PRO^ITAL. wY MOVETE ISPOLXZOWATX KOMANDU info sources, ^TOBY OPREDELITX, KAKIE \TO FAJLY. eSLI VE WY ISPOLXZUETE `maint print psymbols', DAMP POKAZYWAET INFORMACI@ O TEH SIMWOLAH, O KOTORYH GDB IMEET LI[X ^ASTI^NU@ INFORMACI@, TO ESTX SIMWOLY OPREDELENY W FAJLAH, KOTORYE GDB TOLXKO PROSMOTREL, NO NE PRO^ITAL POLNOSTX@. nAKONEC, `maint print msymbols', WYWODIT TOLXKO MINIMALXNU@ INFORMACI@ O SIMWOLAH, TREBUEMU@ DLQ KAVDOGO OB_EKTNOGO FAJLA, IZ KOTORYH GDB PpO- ^ITAL KAKIE-LIBO SIMWOLY. sM. rAZDEL 12.1 [kOMANDY DLQ ZADANIQ FAJLOW], S. 105, DLQ OBSUVDENIQ KAK GDB S^ITYWAET SIMWOLY (W OPISANII symbol-file).

100

oTLADKA S POMO]X@ GDB

gLAWA 11: iZMENENIE WYPOLNENIQ

101

11 iZMENENIE WYPOLNENIQ

eSLI WY DUMAETE, ^TO NA[LI O[IBKU W SWOEJ PROGRAMME, WY MOVETE ZAHOTETX WYQSNITX NAWERNQKA, PRIWEDET LI ISPRAWLENIE KAVU]EJSQ O[IBKI K PRAWILXNYM REZULXTATAM W OSTALXNOJ ^ASTI PROGRAMMY. wY MOVETE POLU^ITX OTWET \KSPERIMENTIRUQ, ISPOLXZUQ SREDSTWA GDB DLQ IZMENENIQ WYPOLNENIQ PROGRAMMY.

nAPRIMER, WY MOVETE SOHRANITX NOWYE ZNA^ENIQ W PEREMENNYH ILI Q^EJKAH PAMQTI, PODATX SWOEJ PROGRAMME SIGNAL, PEREZAPUSTITX EE S DRUGOGO ADRESA ILI DAVE PREVDEWREMENNO WERNUTXSQ IZ FUNKCII.

11.1 pRISWAIWANIE ZNA^ENIJ PEpEMENNYM

dLQ IZMENENIQ ZNA^ENIQ PEREMENNOJ, WY^ISLITE WYRAVENIE PRISWAIWANIQ. sM. rAZDEL 8.1 [wYRAVENIQ], S. 61. nAPRIMER,

print x=4

SOHRANQET ZNA^ENIE 4 W PEREMENNOJ x I ZATEM WYWODIT ZNA^ENIE DANNOGO WYRAVENIQ (KOTOROE RAWNO 4). sM. gLAWA 9 [iSPOLXZOWANIE GDB S RAZLI^NYMI QZYKAMI PROGRAMMIROWANIQ], S. 77, DLQ POLU^ENIQ BOLX[EJ INFOpMACII OB OPERATORAH W PODDERVIWAEMYH QZYKAH.

eSLI WY NE HOTITE WIDETX ZNA^ENIE PRISWAIWANIQ, ISPOLXZUJTE KOMANDU set WMESTO print. kOMANDA set ANALOGI^NA KOMANDE print ZA ISKL@^ENIEM TOGO, ^TO ZNA^ENIE WYRAVENIQ NE WYWODITSQ I NE ZANOSITSQ W ISTORI@ ZNA^ENIJ (SM. rAZDEL 8.8 [iSTORIQ ZNA^ENIJ], S. 72). wYRAVENIE WY^ISLQETSQ TOLXKO RADI EGO DEJSTWIQ.

eSLI NA^ALO STROKI PARAMETROW KOMANDY set WYGLQDIT IDENTI^NO PODKOMANDE set, ISPOLXZUJTE WMESTO NEE KOMANDU set variable. |TA KOMANDA ANALOGI^NA set, NO NE IMEET PODKOMAND. nAPRIMER, ESLI W WA[EJ PROGRAMME ESTX PEREMENNAQ width, TO WY POLU^ITE O[IBKU, ESLI POPYTAETESX USTANOWITX NOWOE ZNA^ENIE PROSTO S POMO]X@ `set width=13', POTOMU ^TO GDB IMEET KOMANDU set width:

(gdb) whatis width type = double (gdb) p width

$4 = 13

(gdb) set width=47

Invalid syntax in expression.

nEDOPUSTIMOE WYRAVENIE, \TO, KONE^NO, `=47'. dLQ TOGO ^TOBY DEJSTWITELXNO USTANOWITX PEREMENNU@ PROGRAMMY width, ISPOLXZUJTE

(gdb) set var width=47

tAK KAK KOMANDA set IMEET MNOGO PODKOMAND, KOTORYE MOGUT KONFLIKTOWATX S IMENAMI PEREMENNYH W PROGRAMME, TO HORO[EJ PRAKTIKOJ QWLQETSQ ISPOLXZOWANIE KOMANDY set variable WMESTO PROSTO set. nAPRIMER, ESLI WA[A PROGRAMMA IMEET PEREMENNU@ g, U WAS WOZNIKNUT PROBLEMY, ESLI WY POPYTAETESX USTANOWITX NOWOE ZNA^ENIE S POMO]X@ `set g=4', POTOMU ^TO GDB IMEET KOMANDU set gnutarget, KOTORAQ SOKRA]AETSQ KAK set g:

102

oTLADKA S POMO]X@ GDB

(gdb) whatis g type = double (gdb) p g

$1 = 1

(gdb) set g=4 (gdb) p g

$2 = 1 (gdb) r

The program being debugged has been started already. Start it from the beginning? (y or n) y

Starting program: /home/smith/cc_progs/a.out "/home/smith/cc_progs/a.out": can't open to read symbols:

Invalid bfd target.

(gdb) show g

The current BFD target is "=4".

pEREMENNAQ PROGRAMMY g NE IZMENILASX, I WY NEZAMETNO USTANOWILI gnutarget W NEWERNOE ZNA^ENIE. dLQ USTANOWKI ZNA^ENIQ PEREMENNOJ g, ISPOLXZUJTE

(gdb) set var g=4

GDB DOPUSKAET BOLX[E NEQWNYH PREOBRAZOWANIJ W PRISWAIWANIQH, ^EM sI; WY MOVETE SWOBODNO SOHRANITX CELOE ZNA^ENIE W PEREMENNOJ-UKAZATELE I NAOBOROT, PREOBRAZOWATX L@BU@ STRUKTURU K L@BOJ DRUGOJ, KOTORAQ IMEET TU VE DLINU ILI KORO^E.

dLQ SOHRANENIQ ZNA^ENIJ W PROIZWOLXNYH MESTAH PAMQTI, ISPOLXZUJTE KONSTRUKCI@ `{...}' DLQ SOZDANIQ ZNA^ENIQ OPREDELENNOGO TIPA PO OPREDELENNOMU ADRESU PAMQTI (SM. rAZDEL 8.1 [wYRAVENIQ], S. 61). nAPRIMER, {int}0x83040 SSYLAETSQ NA Q^EJKU PAMQTI 0x83040 KAK NA CELOE (^TO PREDPOLAGAET SOOTWETSTWU@]IJ RAZMER I PREDSTAWLENIE W PAMQTI), I

set {int}0x83040 = 4

ZAPISYWAET W \TU Q^EJKU PAMQTI ZNA^ENIE 4.

11.2 pRODOLVENIE ISPOLNENIQ S DRUGOGO ADRESA

oBY^NO, KOGDA WY PRODOLVAETE WYPOLNENIE PROGRAMMY, WY DELAETE \TO S TOGO MESTA, GDE ONA OSTANOWILASX, KOMANDOJ continue. wMESTO \TOGO, WY MOVETE PRODOLVITX WYPOLNENIE S L@BOGO WYBRANNOGO ADRESA PRI POMO]I SLEDU@]IH KOMAND:

jump UKAZ-STR

wOZOBNOWITX WYPOLNENIE SO STROKI UKAZ-STR. eSLI TAM ESTX TO^KA OSTANOWA, WYPOLNENIE NEMEDLENNO PREKRA]AETSQ. sM. rAZDEL 7.1 [wYWOD STROK ISHODNOGO TEKSTA], S. 55, DLQ OPISANIQ RAZLI^NYH FORM UKAZ-STR. iSPOLXZOWANIE KOMANDY tbreak WMESTE S jump QWLQETSQ OBY^NOJ PRAKTIKOJ. sM. rAZDEL 5.1.1 [uSTANOWKA TO^EK OSTANOWA], S. 32.

kOMANDA jump NE IZMENQET NI TEKU]IJ KADR STEKA, NI UKAZATELX STEKA, NI SODERVIMOE KAKIH-LIBO Q^EEK PAMQTI ILI REGISTROW, KROME S^ET^IKA PROGRAMMY. eSLI STROKA UKAZ-STR NAHODITSQ WNE WYPOLNQ@]EJSQ W NASTOQ]EE WREMQ FUNKCII, REZULXTATY MOGUT BYTX STRANNYMI, ESLI \TI FUNKCII ISPOLXZU@T ARGUMENTY ILI LOKALXNYE PEREMENNYE RAZNYH TIPOW. pO \TOJ PRI^INE, KOMANDA jump ZAPRA[IWAET PODTWERVDENIE, ESLI UKAZANNAQ STROKA NE NAHODITSQ W FUNKCII, WYPOLNQ@]EJSQ W NASTOQ]EE WREMQ. oDNAKO, DAVE STRANNYE REZULXTATY PREDSKAZUEMY, ESLI WY HORO[O ZNAKOMY S MA[INNYM KODOM WA[EJ PROGRAMMY.

gLAWA 11: iZMENENIE WYPOLNENIQ

103

jump *ADRES

wOZOBNOWITX WYPOLNENIE S INSTRUKCII, NAHODQ]EJSQ PO ADRESU ADRES.

nA MNOGIH SISTEMAH, WY MOVETE DOSTI^X TAKOGO VE REZULXTATA, KAK I S KOMANDOJ jump, SOHRANENIEM NOWOGO ZNA^ENIQ W REGISTR $pc. oTLI^IE W ZAKL@^AETSQ TOM, ^TO \TO NE NA^I- NAET WYPOLNENIE WA[EJ PROGRAMMY, A LI[X IZMENQET ADRES, S KOTOROGO BUDET WYPOLNQTXSQ PROGRAMMA, KOGDA WY PRODOLVITE WYPOLNENIE. nAPRIMER,

set $pc = 0x485

WYPOLNQET SLEDU@]U@ KOMANDU continue ILI KOMANDU PO[AGOWOGO WYPOLNENIQ S ADRESA 0x485, A NE S TOGO ADRESA, GDE WA[A PROGRAMMA OSTANOWILASX. sM. rAZDEL 5.2 [pRODOLVENIE I WYPOLNENIE PO [AGAM], S. 44.

nAIBOLEE OB]IJ SLU^AJ ISPOLXZOWANIQ KOMANDY jump SOSTOIT W WOZWRATE K WYPOLNENI@ ^ASTI PROGRAMMY, WOZMOVNO S BOLX[IM KOLI^ESTWOM USTANOWLENNYH TO^EK OSTANOWA, KOTORAQ UVE WYPOLNILASX, DLQ TOGO ^TOBY ISSLEDOWATX WYPOLNENIE BOLEE DETALXNO.

11.3 pODA^A SIGNALA WA[EJ PROGRAMME

signal SIGNAL

wOZOBNOWITX WYPOLNENIE S MESTA OSTANOWKI WA[EJ PROGRAMMY, NO NEMEDLENNO PODATX EJ SIGNAL SIGNAL. sIGNAL MOVET BYTX IMENEM ILI NOMEROM SIGNALA. nAPRIMER, WO MNOGIH SISTEMAH signal 2 I signal SIGINT|DWA SPOSOBA PODATX SIGNAL PRERYWANIQ.

nAOBOROT, ESLI SIGNAL QWLQETSQ NULEM, WYPOLNENIE PRODOLVAETSQ BEZ PODA^I SIGNALA. |TO POLEZNO, ESLI WA[A PROGRAMMA OSTANOWILASX IZ-ZA SIGNALA I W OBY^NOM SLU^AE UWIDIT EGO PRI WOZOBNOWLENII WYPOLNENIQ KOMANDOJ continue; `signal 0' PRODOLVIT WYPOLNENIE BEZ SIGNALA.

signal NE POWTORQETSQ, KOGDA WY NAVIMAETE hRETi WTOROJ RAZ POSLE WYPOLNENIQ KOMANDY.

wYZOW KOMANDY signal OTLI^AETSQ OT WYZOWA UTILITY kill IZ OBOLO^KI. pODA^A SIGNALA POSREDSTWOM kill ZASTAWLQET GDB RE[ATX, ^TO DELATX S SIGNALOM, W ZAWISIMOSTI OT TABLIC OBRABOTKI SIGNALOW (SM. rAZDEL 5.3 [sIGNALY], S. 46). kOMANDA signal PEREDAET SIGNAL NEPOSREDSTWENNO WA[EJ PROGRAMME.

11.4 wOZWRAT IZ FUNKCII

return

return WYRAVENIE

wY MOVETE OTMENITX WYPOLNENIE WYZOWA FUNKCII S POMO]X@ KOMANDY return. eSLI WY ZADAETE PARAMETR WYRAVENIE, EGO ZNA^ENIE ISPOLXZUETSQ W KA^ESTWE WOZWRA]AEMOGO ZNA^ENIQ.

kOGDA WY ISPOLXZUETE return, GDB UNI^TOVAET WYBRANNYJ KADR STEKA (I WSE KADRY WNUTRI NEGO). wY MOVETE S^ITATX \TO PREVDEWREMENNYM WOZWRATOM IZ UNI^TOVENNOGO KADRA. eSLI WY HOTITE UKAZATX WOZWRA]AEMOE ZNA^ENIE, ZADAJTE EGO W KA^ESTWE ARGUMENTA K return.

|TO WYTALKIWAET WYBRANNYJ KADR STEKA (SM. rAZDEL 6.3 [wYBOR KADRA STEKA], S. 52) I WSE DRUGIE KADRY WNUTRI NEGO, OSTAWLQQ SAMYM WNUTRENNIM KADR, IZ KOTOROGO PROIZO[EL WYZOW. |TOT KADR STANOWITSQ WYBRANNYM. uKAZANNOE ZNA^ENIE SOHRANQETSQ W REGISTRAH, ISPOLXZUEMYH DLQ WOZWRA]AEMYH FUNKCIEJ ZNA^ENIJ.

kOMANDA return NE WOZOBNOWLQET WYPOLNENIE; ONA OSTAWLQET PROGRAMMU OSTANOWLENNOJ W TOM SOSTOQNII, W KOTOROM BY ONA BYLA SRAZU POSLE WOZWRATA IZ FUNKCII. nAPROTIW,

104

oTLADKA S POMO]X@ GDB

KOMANDA finish (SM. rAZDEL 5.2 [pRODOLVENIE I WYPOLNENIE PO [AGAM], S. 44) WOZOBNOWLQET WYPOLNENIE DO ESTESTWENNOGO WOZWRATA IZ WYBRANNOGO KADRA STEKA.

11.5 wYZOW FUNKCIJ PROGRAMMY

call WYRAV

wY^ISLITX WYRAVENIE WYRAV BEZ OTOBRAVENIQ PUSTYH (void) WOZWRA]ENNYH ZNA^ENIJ.

wY MOVETE ISPOLXZOWATX \TOT WARIANT KOMANDY print, ESLI HOTITE WYPOLNITX FUNKCI@ IZ WA[EJ PROGRAMMY, NE ZASORQQ WYWOD PUSTYMI WOZWRA]ENNYMI ZNA^ENIQMI. eSLI REZULXTAT NE PUSTOJ, ON WYWODITSQ I SOHRANQETSQ W ISTORII ZNA^ENIJ.

dLQ A29K, USTANAWLIWAEMAQ POLXZOWATELEM PEREMENNAQ call_scratch_address ZADAET POLOVENIE RABO^EJ OBLASTI, KOTORAQ BUDET ISPOLXZOWATXSQ, KOGDA GDB WYZYWAET FUNKCI@ NA CELEWOJ MA[INE. |TO NEOBHODIMO, TAK KAK OBY^NYJ METOD RAZME]ENIQ RABO^EJ OBLASTI W STEKE NE RABOTAET W SISTEMAH S RAZDELXNYMI OBLASTQMI KOMAND I DANNYH.

11.6 wNESENIE IZMENENIJ W PROGRAMMU

pO UMOL^ANI@, GDB OTKRYWAET FAJL, SODERVA]IJ ISPOLNQEMYJ KOD WA[EJ PROGRAMMY (ILI FAJL DAMPA PAMQTI), W REVIME TOLXKO DLQ ^TENIQ. |TO PREDOTWRA]AET SLU^AJNYE IZMENENIQ MA[INNOGO KODA; NO \TO TAKVE PREDOTWRA]AET I PREDNAMERENNOE ISPRAWLENIE DWOI^NOGO FAJLA WA[EJ PROGRAMMY.

eSLI WY HOTITE IMETX WOZMOVNOSTX ISPRAWLQTX DWOI^NYJ KOD, WY MOVETE UKAZATX \TO QWNO S POMO]X@ KOMANDY set write. nAPRIMER, WY MOVETE ZAHOTETX USTANOWITX WNUTRENNIE FLAGI OTLADKI ILI DAVE SDELATX AWARIJNYE ISPRAWLENIQ.

set write on set write off

eSLI WY USTANOWITE `set write on', GDB OTKRYWAET ISPOLNQEMYE FAJLY I FAJLY DAMPOW PAMQTI W REVIME DLQ ^TENIQ I ZAPISI; ESLI WY UKAVETE `set write off' (USTANAWLIWAETSQ PO UMOL^ANI@), GDB OTKRYWAET IH W REVIME TOLXKO DLQ ^TENIQ.

eSLI WY UVE ZAGRUZILI FAJL, TO POSLE USTANOWKI set write WAM NEOBHODIMO ZAGRUZITX EGO SNOWA (ISPOLXZUQ KOMANDY exec-file ILI core-file), ^TOBY NOWYE USTANOWKI WSTUPILI W SILU.

show write

pOKAZATX, OTKRYTY ISPOLNQEMYE FAJLY I FAJLY DAMPOW PAMQTI DLQ ZAPISI ILI NET.

gLAWA 12: fAJLY GDB

105

12 fAJLY GDB

GDB DOLVEN ZNATX IMQ FAJLA PROGRAMMY, KOTORAQ BUDET OTLAVIWATXSQ, ^TOBY PRO- ^ITATX EGO TABLICU SIMWOLOW I ^TOBY ZAPUSTITX EGO. dLQ OTLADKI DAMPA PAMQTI OT PREDYDU]EGO WYPOLNENIQ, WY TAKVE DOLVNY SOOB]ITX GDB IMQ \TOGO FAJLA.

12.1 kOMANDY DLQ ZADANIQ FAJLOW

wY MOVETE UKAZATX IMENA ISPOLNQEMOGO FAJLA I FAJLA DAMPA PAMQTI. oBY^NO \TO DELAETSQ WO WREMQ WYZOWA GDB, ISPOLXZUQ PARAMETRY S KOMANDAMI ZAPUSKA GDB (SM. gLAWA 2 [wHOD I WYHOD IZ GDB], S. 9).

iNOGDA WO WREMQ SEANSA GDB NEOBHODIMO PEREJTI K DRUGOMU FAJLU. iLI WY MOVETE ZAPUSTITX GDB I ZABYTX UKAZATX FAJL, KOTORYJ HOTITE ISPOLXZOWATX. w \TIH SITUACIQH POLEZNY KOMANDY GDB DLQ ZADANIQ NOWYH FAJLOW.

file IMQ-FAJLA

iSPOLXZOWATX IMQ-FAJLA W KA^ESTWE PROGRAMMY DLQ OTLADKI. iZ NEE ^ITA@TSQ SIMWOLY I SODERVANIE NEIZMENQEMOJ PAMQTI. tAKVE ONA QWLQETSQ PROGRAMMOJ, KOTORAQ WYPOLNQETSQ PRI ISPOLXZOWANII KOMANDY run. eSLI WY NE UKAVETE KATALOG, I FAJL NE BUDET NAJDEN W RABO^EM KATOLOGE GDB, ON ISPOLXZUET PEREMENNU@ SREDY PATH W KA^ESTWE SPISKA KATALOGOW DLQ POISKA, TO^NO TAK VE, KAK \TO DELAET OBOLO^KA, KOGDA I]ET PROGRAMMU DLQ WYPOLNENIQ. iSPOLXZUQ KOMANDU path, WY MOVETE IZMENITX ZNA^ENIE \TOJ PEREMENNOJ KAK DLQ GDB, TAK I DLQ WA[EJ PROGRAMMY.

w SISTEMAH S OTOBRAVAEMYMI W PAMQTX FAJLAMI, INFORMACIQ IZ TABLICY SIMWOLOW DLQ IMQ-FAJLA MOVET HRANITXSQ WO WSPOMOGATELXNOM FAJLE `IMQFAJLA.syms'. eSLI \TO TAK, GDB OSU]ESTWLQET OTOBRAVENIE TABLICY SIMWOLOW IZ `IMQ-FAJLA.syms', ZAPUSKAQSX NAMNOGO BYSTREE. sMOTRITE OPISANIQ KL@^EJ FAJLOW `-mapped' I `-readnow' (DOSTUPNYH S KOMANDNOJ STROKI I W KO-

MANDAH file, symbol-file ILI add-symbol-file, OPISANNYH NIVE), DLQ POLU-

^ENIQ BOLX[EJ INFORMACII.

file

file BEZ PARAMETROW WELIT GDB UNI^TOVITX L@BU@ IME@]U@SQ INFORMACI@

 

KAK OB ISPOLNQEMOM FAJLE, TAK I O TABLICE SIMWOLOW.

exec-file [ IMQ-FAJLA ]

uKAZYWAET, ^TO PROGRAMMA, KOTORAQ DOLVNA BYTX WYPOLNENA (NO NE TABLICA SIMWOLOW), NAHODITSQ W IMQ-FAJLA. eSLI NEOBHODIMO, GDB I]ET WA[U PROGRAMMU S POMO]X@ PEREMENNOJ SREDY PATH. oTSUTSTWIE IMQ-FAJLA OZNA^AET, ^TO NEOBHODIMO UNI^TOVITX INFORMACI@ O WYPOLNQEMOM FAJLE.

symbol-file [ IMQ-FAJLA ]

~ITATX INFORMACI@ TABLICY SIMWOLOW IZ FAJLA IMQ-FAJLA. pRI NEOBHODIMOSTI PROIZWODITSQ POISK S POMO]X@ PEREMENNOJ SREDY PATH. dLQ POLU^ENIQ TABLICY SIMWOLOW I ISPOLNQEMOJ PROGRAMMY IZ ODNOGO I TOGO VE FAJLA, ISPOLXZUJTE KOMANDU file.

symbol-file BEZ PARAMETROW SBRASYWAET INFORMACI@ GDB O TABLICE SIMWOLOW WA[EJ PROGRAMMY.

kOMANDA symbol-file WELIT GDB ZABYTX SODERVIMOE SWOIH WSPOMOGATELXNYH PEREMENNYH, ISTORI@ ZNA^ENIJ I WSE TO^KI OSTANOWA I WYRAVENIQ AWTOMATI- ^ESKOGO OTOBRAVENIQ, TAK KAK ONI MOGUT SODERVATX UKAZATELI NA WNUTRENNIE DANNYE, HRANQ]IE SIMWOLY I TIPY DANNYH, KOTORYE QWLQ@TSQ ^ASTX@ DANNYH STAROJ TABLICY SIMWOLOW, UNI^TOVENNOJ WNUTRI GDB.

106

oTLADKA S POMO]X@ GDB

symbol-file NE POWTORQETSQ, ESLI WY SNOWA NAVIMAETE hRETi POSLE PERWOGO WYPOLNENIQ.

kOGDA GDB SKONFIGURIROWAN DLQ OPREDELENNOJ SREDY, ON RASPOZNAET OTLADO^- NU@ INFORMACI@ W TOM FORMATE, KOTORYJ OBY^NO GENERIRUETSQ DLQ \TOJ SREDY; WY MOVETE ISPOLXZOWATX ILI KOMPILQTOR gnu, ILI DRUGIE KOMPILQTORY, KOTORYE PRIDERVIWA@TSQ MESTNYH SOGLA[ENIJ. nAILU^[IE REZULXTATY OBY^- NO DOSTIGA@TSQ S POMO]X@ KOMPILQTORA gnu; NAPRIMER, ISPOLXZUQ gcc, WY MOVETE SOZDAWATX OTLADO^NU@ INFORMACI@ DLQ OPTIMIZIROWANNOGO KODA.

dLQ BOLX[INSTWA TIPOW OB_EKTNYH FAJLOW, ZA ISKL@^ENIEM STARYH SISTEM SVR3, ISPOLXZU@]IH COFF, KOMANDA symbol-file OBY^NO NE S^ITYWAET TABLICU SIMWOLOW SRAZU CELIKOM. wMESTO \TOGO, ONA BYSTRO SKANIRUET EE DLQ OPREDELENIQ, KAKIE ISHODNYE FAJLY I SIMWOLY W NEJ PRISUTSTWU@T. dETALI ^ITA@TSQ POZVE, PO ODNOMU ISHODNOMU FAJLU ZA RAZ, PO MERE NEOBHODIMOSTI.

tAKAQ STRATEGIQ ^TENIQ W DWE STADII ISPOLXZUETSQ DLQ TOGO, ^TOBY GDB WYZYWALSQ BYSTREE. zA ISKL@^ENIEM REDKIH PAUZ, ^TENIE DETALEJ TABLICY SIMWOLOW DLQ KONKRETNOGO ISHODNOGO FAJLA W BOLX[INSTWE SLU^AEW PRAKTI^ESKI NEZAMETNO. (kOMANDA set verbose POZWOLQET PRI VELANII PREWRATITX \TI PAUZY W SOOB]ENIQ. sM. rAZDEL 15.6 [nEOBQZATELXNYE PREDUPREVDENIQ I SOOB]ENIQ],

S. 154.)

mY E]E NE REALIZOWALI DWUHSTUPEN^ATU@ STRATEGI@ ^TENIQ DLQ COFF. kOGDA TABLICA SIMWOLOW SOHRANENA W FORMATE COFF, symbol-file S^ITYWAET DANNYE TABLICY SIMWOLOW SRAZU POLNOSTX@. zAMETXTE, ^TO \stabs-in-COFF" WSE VE REALIZUET DWUHSTUPEN^ATU@ STRATEGI@, TAK KAK OTLADO^NAQ INFORMACIQ REALXNO HRANITSQ W FORMATE stabs.

symbol-file IMQ-FAJLA [ -readnow ] [ -mapped ] file IMQ-FAJLA [ -readnow ] [ -mapped ]

eSLI WY HOTITE BYTX UWERENY, ^TO U GDB ESTX WSQ TABLICA SIMWOLOW CELIKOM, WY MOVETE OTMENITX DWUHSTUPEN^ATU@ STRATEGI@ ^TENIQ TABLICY SIMWOLOW, ISPOLXZUQ PARAMETR `-readnow' S L@BOJ KOMANDOJ, ZAGRUVA@]EJ INFORMACI@ TABLICY SIMWOLOW.

eSLI OTOBRAVAEMYE W PAMQTX FAJLY DOSTUPNY W WA[EJ SISTEME ^EREZ SISTEMNYJ WYZOW mmap, WY MOVETE ISPOLXZOWATX DRUGOJ PARAMETR, `-mapped', ^TOBY GDB ZAPISYWAL SIMWOLY DLQ WA[EJ PROGRAMMY W FAJL MNOGOKRATNOGO ISPOLXZOWANIQ. pOSLEDU@]IE SEANSY OTLADKI GDB OTOBRAVA@T INFORMACI@ O SIMWOLAH IZ \TOGO WSPOMOGATELXNOGO FAJLA (ESLI PROGRAMMA NE IZMENILASX), WMESTO TOGO, ^TOBY TRATITX WREMQ NA ^TENIE TABLICY SIMWOLOW IZ ISPOLNQEMOJ PROGRAMMY. iSPOLXZOWANIE PARAMETRA `-mapped' PROIZWODIT TAKOJ VE \FFEKT, KAK WYZOW GDB S KL@^EM KOMANDNOJ STROKI `-mapped'.

wY MOVETE ISPOLXZOWATX OBA PARAMETRA WMESTE, ^TOBY BYTX UWERENNYM, ^TO WSPOMOGATELXNYJ FAJL SIMWOLOW SODERVIT WS@ INFORMACI@ O SIMWOLAH WA[EJ PROGRAMMY.

wSPOMOGATELXNYJ FAJL SIMWOLOW DLQ PROGRAMMY myprog NAZYWAETSQ `myprog.syms'. eSLI \TOT FAJL SU]ESTWUET (I SOZDAN POZVE, ^EM SOOTWETSTWU- @]AQ ISPOLNQEMAQ PROGRAMMA), GDB WSEGDA PYTAETSQ ISPOLXZOWATX EGO PRI OTLADKE myprog; NE TREBUETSQ NIKAKIH SPECIALXNYH KL@^EJ ILI KOMAND.

fAJL `.syms' QWLQETSQ SPECIFI^NYM DLQ RABO^EJ MA[INY, NA KOTOROJ WY WYZYWAETE GDB. oN SODERVIT TO^NYJ OBRAZ WNUTRENNEJ TABLICY SIMWOLOW GDB. oN NE MOVET BYTX ISPOLXZOWAN ODNOWREMENNO NA RAZNYH RABO^IH PLATFORMAH.

core-file [ IMQ-FAJLA ]

oPREDELQET MESTONAHOVDENIE FAJLA DAMPA PAMQTI, KOTORYJ BUDET ISPOLXZOWAN KAK \SODERVIMOE PAMQTI". oBY^NO FAJLY DAMPOW PAMQTI SODERVAT TOLXKO

gLAWA 12: fAJLY GDB

107

NEKOTORYE ^ASTI ADRESNOGO PROSTRANSTWA PROCESSA, SOZDAW[EGO IH; GDB MOVET OBRA]ATXSQ K ISPOLNQEMOMU FAJLU ZA DRUGIMI ^ASTQMI.

core-file BEZ PARAMETRA UKAZYWAET, ^TO FAJL DAMPA PAMQTI ISPOLXZOWATXSQ NE DOLVEN.

oBRATITE WNIMANIE, ^TO FAJL DAMPA PAMQTI IGNORIRUETSQ, ESLI W DANNOE WREMQ WA[A PROGRAMMA WYPOLNQETSQ POD UPRAWLENIEM GDB. tAK ^TO ESLI WY WYPOLNQLI PROGRAMMU, I VELAETE WMESTO \TOGO OTLADITX FAJL DAMPA, WY DOLVNY UBITX PODPROCESS, W KOTOROM WYPOLNQETSQ WA[A PROGRAMMA. dLQ \TOGO ISPOLXZUJTE KOMANDU kill (SM. rAZDEL 4.8 [uNI^TOVENIE DO^ERNEGO PROCESSA], S. 25).

add-symbol-file IMQ-FAJLA ADRES

add-symbol-file IMQ-FAJLA ADRES [ -readnow ] [ -mapped ] add-symbol-file IMQ-FAJLA -sRAZDEL ADRES

kOMANDA add-symbol-file S^ITYWAET DOPOLNITELXNU@ INFORMACI@ TABLICY SIMWOLOW IZ FAJLA IMQ-FAJLA. wY DOLVNY ISPOLXZOWATX \TU KOMANDU, ESLI FAJL IMQ-FAJLA BYL DINAMI^ESKI ZAGRUVEN (DRUGIMI SREDSTWAMI) W WYPOLNQ- @]U@SQ PROGRAMMU. aDRES DOLVEN BYTX ADRESOM PAMQTI, PO KOTOROMU BYL ZAGRUVEN FAJL; GDB SAM EGO OPREDELITX NE MOVET. wY MOVETE UKAZATX DOPOLNITELXNO PROIZWOLXNOE KOLI^ESTWO PAR `-s RAZDEL ADRES', ^TOBY QWNO UKAZATX IMQ RAZDELA I BAZOWYJ ADRES DLQ NEGO. wY MOVETE UKAZATX PROIZWOLXNYJ ADRES KAK WYRAVENIE.

tABLICA SIMWOLOW IZ FAJLA IMQ-FAJLA DOBAWLQETSQ K TABLICE, IZNA^ALXNO S^ITANNOJ PO KOMANDE symbol-file. wY MOVETE ISPOLXZOWATX KOMANDU add- symbol-file PROIZWOLXNOE ^ISLO RAZ; PRO^ITANNYE TAKIM OBRAZOM SIMWOLXNYE DANNYE DOBAWLQ@TSQ K STARYM. ~TOBY UNI^TOVITX WSE STARYE DANNYE, ISPOLXZUJTE KOMANDU symbol-file BEZ ARGUMENTOW.

kOMANDA add-symbol-file NE POWTORQETSQ, ESLI WY NAVIMAETE hRETi POSLE EE ISPOLXZOWANIQ.

~TOBY IZMENITX SPOSOB OBRABOTKI GDB TABLICY SIMWOLOW DLQ IMQ-FAJLA, WY MOVETE ISPOLXZOWATX PARAMETRY `-mapped' I `-readnow' TAK VE, KAK I S KOMAN-

DOJ symbol-file.

add-shared-symbol-file

kOMANDA add-shared-symbol-file MOVET BYTX ISPOLXZOWANA TOLXKO DLQ Motorola 88k W OPERACIONNOJ SISTEME Harris CXUX. GDB I]ET RAZDELQEMYE BIBLIOTEKI AWTOMATI^ESKI, ODNAKO, ESLI ON NE NAHODIT WA[IH, WY MOVETE WYPOLNITX add-shared-symbol-file. |TA KOMANDA NE IMEET ARGUMENTOW.

section kOMANDA section IZMENQET BAZOWYJ ADRES RAZDELA RAZDEL WYPOLNQEMOGO FAJLA W ADRES. |TO MOVET BYTX ISPOLXZOWANO, ESLI WYPOLNQEMYJ FAJL NE SODERVIT ADRESOW RAZDELOW, (^TO IMEET MESTO DLQ FORMATA a.out), ILI KOGDA ADRESA, UKAZANNYE W SAMOM FAJLE, NEWERNY. kAVDYJ RAZDEL DOLVEN IZMENQTXSQ OTDELXNO. kOMANDA info files, OPISANNAQ NIVE, PERE^ISLQET WSE RAZDELY I IH ADRESA.

info files info target

kOMANDY info files I info target QWLQ@TSQ SINONIMAMI; ONI OBE WYWODQT TEKU]U@ CELX (SM. gLAWA 13 [oPREDELENIE OTLADO^NOJ CELI], S. 111), WKL@^AQ IMENA WYPOLNQEMOGO FAJLA I FAJLA DAMPA PAMQTI, ISPOLXZUEMYH GDB, I FAJLOW, IZ KOTORYH BYLI ZAGRUVENY SIMWOLY. kOMANDA help target WYWODIT WSE WOZMOVNYE CELI, A NE TOLXKO TEKU]U@.

wSE KOMANDY DLQ ZADANIQ FAJLOW DOPUSKA@T W KA^ESTWE ARGUMENTOW KAK ABSOL@TNYE, TAK I OTNOSITELXNYE IMENA FAJLOW. GDB WSEGDA PREOBRAZOWYWAET IMQ FAJLA K ABSOL@TNOMU I ZAPOMINAET EGO W TAKOM WIDE.

108

oTLADKA S POMO]X@ GDB

GDB PODDERVIWAET RAZDELQEMYE BIBLIOTEKI NA HP-UX, SunOS, SVr4, Irix 5 I IBM RS/6000.

kOGDA WY DAETE KOMANDU run, ILI KOGDA ISSLEDUETE FAJL DAMPA PAMQTI, GDB AWTOMATI^ESKI ZAGRUVAET OPREDELENIQ SIMWOLOW IZ RAZDELQEMYH BIBLIOTEK. (oDNAKO, ESLI WY NE OTLAVIWAETE FAJL DAMPA, GDB NE PONIMAET SSYLKI NA FUNKCII IZ RAZDELQEMOJ BIBLIOTEKI DO TOGO, KAK WY WYPOLNITE KOMANDU run.)

nA HP-UX, ESLI PROGRAMMA ZAGRUVAET RAZDELQEMU@ BIBLIOTEKU QWNO, GDB AWTOMATI- ^ESKI ZAGRUVAET SIMWOLY W MOMENT WYZOWA shl_load.

info share

info sharedlibrary

wYWESTI IMENA RAZDELQEMYH BIBLIOTEK, ZAGRUVENNYH W DANNYJ MOMENT.

sharedlibrary REG-WYR share REG-WYR

zAGRUZITX SIMWOLY RAZDELQEMYH BIBLIOTEK OB_EKTOW DLQ FAJLOW, UDOWLETWORQ@]IH REGULQRNOMU WYRAVENI@ Unix. tAKVE KAK I DLQ AWTOMATI^ESKI ZAGRUVENNYH FAJLOW, \TO ZAGRUVAET TOLXKO RAZDELQEMYE BIBLIOTEKI, TREBUEMYE WA[EJ PROGRAMMOJ DLQ FAJLA DAMPA PAMQTI ILI POSLE WWODA run. eSLI REG-WYR OPU]ENO, ZAGRUVA@TSQ WSE RAZDELQEMYE BIBLIOTEKI, TREBUEMYE WA[EJ PROGRAMMOJ.

w SISTEMAH HP-UX, GDB SAM OPREDELQET ZAGRUZKU RAZDELQEMOJ BIBLIOTEKI I AWTOMATI^ESKI S^ITYWAET SIMWOLY IZ NEE, DO NEKOTOROGO IZNA^ALXNO USTANOWLENNOGO POROGOWOGO ZNA^ENIQ, KOTOROE WY MOVETE PRI VELANII IZMENITX.

pOSLE \TOGO POROGOWOGO ZNA^ENIQ, SIMWOLY IZ RAZDELQEMYH BIBLIOTEK DOLVNY ZAGRUVATXSQ QWNO. dLQ ZAGRUZKI \TIH SIMWOLOW, ISPOLXZUJTE KOMANDU sharedlibrary IMQFAJLA. bAZOWYJ ADRES RAZDELQEMOJ BIBLIOTEKI OPREDELQETSQ GDB AWTOMATI^ESKI I WY NE DOLVNY EGO ZADAWATX.

dLQ OTOBRAVENIQ ILI USTANOWKI POROGOWOGO ZNA^ENIQ, ISPOLXZUJTE SLEDU@]IE KOMANDY:

set auto-solib-add POROG

uSTANAWLIWAET RAZMER POROGA AWTOMATI^ESKOJ ZAGRUZKI W MEGABAJTAH. eSLI POROG NENULEWOJ, SIMWOLY IZ WSEH BIBLIOTEK RAZDELQEMYH OB_EKTOW BUDUT ZAGRUVATXSQ AWTOMATI^ESKI, KOGDA PROGRAMMA NA^INAET WYPOLNENIE ILI KOGDA DINAMI^ESKIJ KOMPONOW]IK INFORMIRUET GDB O TOM, ^TO BYLA ZAGRUVENA NOWAQ BIBLIOTEKA, DO TEH POR, POKA TABLICA SIMWOLOW PROGRAMMY I BIBLIOTEK NE PREWYSIT \TOT POROG. w PROTIWNOM SLU^AE, SIMWOLY DOLVNY ZAGRUVATXSQ WRU^NU@, PRI POMO]I KOMANDY sharedlibrary. pO UMOL^ANI@, POROG RAWEN 100 MEGABAJTAM.

show auto-solib-add

oTOBRAZITX WELI^INU TEKU]EGO POROGA AWTOMATI^ESKOJ ZAGRUZKI W MEGABAJTAH.

12.2 o[IBKI ^TENIQ FAJLOW S SIMWOLAMI

pRI ^TENII FAJLA SIMWOLOW, GDB INOGDA STALKIWAETSQ S TAKIMI PROBLEMAMI, KAK TIPY SIMWOLOW, KOTORYE ON NE RASPOZNAET, ILI IZWESTNYE O[IBKI WYWODA KOMPILQTORA. pO UMOL^ANI@, GDB NE SOOB]AET WAM O TAKIH PROBLEMAH, TAK KAK ONI SRAWNITELXNO OB]IE I PREVDE WSEGO PREDSTAWLQ@T INTERES DLQ L@DEJ, ZANIMA@]IHSQ OTLADKOJ KOMPILQTOROW. eSLI WAM INTERESNA INFORMACIQ O PLOHO SOZDANNYH TABLICAH SIMWOLOW, WY MOVETE ZAPROSITX GDB PE^ATATX TOLXKO ODNO SOOB]ENIE PO KAVDOMU TIPU PROBLEM, NEZAWISIMO OT TOGO, SKOLXKO RAZ PROBLEMA POQWLQETSQ; ILI WY MOVETE POPROSITX GDB NAPE^ATATX BOLX[E

gLAWA 12: fAJLY GDB

109

SOOB]ENIJ, ^TOBY UWIDETX, SKOLXKO RAZ PROBLEMA WSTRE^ALASX, KOMANDOJ set complaints (SM. rAZDEL 15.6 [nEOBQZATELXNYE PREDUPREVDENIQ I SOOB]ENIQ], S. 154).

pE^ATAEMYE SOOB]ENIQ I IH ZNA^ENIQ, WKL@^A@T:

inner block not inside outer block in SIMWOL

iNFORMACIQ O SIMWOLAH POKAZYWAET, GDE OBLASTI SIMWOLOW NA^INA@TSQ I ZAKAN^IWA@TSQ (NAPRIMER, W NA^ALE FUNKCII ILI BLOKA OPERATOROW). |TA O[IBKA UKAZYWAET NA TO, ^TO WNUTRENNIJ BLOK WIDIMOSTI NE SODERVITSQ CELIKOM WO WNE[NEM.

GDB OBHODIT PROBLEMU, RASSMATRIWAQ WNUTRENNIJ BLOK TAK, KAK ESLI BY ON IMEL TAKU@ VE OBLASTX WIDIMOSTI, ^TO I WNE[NIJ. eSLI WNE[NIJ BLOK NE QWLQETSQ FUNKCIEJ, W DANNOM SOOB]ENII SIMWOL MOVET BYTX POKAZAN KAK \(don't known)".

block at ADRES out of order

sIMWOLXNAQ INFORMACIQ DLQ BLOKOW SIMWOLXNYH OBLASTEJ DOLVNA POQWLQTXSQ W PORQDKE UWELI^ENIQ ADRESOW. dANNAQ O[IBKA UKAZYWAET, ^TO \TO NE TAK.

GDB NE RE[AET \TOJ PROBLEMY, I U NEGO WOZNIKA@T TRUDNOSTI PRI OPREDELENII MESTOPOLOVENIQ SIMWOLOW W ISHODNOM FAJLE, SIMWOLY KOTOROGO ON S^ITYWAET. (wY ^ASTO MOVETE OPREDELITX IMQ POWREVDENNOGO ISHODNOGO FAJLA, UKAZAW set verbose on. sM. rAZDEL 15.6 [nEOBQZATELXNYE PREDUPREVDENIQ I SOOB]ENIQ],

S. 154.)

bad block start address patched

sIMWOLXNAQ INFORMACIQ DLQ BLOKOW SIMWOLXNYH OBLASTEJ IMEET MENX[IJ NA- ^ALXNYJ ADRES, ^EM U PRED[ESTWU@]EJ STROKI ISHODNOGO TEKSTA. iZWESTNO, ^TO \TO PROISHODIT W KOMPILQTORE sI SunOS 4.1.1 (I BOLEE RANNIH WERSIQH).

GDB OBHODIT PROBLEMU, OBRABATYWAQ BLOK SIMWOLXNOJ OBLASTI KAK NA^INA@- ]IJSQ S PREDYDU]EJ ISHODNOJ STROKI.

bad string table offset in symbol n

sIMWOL S NOMEROM n SODERVIT UKAZATELX NA TABLICU STROK, KOTORYJ PREWOSHODIT RAZMER TABLICY.

GDB OBHODIT PROBLEMU, S^ITAQ, ^TO SIMWOL IMEET IMQ foo, ^TO MOVET WYZWATX DRUGIE PROBLEMY, ESLI MNOGO SIMWOLOW ZAKAN^IWA@TSQ \TIM IMENEM.

unknown symbol type 0xnn

sIMWOLXNAQ INFORMACIQ SODERVIT NOWYE TIPY DANNYH, KOTORYE GDB E]E NE ZNAET, KAK S^ITYWATX. 0xnn|\TO TIP SIMWOLA NEWERNO ISTOLKOWANNOJ INFORMACII, W [ESTNADCATERI^NOM WIDE.

GDB OBHODIT O[IBKU, IGNORIRUQ \TU SIMWOLXNU@ INFORMACI@. |TO OBY^NO POZWOLQET WAM OTLADVIWATX PROGRAMMU, HOTQ NEKOTORYE SIMWOLY I NEDOSTUPNY. eSLI WY STOLKNETESX S TAKOJ PROBLEMOJ I VELAETE EE OTLADITX, WY MOVETE OTLADITX gdb S POMO]X@ NEGO VE, USTANOWIW TO^KU OSTANOWA NA complain, ZATEM DOJTI DO FUNKCII read_dbx_symtab I ISSLEDOWATX *bufp, ^TOBY UWIDETX SIMWOL.

stub type has NULL name

GDB NE MOVET NAJTI POLNOE OPREDELENIE DLQ STRUKTURY ILI KLASSA.

const/volatile indicator missing (ok if using g++ v1.x), got...

w SIMWOLXNOJ INFORMACII DLQ FUNKCII-^LENA sI++ PROPU]ENA NEKOTORAQ INFORMACIQ, KOTORU@ POSLEDNIE WERSII KOMPILQTORA DOLVNY DLQ NEE WYWODITX.

info mismatch between compiler and debugger

GDB NE MOVET RAZOBRATX SPECIFIKACII TIPA, WYWEDENNOJ KOMPILQTOROM.

110

oTLADKA S POMO]X@ GDB

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

111

13 oPREDELENIE OTLADO^NOJ CELI

cELX|\TO SREDA WYPOLNENIQ, ZANQTAQ WA[EJ PROGRAMMOJ.

~ASTO GDB WYPOLNQETSQ W TOJ VE RABO^EJ SREDE, ^TO I WA[A PROGRAMMA; W \TOM SLU^AE, OTLADO^NAQ CELX ZADAETSQ NEQWNO W MOMENT ISPOLXZOWANIQ KOMAND file ILI core. kOGDA WAM NUVNA BOLX[AQ GIBKOSTX|NAPRIMER, WYPOLNENIE GDB NA DRUGOJ MA[INE, ILI UPRAWLENIE AWTONOMNOJ SISTEMOJ ^EREZ POSLEDOWATELXNYJ PORT ILI SISTEMOJ REALXNOGO WREMENI ^EREZ SOEDINENIE TCP/IP|WY MOVETE ISPOLXZOWATX KOMANDU target DLQ OPREDELENIQ CELI ODNOGO IZ TIPOW, SKONFIGURIROWANNYH DLQ GDB (SM. rAZDEL 13.2 [kOMANDY DLQ UPRAWLENIQ CELQMI], S. 111).

13.1 aKTIWNYE CELI

sU]ESTWUET TRI KLASSA CELEJ: PROCESSY, FAJLY DAMPOW PAMQTI I WYPOLNQEMYE FAJLY. GDB MOVET OBRABATYWATX ODNOWREMENNO DO TREH AKTIWNYH CELEJ, PO ODNOJ W KAVDOM KLASSE. |TO POZWOLQET WAM (NAPRIMER) ZAPUSTITX PROCESS I PROWERQTX EGO DEJSTWIQ, NE PRERYWAQ WA[U RABOTU NAD FAJLOM DAMPA.

nAPRIMER, ESLI WY WYPOLNQETE `gdb a.out', TO ISPOLNQEMYJ FAJL a.out QWLQETSQ EDINSTWENNOJ AKTIWNOJ CELX@. eSLI WY NAZNA^ITE TAKVE FAJL DAMPA|WOZMOVNO OT PREDYDU- ]EGO WYPOLNENIQ, ZAWER[IW[EGOSQ O[IBKOJ I SOZDAW[EGO DAMP| TOGDA GDB IMEET DWE AKTIWNYE CELI I ISPOLXZUET IH WMESTE, PROSMATRIWAQ SNA^ALA FAJL DAMPA, A ZATEM ISPOLNQEMYJ FAJL, DLQ WYPOLNENIQ ZAPROSOW K ADRESAM PAMQTI. (oBY^NO \TI DWA KLASSA CELEJ DOPOLNQ@T DRUG DRUGA, TAK KAK FAJLY DAMPA PAMQTI SODERVIT TOLXKO PAMQTX PROGRAMMY, DOSTUPNU@ DLQ ^TENIQ I ZAPISI (PEREMENNYE I TOMU PODOBNOE), I MA[INNOE SOSTOQNIE, W TO WREMQ KAK ISPOLNQEMYJ FAJLY SODERVAT TOLXKO TEKST PROGRAMMY I INICIALIZIROWANNYE DANNYE.)

kOGDA WY WWODITE run, WA[ ISPOLNQEMYJ FAJL STANOWITSQ TAKVE AKTIWNYM CELEWYM PROCESSOM. kOGDA CELEWOJ PROCESS AKTIWEN, WSE KOMANDY GDB, ZAPRA[IWA@]IE ADRESA PAMQTI, OTNOSQTSQ K \TOJ CELI; ADRESA W AKTIWNOJ CELI FAJLA DAMPA ILI WYPOLNQEMOGO FAJLA NEIZWESTNY, POKA AKTIWEN CELEWOJ PROCESS.

iSPOLXZUJTE KOMANDY core-file I exec-file DLQ WYBORA NOWOJ CELI FAJLA DAMPA PAMQTI ILI WYPOLNQEMOGO FAJLA (SM. rAZDEL 12.1 [kOMANDY DLQ ZADANIQ FAJLOW], S. 105). dLQ OPREDELENIQ W KA^ESTWE CELI PROCESSA, KOTORYJ UVE WYPOLNQETSQ, ISPOLXZUJTE KOMANDU attach (SM. rAZDEL 4.7 [oTLADKA ZAPU]ENNOGO RANEE PROCESSA], S. 25).

13.2 kOMANDY DLQ UPRAWLENIQ CELQMI

target TIP PARAMETRY

sOEDINQET RABO^U@ SREDU GDB S CELEWOJ MA[INOJ ILI PROCESSOM. cELX@ OBY^- NO QWLQETSQ PROTOKOL DLQ WZAIMODEJSTWIQ SO SREDSTWAMI OTLADKI. pARAMETR TIP ISPOLXZUETSQ, ^TOBY OPREDELITX TIP ILI PROTOKOL CELEWOJ MA[INY.

dALXNEJ[IE PARAMETRY INTERPRETIRU@TSQ CELEWYM PROTOKOLOM, NO OBY^NO WKL@^A@T TAKIE WE]I, KAK IMENA USTROJSTW ILI IMENA RABO^IH MA[IN, S KOTORYMI OSU]ESTWLQETSQ SWQZX, NOMERA PROCESSOW I SKOROSTI W BODAH.

kOMANDA target NE POWTORQETSQ PRI POWTORNOM NAVATII hRETi POSLE EE WYPOLNENIQ.

help target

oTOBRAVAET IMENA WSEH DOSTUPNYH CELEJ. ~TOBY OTOBRAZITX WYBRANNYE W DANNYJ MOMENT CELI, ISPOLXZUJTE LIBO info target, LIBO info files (SM. rAZDEL 12.1 [kOMANDY DLQ ZADANIQ FAJLOW], S. 105).

112

oTLADKA S POMO]X@ GDB

help target IMQ

oPISYWAET OPREDELENNU@ CELX, WKL@^AQ L@BYE PARAMETRY, NEOBHODIMYE DLQ EE WYBORA.

set gnutarget ARG

GDB ISPOLXZUET SWO@ SOBSTWENNU@ BIBLIOTEKU BFD1 DLQ ^TENIQ WA[IH FAJ-

LOW. GDB ZNAET, ^ITAET LI ON WYPOLNQEMYJ FAJL, FAJL DAMPA PAMQTI ILI

OB_EKTNYJ (.o) FAJL; ODNAKO WY MOVETE OPREDELITX FORMAT FAJLA KOMANDOJ set gnutarget. w OTLI^IE OT BOLX[INSTWA KOMAND target, S gnutarget, KOMANDA target OTNOSITSQ K PROGRAMME, A NE K MA[INE.

pREDUPREVDENIE: dLQ OPREDELENIQ FORMATA FAJLA POSREDSTWOM set gnutarget, WY DOLVNY ZNATX FAKTI^ESKOE IMQ BFD.

sM. rAZDEL 12.1 [kOMANDY DLQ ZADANIQ FAJLOW], S. 105.

show gnutarget

iSPOLXZUJTE KOMANDU show gnutarget DLQ OTOBRAVENIQ, KAKOGO FORMATA FAJLY gnutarget USTANOWLEN S^ITYWATX. eSLI WY NE USTANOWILI gnutarget, GDB OPREDELIT FORMAT DLQ KAVDOGO FAJLA AWTOMATI^ESKI, I show gnutarget WYWE-

DET `The current BFD target is "auto"'.

nIVE PRIWEDENY NEKOTORYE NAIBOLEE RASPROSTRANENNYE CELI (DOSTUPNYE ILI NET, W ZAWISIMOSI OT KONFIGURACII GDB):

target exec PROGRAMMA

wYPOLNQEMYJ FAJL. `target exec PROGRAMMA' TO VE SAMOE, ^TO I `exec-file

PROGRAMMA'.

target core IMQ-FAJLA

fAJL DAMPA PAMQTI. `target core IMQ-FAJLA' TO VE SAMOE, ^TO I `core-file

IMQ-FAJLA'.

target remote USTR

uDALENNAQ POSLEDOWATELXNAQ CELX QWLQETSQ UNIKALXNYM DLQ GDB PROTOKOLOM. pARAMETR USTR OPREDELQET, KAKOE POSLEDOWATELXNOE USTROJSTWO ISPOLXZOWATX DLQ SOEDINENIQ (NAPRIMER, `/dev/ttya'). sM. rAZDEL 13.4 [uDALENNAQ OTLADKA], S. 113. target remote PODDERVIWAET KOMANDU load. |TO POLEZNO, TOLXKO ESLI WY MOVETE POLU^ITX ZAGLU[KU DLQ CELEWOJ SISTEMY KAKIM-NIBUDX DRUGIM SPOSOBOM I MOVETE RAZMESTITX EE W PAMQTI, GDE ONA NE BUDET ZATERTA ZAGRUZKOJ.

target sim

wSTROENNYJ \MULQTOR cp. GDB WKL@^AET \MULQTORY DLQ BOLX[INSTWA ARHITEKTUR. wOOB]E,

target sim load

run

RABOTAET; ODNAKO, WY NE MOVETE PREDPOLOVITX, ^TO DOSTUPNY OPREDELENNOE OTOBRAVENIE PAMQTI, DRAJWERY USTROJSTW, ILI DAVE OSNOWNYE FUNKCII WWODAWYWODA, HOTQ NEKOTORYE \MULQTORY DEJSTWITELXNO PREDOSTAWLQ@T \TO. dLQ INFORMACII O DETALQH \MULQTOROW DLQ KONKRETNOGO PROCESSORA, SMOTRITE SOOTWETSTWU@]IJ rAZDEL 14.3 [wSTROENNYE PROCESSORY], S. 136.

nEKOTORYE KONFIGURACII MOGUT TAKVE WKL@^ATX TAKIE CELI:

target nrom USTR

|MULQTOR NetROM ROM. |TA CELX PODDERVIWAET TOLXKO ZAGRUZKU.

1 OT `Binary File Descriptor' (BIBLIOTEKA OPISANIQ DWOI^NYH FAJLOW). (pRIM. PEREWOD^IKA)

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

113

dLQ RAZLI^NYH KONFIGURACIJ GDB DOSTUPNY RAZLI^NYE CELI; WA[A KONFIGURACIQ MOVET IMETX BOLX[E ILI MENX[E CELEJ.

mNOGIE UDALENNYE CELI TREBU@T, ^TOBY WY ZAGRUZILI KOD WYPOLNQEMOGO FAJLA, POSLE TOGO KAK WY USPE[NO USTANOWILI SOEDINENIE.

load IMQ-FAJLA

w ZAWISIMOSTI OT TOGO, KAKIE WOZMOVNOSTI UDALENNOJ OTLADKI SKONFIGURIROWANY W GDB, MOVET BYTX DOSTUPNA KOMANDA load. eSLI ONA SU]ESTWUET, EE ZADA^EJ QWLQETSQ SDELATX IMQ-FAJLA (WYPOLNQEMYJ FAJL) DOSTUPNYM DLQ OTLADKI NA UDALENNOJ SISTEME|NAPRIMER, PUTEM ZAGRUZKI ILI DINAMI^ESKOJ SBORKI. load TAKVE ZAPISYWAET TABLICU SIMWOLOW IMQ-FAJLA W GDB, KAK KO-

MANDA add-symbol-file.

eSLI WA[ GDB NE IMEET KOMANDY load, POPYTKA WYPOLNITX EE WYDAET SOOB]E-

NIE OB O[IBKE \You can't do that when your target is ...".

fAJL ZAGRUVAETSQ PO ADRESU, UKAZANNOMU W WYPOLNQEMOM FAJLE. dLQ NEKOTORYH FORMATOW OB_EKTNYH FAJLOW, WY MOVETE ZADATX ADRES ZAGRUZKI PRI SBORKE PROGRAMMY; DLQ DRUGIH FORMATOW, TAKIH KAK a.out, FORMAT OB_EKTNOGO FAJLA ZADAET FIKSIROWANNYJ ADRES.

load NE POWTORQETSQ, ESLI WY NAVIMAETE hRETi SNOWA POSLE EE ISPOLXZOWANIQ.

13.3 wYBOR CELEWOGO PORQDKA BAJTOW

nEKOTORYE TIPY PROCESSOROW, TAKIE KAK MIPS, PowerPC I Hitachi SH, PREDOSTAWLQ@T WOZMOVNOSTX WYPOLNENIQ LIBO S PORQDKOM BAJTOW OT STAR[EGO, LIBO S PORQDKOM BAJTOW OT MLAD[EGO. oBY^NO, WYPOLNQEMYJ FAJL ILI SIMWOLY SODERVAT INFORMACI@ DLQ OPREDELENIQ ISPOLXZUEMOGO PORQDKA BAJTOW, I WAM NE NUVNO OB \TOM ZABOTITXSQ. oDNAKO, INOGDA WAM WSE VE MOVET PRIGODITXSQ WRU^NU@ IZMENITX PORQDOK BAJTOW PROCESSORA, OPREDELEN-

NYJ GDB.

set endian big

wELIT GDB S^ITATX, ^TO CELEWOJ PORQDOK BAJTOW OT STAR[EGO.

set endian little

wELIT GDB S^ITATX, ^TO CELEWOJ PORQDOK BAJTOW OT MLAD[EGO.

set endian auto

wELIT GDB ISPOLXZOWATX PORQDOK BAJTOW, UKAZANNYJ W WYPOLNQEMOM FAJLE.

show endian

oTOBRAVAET TEKU]U@ USTANOWKU GDB DLQ CELEWOGO PORQDKA BAJTOW.

zAMETXTE, ^TO \TI KOMANDY UPRAWLQ@T TOLXKO INTERPRETACIEJ SIMWOLXNYH DANNYH W RABO^EJ SISTEME, I ONI SOWER[ENNO NE OKAZYWA@T DEJSTWIQ NA CELEWU@ SISTEMU.

13.4 uDALENNAQ OTLADKA

eSLI WY PYTAETESX OTLAVIWATX PROGRAMMU, WYPOLNQ@]U@SQ NA MA[INE, KOTORAQ NE MOVET ZAPUSTITX GDB OBY^NYM SPOSOBOM, ^ASTO BYWAET POLEZNA UDALENNAQ OTLADKA. nAPRIMER, WY MOVETE ISPOLXZOWATX UDALENNU@ OTLADKU DLQ QDRA OPERACIONNOJ SISTEMY ILI DLQ MALOJ SISTEMY, KOTORAQ NE IMEET DOSTATO^NO MO]NOJ OPERACIONNOJ SISTEMY OB]EGO NAZNA^ENIQ DLQ WYZOWA OTLAD^IKA SO WSEMI WOZMOVNOSTQMI.

nEKOTORYE KONFIGURACII GDB IME@T SPECIALXNYJ POSLEDOWATELXNYJ ILI TCP/IP INTERFEJSY DLQ TOGO, ^TOBY \TO RABOTALO S KONKRETNYMI OTLADO^NYMI CELQMI. kROME TOGO, GDB RASPROSTRANQETSQ S OB]IM POSLEDOWATELXNYM PROTOKOLOM (UNIKALXNYM DLQ GDB,

114

oTLADKA S POMO]X@ GDB

NO NE DLQ KONKRETNOJ CELEWOJ SISTEMY), KOTORYJ WY MOVETE ISPOLXZOWATX, ESLI PI[ETE UDALENNYE ZAGLU[KI|KOD, WYPOLNQEMYJ W UDALENNOJ SISTEME DLQ SWQZI S GDB.

w WA[EJ KONFIGURACII GDB MOGUT BYTX DOSTUPNY DRUGIE UDALENNYE CELI; ISPOLXZUETE help target, ^TOBY IH PERE^ISLITX.

13.4.1 uDALENNYJ POSLEDOWATELXNYJ PROTOKOL GDB

dLQ OTLADKI PROGRAMMY, WYPOLNQEMOJ NA DRUGOJ MA[INE (OTLADO^NOJ CELEWOJ MA- [INE), WY SPERWA DOLVNY SOZDATX WSE OBY^NYE PREDPOSYLKI DLQ SAMOSTOQTELXNOGO WYPOLNENIQ PROGRAMMY. nAPRIMER, DLQ PROGRAMMY NA sI WAM NUVNY:

1.pROCEDURA ZAPUSKA DLQ USTANOWKI SREDY WYPOLNENIQ sI; ONA OBY^NO IMEET IMQ TIPA `crt0'. pROCEDURA ZAPUSKA MOVET BYTX OBESPE^ENA WA[IMI APPARATNYMI SREDSTWAMI, ILI WY DOLVNY NAPISATX SWO@ SOBSTWENNU@.

2.bIBLIOTEKA PODPROGRAMM sI DLQ PODDERVKI WYZOWOW PODPROGRAMM WA[EJ PROGRAMMY, OSOBENNO DLQ UPRAWLENIQ WWODOM I WYWODOM.

3.sPOSOB USTANOWKI WA[EJ PROGRAMMY NA DRUGU@ MA[INU|NAPRIMER, PROGRAMMA ZAGRUZKI. tAKIE PROGRAMMY ^ASTO PREDOSTAWLQ@TSQ POSTAW]IKAMI APPARATNYH SREDSTW, NO WAM MOVET POTREBOWATXSQ NAPISATX WA[U SOBSTWENNU@, POLXZUQSX DOKUMENTACIEJ K APPARATNOMU OBESPE^ENI@.

sLEDU@]IM [AGOM BUDET PRINQTIE MER PO ISPOLXZOWANI@ WA[EJ PROGRAMMOJ POSLEDOWATELXNOGO PORTA DLQ SWQZI S MA[INOJ, GDE WYPOLNQETSQ GDB (RABO^EJ MA[INOJ). w OB]IH ^ERTAH, SHEMA WYGLQDIT SLEDU@]IM OBRAZOM:

nA RABO^EJ MA[INE

GDB UVE PONIMAET, KAK ISPOLXZOWATX \TOT PROTOKOL; POSLE USTANOWKI WSEGO OSTALXNOGO, WY MOVETE PROSTO ISPOLXZOWATX KOMANDU `target remote' (SM. gLAWA 13 [oPREDELENIE OTLADO^NOJ CELI], S. 111).

nA CELEWOJ MA[INE

WY DOLVNY SKOMPONOWATX WMESTE S WA[EJ PROGRAMMOJ NESKOLXKO PODPROGRAMM SPECIALXNOGO NAZNA^ENIQ, KOTORYE REALIZU@T UDALENNYJ POSLEDOWATELXNYJ PROTOKOL GDB. fAJL, SODERVA]IJ \TI PODPROGRAMMY, NAZYWAETSQ OTLADO^NOJ ZAGLU[KOJ.

nA NEKOTORYH UDALENNYH CELQH, WY MOVETE ISPOLXZOWATX WSPOMOGATELXNU@ PROGRAMMU gdbserver WMESTO KOMPONOWKI ZAGLU[KI WMESTE S WA[EJ PROGRAMMOJ. sM. rAZDEL 13.4.1.5 [iSPOLXZOWANIE PROGRAMMY gdbserver], S. 130, DLQ DETALXNOGO IZU^ENIQ.

oTLADO^NAQ ZAGLU[KA SPECIFI^NA DLQ ARHITEKTURY UDALENNOJ MA[INY; NAPRIMER, ISPOLXZUJTE `sparc-stub.c' DLQ OTLADKI PROGRAMM NA MA[INAH sparc.

sLEDU@]IE RABOTA@]IE UDALENNYE ZAGLU[KI RASPROSTRANQ@TSQ WMESTE S GDB:

i386-stub.c

dLQ Intel 386 I SOWMESTIMYH ARHITEKTUR.

m68k-stub.c

dLQ ARHITEKTUR Motorola 680x0.

sh-stub.c

dLQ ARHITEKTUR Hitachi SH.

sparc-stub.c

dLQ ARHITEKTUR sparc.

sparcl-stub.c

dLQ ARHITEKTUR Fujitsu spacrlite.

fAJL `README' W POSTAWKE GDB MOVET SODERVATX DRUGIE NEDAWNO DOBAWLENNYE ZAGLU[KI.

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

115

13.4.1.1 ~TO ZAGLU[KA MOVET SDELATX DLQ WAS

oTLADO^NAQ ZAGLU[KA DLQ WA[EJ ARHITEKTURY SODERVIT SLEDU@]IE TRI PODPROGRAMMY:

set_debug_traps

kOGDA WA[A PROGRAMMA OSTANAWLIWAETSQ, \TA PODPROGRAMMA ORGANIZUET WYPOLNENIE handle_exception. wY DOLVNY QWNO WYZWATX \TU PODPROGRAMMU W NA^ALE WA[EJ PROGRAMMY.

handle_exception

|TO GLAWNAQ RABO^AQ LO[ADKA, NO WA[A PROGRAMMA NIKOGDA NE WYZYWAET EE QWNO|USTANOWO^NYJ KOD ORGANIZUET ZAPUSK handle_exception, KOGDA WYZYWAETSQ LOWU[KA.

handle_exception POLU^AET UPRAWLENIE, KOGDA WA[A PROGRAMMA OSTANAWLIWAETSQ WO WREMQ WYPOLNENIQ (NAPRIMER, W TO^KE OSTANOWA), I ORGANIZUET SWQZX S GDB NA RABO^EJ MA[INE. iMENNO ZDESX REALIZUETSQ PROTOKOL SWQZI; handle_ exception DEJSTWUET KAK PREDSTAWITELX GDB NA CELEWOJ MA[INE. sPERWA ONA POSYLAET SUMMARNU@ INFORMACI@ O SOSTOQNII WA[EJ PROGRAMMY, ZATEM PRODOLVAET WYPOLNQTXSQ, IZWLEKAQ I PEREDAWAQ L@BU@ INFORMACI@, TREBU@]U- @SQ GDB, POKA WY NE WYPOLNITE KOMANDU GDB, WOZOBNOWLQ@]U@ WYPOLNENIE WA[EJ PROGRAMMY; W \TOM MESTE handle_exception WOZWRA]AET UPRAWLENIE WA- [EMU KODU NA CELEWOJ MA[INE.

breakpoint

iSPOLXZUJTE \TU WSPOMOGATELXNU@ PODPROGRAMMU DLQ USTANOWKI W WA[EJ PROGRAMME TO^EK OSTANOWA. w ZAWISIMOSTI OT KONKRETNOJ SITUACII, \TO MOVET BYTX EDINSTWENNYM SPOSOBOM DLQ GDB POLU^ITX UPRAWLENIE. nAPRIMER, ESLI WA[A CELEWAQ MA[INA IMEET NEKU@ KLAWI[U PRERYWANIQ, WAM NE NUVNO WYZYWATX \TU PODPROGRAMMU; NAVATIE KLAWI[I PRERYWANIQ PEREDAST UPRAWLENIE handle_exception|W DEJSTWITELXNOSTI, GDB. nA NEKOTORYH MA[INAH PROSTOE POLU^ENIE SIMWOLOW NA POSLEDOWATELXNYJ PORT MOVET TAKVE WYZWATX LOWU[KU; OPQTX, W \TOJ SITUACII WAM NE NUVNO WYZYWATX breakpoint IZ WA- [EJ PROGRAMMY|PROSTOE WYPOLNENIE `target remote' IZ RABO^EGO SEANSA GDB PEREDAST UPRAWLENIE.

wYZYWAJTE breakpoint, ESLI NI ODNO IZ \TIH PREDPOLOVENIJ NE WERNO, ILI WY PROSTO HOTITE BYTX UWERENNYM, ^TO WA[A PROGRAMMA OSTANOWITSQ W PREDOPREDELENNOJ TO^KE OT NA^ALA WA[EGO SEANSA OTLADKI.

13.4.1.2 ~TO WY DOLVNY SDELATX DLQ ZAGLU[KI

oTLADO^NYE ZAGLU[KI, POSTAWLQEMYE S GDB, ORIENTIROWANY NA MIKROPROCESSORY OPREDELENNOJ ARHITEKTURY, NO ONI NE IME@T INFORMACII OB OSTALXNOJ ^ASTI WA[EJ CELEWOJ OTLADO^NOJ MA[INY.

w PERWU@ O^EREDX, WAM NUVNO SOOB]ITX ZAGLU[KE, KAK SWQZATXSQ S POSLEDOWATELXNYM PORTOM.

int getDebugChar()

nAPI[ITE \TU PODPROGRAMMU DLQ ^TENIQ ODNOGO SIMWOLA IZ POSLEDOWATELXNOGO PORTA. oNA MOVET BYTX IDENTI^NA getchar DLQ WA[EJ CELEWOJ SISTEMY; RAZNYE IMENA ISPOLXZU@TSQ, ^TOBY POZWOLITX WAM IH RAZLI^ATX, ESLI WY \TOGO HOTITE.

void putDebugChar(int)

nAPI[ITE \TU PODPROGRAMMU DLQ ZAPISI ODNOGO SIMWOLA W POSLEDOWATELXNYJ PORT. oNA MOVET BYTX IDENTI^NA putchar DLQ WA[EJ CELEWOJ SISTEMY; RAZNYE IMENA ISPOLXZU@TSQ, ^TOBY POZWOLITX WAM IH RAZLI^ATX, ESLI WY \TOGO HOTITE.

116

oTLADKA S POMO]X@ GDB

eSLI WY HOTITE, ^TOBY GDB MOG OSTANOWITX WA[U PROGRAMMU WO WREMQ EE WYPOLNENIQ, WAM NUVNO ISPOLXZOWATX UPRAWLQEMYJ PRERYWANIQMI POSLEDOWATELXNYJ DRAJWER I NASTROITX EGO DLQ OSTANOWKI PRI POLU^ENII ^C (`\003', SIMWOL control-C). |TO TOT SIMWOL, KOTORYJ GDB ISPOLXZUET DLQ UKAZANIQ UDALENNOJ SISTEME OSTANOWITXSQ.

uKAZANIE OTLADO^NOJ CELI WERNUTX GDB PRAWILXNYJ STATUS, WEROQTNO, TREBUET IZMENENIJ STANDARTNOJ ZAGLU[KI; ODIN BYSTRYJ I NEAKKURATNYJ SPOSOB SOSTOIT W WYPOLNENII LI[X INSTRUKCII TO^KI OSTANOWA (\NEAKKURATNOSTX" SOSTOIT W TOM, ^TO GDB WYDAET

SIGTRAP WMESTO SIGINT).

wOT DRUGIE PROCEDURY, KOTORYE WY DOLVNY OBESPE^ITX:

void exceptionHandler (int NOMER-ISKL@^ENIQ, void *ADRES-ISKL@^ENIQ)

nAPI[ITE \TU FUNKCI@ DLQ USTANOWKI ADRESA-ISKL@^ENIQ W TABLICY OBRABOTKI ISKL@^ITELXNYH SITUACIJ. wAM NUVNO SDELATX \TO, POTOMU ^TO U ZAGLU[KI NET SPOSOBA UZNATX, KAK USTROENY TABLICY OBRABOTKI ISKL@^ENIJ W WA[EJ CELEWOJ SISTEME (NAPRIMER, PROCESSORNAQ TABLICA MOVET BYTX W PZU, I SODERVATX \LEMENTY, UKAZYWA@]IE NA TABLICU W OZU). nOMER-ISKL@^ENIQ|\TO NOMER ISKL@^ITELXNOJ SITUACII, KOTORAQ DOLVNA BYTX IZMENENA; EGO ZNA^E- NIE ZAWISIT OT ARHITEKTURY (NAPRIMER, RAZLI^NYE NOMERA MOGUT PREDSTAWLQTX DELENIE NA NOLX, DOSTUP S NARU[ENIEM WYRAWNIWANIQ, I TAK DALEE). kOGDA \TO ISKL@^ENIE WOZNIKAET, UPRAWLENIE DOLVNO BYTX PEREDANO NEPOSREDSTWENNO ADRESU-ISKL@^ENIQ, I PROCESSORNOE SOSTOQNIE (STEK, REGISTRY I TAK DALEE) DOLVNO BYTX TAKIM VE, KAK WO WREMQ WOZNIKNOWENIQ PROCESSORNOGO ISKL@^ENIQ. tAK ^TO ESLI WY HOTITE ISPOLXZOWATX INSTRUKCI@ PEREHODA DLQ DOSTIVENIQ ADRESA-ISKL@^ENIQ, \TO DOLVEN BYTX PROSTOJ PEREHOD, NE PEREHOD K PODPROGRAMME.

dLQ 386, ADRES-ISKL@^ENIQ DOLVEN BYTX USTANOWLEN KAK OBRABOT^IK ZATWORA WYZOWA PRERYWANIQ, ^TOBY WO WREMQ EGO WYPOLNENIQ OSTALXNYE PRERYWANIQ MASKIROWALISX. oN DOLVEN IMETX UROWENX POLNOMO^IJ 0 (NAIBOLX[IE POLNOMO- ^IQ). zAGLU[KI sparc I 68k MOGUT MASKIROWATX PRERYWANIQ SAMOSTOQTELXNO BEZ POMO]I exceptionHandler.

void flush_i_cache()

tOLXKO DLQ sparc I sparclite. nAPI[ITE \TU POPROGRAMMU DLQ O^ISTKI KE[A INSTRUKCIJ, ESLI ON ESTX, NA WA[EJ CELEWOJ MA[INE. eSLI KE[A INSTRUKCIJ NET, \TA PODPROGRAMMA MOVET NI^EGO NE DELATX.

nA CELEWYH MA[INAH, IME@]IH KE[ INSTRUKCIJ, GDB TREBUET \TU FUNKCI@, ^TOBY UDOSTOWERITXSQ, ^TO SOSTOQNIE WA[EJ PROGRAMMY STABILXNOE.

wY DOLVNY TAKVE UDOSTOWERITXSQ, ^TO \TA BIBLIOTE^NAQ PROCEDURA DOSTUPNA:

void *memset(void *, int, int)

|TO STANDARTNAQ BIBLIOTE^NAQ FUNKCIQ memset, KOTORAQ USTANAWLIWAET OBLASTX PAMQTI W ZADANNOE ZNA^ENIE. eSLI WY IMEETE ODNU IZ SWOBODNYH WERSIJ libc.a, memset MOVET BYTX NAJDENA TAM; INA^E WY DOLVNY ILI POLU^ITX EE OT IZGOTOWITELQ APPARATNOGO OBESPE^ENIQ, ILI NAPISATX SWO@ SOBSTWENNU@.

eSLI WY NE ISPOLXZUETE KOMPILQTOR gnu sI, WAM TAKVE MOGUT PONADOBITXSQ DRUGIE STANDARTNYE BIBLIOTE^NYE PODPROGRAMMY; \TO MENQETSQ OT ODNOJ ZAGLU[KI K DRUGOJ, NO W OB]EM, ZAGLU[KI ^ASTO ISPOLXZU@T RAZLI^NYE OB]IE BIBLIOTE^NYE PODPROGRAMMY, KOTORYE gcc GENERIRUET KAK WSTROENNYJ KOD.

13.4.1.3 sOBIRAEM WSE WMESTE

wKRATCE, KOGDA WA[A PROGRAMMA GOTOWA K OTLADKE, WY DOLVNY PRODELATX SLEDU@]IE [AGI.

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

117

1.uBEDITESX, ^TO WY OPREDELILI PODDERVIWA@]IE PROCEDURY NIZKOGO UROWNQ (SM. rAZDEL 13.4.1.2 [~TO WY DOLVNY SDELATX DLQ ZAGLU[KI], S. 115):

getDebugChar, putDebugChar, flush_i_cache, memset, exceptionHandler.

2. wSTAWXTE SLEDU@]IE STROKI W NA^ALE WA[EJ PROGRAMMY:

set_debug_traps(); breakpoint();

3.dLQ ZAGLU[KI 680x0, WY DOLVNY PREDOSTAWITX PEREMENNU@ exceptionHook. oBY^NO WY ISPOLXZUETE PROSTO:

void (*exceptionHook)() = 0;

ESLI DO WYZOWA set_debug_traps WY USTANOWILI EE DLQ UKAZANIQ NA FUNKCI@ W WA- [EJ PROGRAMME. |TA FUNKCIQ WYZYWAETSQ, KOGDA GDB PRODOLVAET WYPOLNENIE POSLE OSTANOWA NA LOWU[KE (NAPRIMER, O[IBKA [INY). fUNKCIQ, UKAZANNAQ exceptionHook, WYZYWAETSQ S ODNIM PARAMETROM TIPA int, KOTORYJ QWLQETSQ NOMEROM ISKL@^ENIQ.

4.oTKOMPILIRUJTE I SKOMPONUJTE WMESTE: WA[U PROGRAMMU, OTLADO^NU@ ZAGLU[KU GDB DLQ WA[EJ CELEWOJ ARHITEKTURY I PODPROGRAMMY PODDERVKI.

5.uBEDITESX, ^TO U WAS ESTX POSLEDOWATELXNOE SOEDINENIE MEVDU WA[EJ CELEWOJ I RABO^EJ MA[INAMI, I IDENTIFICIRUJTE POSLEDOWATELXNYJ PORT NA RABO^EJ MA[INE.

6.zAGRUZITE WA[U PROGRAMMU NA CELEWU@ MA[INU (ILI POMESTITE EE TUDA L@BYMI SREDSTWAMI, PREDOSTAWLQEMYMI PROIZWODITELEM) I ZAPUSTITE EE.

7.dLQ NA^ALA UDALENNOJ OTLADKI, ZAPUSTITE GDB NA RABO^EJ MA[INE I UKAVITE W KA- ^ESTWE WYPOLNQEMOGO FAJLA PROGRAMMU, KOTORAQ WYPOLNQETSQ NA UDALENNOJ MA[INE. |TO SOOB]AET GDB, KAK NAJTI SIMWOLY I SODERVANIE NEIZMENQEMYH OBLASTEJ WA[EJ PROGRAMMY.

8.uSTANOWITE SWQZX, ISPOLXZUQ KOMANDU target remote. eE ARGUMENTY OPREDELQ@T, KAK WZAIMODEJSTWOWATX S CELEWOJ MA[INOJ| LIBO ^EREZ USTROJSTWO, PODKL@^ENNOE K POSLEDOWATELXNOJ LINII, LIBO ^EREZ PORT TCP (OBY^NO PODKL@^ENNYJ K TERMINALXNOMU SERWERU, KOTORYJ, W SWO@ O^EREDX, IMEET POSLEDOWATELXNU@ LINI@ DO CELI). nAPRIMER, ^TOBY ISPOLXZOWATX POSLEDOWATELXNU@ LINI@, PRISOEDINENNU@ K USTROJSTWU

`/dev/ttyb', WYPOLNITE:

target remote /dev/ttyb

~TOBY ISPOLXZOWATX TCP-SOEDINENIE, ISPOLXZUJTE ARGUMENT W FORME MA[INA:PORT. nAPRIMER, DLQ SOEDINENIQ S PORTOM 2828 NA TERMINALXNOM SERWERE manyfarms:

target remote manyfarms:2828

tEPERX WY MOVETE ISPOLXZOWATX WSE OBY^NYE KOMANDY DLQ ISSLEDOWANIQ I IZMENENIQ DANNYH, PO[AGOWOGO WYPOLNENIQ I PRODOLVENIQ ISPOLNENIQ UDALENNOJ PROGRAMMY.

dLQ WOZOBNOWLENIQ WYPOLNENIQ UDALENNOJ PROGRAMMY I PREKRA]ENIQ EE OTLADKI, ISPOLXZUJTE KOMANDU detach.

wSQKIJ RAZ, KOGDA GDB OVIDAET UDALENNU@ PROGRAMMU, ESLI WY WWODITE SIMWOL PRERYWANIQ (^ASTO C-C), GDB PYTAETSQ OSTANOWITX PROGRAMMU. |TO MOVET PRIWESTI ILI NE PRIWESTI K USPEHU, ^ASTI^NO W ZAWISIMOSTI OT APPARATNYH SREDSTW I POSLEDOWATELXNYH DRAJWEROW, KOTORYE ISPOLXZUET UDALENNAQ SISTEMA. eSLI WY SNOWA WWEDETE SIMWOL PRERYWANIQ, GDB WYWEDET TAKOE PRIGLA[ENIE:

Interrupted while waiting for the program.

Give up (and stop debugging it)? (y or n)

eSLI WY WWEDETE y, GDB PREKRATIT SEANS UDALENNOJ OTLADKI. (eSLI WY RE[ITE POZVE, ^TO HOTITE POPYTATXSQ SNOWA, WY MOVETE WNOWX ISPOLXZOWATX target remote, ^TOBY SOEDINITXSQ E]E RAZ.) eSLI WY WWEDETE n, GDB WERNETSQ K OVIDANI@.

118

oTLADKA S POMO]X@ GDB

13.4.1.4 kOMMUNIKACIONNYJ PROTOKOL

fAJLY ZAGLU[EK, POSTAWLQEMYE S GDB, REALIZU@T KOMMUNIKACIONNYJ PROTOKOL SO STORONY CELEWOJ MA[INY, A SO STORONY GDB ON REALIZUETSQ W ISHODNOM FAJLE GDB `remote.c'. oBY^NO WY MOVETE PROSTO POZWOLITX \TIM PROGRAMMAM WZAIMODEJSTWOWATX, I NE WDAWATXSQ W DETALI. (eSLI WY RAZRABATYWAETE SWOJ SOBSTWENNYJ FAJL ZAGLU[KI, WY TAKVE MOVETE IGNORIROWATX DETALI: NA^NITE S ODNOGO IZ SU]ESTWU@]IH FAJLOW ZAGLU[KI. `sparc-stub.c' ORGANIZOWAN NAILU^[IM OBRAZOM, I POTOMU EGO LEG^E WSEGO ^ITATX.)

oDNAKO, BYWA@T SLU^AI, KOGDA WAM NEOBHODIMO ^TO-NIBUDX ZNATX O PROTOKOLE| NAPRIMER, ESLI SU]ESTWUET TOLXKO ODIN POSLEDOWATELXNYJ PORT NA WA[EJ CELEWOJ MA[INE, WY MOVETE ZAHOTETX, ^TOBY WA[A PROGRAMMA DELALA ^TO-NIBUDX OSOBENNOE, ESLI ONA RASPOZNAET PREDNAZNA^ENNYJ DLQ GDB PAKET.

w SLEDU@]IH PRIMERAH, `<-' I `->' ISPOLXZU@TSQ DLQ OBOZNA^ENIQ PEREDANNYH I POLU- ^ENNYH DANNYH SOOTWETSTWENNO.

wSE KOMANDY I OTWETY GDB (NE PODTWERVDENIQ), POSYLA@TSQ W WIDE PAKETA. pAKET PREDSTAWLEN SIMWOLOM `$', REALXNYMI DANNYMI-PAKETA ZAWER[A@]IM SIMWOLOM `#', ZA KOTORYM SLEDU@T DWE CIFRY KONTROLXNOJ-SUMMY:

$DANNYE-PAKETA#KONTROLXNAQ-SUMMA

dWUHCIFERNAQ KONTROLXNAQ-SUMMA WY^ISLQETSQ KAK SUMMA PO MODUL@ 256 WSEH SIMWOLOW MEVDU NA^ALXNYM `$' I KONE^NYM `#' (WOSXMIBITNAQ BEZZNAKOWAQ KONTROLXNAQ SUMMA).

rAZRABOT^IKAM SLEDUET U^ESTX, ^TO DO GDB WERSII 5.0 SPECIFIKACIQ PROTOKOLA TAKVE WKL@^ALA NEOBQZATELXNYJ DWUHCIFERNYJ ID-POSLEDOW:

$ID-POSLEDOW:DANNYE-PAKETA#KONTROLXNAQ-SUMMA

|TOT ID-POSLEDOW DOBAWLQLSQ K PODTWERVDENI@. GDB NIKOGDA NE GENERIROWAL ID-POSLEDOW. zAGLU[KI, ZANIMA@]IESQ OBRABOTKOJ PAKETOW, DOBAWLENNYE W GDB NA^INAQ S WERSII 5.0, NE DOLVNY PRINIMATX PAKETY S ID-POSLEDOW.

kOGDA ILI RABO^AQ, ILI CELEWAQ MA[INA POLU^AET PAKET, PERWYM OVIDAEMYM OTWETOM QWLQETSQ PODTWERVDENIE: ILI `+' (DLQ UKAZANIQ, ^TO PAKET POLU^EN KORREKTNO), ILI `-' (^TOBY ZAPROSITX POWTORNU@ PEREDA^U):

<- $DANNYE-PAKETA#KONTROLXNAQ-SUMMA

-> +

rABO^AQ MA[INA (GDB) POSYLAET KOMANDY, A CELEWAQ (OTLADO^NAQ ZAGLU[KA, WKL@- ^ENNAQ W WA[U PROGRAMMU) POSYLAET OTWET. w SLU^AE KOMAND PO[AGOWOGO WYPOLNENIQ I PRODOLVENIQ, OTWET POSYLAETSQ TOLXKO TOGDA, KOGDA OPERACIQ ZAKON^ENA (CELX SNOWA OSTANOWLENA).

dANNYE-PAKETA SOSTOQT IZ POSLEDOWATELXNOSTI ZNAKOW, ZA ISKL@^ENIEM `#' I `$' (DLQ DOPOLNITELXNYH ISKL@^ENIJ, SMOTRITE PAKET `X').

pOLQ WNUTRI PAKETA DOLVNY RAZDELQTXSQ PRI POMO]I `,', `;' ILI `:'. eSLI NE OGOWORENO PROTIWNOE, WSE ^ISLA PREDSTAWLENY W [ESTNADCATERI^NOM WIDE BEZ NA^ALXNYH NULEJ.

rAZRABOT^IKAM SLEDUET U^ESTX, ^TO DO GDB WERSII 5.0, SIMWOL `:' NE MOG POQWLQTXSQ TRETIM SIMWOLOM W PAKETE (TAK KAK POTENCIALXNO \TO MOGLO PRIWESTI K KONFLIKTU S ID-

POSLEDOW).

oTWET DANNYE MOVET BYTX ZAKODIROWANNYM S POMO]X@ KODIROWANIQ METODOM DLINY SERIJ, ^TOBY SOHRANITX MESTO. `*' OZNA^AET, ^TO SLEDU@]IJ SIMWOL QWLQETSQ ascii-KODOM, KOTORYJ OZNA^AET KOLI^ESTWO POWTORENIJ SIMWOLA, PRED[ESTWU@]EGO `*'. kODIROWKOJ QWLQETSQ n+29, ^TO DAET PE^ATNYJ ZNAK DLQ n >=3 (KOGDA KODIROWKA PEREMENNOJ DLINY DAET PREIMU]ESTWA). pE^ATNYE ZNAKI `$', `#', `+', `-', ILI S NOMERAMI, BOLX[IMI 126, ISPOLXZOWATXSQ NE DOLVNY.

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

119

nEKOTORYE UDALENNYE SISTEMY ISPOLXZOWALI DRUGOJ MEHANIZM KODIROWKI S PEREMENNOJ DLINOJ, INOGDA NAZYWAEMYJ cisco-KODIROWKOJ. zA `*' SLEDU@T DWE [ESTNADCATERI^NYE CIFRY, OBOZNA^A@]IE RAZMER PAKETA.

iTAK:

"0* "

OZNA^AET TO VE, ^TO I "0000".

pRI O[IBKE, OTWET, WOZWRA]AEMYJ DLQ NEKOTORYH PAKETOW, WKL@^AET DWUHSIMWOLXNYJ NOMER O[IBKI. |TOT NOMER OPREDELEN SMUTNO.

dLQ L@BOJ KOMANDY, NE PODDERVIWAEMOJ ZAGLU[KOJ, DOLVEN BYTX WOZWRA]EN PUSTOJ OTWET (`$#00'). tAKIM OBRAZOM, PROTOKOL MOVNO RAS[IRQTX. nOWYE WERSII GDB MOGUT OPREDELITX, PODDERVIWAETSQ LI PAKET, OSNOWYWAQSX NA OTWETE.

oT ZAGLU[KI TREBUETSQ PODDERVKA KOMAND `g', `G', `m', `M', `c' I `s'. wSE OSTALXNYE KOMANDY QWLQ@TSQ NEOBQZATELXNYMI.

wOT POLNYJ SPISOK WSEH OPREDELENNYH NA DANNYJ MOMENT KOMAND, I SOOTWETSTWU@]IH IM OTWETOW DANNYE:

120

oTLADKA S POMO]X@ GDB

pAKET

 

zAPROS

oPISANIE

RAS[IRENNYE OPERACII

!

iSPOLXZOWATX RAS[IRENNYJ UDA-

 

 

 

LENNYJ PROTOKOL. iMEET POSTOQN-

 

 

 

NOE DEJSTWIE|TREBUET USTANOWKI

 

 

 

TOLXKO ODIN RAZ. rAS[IRENNYJ

 

 

 

UDALENNYJ PROTOKOL PODDERVIWA-

 

 

 

ET PAKETY `R'.

 

 

OTWET `'

zAGLU[KI, PODDERVIWA@]IE RAS-

 

 

 

[IRENNYJ UDALENNYJ PROTOKOL,

 

 

 

WOZWRA]A@T `', ^TO, K SOVALENI@,

 

 

 

SOWPADAET S OTWETOM, WOZWRA]AE-

 

 

 

MYM ZAGLU[KAMI, KOTORYE NE POD-

 

 

 

DERVIWA@T RAS[IRENIQ PROTOKO-

 

 

 

LA.

POSLEDNIJ SIGNAL

?

uKAZYWAET PRI^INU, PO KOTOROJ

 

 

 

CELX OSTANOWILASX. oTWET TAKOJ

 

 

 

VE, KAK DLQ PO[AGOWOGO WYPOLNE-

 

 

 

NIQ I PRODOLVENIQ.

 

 

OTWET

SMOTRITE NIVE

ZAREZERWIROWANO

a

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

NIQ W BUDU]EM

USTANOWITX

ARGU-

ADLINA-ARG,^ISLO-

 

MENTY

PROGRAMMY

ARG,ARG,...

 

(ZAREZERWIROWANO)

 

w PROGRAMMU PEREDAETSQ INICI-

 

 

 

 

 

 

ALIZIROWANNYJ MASSIW `argv[]'.

 

 

 

dLINA-ARG ZADAET ^ISLO BAJT W ZA-

 

 

 

KODIROWANNOM W [ESTNADCATERI^-

 

 

 

NYJ WID POTOKE BAJT ARG. sMOT-

 

 

 

RITE `gdbserver' DLQ DOPOLNI-

 

 

 

TELXNOJ INFORMACII.

 

 

OTWET OK

 

 

 

OTWET ENN

 

USTANOWITX SKOROSTX (NE bBOD

uSTANOWITX SKOROSTX POSLEDOWA-

REKOMENDOWANO)

 

 

TELXNOJ LINII W BOD.

USTANOWITX TO^KU OSTANOWA

BADRES,REVIM

uSTANOWITX (REVIM `S') ILI UDA-

(NE REKOMENDOWANO)

 

LITX (REVIM `C') TO^KU OSTANOWA

 

 

 

PO ADRESU ADRES. |TO BYLO ZAME-

 

 

 

]ENO PAKETAMI `Z' I `z'.

PRODOLVITX

 

cADRES

aDRES|\TO ADRES DLQ WOZOBNOWLE-

 

 

 

NIQ WYPOLNENIQ. eSLI ON OPU]EN,

 

 

 

WOZOBNOWITX S TEKU]EGO ADRESA.

 

 

OTWET

SMOTRITE NIVE

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

121

PRODOLVITX S SIGNALOM

CSIG;ADRES

pRODOLVITX

S SIGNALOM

SIG

 

 

([ESTNADCATERI^NYJ

NOMER

 

 

SIGNALA). eSLI `;ADRES' OPU]ENO,

 

 

WYPOLNENIE

WOZOBNOWLQETSQ

S

 

 

PREVNEGO ADRESA.

 

 

 

 

 

OTWET

SMOTRITE NIVE

 

 

 

 

PEREKL@^ITX REVIM OTLAD-

d

PEREKL@^ITX FLAG OTLADKI.

 

KI (NE REKOMENDOWANO)

 

oTSOEDINITX GDB OT UDALENNOJ

OTSOEDINITXSQ

D

 

 

SISTEMY.

pOSYLAETSQ UDALEN-

 

 

NOJ SISTEME PERED TEM, KAK GDB

 

 

OTSOEDINITSQ.

 

 

 

 

 

 

 

 

OTWET NET OTWETA

GDB NE VDET NIKAKOGO OTWETA PO-

 

 

SLE POSYLKI \TOGO PAKETA.

 

ZAREZERWIROWANO

e

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

NIQ W BUDU]EM

 

 

 

 

 

 

 

ZAREZERWIROWANO

E

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

NIQ W BUDU]EM

 

 

 

 

 

 

 

ZAREZERWIROWANO

f

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

NIQ W BUDU]EM

 

 

 

 

 

 

 

ZAREZERWIROWANO

F

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

NIQ W BUDU]EM

 

 

 

 

 

 

 

^TENIE REGISTROW

g

~TENIE

REGISTROW

OB]EGO

 

 

NAZNA^ENIQ.

 

 

 

 

 

 

 

 

OTWET XX...

kAVDYJ

BAJT

DANNYH

REGISTRA

 

 

OPISYWAETSQ DWUMQ [ESTNADCATE-

 

 

RI^NYMI CIFRAMI. oNI PEREDA-

 

 

@TSQ S CELEWYM PORQDKOM BAJTOW.

 

 

rAZMER KAVDOGO REGISTRA I EGO

 

 

POZICIQ WNUTRI PAKETA `g' OPRE-

 

 

DELQ@TSQ

WNUTRENNIMI

MAKROSA-

 

 

MI GDB REGISTER

 

RAW

 

SIZE

 

 

I REGISTER

 

NAME. sPECIFIKA-

 

 

CIQ NESKOLXKIH STANDARTNYH PA-

 

 

KETOW `g' PRIWEDENA NIVE.

 

 

ENN

W SLU^AE O[IBKI.

 

 

 

 

ZAPISX W REGISTRY

GXX...

sMOTRITE `g' DLQ OPISANIQ DAN-

 

 

NYH XX... .

 

 

 

 

 

 

 

 

OTWET OK

W SLU^AE USPEHA

 

 

 

 

 

OTWET ENN

W SLU^AE O[IBKI

 

 

 

 

ZAREZERWIROWANO

h

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

NIQ W BUDU]EM

 

 

 

 

 

 

 

122

oTLADKA S POMO]X@ GDB

WYBRATX NITX

 

 

Hct...

uSTANOWITX NITX DLQ POSLEDU@-

 

 

 

 

 

]IH OPERACIJ (`m', `M', `g', `G', I

 

 

 

 

 

DRUGIE).

c =

`c' DLQ NITEJ, IS-

 

 

 

 

 

POLXZUEMYH PRI PO[AGOWOM WY-

 

 

 

 

 

POLNENII I PRODOLVENII; t... MO-

 

 

 

 

 

VET BYTX -1 DLQ WSEH NITEJ. c

 

 

 

 

 

= `g' DLQ NITEJ, ISPOLXZUEMYH W

 

 

 

 

 

DRUGIH OPERACIQH. eSLI NOLX|

 

 

 

 

 

WYBRATX L@BU@ NITX.

 

 

 

 

 

OTWET OK

W SLU^AE USPEHA

 

 

 

 

 

OTWET ENN

W SLU^AE O[IBKI

 

PO[AGOWOE

WYPOLNENIE

iADRES,nnn

wYPOLNITX ODIN TAKTOWYJ CIKL

PO

TAKTOWOMU

CIKLU

 

NA UDALENNOJ

MA[INE.

eSLI

(^ERNOWIK)

 

 

 

`,nnn' UKAZANO, WYPOLNITX nnn

 

 

 

 

 

CIKLOW. eSLI UKAZAN ADRES, PO[A-

 

 

 

 

 

GOWOE WYPOLNENIE PO ODNOMU TAK-

 

 

 

 

 

TOWOMU

CIKLU

NA^INAETSQ

\TOGO

 

 

 

 

 

ADRESA.

 

 

 

SIGNAL, ZATEM WYPOLNE-

I

sMOTRITE `i' I `S', TAM ANALOGI^-

NIE

PO TAKTOWYM

CIKLAM

 

NYJ SINTAKSIS I SEMANTIKA.

 

(ZAREZERWIROWANO)

 

 

zAREZERWIROWANO DLQ ISPOLXZOWA-

ZAREZERWIROWANO

 

j

 

 

 

 

 

NIQ W BUDU]EM

 

 

ZAREZERWIROWANO

 

J

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

 

NIQ W BUDU]EM

 

 

UBITX

 

 

k

FIXME: nET OPISANIQ, KAK DEJ-

 

 

 

 

 

STWOWATX W SLU^AE, ESLI BYL WY-

 

 

 

 

 

BRAN KONTEKST OPREDELENNOJ NI-

 

 

 

 

 

TI (TO ESTX `k' UBIWAET TOLXKO

 

 

 

 

 

\TU NITX?).

 

 

ZAREZERWIROWANO

 

l

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

 

NIQ W BUDU]EM

 

 

ZAREZERWIROWANO

 

L

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

 

NIQ W BUDU]EM

 

 

^TENIE PAMQTI

 

 

mADRES,DLINA

pRO^ITATX DLINU BAJT PAMQTI,

 

 

 

 

 

NA^INAQ S ADRESA ADRES. nI GDB,

 

 

 

 

 

NI ZAGLU[KA NE PREDPOLAGA@T,

 

 

 

 

 

^TO PEREDA^A OBLASTI PAMQTI PRO-

 

 

 

 

 

ISHODIT PO ADRESAM, WYROWNEN-

 

 

 

 

 

NYM PO GRANICE SLOWA. FIXME:

nUVEN MEHANIZM PEREDA^I OBLASTI PAMQTI, WYROWNENNOJ PO GRANICE SLOWA.

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

OTWET XX...

 

 

OTWET ENN

ZAPISX W PAMQTX

 

MADRES,DLINA:XX...

 

 

OTWET OK

 

 

OTWET ENN

ZAREZERWIROWANO

 

n

ZAREZERWIROWANO

 

N

ZAREZERWIROWANO

 

o

ZAREZERWIROWANO

 

O

^TENIE

REGISTROW

pn...

(ZAREZERWIROWANO)

 

 

 

WOZWRAT r....

ZAPISX REGISTROW

 

Pn...=r...

 

 

OTWET OK

 

 

OTWET ENN

123

XX... PREDSTAWLQET SOBOJ SODERVIMOE PAMQTI. mOVET SODERVATX MENX[E ZAPRO[ENNOGO ^ISLA BAJT, ESLI UDALOSX PRO^ITATX TOLXKO ^ASTX DANNYH. nI GDB, NI ZAGLU[KA NE PREDPOLAGA@T, ^TO PEREDA^A OBLASTI PAMQTI PROISHODIT PO ADRESAM, WYROWNENNYM PO GRANICE SLOWA. FIXME: nUVEN MEHANIZM PEREDA^I OBLASTI PAMQTI, WYROWNENNOJ PO GRANICE SLOWA.

NN PREDSTAWLQET NOMER O[IBKI

zAPISATX DLINU BAJT PAMQTI, NA- ^INAQ S ADRESA ADRES. XX...|\TO DANNYE.

PRI USPEHE

PRI O[IBKE (\TO WKL@^AET SLU- ^AJ, KOGDA BYLA ZAPISANA TOLXKO ^ASTX DANNYH).

zAREZERWIROWANO DLQ ISPOLXZOWANIQ W BUDU]EM

zAREZERWIROWANO DLQ ISPOLXZOWANIQ W BUDU]EM

zAREZERWIROWANO DLQ ISPOLXZOWANIQ W BUDU]EM

zAREZERWIROWANO DLQ ISPOLXZOWANIQ W BUDU]EM

sMOTRITE ZAPISX REGISTROW.

zNA^ENIE REGISTRA W CELEWOM PORQDKE BAJT, ZAKODIROWANNOE W [ESTNADCATERI^NOM WIDE.

zAPISATX W REGISTR n... ZNA^ENIE r..., KOTOROE SODERVIT DWE [ESTNADCATERI^NYE CIFRY DLQ KAVDOGO BAJTA W REGISTRE (CELEWOJ PORQDOK BAJTOW).

W SLU^AE USPEHA PRI O[IBKE

124

oTLADKA S POMO]X@ GDB

OB]IJ ZAPROS

qZAPROS

zAPROSITX INFORMACI@ O ZAPRO-

 

 

SE. wOOB]E, ZAPROSY GDB IME-

 

 

@T PERWU@ ZAGLAWNU@ BUKWU. sPE-

 

 

CIALXNYE ZAPROSY OT PROIZWODI-

 

 

TELEJ DOLVNY ISPOLXZOWATX PRI-

 

 

STAWKU KOMPANII (IZ MALENXKIH

 

 

BUKW). nAPRIMER: `qfsf.var'. zA

 

 

ZAPROSOM MOVET SLEDOWATX NEOBQ-

 

 

ZATELXNYJ

SPISOK,

RAZDELENNYJ

 

 

`,' ILI

`;'.

zAGLU[KI

DOLV-

 

 

NY PROWERQTX, ^TO ONI PROIZWO-

 

 

DQT SRAWNENIE S POLNYM IMENEM

 

 

ZAPROSA.

 

 

 

 

 

 

OTWET XX...

dANNYE OT ZAPROSA, ZAKODIROWAN-

 

 

NYE [ESTNADCATERI^NYMI

CIF-

 

 

RAMI. oTWET NE MOVET BYTX

 

 

PUSTYM.

 

 

 

 

 

 

OTWET ENN

OTWET PRI O[IBKE

 

 

 

OTWET `'

uKAZYWAET NA NERASPOZNANNYJ ZA-

 

 

PROS.

 

 

 

 

 

OB]AQ USTANOWKA

QPEREM=ZNA^

uSTANOWITX

ZNA^ENIE PEREM W

 

 

ZNA^.

sMOTRITE `q' DLQ

OBSU-

 

 

VDENIQ SOGLA[ENIJ,

KASA@]IHSQ

 

 

IMEN.

 

 

 

 

 

SBROS (NE REKOMENDOWANO)

r

uSTANOWKA WSEJ SISTEMY W ISHOD-

 

 

NOE SOSTOQNIE.

 

 

 

UDALENNAQ PEREZAGRUZKA

RXX

pEREZAPUSTITX UDALENNYJ SERWER.

 

 

XX, GDE ONO TREBUETSQ, NE IME-

 

 

ET QSNOGO OPREDELENIQ. FIXME:

 

 

nUVEN

PRIMER

WZAIMODEJSTWIQ,

 

 

OB_QSNQ@]IJ KAK \TI

PAKE-

 

 

TY ISPOLXZU@TSQ W RAS[IRENNOM

 

 

UDALENNOM REVIME.

 

 

PO[AGAWOE WYPOLNENIE

sADRES

aDRES|\TO ADRES DLQ WOZOBNOW-

 

 

LENIQ WYPOLNENIQ. eSLI ADRES

 

 

OPU]EN,

WOZOBNOWITX WYPOLNENIE

 

 

S TOGO VE ADRESA.

 

 

 

OTWET

SMOTRITE NIVE

 

 

 

PO[AGOWOE WYPOLNENIE S SSIG;ADRES

kAK C, NO RAZNICA TAKAQ VE, KAK

SIGNALOM

 

MEVDU step I continue.

 

 

OTWET

SMOTRITE NIVE

 

 

 

POISK

tADRES:PP,MM

pOISK W OBRATNOM NAPRAWLENII,

 

 

NA^INAQ S ADRESA ADRES, DO SOW-

 

 

PADENIQ S [ABLONOM PP I MASKOJ

 

 

MM. PP I MM|4 BAJTA. aDRES

 

 

DOLVEN BYTX NE MENEE TREH CIFR.

VIWA LI NITX

TXX

oPREDELITX, VIWA LI NITX XX.

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

125

 

 

 

OTWET OK

NITX WSE E]E VIWA

 

 

 

OTWET ENN

NITX MERTWA

ZAREZERWIROWANO

 

u

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

NIQ W BUDU]EM

ZAREZERWIROWANO

 

U

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

NIQ W BUDU]EM

ZAREZERWIROWANO

 

v

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

NIQ W BUDU]EM

ZAREZERWIROWANO

 

V

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

NIQ W BUDU]EM

ZAREZERWIROWANO

 

w

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

NIQ W BUDU]EM

ZAREZERWIROWANO

 

W

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

NIQ W BUDU]EM

ZAREZERWIROWANO

 

x

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

NIQ W BUDU]EM

ZAPISX W PAMQTX (DWOI^NAQ)

XADRES,DLINA:XX...

aDRES \TO ADRES, DLINA \TO ^ISLO

 

 

 

 

BAJT, XX... \TO DWOI^NYE DANNYE.

 

 

 

 

sIMWOLY $, # I 0x7d \KRANIRU@T-

 

 

 

 

SQ S POMO]X@ 0x7d.

 

 

 

OTWET OK

W SLU^AE USPEHA

 

 

 

OTWET ENN

W SLU^AE O[IBKI

ZAREZERWIROWANO

 

y

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

NIQ W BUDU]EM

ZAREZERWIROWANO

 

Y

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

 

NIQ W BUDU]EM

UDALITX

TO^KU

OSTA-

zt,ADRES,DLINA

sMOTRITE `Z'.

NOWA ILI

NABL@DENIQ

 

 

(^ERNOWIK)

 

 

 

 

126

oTLADKA S POMO]X@ GDB

POMESTITX

TO^KU

Zt,ADRES,DLINA

t PREDSTAWLQET TIP:

`0' W SLU-

OSTANOWA ILI

NABL@DENIQ

 

^AE PROGRAMMNOJ TO^KI OSTANO-

(^ERNOWIK)

 

 

WA, `1'|APPARATNAQ TO^KA OSTA-

 

 

 

NOWA, `2'|TO^KA NABL@DENIQ ZA

 

 

 

ZAPISX@, `3'|TO^KA NABL@DENIQ

 

 

 

ZA ^TENIEM, `4'|TO^KA NABL@DE-

 

 

 

NIQ ZA DOSTUPOM; ADRES|\TO AD-

 

 

 

RES; DLINA ZADAETSQ

W BAJTAH.

 

 

 

dLQ PROGRAMMNOJ TO^KI OSTANO-

 

 

 

WA, DLINA ZADAET RAZMER INSTRUK-

 

 

 

CII, NA KOTORU@ NADO POMESTITX

 

 

 

ZAPLATU. dLQ APPARATNYH TO^EK

 

 

 

OSTANOWA I NABL@DENIQ, DLINA

 

 

 

UKAZYWAET RAZMER OBLASTI PAMQTI

 

 

 

DLQ NABL@DENIQ. ~TOBY IZBEVATX

 

 

 

POTENCIALXNYH PROBLEM S POWTOR-

 

 

 

NYMI PAKETAMI, OPERACII DOLV-

 

 

 

NY BYTX IDEMPOTENTNYM OBRAZOM.

 

 

OTWET ENN

W SLU^AE O[IBKI

 

 

 

OTWET OK

W SLU^AE USPEHA

 

 

 

`'

eSLI NE PODDERVIWAETSQ.

ZAREZERWIROWANO

<DRUGOE>

zAREZERWIROWANO DLQ ISPOLXZOWA-

 

 

 

NIQ W BUDU]EM

 

pAKETY `C', `c', `S', `s' I `?' MOGUT POLU^ITX W KA^ESTWE OTWETA WSE NIVEPERE^ISLENNOE. w SLU^AE PAKETOW `C', `c', `S' I `s', \TOT OTWET WOZWRA]AETSQ TOLXKO TOGDA, KOGDA CELX OSTANAWLIWAETSQ. nIVE, TO^NOE ZNA^ENIE `NOMERA SIGNALA' OPREDELENO NE^ETKO. wOOB]E, ISPOLXZUETSQ ODNO IZ SOGLA[ENIJ UNIX O NOMERAH SIGNALOW.

SAA

AA|\TO NOMER SIGNALA

 

TAAn...:r...;n...:r...;n...:r...;

AA = DWE [ESTNADCATERI^NYE CIFRY NOMERA SIG-

 

NALA; n

... = ([ESTNADCATERI^NYJ) NOMER REGISTRA,

 

r... = SODERVIMOE REGISTRA W CELEWOM PORQDKE BAJT,

 

RAZMER

OPREDELQETSQ REGISTER_RAW_SIZE; n...

=

 

`thread', r... = IDENTIFIKATOR PROCESSA NITI, \TO

 

[ESTNADCATERI^NOE CELOE; n... = DRUGAQ STROKA, NE

 

NA^INA@]AQSQ S [ESTNADCATERI^NOJ CIFRY. GDB

 

DOLVEN IGNORIROWATX \TU PARU n..., r... I PEREHODITX

 

K SLEDU@]EJ. tAKIM OBRAZOM MY MOVEM RAS[IRQTX

 

PROTOKOL.

 

WAA

pROCESS ZAWER[AETSQ S KODOM WYHODA AA. |TO PRI-

 

MENIMO TOLXKO K OPREDELENNYM TIPAM CELEJ.

 

XAA

pROCESS ZAWER[AETSQ S SIGNALOM AA.

 

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

127

NAA;t...;d...;b... (USTARELO)

AA = NOMER SIGNALA; t... = ADRES SIMWOLA " start"; d... = BAZA RAZDELA DANNYH; b... = BAZA RAZDE-

LA bss. pRIME^ANIE: ISPOLXZUETSQ TOLXKO CELQMI Cisco Systems. rAZNICA MEVDU \TIM OTWETOM I ZAPROSOM "qO sets" ZAKL@^AETSQ W TOM, ^TO PAKET 'N' MOVET PRIBYTX SAMOPROIZWOLXNO, TOGDA KAK ZAPROS 'qO sets' INICIIRUETSQ RABO^IM OTLAD- ^IKOM.

OXX...

XX...|[ESTNADCATERI^NOE PREDSTAWLENIE ascii-

 

DANNYH. |TO MOVET PROIZOJTI W L@BOJ MOMENT, PO-

 

KA PROGRAMMA WYPOLNQETSQ I OTLAD^IK DOLVEN PRO-

 

DOLVATX VDATX 'W', 'T', I T.P.

sLEDU@]IE PAKETY DLQ USTANOWOK I ZAPROSOW UVE BYLI OPREDELENY.

TEKU]AQ NITX

qC

wOZWRATITX IDENTIFIKATOR TEKU]EJ NITI.

 

OTWET QCIDENT-

gDE IDENT-PROC|16-BITNYJ IDENTIFIKATOR PROCES-

 

PROC

SA, PREDSTAWLENNYJ [ESTNADCATERI^NAMI CIFRAMI.

 

OTWET *

l@BOJ DRUGOJ OTWET PODRAZUMEWAET STARYJ IDENTI-

 

 

FIKATOR PROCESSA.

IDENTIFIKATORY

qfThreadInfo

 

WSEH NITEJ

qsThreadInfo

pOLU^ITX SPISOK IDENTIFIKATOROW AKTIWNYH NITEJ

 

 

 

OT CELEWOJ os. tAK KAK ^ISLO AKTIWNYH NITEJ MO-

 

 

VET OKAZATXSQ SLI[KOM BOLX[IM I NE POMESTITX-

 

 

SQ W PAKET OTWETA, \TOT ZAPROS RABOTAET ITERACIQ-

 

 

MI: ON MOVET TREBOWATX BOLEE ODNOJ POSLEDOWATELX-

 

 

NOSTI ZAPROS/OTWET, DLQ POLU^ENIQ POLNOGO SPISKA

 

 

NITEJ. pERWYM ZAPROSOM POSLEDOWATELXNOSTI BUDET

 

 

qfThreadInfo; POSLEDU@]IMI ZAPROSAMI POSLEDOWA-

 

 

TELXNOSTI BUDUT ZAPROSY qsThreadInfo.

 

OTWET m<ID>

zAME^ANIE: ZAME]AET ZAPROS qL (SMOTRITE NIVE).

 

iDENTIFIKATOR ODNOJ NITI

 

OTWET

SPISOK IDENTIFIKATOROW NITEJ, RAZDELENNYH

 

m<ID>,<ID>...

ZAPQTYMI

 

OTWET l

(BUKWA 'l' W NIVNEM REGISTRE) OBOZNA^AET KONEC

 

 

SPISKA.

 

 

w OTWET NA KAVDYJ ZAPROS, CELX BUDET OTWE^ATX

 

 

SPISKOM IZ RAZDELENNYH ZAPQTYMI IDENTIFIKATO-

 

 

ROW NITEJ, W [ESTNADCATERI^NOM PREDSTAWLENII, S

 

 

PORQDKOM BAJT OT STAR[EGO. GDB BUDET OTWE^ATX

 

 

NA KAVDYJ OTWET ZAPROSOM DRUGIH IDENTIFIKATOROW

 

 

(ISPOLXZUQ FORMU qs ZAPROSA), POKA CELX NE OTWETIT

 

 

l (BUKWA 'l' W NIVNEM REGISTRE, OT ANGLIJSKOGO SLOWA

 

 

'last').

DOPOLNITELXNAQ

qThreadExtraInfo,ID

INFORMACIQ

O

 

NITI

 

 

128

oTLADKA S POMO]X@ GDB

zDESX ID QWLQETSQ IDENTIFIKATOROM NITI W [ESTNADCATERI^NOM PREDSTAWLENII, W PORQDKE BAJT OT STAR[EGO. pOLU^AET PE^ATAEMOE OPISANIE STROKI ATRIBUTOW NITI OT CELEWOJ os. |TA STROKA MOVET SODERVATX WSE ^TO UGODNO, ^TO CELEWAQ os SO- ^TET INTERESNYM DLQ GDB SOOB]ITX POLXZOWATE- L@ O NITI. |TA STROKA WYWODITSQ W OTOBRAVENII GDB `info threads'. pRIMERAMI WOZMOVNOJ DOPOLNITELXNOJ INFORMACII QWLQ@TSQ "Runnable" ILI

"Blocked on Mutex".

OTWET XX... gDE XX...|ascii-DANNYE W [ESTNADCATERI^NOM PREDSTAWLENII, SODERVA]IE PE^ATNU@ STROKU S DOPOLNITELXNOJ INFORMACIEJ OB ATRIBUTAH NITI.

ZAPROS SPISOK ILI qLNA^-

SPISOK-NITEJ (NE FLAG^ISLO-

REKOMENDOWANO) NITEJSLED-NITX

pOLU^ITX INFORMACI@ O NITI OT OPERACIONNOJ SISTEMY, GDE PROISHODIT WYPOLNENIE. zDESX: NA^- FLAG (ODNA [ESTNADCATERI^NAQ CIFRA) ESTX EDINICA, ^TO UKAZYWAET NA PERWYJ ZAPROS, ILI NOLX, ^TO OPREDELQET POSLEDU@]IJ ZAPROS; ^ISLO-NITEJ (DWE [ESTNADCATERI^NYE CIFRY)|MAKSIMALXNOE ^ISLO NITEJ, KOTOROE MOVET SODERVATX PAKET OTWETA; I SLED-NITX (WOSEMX [ESTNADCATERI^NYH CIFR), DLQ POSLEDU@]IH ZAPROSOW (NA^-FLAG RAWEN NUL@), WOZWRA]AETSQ W OTWET KAK ARG-NITX.

zAME^ANIE: \TOT ZAPROS BYL ZAME]EN ZAPROSOM

qfThreadInfo (SMOTRITE WY[E).

OTWET qM^ISLOKONECARG-

NITXNITX...

zDESX: ^ISLO (DWE [ESTNADCATERI^NYE CIFRY)| ^ISLO WOZWRA]AEMYH NITEJ; KONEC (ODNA [ESTNADCATERI^NAQ CIFRA), ESTX NOLX, KOTORYJ OPREDELQET, ^TO ESTX E]E NITI, I EDINICA, OPREDELQ@- ]AQ, ^TO BOLX[E NITEJ NET; ARG-NITX (WOSEMX [ESTNADCATERI^NYH CIFR) PREDSTAWLQET SOBOJ SLEDNITX IZ PAKETA ZAPROSA; NITX...|\TO POSLEDOWATELXNOSTX IDENTIFIKATOROW NITEJ OT CELI. iDENTNITI (WOSEMX [ESTNADCATERI^NYH CIFR). sMOTRITE remote.c:parse_threadlist_response().

WY^ISLITX CRC qCRC:ADRES,DLINA

BLOKA PAMQTI

OTWET ENN o[IBKA (NAPRIMER, O[IBKA DOSTUPA K PAMQTI) OTWET CCRC32 lI[NQQ 32-BITNAQ CIKLI^ESKAQ PROWERKA UKAZANNOJ

OBLASTI PAMQTI.

ZAPROSITX SME]E- qOffsets

pOLU^ITX SME]ENIQ RAZDELOW, KOTORYE CELEWAQ MA-

NIQ RAZDELOW

[INA ISPOLXZOWALA PRI POWTORNOM RAZME]ENII ZA-

 

GRUVENNOGO OBRAZA. zAME^ANIE: ESLI SME]ENIE Bss

 

WKL@^ENO W OTWET, GDB \TO IGNORIRUET I WMESTO

\TOGO PRIMENQET K RAZDELU Bss SME]ENIE Data.

OTWET

Text=xxx;Data=yyy;Bss=zzz

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

129

ZAPROSITX INFOR-

qPREVIMIDENT-

 

MACI@ O NITI

NITI

wOZWRA]AET INFORMACI@ OB IDENT-NITI. zDESX:

 

 

 

 

REVIM QWLQETSQ 32-BITNYM REVIMOM W [EST-

 

 

NADCATERI^NOM PREDSTAWLENII; IDENT-NITI|64-

 

 

BITNYJ IDENTIFIKATOR NITI W [ESTNADCATERI^NOM

 

OTWET *

PREDSTAWLENII.

 

sMOTRITE remote.c:remote_unpack_thread_info_

 

 

response().

UDALENNAQ

qRcmd,koman-

 

KOMANDA

da

komanda (W [ESTNADCATERI^NOM PREDSTAWLENII)

 

 

 

 

PEREDAETSQ DLQ WYPOLNENIQ LOKALXNOMU INTERPRE-

 

 

TATORU. nEWERNYE KOMANDY DOLVNY SOOB]ATXSQ PRI

 

 

POMO]I WYHODNOJ STROKI. pERED KONE^NYM REZULX-

 

 

TIRU@]IM PAKETOM, CELEWAQ MA[INA MOVET TAKVE

 

 

OTWETITX NEKOTORYM KOLI^ESTWOM PROMEVUTO^NYH

 

 

Owywod PAKETOW WYWODA NA KONSOLX. rAZRABOT^I-

 

 

KI DOLVNY U^ESTX, ^TO PREDOSTAWLENIE DOSTUPA K

 

 

INTERPRETATORU ZAGLU[KI MOVET IMETX POSLED-

 

OTWET OK

STWIQ DLQ BEZOPASNOSTI.

 

oTWET NA KOMANDU BEZ WYWODA.

 

OTWET wywod

oTWET NA KOMANDU SO STROKOJ WYWODA wywod, W

 

 

[ESTNADCATERI^NOM PREDSTAWLENII.

 

OTWET ENN

uKAZYWAET NA NEPRAWILXNO SFORMIROWANNYJ ZAPROS.

 

reply `'

kOGDA `q'`Rcmd' NE RASPOZNANA.

sLEDU@]IE PAKETY `g'/`G' BYLI OPREDELENY RANX[E. nIVE, NEKOTORYE 32-BITNYE REGISTRY PEREDA@TSQ W WIDE 64 BIT. |TI REGISTRY DOLVNY BYTX RAS[IRENY NULEM/ZNAKOM (KAK?), ^TOBY ZAPOLNQTX WYDELENNOE MESTO. bAJTY REGISTRA PEREDA@TSQ W CELEWOM PORQDKE BAJTOW. dWE ^ASTI W BAJTE REGISTRA PEREDA@TSQ OT BOLEE ZNA^IMOGO K MENEE ZNA^IMOMU.

MIPS32

wSE REGISTRY PEREDA@TSQ

KAK 32-BITNYE

 

WELI^INY W TAKOM PORQDKE:

32 OB]EGO NA-

 

ZNA^ENIQ; sr; lo; hi; bad; cause; pc; 32 REGI-

 

STRA S PLAWA@]EJ TO^KOJ; fsr; r; fp.

MIPS64

wSE REGISTRY PEREDA@TSQ

KAK 64-BITNYE

 

WELI^INY (WKL@^AQ TAKIE 32-BITNYE REGI-

 

STRY, KAK sr). pORQDOK TAKOJ VE, KAK DLQ

 

MIPS32.

 

wOT PRIMER POSLEDOWATELXNOSTI DLQ PEREZAPUSKAEMOJ CELI. zAMETXTE, ^TO PEREZAPUSK NE POLU^AET NIKAKOGO NEPOSREDSTWENNOGO WYWODA:

<- R00 -> +

target restarts

<- ? -> +

-> T001:1234123412341234 <- +

pRIMER POSLEDOWATELXNOSTI PRI PRI PO[AGOWOM WYPOLNENII CELI PO ODNOJ INSTRUKCII:

<- G1445...

130

oTLADKA S POMO]X@ GDB

-> + <- s -> +

time passes

-> T001:1234123412341234 <- +

<- g -> +

-> 1455...

<- +

13.4.1.5 iSPOLXZOWANIE PROGRAMMY gdbserver

gdbserver QWLQETSQ UPRAWLQ@]EJ PROGRAMMOJ DLQ Unix-PODOBNYH SISTEM, KOTORAQ POZWOLQET WAM USTANOWITX SOEDINENIE WA[EJ PROGRAMMY S UDALENNYM GDB POSREDSTWOM target remote, NO BEZ KOMPONOWKI S OBY^NOJ OTLADO^NOJ ZAGLU[KOJ.

gdbserver NE QWLQETSQ POLNOJ ZAMENOJ OTLADO^NYH ZAGLU[EK, POTOMU ^TO TREBUET PO SU]ESTWU TEH VE SREDSTW OPERACIONNOJ SISTEMY, ^TO I SAM GDB. fAKTI^ESKI, SISTEMA, NA KOTOROJ MOVET WYPOLNQTXSQ gdbserver DLQ SOEDINENIQ S UDALENNYM GDB, MOVET TAKVE WYPOLNQTX GDB LOKALXNO! tEM NE MENEE, gdbserver INOGDA POLEZEN, TAK KAK PO RAZMERU \TA PROGRAMMA GORAZDO MENX[E, ^EM GDB. gdbserver TAKVE LEG^E PERENOSITX, ^EM WESX GDB, TAK ^TO WY SMOVETE BYSTREE NA^ATX RABOTATX W NOWOJ SISTEME, ISPOLXZUQ EGO. nAKONEC, ESLI WY RAZRABATYWAETE PROGRAMMY DLQ SISTEM REALXNOGO WREMENI, WY MOVETE OBNARUVITX, ^TO NAKLADNYE RASHODY, SWQZANNYE S OPERACIQMI REALXNOGO WREMENI, DELA@T BOLEE UDOBNYM PROWEDENIE WSEJ WOZMOVNOJ RAZRABOTKI NA DRUGOJ SISTEME, NAPRIMER, S POMO]X@ KROSS-KOMPILQCII. wY MOVETE ISPOLXZOWATX gdbserver, ^TOBY REALIZOWATX ANALOGI^NYJ WYBOR DLQ OTLADKI.

GDB I gdbserver OB]A@TSQ ILI ^EREZ POSLEDOWATELXNU@ LINI@, ILI ^EREZ SOEDINENIE TCP, ISPOLXZUQ STANDARTNYJ UDALENNYJ POSLEDOWATELXNYJ PROTOKOL GDB.

nA CELEWOJ MA[INE

WAM NEOBHODIMO IMETX KOPI@ PROGRAMMY, KOTORU@ WY HOTITE OTLADITX. gdbserver NE NUVDAETSQ W TABLICE SIMWOLOW WA[EJ PROGRAMMY, TAK ^TO WY MOVETE EE ISKL@^ITX, ESLI NEOBHODIMO SOHRANITX PROSTRANSTWO. wS@ OBRABOTKU SIMWOLOW OSU]ESTWLQET GDB NA RABO^EJ MA[INE.

~TOBY ISPOLXZOWATX SERWER, WY DOLVNY SOOB]ITX EMU, KAK WZAIMODEJSTWOWATX S GDB, IMQ WA[EJ PROGRAMMY I EE ARGUMENTY. sINTAKSIS SLEDU@]IJ:

target> gdbserver comm PROGRAMMA [ ARG ... ]

comm|\TO ILI IMQ USTROJSTWA (DLQ ISPOLXZOWANIQ POSLEDOWATELXNOJ LINII), ILI IMQ RABO^EJ MA[INY I NOMER PORTA TCP. nAPRIMER, DLQ OTLADKI Emacs S PARAMETROM `foo.txt' I WZAIMODEJSTWIQ S GDB ^EREZ POSLEDOWATELXNYJ PORT

`/dev/com1':

target> gdbserver /dev/com1 emacs foo.txt

gdbserver PASSIWNO VDET RABO^EGO GDB DLQ SWQZI S NIM.

pRI ISPOLXZOWANII TCP-SOEDINENIQ WMESTO POSLEDOWATELXNOJ LINII:

target> gdbserver host:2345 emacs foo.txt

eDINSTWENNOE OTLI^IE OT PREDYDU]EGO PRIMERA SOSTOIT W PERWOM PARAMETRE, OPREDELQ@]EM, ^TO WY SWQZYWAETESX S RABO^IM GDB ^EREZ TCP. pARAMETR `host:2345' OZNA^AET, ^TO gdbserver DOLVEN OVIDATX TCP-SOEDINENIE OT MA- [INY `host' K LOKALXNOMU PORTU TCP 2345. (w NASTOQ[EE WREMQ ^ASTX `host' IGNORIRUETSQ.) wY MOVETE WYBRATX L@BOJ NOMER PORTA, KAKOJ ZAHOTITE, ESLI

gLAWA 13: oPREDELENIE OTLADO^NOJ CELI

131

PRI \TOM ON NE KONFLIKTUET S KAKIMI-LIBO PORTAMI TCP, UVE ISPOLXZU@]IMISQ NA CELEWOJ SISTEME (NAPRIMER, 23 ZAREZERWIROWAN DLQ telnet).1 wY DOLVNY ISPOLXZOWATX TOT VE NOMER PORTA S KOMANDOJ RABO^EGO GDB target remote.

nA RABO^EJ MA[INE GDB

WAM NUVNA KOPIQ WA[EJ PROGRAMMY S SIMWOLXNYMI DANNYMI, TAK KAK GDB NUVNA INFORMACIQ O SIMWOLAH I OTLADO^NAQ INFORMACIQ. zAPUSTITE GDB KAK OBY^NO, ISPOLXZUQ IMQ LOKALXNOJ KOPII WA[EJ PROGRAMMY W KA^ESTWE PERWOGO ARGUMENTA. (wAM TAKVE MOVET PONADOBITXSQ KL@^ `-baud', ESLI POSLEDOWATELXNAQ LINIQ RABOTAET NA SKOROSTI, OTLI^NOJ OT 9600 BIT/SEK.) pOSLE \TOGO, ISPOLXZUJTE target remote, ^TOBY USTANOWITX SWQZX S gdbserver. eE PARAMETRY|LIBO IMQ USTROJSTWA (OBY^NO POSLEDOWATELXNOGO USTROJSTWA, TAKOGO KAK `/dev/ttyb'), LIBO DESKRIPTOR PORTA TCP W FORME MA[INA:PORT. nAPRIMER:

(gdb) target remote /dev/ttyb

WZAIMODEJSTWUET S SERWEROM ^EREZ POSLEDOWATELXNU@ LINI@ `/dev/ttyb', A

(gdb) target remote the-target:2345

WZAIMODEJSTWUET ^EREZ TCP-SOEDINENIE S PORTOM 2345 NA RABO^EJ MA[INE `the-target'. dLQ TCP-SOEDINENIQ, WY DOLVNY ZAPUSTITX gdbserver DO ISPOLXZOWANIQ KOMANDY target remote. iNA^E WY MOVETE POLU^ITX O[IBKU, TEKST KOTOROJ ZAWISIT OT RABO^EJ SISTEMY, NO OBY^NO ON WYGLQDIT PRIMER-

NO TAK: `Connection refused'.

13.4.1.6 iSPOLXZOWANIE PROGRAMMY gdbserve.nlm

gdbserve.nlm|\TO UPRAWLQ@]AQ PROGRAMMA DLQ SISTEM NetWare, KOTORAQ POZWOLQET WAM USTANOWITX SOEDINENIE WA[EJ PROGRAMMY S UDALENNYM GDB POSREDSTWOM target remote.

GDB I gdbserve.nlm OB]A@TSQ ^EREZ POSLEDOWATELXNU@ LINI@, ISPOLXZUQ STANDARTNYJ UDALENNYJ POSLEDOWATELXNYJ PROTOKOL GDB.

nA CELEWOJ MA[INE

WAM NEOBHODIMO IMETX KOPI@ PROGRAMMY, KOTORU@ WY HOTITE OTLADITX. gdbserve.nlm NE NUVDAETSQ W TABLICE SIMWOLOW WA[EJ PROGRAMMY, TAK ^TO WY MOVETE EE ISKL@^ITX, ESLI NEOBHODIMO SOHRANITX PROSTRANSTWO. GDB OSU- ]ESTWLQET WS@ OBRABOTKU SIMWOLOW NA RABO^EJ MA[INE.

~TOBY ISPOLXZOWATX SERWER, WY DOLVNY SOOB]ITX EMU KAK WZAIMODEJSTWOWATX S GDB, IMQ WA[EJ PROGRAMMY I EE ARGUMENTY. sINTAKSIS SLEDU@]IJ:

load gdbserve [ BOARD=PLATA ] [ PORT=PORT ]

[ BAUD=BOD ] PROGRAMMA [ ARG ... ]

pLATA I PORT OPREDELQ@T POSLEDOWATELXNU@ LINI@; BOD OPREDELQET SKOROSTX W BODAH, ISPOLXZUEMU@ SOEDINENIEM. zNA^ENIQ PORT I node PO UMOL^ANI@ RAWNY 0, BOD PO UMOL^ANI@ 9600 BIT/SEK.

nAPRIMER, DLQ OTLADKI Emacs S PARAMETROM `foo.txt' I WZAIMODEJSTWIQ S GDB ^EREZ POSLEDOWATELXNYJ PORT NOMER 2 NA PLATE 1, ISPOLXZUQ SOEDINENIE

19200 BIT/SEK:

load gdbserve BOARD=1 PORT=2 BAUD=19200 emacs foo.txt

nA RABO^EJ MA[INE GDB

WAM NUVNA KOPIQ WA[EJ PROGRAMMY S SIMWOLXNYMI DANNYMI, TAK KAK GDB TREBUETSQ SIMWOLXNAQ I OTLADO^NAQ INFORMACIQ. zAPUSTITE GDB KAK OBY^NO,

1eSLI WY WYBERETE NOMER PORTA, KOTORYJ KONFLIKTUET S DRUGIM SERWISOM, gdbserver PE^ATAET SOOB]ENIE OB O[IBKE I ZAWER[AET RABOTU.

132

oTLADKA S POMO]X@ GDB

ISPOLXZUQ IMQ LOKALXNOJ KOPII WA[EJ PROGRAMMY W KA^ESTWE PERWOGO PARAMETRA. (wAM TAKVE MOVET PONADOBITXSQ KL@^ `-baud', ESLI POSLEDOWATELXNAQ LINIQ RABOTAET NA SKOROSTI, OTLI^NOJ OT 9600 BIT/SEK.) pOSLE \TOGO, ISPOLXZUJTE target remote DLQ USTANOWKI SWQZI S gdbserve.nlm. eE ARGUMENT|IMQ USTROJSTWA (OBY^NO POSLEDOWATELXNOGO USTROJSTWA, TAKOGO KAK `/dev/ttyb'). nAPRIMER:

(gdb) target remote /dev/ttyb

SOEDINENIE S SERWEROM ^EREZ POSLEDOWATELXNU@ LINI@ `/dev/ttyb'.

13.5 oTOBRAVENIE OB_EKTOW QDRA

nEKOTORYE CELI PODDERVIWA@T OTOBRAVENIE OB_EKTOW QDRA. pRI POMO]I \TIH WOZMOVNOSTEJ, GDB WZAIMODEJSTWUET NEPOSREDSTWENNO S OPERACIONNOJ SISTEMOJ I MOVET WYWODITX INFORMACI@ OB OB_EKTAH UROWNQ OPERACIONNOJ SISTEMY, NAPRIMER, O BLOKIROWKAH I DRUGIH OB_EKTAH SINHRONIZACII. kAKIE IMENNO OB_EKTY MOGUT BYTX OTOBRAVENY, OPREDELQETSQ W ZAWISIMOSTI OT KONKRETNOJ os.

iSPOLXZUJTE KOMANDU set os, ^TOBY USTANOWITX TIP OPERACIONNOJ SISTEMY. |TO GOWORIT GDB, KAKOJ MODULX OTOBRAVENIQ OB_EKTOW QDRA INICIALIZIROWATX:

(gdb) set os cisco

eSLI KOMANDA set os WYPOLNITSQ USPE[NO, GDB WYWEDET NEKOTORU@ INFORMACI@ OB OPERACIONNOJ SISTEME, I SOZDAST NOWU@ KOMANDU info, KOTORAQ MOVET BYTX ISPOLXZOWANA DLQ POSYLKI ZAPROSOW NA CELEWU@ MA[INU. nAZWANIE KOMANDY info WYBIRAETSQ W ZAWISIMOSTI OT OPERACIONNOJ SISTEMY:

(gdb) info cisco

List of Cisco Kernel Objects

Object

Description

any

Any and all objects

dALXNEJ[IE PODKOMANDY MOGUT ISPOLXZOWATXSQ DLQ ZAPROSOW O KONKRETNYH OB_EKTAH, INFORMACIQ O KOTORYH ESTX W QDRE.

w NASTOQ]EE WREMQ NE SU]ESTWUET DRUGOGO SPOSOBA OPREDELITX, PODDERVIWAETSQ TA ILI INAQ OPERACIONNAQ SISTEMA, KROME KAK POPROBOWATX.

gLAWA 14: iNFORMACIQ O KONFIGURACII

133

14 iNFORMACIQ O KONFIGURACII

w TO WREMQ KAK PO^TI WSE KOMANDY GDB DOSTUPNY DLQ WSEH ^ISTYH I KROSS-WERSIJ OTLAD^IKA, SU]ESTWU@T NEKOTORYE ISKL@^ENIQ. |TA GLAWA OPISYWAET WE]I, DOSTUPNYE TOLXKO W OPREDELENNYH KONFIGURACIQH.

sU]ESTWUET TRI OSNOWNYE KATEGORII KONFIGURACIJ: ^ISTYE KONFIGURACII, GDE RABO^AQ I CELEWAQ MA[INY SOWPADA@T, KONFIGURACII DLQ WSTROENNYH OPERACIONNYH SISTEM, KOTORYE OBY^NO SOWPADA@T DLQ NESKOLXKIH RAZLI^NYH ARHITEKTUR PROCESSOROW, I OTDELXNYE WSTROENNYE PROCESSORY, KOTORYE SILXNO OTLI^A@TSQ DRUG OT DRUGA.

14.1 ~ISTAQ KONFIGURACIQ

|TOT RAZDEL OPISYWAET DETALI, SPECIFI^NYE DLQ OPREDELENNYH ^ISTYH KONFIGURACIJ.

14.1.1 HP-UX

w SISTEMAH HP-UX, ESLI WY SSYLAETESX NA FUNKCI@ ILI PEREMENNU@, IMQ KOTOROJ NA^INAETSQ SO ZNAKA DOLLARA, GDB SPERWA I]ET IMQ POLXZOWATELQ ILI SISTEMY, DO POISKA WSPOMOGATELXNOJ PEREMENNOJ.

14.1.2 iNFORMACIQ O PROCESSAH SVR4

mNOGIE WERSII SVR4 PREDOSTAWLQ@T WOZMOVNOSTX, NAZYWAEMU@ `/proc', KOTORAQ MOVET BYTX ISPOLXZOWANA DLQ ISSLEDOWANIQ OBRAZA WYPOLNQEMOGO PROCESSA, ISPOLXZUQ PODPROGRAMMY FAJLOWOJ SISTEMY. eSLI GDB SKONFIGURIROWAN DLQ OPERACIONNOJ SISTEMY, PODDERVIWA@]EJ \TU WOZMOVNOSTX, KOMANDA info proc DOSTUPNA DLQ POLU^ENIQ OT^ETA PO NEKOTORYM WIDAM INFORMACII O PROCESSE, WYPOLNQ@]EM WA[U PROGRAMMU. info proc RABOTAET TOLXKO NA SISTEMAH SVR4, KOTORYE WKL@^A@T KOD procfs. sREDI \TIH SISTEM:

OSF/1 (Digital Unix), Solaris, Irix I Unixware, NO NE HP-UX ILI Linux, K PRIMERU.

info proc wYDAET DOSTUPNU@ SUMMARNU@ INFORMACI@ O PROCESSE.

info proc mappings

sOOB]AET DIAPAZONY ADRESOW, DOSTUPNYH W PROGRAMME, S INFORMACIEJ, MOVET LI WA[A PROGRAMMA ^ITATX, ZAPISYWATX, ILI ISPOLNQTX KAVDYJ IZ DIAPAZONOW.

info proc times

wREMQ ZAPUSKA, WREMQ POLXZOWATELXSKOGO I SISTEMNOGO cp DLQ WA[EJ PROGRAMMY I EE POTOMKOW.

info proc id

sOOB]AET INFORMACI@ OB IDENTIFIKATORAH PROCESSOW, OTNOSQ]IHSQ K WA[EJ PROGRAMME: EE SOBSTWENNYJ IDENTIFIKATOR, IDENTIFIKATOR EE RODITELQ, GRUPPY PROCESSA I SEANSA.

info proc status

oB]AQ INFORMACIQ O SOSTOQNII PROCESSA. eSLI PROCESS OSTANOWLEN, TO \TOT OT^ET WKL@^AET PRI^INU OSTANOWA I L@BYE POLU^ENNYE SIGNALY.

info proc all

pOKAZYWAET WS@ WY[EPERE^ISLENNU@ INFORMACI@ O PROCESSE.

134

oTLADKA S POMO]X@ GDB

14.2 wSTROENNYE OPERACIONNYE SISTEMY

|TOT RAZDEL OPISYWAET KONFIGURACII, ZADEJSTWU@]IE OTLADKU WSTROENNYH OPERACIONNYH SISTEM, KOTORYE DOSTUPNY DLQ NESKOLXKIH RAZLI^NYH ARHITEKTUR.

GDB WKL@^AET WOZMOVNOSTX OTLAVIWATX PROGRAMMY, WYPOLNQ@]IESQ W RAZLI^NYH OPERACIONNYH SISTEMAH REALXNOGO WREMENI.

14.2.1 iSPOLXZOWANIE GDB S VxWorks

target vxworks IMQ-MA[INY

sISTEMA VxWorks, PRISOEDINENNAQ POSREDSTWOM TCP/IP. aRGUMENT IMQ-MA[INY ESTX IMQ ILI IP-ADRES MA[INY CELEWOJ SISTEMY.

nA VxWorks, load KOMPONUET IMQ-FAJLA DINAMI^ESKI NA TEKU]EJ CELEWOJ SISTEME, I DOBAWLQET EE SIMWOLXNU@ INFORMACI@ W GDB.

GDB POZWOLQET RAZRABOT^IKAM ZAPUSKATX I OTLAVIWATX S Unix-MA[IN ZADA^I, WYPOLNQ- @]IESQ NA SETEWYH CELQH VxWorks. uVE WYPOLNQ@]IESQ ZADA^I, ZAPU]ENNYE IZ OBOLO^KI VxWorks, TAKVE MOGUT BYTX OTLAVENY. GDB ISPOLXZUET KOD, KOTORYJ MOVET WYPOLNQTXSQ KAK NA MA[INE Unix, TAK I NA CELEWOJ MA[INE VxWorks. pROGRAMMA gdb USTANAWLIWAETSQ I WYPOLNQETSQ NA Unix-MA[INE. (oNA MOVET BYTX USTANOWLENA POD IMENEM vxgdb, ^TOBY OTLI^ATX EE OT GDB DLQ OTLADKI PROGRAMM NA RABO^EJ MA[INE.)

VxWorks-timeout ARG

sEJ^AS WSE CELI, BAZIRU@]IESQ NA VxWorks, PODDERVIWA@T PARAMETR vxworkstimeout. |TOT PARAMETR USTANAWLIWAETSQ POLXZOWATELEM, I ARG PREDSTAWLQ@T ^ISLO SEKUND, W TE^ENIE KOTORYH GDB OVIDAET OTWETY NA WYZOWY UDALENNYH PROCEDUR. wY MOVETE ISPOLXZOWATX \TO, ESLI WA[A CELEWAQ MA[INA VxWorks QWLQETSQ MEDLENNYM PROGRAMMNYM \MULQTOROM, ILI NAHODITSQ DALEKO NA DRUGOM KONCE MEDLENNOGO SETEWOGO SOEDINENIQ.

sLEDU@]AQ INFORMACIQ O SOEDINENII K VxWorks BYLA SWEVEJ, KOGDA \TO RUKOWODSTWO BYLO NAPISANO; BOLEE NOWYE WYPUSKI VxWorks MOGUT ISPOLXZOWATX OBNOWLENNYE PROCEDURY.

dLQ ISPOLXZOWANIQ GDB S VxWorks, WY DOLVNY PERESOBRATX WA[E QDRO VxWorks, ^TOBY WKL@^ITX PODPROGRAMMY INTERFEJSA UDALENNOJ OTLADKI W BIBLIOTEKU VxWorks `rdb.a'. ~TOBY \TO SDELATX, OPREDELITE INCLUDE_RDB W KONFIGURACIONNOM FAJLE VxWorks `configAll.h' I PERESOBERITE QDRO VxWorks. pOLU^IW[EESQ QDRO SODERVIT `rdb.a', I POROVDAET ZADA^U OTLADKI ISHODNOGO KODA tRdbTask, KOGDA VxWorks ZAGRUVAETSQ. dLQ BOLX[EJ INFORMACII PO KONFIGURIROWANI@ I SBORKE VxWorks, SMOTRITE RUKOWODSTWO IZGOTOWITELQ.

kOGDA WY WKL@^ILI `rdb.a' W OBRAZ WA[EJ SISTEMY VxWorks I TAK USTANOWILI WA[I PUTI POISKA WYPOLNQEMYH FAJLOW, ^TOBY MOVNO BYLO NAJTI GDB, WY GOTOWY K WYZOWU OTLAD^IKA. iZ WA[EJ RABO^EJ Unix-MA[INY, WYPOLNITE gdb (ILI vxgdb, W ZAWISIMOSTI OT WA[EJ USTANOWKI).

GDB POQWLQETSQ I POKAZYWAET PRIGLA[ENIE:

(vxgdb)

14.2.1.1 sOEDINENIE K VxWorks

kOMANDA GDB target POZWOLQET WAM SOEDINQTXSQ S CELEWOJ MA[INOJ VxWorks W SETI. dLQ SOEDINENIQ S CELX@, IMQ KOTOROJ ESTX \tt", WWEDITE:

(vxgdb) target vxworks tt

gLAWA 14: iNFORMACIQ O KONFIGURACII

135

GDB POKAVET SOOB]ENIQ, ANALOGI^NYE \TIM:

Attaching remote machine across net...

Connected to tt.

zATEM GDB PYTAETSQ S^ITATX TABLICY SIMWOLOW WSEH OB_EKTNYH MODULEJ, ZAGRUVENNYH NA CELEWOJ MA[INE VxWorks S TOGO MOMENTA, KAK ONA BYLA WKL@^ENA. GDB NAHODIT \TI FAJLY PUTEM POISKA W KATALOGAH, PERE^ISLENNYH W PUTQH POISKA KOMAND (SM. rAZDEL 4.4 [rABO^AQ SREDA WA[EJ PROGRAMMY], S. 23); ESLI EMU NE UDAETSQ NAJTI OB_EKTNYJ FAJL, ON WYWODIT PODOBNOE SOOB]ENIE:

prog.o: No such file or directory.

kOGDA \TO PROISHODIT, DOBAWXTE SOOTWETSTWU@]IJ KATALOG K PUTQM POISKA S POMO]X@ KOMANDY GDB path, I WYPOLNITE KOMANDU target SNOWA.

14.2.1.2 zAGRUZKA NA VxWorks

eSLI WY SOEDINILISX S CELEWOJ MA[INOJ VxWorks I HOTITE OTLADITX OB_EKT, KOTORYJ E]E NE BYL ZAGRUVEN, WY MOVETE ISPOLXZOWATX KOMANDU GDB load, ^TOBY ZAGRUZITX FAJL IZ Unix W VxWorks. oB_EKTNYJ FAJL, ZADANNYJ W KA^ESTWE ARGUMENTA K load, W DEJSTWITELXNOSTI OTKRYWAETSQ DWAVDY: SNA^ALA CELEWOJ MA[INOJ VxWorks, ^TOBY ZAGRUZITX KOD, A ZATEM GDB, ^TOBY S^ITATX TABLICU SIMWOLOW. |TO MOVET PRIWESTI K PROBLEMAM, ESLI TEKU]IE RABO^IE KATALOGI W \TIH SISTEMAH RAZLI^A@TSQ. eSLI OBE SISTEMY MONTIRU@T PO NFS ODINAKOWYE FAJLOWYE SISTEMY, WY MOVETE IZBEVATX \TIH PROBLEM, ISPOLXZUQ ABSOL@TNYE PUTI. w PROTIWNOM SLU^AE, PRO]E WSEGO USTANOWITX RABO^IJ KATALOG NA OBEIH SISTEMAH W TOT, W KOTOROM RASPOLOVEN OB_EKTNYJ FAJL, I ZATEM SSYLATXSQ NA NEGO PO IMENI, BEZ PUTI. nAPRIMER, PROGRAMMA `prog.o' MOVET NAHODITXSQ W `vxpath/vw/demo/rdb' NA VxWorks I W `hostpath/vw/demo/rdb' NA RABO^EJ MA[INE. dLQ ZAGRUZKI \TOJ PROGRAMMY, WWEDITE W VxWorks SLEDU@]EE:

-> cd "vxpath/vw/demo/rdb"

zATEM, W GDB, WWEDITE:

(vxgdb) cd hostpath/vw/demo/rdb (vxgdb) load prog.o

GDB OTOBRAZIT OTWET, ANALOGI^NYJ \TOMU:

Reading symbol data from wherever/vw/demo/rdb/prog.o... done.

wY TAKVE MOVETE ISPOLXZOWATX KOMANDU load, ^TOBY ZANOWO ZAGRUZITX OB_EKTNYJ MODULX, POSLE REDAKTIROWANIQ I POWTORNOJ KOMPILQCII SOOTWETSTWU@]EGO ISHODNOGO FAJLA. zAMETXTE, ^TO PRI \TOM GDB UDALQET WSE OPREDELENNYE TO^KI OSTANOWA, AWTOMATI^ESKIE OTOBRAVENIQ, WSPOMOGATELXNYE PEREMENNYE, I O^I]AET ISTORI@ ZNA^ENIJ. (|TO NEOBHODIMO DLQ TOGO, ^TOBY SOHRANITX CELOSTNOSTX STRUKTUR DANNYH OTLAD^IKA, KOTORYE SSYLA- @TSQ NA TABLICU SIMWOLOW CELEWOJ SISTEMY.)

14.2.1.3 zAPUSK ZADA^

wY TAKVE MOVETE PRISOEDINITXSQ K SU]ESTWU@]EJ ZADA^E, ISPOLXZUQ KOMANDU attach SLEDU@]IM OBRAZOM:

(vxgdb) attach ZADA^A

GDE ZADA^A QWLQETSQ [ESTNADCATERI^NYM IDENTIFIKATOROM ZADA^I VxWorks. kOGDA WY PRISOEDINQETESX K ZADA^E, ONA MOVET WYPOLNQTXSQ LIBO BYTX PRIOSTANOWLENNOJ. wYPOLNQ@]AQSQ ZADA^A PRIOSTANAWLIWAETSQ W MOMENT PRISOEDINENIQ.

136

oTLADKA S POMO]X@ GDB

14.3 wSTROENNYE PROCESSORY

|TOT RAZDEL OPISYWAET DETALI, SPECIFI^NYE DLQ OPREDELENNYH WSTROENNYH KONFIGURACIJ.

14.3.1 wSTROENNYJ AMD A29K

target adapt USTR

mONITOR Adapt DLQ A29K.

target amd-eb USTR SKOROSTX PROG

uDALENNAQ PC-REZIDENTNAQ PLATA AMD EB29K, PRISOEDINENNAQ PO POSLEDOWATELXNYM LINIQM. uSTR QWLQETSQ POSLEDOWATELXNYM USTROJSTWOM, TAKVE KAK DLQ target remote; SKOROSTX POZWOLQET WAM UKAZATX SKOROSTX LINII; A PROG QWLQETSQ IMENEM PROGRAMMY, KOTORAQ BUDET OTLAVIWATXSQ, TAK, KAK ONO POQWLQETSQ W dos NA pk. sM. rAZDEL 14.3.1.2 [pROTOKOL EBMON DLQ AMD29K],

S. 136.

14.3.1.1 A29K UDI

dLQ OTLADKI PROCESSOROW SEMEJSTWA a29k, GDB PODDERVIWAET PROTOKOL AMD UDI (\Universal Debugger Interface"1). dLQ ISPOLXZOWANIQ \TOJ KONFIGURACII S CELQMI AMD, NA KOTORYH WYPOLNQETSQ MONITOR MiniMON, WAM NUVNA PROGRAMMA MONTIP, DOSTUPNAQ BESPLATNO U AMD. wY MOVETE TAKVE ISPOLXZOWATX GDB S PROGRAMMOJ ISSTIP, UDISOWMESTIMYM \MULQTOROM a29k, TAKVE DOSTUPNYM U AMD.

target udi KL-SLOWO

wYBRATX INTERFEJS UDI K UDALENNOJ PLATE a29k ILI \MULQTORU. zDESX KL-SLOWO QWLQETSQ \LEMENTOM W KONFIGURACIONNOM FAJLE AMD `udi_soc'. |TOT FAJL SODERVIT W KA^ESTWE \LEMENTOW KL@^EWYE SLOWA, KOTORYE OPREDELQ@T PARAMETRY, ISPOLXZUEMYE PRI SOEDINENII K CELQM a29k. eSLI FAJL `udi_soc' NE NAHODITSQ W WA[EM RABO^EM KATALOGE, WY DOLVNY USTANOWITX PUTX K NEMU W PEREMENNOJ SREDY `UDICONF'.

14.3.1.2 pROTOKOL EBMON DLQ AMD29K

AMD RASPROSTRANQET PLATU RAZRABOTKI 29K, PREDNAZNA^ENNU@ DLQ POME]ENIQ W pk, WMESTE S PROGRAMMOJ MONITORA EBMON, RABOTA@]EJ W dos. kOROTKO \TA SISTEMA RAZRABOTKI NAZYWAETSQ \EB29K". ~TOBY ISPOLXZOWATX GDB IZ Unix-SISTEMY DLQ WYPOLNENIQ PROGRAMM NA PLATE EB29K, WY DOLVNY SPERWA SOEDINITX POSLEDOWATELXNYM KABELEM pk (W KOTOROM USTANOWLENA PLATA EB29K) I POSLEDOWATELXNYJ PORT NA Unix-SISTEME. dALEE MY PREDPOLAGAEM, ^TO WY SOEDINILI KABELEM PORT pk `COM1' I `/dev/ttya' NA Unix-SISTEME.

14.3.1.3 uSTANOWKA SWQZI

sLEDU@]IM [AGOM NUVNO USTANOWITX PARAMETRY PORTA pk, SDELAW W dos ^TO-TO WRODE \TOGO:

C:\> MODE com1:9600,n,8,1,none

|TOT PRIMER, WYPOLNENNYJ W SISTEME MS DOS 4.0, USTANAWLIWAET PORT pk W 9600 BIT/SEK, BEZ PROWERKI ^ETNOSTI, WOSXMIBITNYE DANNYE, ODIN STOP-BIT I OTSUTSTWIE DEJSTWIQ DLQ \POWTORA"; WY DOLVNY ISPOLXZOWATX TE VE PARAMETRY SWQZI PRI USTANOWKE SOEDINENIQ SO STORONY Unix.

~TOBY PEREDATX UPRAWLENIE S pk STORONE Unix, WWEDITE SLEDU@]EE W KONSOLI dos:

1 uNIWERSALXNYJ OTLADO^NYJ INTERFEJS. (pRIM. PEREWOD^IKA)

gLAWA 14: iNFORMACIQ O KONFIGURACII

137

C:\> CTTY com1

(pOZVE, ESLI WY HOTITE WERNUTX UPRAWLENIE KONSOLI dos, WY MOVETE ISPOLXZOWATX KOMANDU CTTY con|NO WY DOLVNY POSLATX EE ^EREZ USTROJSTWO, IMEW[EE UPRAWLENIE, W NA[EM PRIMERE ^EREZ POSLEDOWATELXNU@ LINI@ `COM1'.)

nA Unix-MA[INE, DLQ SWQZI S pk ISPOLXZUJTE KOMMUNIKACIONNU@ PROGRAMMU, TAKU@ KAK tip ILI cu. nAPRIMER

cu -s 9600 -l /dev/ttya

pOKAZANNYE KL@^I DLQ cu OPREDELQ@T, SOOTWETSTWENNO, SKOROSTX LINII I POSLEDOWATELXNYJ PORT. eSLI WMESTO \TOGO WY ISPOLXZUETE tip, WA[A KOMANDNAQ STROKA MOVET WYGLQDETX SLEDU@]IM OBRAZOM:

tip -9600 /dev/ttya

wA[A SISTEMA MOVET TREBOWATX DRUGOGO IMENI W TOM MESTE, GDE MY POKAZYWAEM `/dev/ttya' W KA^ESTWE ARGUMENTA K tip. pARAMETRY SWQZI, WKL@^AQ ISPOLXZUEMYJ PORT, ASSOCIIROWANY S ARGUMENTOM K tip W FAJLE OPISANIJ \remote"|OBY^NO \TO `/etc/remote'.

iSPOLXZUQ SOEDINENIE tip ILI cu, IZMENITE RABO^IJ KATALOG dos W TOT, KOTORYJ SODERVIT KOPI@ WA[EJ PROGRAMMY 29K, ZATEM ZAPUSTITE NA pk PROGRAMMU EBMON (UPRAWLQ@]AQ PROGRAMMA EB29K, POSTAWLQEMAQ AMD S WA[EJ PLATOJ). wY DOLVNY UWIDETX NA^ALXNYJ WYWOD EBMON, ANALOGI^NYJ SLEDU@]EMU, ZAKAN^IWA@]IJSQ PRIGLA[ENIEM EBMON `#':

C:\> G:

G:\> CD \usr\joe\work29k

G:\USR\JOE\WORK29K> EBMON

Am29000 PC Coprocessor Board Monitor, version 3.0-18

Copyright 1990 Advanced Micro Devices, Inc.

Written by Gibbons and Associates, Inc.

Enter '?' or 'H' for help

PC Coprocessor Type

= EB29K

I/O Base

= 0x208

Memory Base

= 0xd0000

Data Memory Size

= 2048KB

Available I-RAM Range

= 0x8000 to 0x1fffff

Available D-RAM Range

= 0x80002000 to 0x801fffff

PageSize

= 0x400

Register Stack Size

= 0x800

Memory Stack Size

= 0x1800

CPU PRL

= 0x3

Am29027 Available

= No

Byte Write Available

= Yes

# ~.

zATEM WYJDITE IZ PROGRAMMY cu ILI tip (W \TOM PRIMERE \TO SDELANO PRI POMO]I WWODA ~. W PRIGLA[ENII EBMON). EBMON PRODOLVAET RABOTATX, GOTOWYJ K TOMU, ^TO GDB PEREHWATIT UPRAWLENIE.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]