1. RUNĀTĀJS: Esiet sveicināti.
Mani sauc Kārters, un šodien es jums parādīšu savu slepeno programmu.
Programmu var palaist, terminālī ierakstot ./secret, un, ja ievadāt
pareizo paroli, jums vajadzētu redzēt come on in.
Tad izmēģināsim to.
Es ievadīšu ./secret, un varbūt es nezinu slepeno frāzi, tāpēc es
vienkārši teikšu, let me in.
Un tajā brīdī es nesaņemu nekādu atbildi.
Tāpēc ļaujiet man mēģināt vēlreiz un ievadīt ./secret.
Varbūt parole šeit ir password.
Bet tā nav.
Un es jums tikai atklāšu, ka parole ir please.
Tātad, ja es ierakstu ./secret un ierakstu please, tad man vajadzētu
redzēt come on in.
Bet es neredzu.
Un tad kas šeit ir par problēmu?
Nu, varbūt man vajadzētu izpētīt savu kodu un, iespējams, iziet tam
cauri soli pa solim.
Tāpēc es ievadīšu kodu secret.c, un es redzu, ka mans kods sākas ar
int main(void) funkciju.
Lai izietu cauri manam kodam, atcerieties, ka varam izmantot debug50,
lai iestatītu pārtraukumpunktu vai pauzes vietu savā kodā.
Tāpēc es varu pāriet uz šo kreiso pusi, atrast gaiši sarkanu apli un,
noklikšķinot uz tā, pārvērst to spilgti sarkanā aplī, un iestatīt
pauzes punktu vai pārtraukumpunktu.
Tagad es varu veikt noslēpuma debug50, un tad manam kodam vajadzētu
sāknēties, un man vajadzētu būt iespējai apstāties tieši tajā brīdī,
kad prasu lietotājam viņa slepeno frāzi.
Protams, man ir jāiet soli pa solim, lai tā patiešām palaistu manu
programmu, tāpēc es iešu pa soļiem, un tad varu ierakstīt savu
slepeno frāzi please.
Labi, tas izskatās diezgan labi.
Es redzu, ka frāze kļūstplease, un pareizais pašlaik ir nepatiess,
taču tam vajadzētu mainīties uz patiesu, kad es ievadu check phrase
funkciju.
Tāpēc es ievadīšu check phrase, un es redzu, ka tas joprojām ir
nepatiess.
Un tāpēc, protams, ja es palaidu 13. rindu, nekas nenotiek.
Es tiešām nedrukāšu come on in. Tāpēc šobrīd šķiet, ka debug50 man
šeit īsti nepalīdz.
Esmu izgājis cauri visai savai programmai, taču neesmu redzējis, kas
manā kodā nogāja greizi.
Debug50 ir iespēja ieiet funkcijā, burtiski ienirt tajā un redzēt,
kas notiek zem šīs funkcijas pārsega.
Tātad, ko es varu darīt – vēlreiz doties uz debug50 un palaist
debug50 ar noslēpumu, pagaidīt līdz mans kods atkal nonāks šajā
pārtraukumpunktā, un es iziešu cauri pirmajam fragmentam, kurā
ierakstīju savu frāzi please.
Bet tagad tā vietā, lai izietu šai check phrase funkcijai, es
patiesībā vēlos iedziļināties tajā un redzēt, kas tur notiek.
Tāpēc es iedziļināšos debug50 un tad skatīšos, es iestatu savu paroli
uz please.
Tātad, ja es eju cauri 22. rindiņai, man vajadzētu redzēt, ka parole
kļūst please, tāpat kā šajā kreisajā pusē.
Un tagad, kad es pārbaudu, vai frāze ir parole, man patiesībā
vajadzētu būt iespējai atgriezt patiesu, jo šķiet, ka šī frāze ir
tāda pati kā parole.
Tāpēc es iešu tam cauri, un skataties –patiesībā, es nonāku līdz 29.
rindai.
Un tas ir diezgan smalki, taču C valodā nevar salīdzināt divas
virknes, izmantojot divas vienādas zīmes.
Jūs faktiski varētu izmantot citu funkciju, ko sauc par string
compare (virkņu salīdzināšanu) vai saīsināti strcmp.
Tātad, lai izmantotu strcompare, es varu izmantot strcmp un dot tai
divus argumentus, frāzi un paroli.
Un, izmantojot šīs divas ievades, strcompare man pateiks, vai tās ir
līdzvērtīgas vai nav.
Ja tās ir līdzvērtīgas, strcmp-- vai strcompare-- kā vērtību
atgriezīs man 0.
Tāpēc tagad mans kods saka: ja šīs virknes ir līdzvērtīgas — un es
zinu, ka tās ir, jo strcompare dod man nulli, es varu turpināt ,
atgriezt patiesu un teikt, ka šī ir pareizā parole.
Tātad, izmantojot šo jauno kodu, man vajadzētu būt iespējai iziet no
debug50 un atgriezties terminālī.
Un tagad es varu atkal izveidot noslēpumu, palaist noslēpumu,
ierakstīt savu paroli please, un tagad te tas ir.
Tas saka: come on in.
Līdz ar to mēs esam redzējuši, kā debug50 var mums palīdzēt ne tikai
pārvarēt kodu, bet arī iedziļināties funkcijās un redzēt tajās esošās
kļūdas.