Páginas

domingo, 3 de março de 2013

skribu-kun-python-cxap07

fonto: http://inventwithpython.com/chapter7.html

Temoj Kovrite En tiu ĉapitro:

  • 3 Diversaj Tipoj de Eraroj
  • Senokupe la sencimigilo
  • Tretante Into, Over, and Out
  • Iru kaj Quit
  • Rompi Punktoj

Cimoj!

"Dufoje mi demandis, 'Preĝu, Mr Babbage, se vi metas en la maŝino erara figuroj, estos la rajto respondojn eliros? Mi ne povas prave aprehender la specon de la konfuzo de ideoj kiujn povus provoki tia demando. "

-Charles Babbage, 19-a jarcento la angla matematikisto, filozofo, inventisto kaj mekanika inĝeniero, kiu estigis la koncepton de programebla komputilo.
http://en.wikipedia.org/wiki/Charles_Babbage
Se vi eniras la malĝusta kodo, la komputilo ne donos al vi la rajton programo. Komputilo programo ĉiam faras tion, kion vi diros ĝin al, sed kion vi diras al la programo por fari eble ne estus la sama kiel kio vi volis la programo por fari. Al cimo estas alia nomo por eraro aŭ problemo en komputila programo. Cimoj okazi kiam la programisto ne zorgeme pensis pri kio ekzakte la programo faras. Estas tri tipoj de bugs kiu povas okazi kun via programo:
  • Sintaksaj Eraroj estas tipo de eraro kiu devenas typos en via programo. Kiam la Python interpretisto vidas sintaksa eraro, estas ĉar via kodo estas priskribitaj en propraj Python lingvo. Al Python programo kun eĉ sola sintaksa eraro ne kuras.
  • Rultempa Eraroj estas eraroj kiuj okazas dum la programo kuras (tio estas, ekzekutante). La programo funkcios ĝis ĝi atingas la linio de kodo kun la eraro, kaj tiam la programo finiĝas kun eraro mesaĝon (ĉi nomiĝas frakasante). La Python interpretisto montros iu nomita "traceback" kaj montri la linio kie la problemo okazas.
  • Semantika Eraroj estas la trickiest erarojn ripari. Ĉi cimo ne frakasi la programo, kaj la programo povas aperi por labori bone. Tamen, ĝi ne estas fari kion la programiston destinita por la programo por fari. Ekzemple, se la programisto volas la variablo tuta esti la sumo de la valoroj en variabloj a, b, kaj c sed skribas totala = a + b * c, tiam la valoro en tuta estos malbone. Ĉi tio ne kaŭzas la programo por frakasi tuj, sed povas aŭ ne kaŭzas iujn aliajn kodon por frakasi poste pro la neatendita valoro en entute.
Finding erarojn en niaj programo povas esti malfacile, se vi ecx rimarki ilin ĉiujn! Kiam kurante via programo, vi eble trovos ke kelkfoje funkcioj ne nomas kiam supozas esti, aŭ eble ili estas nomataj ankaŭ multfoje. Vi povas kodi la kondiĉo por tempo buklo malbone, tiel ke ĝi cikloj la malĝusta nombro da fojoj. (A ciklo en via programo kiu neniam eliroj estas speco de insekto nomiĝas senfina ciklo. Por haltigi tiun programon, vi povas premi Ctrl-C en la interaga ŝelon.) Ajna el tiuj aĵoj povus erare okazas en via kodo, se vi ne estas zorgema.
Ĝi povas esti malfacile elŝeligi kiel via kodo povus produkti cimon ĉar ĉiuj linioj de kodo get ekzekutita tre rapide kaj la valorojn en variabloj ŝanĝi tiel ofte. Al erarserĉilo estas programo kiu ebligas paŝon tra via kodo unu linio samtempe (en la sama ordo kiu Python ekzekutas ilin), kaj ĝi montras kio valoroj stokitaj en ĉiuj el la variabloj. Al debugger permesas rigardi kiel ĉiu linio de kodo tuŝas vian programon. Tio povas esti tre utila por kompreni pri kio ekzakte la programo faras.
Video tutorial sur uzanta la erarserĉilo kiu venas kun sencela povas trovi sur tiu ĉi libro de afiŝinto ĉe http://inventwithpython.com/videos/

Komencante la sencimigilo

En senutilaj, antaŭeniri kaj malfermu la Drako Reĝlando ludo, kiun vi faris en la lasta ĉapitro. En la interaga konko, alklaku Arkivo kaj tiam Malferma, kaj tiam elektu dragon.py (aŭ kion ajn vi nomis la dosieron, kiam vi savis ĝin).
Post malfermo de la dragon.py dosiero, klaku sur la Debug menuero sur la supro de la interaga konko, kaj poste alklaku sencimigilo por fari la Debug Kontrolo fenestro aperas (Figuro 7-1).

Figuro 7-1: La Debug Kontrolo fenestro.
Nun, kiam vi kuris de la Drako Reĝlando ludo (premante F5 aŭ klakante Run, tiam Run Modulo en la dosiero redaktanto fenestro la supro menuo), la erarserĉilo programo estos aktivigita. Ĉi tio estas nomita kurante programo "sub erarserĉilo". En la Debug Kontrolo fenestro, kontrolu la Fonto kaj globals markobutonojn. Tiam ruli la programaron premante F5 en la dosiero redaktanto fenestro (Figuro 7-2).

Figuro 7-2: Running la Drako Reĝlando ludo sub la erarserĉilo.
Kiam vi kuros Python programoj kun la erarserĉilo aktivigita, la programo ĉesos antaŭ ol ĝi ekzekutas la unua linio de kodo. Se vi alklakas la dosieron redaktanto fenestro la titolon trinkejo (kaj vi kontrolis la Fonto checkbox en la Debug Kontrolo fenestro), la unua linio de kodo estas emfazita en griza. Ankaŭ, la Debug Kontrolo fenestro montras, ke vi estas en la linio 1, kiu estas la importado hazarda linio.
La debugger permesas ekzekuti unu linio aŭ kodo samtempe (nomita "tretante"). Ekzekuti sola instrukcio, alklaku la Paŝo butonon en la Debug Fenestro. Iru antaŭen kaj alklaku la butonon Paŝo unufoje. Tio kaŭzas la Python interpretisto por ekzekuti la importado hazarda instrukcio, kaj tiam haltas antaux ekzekutas la sekvanta instrukcio. La Debug Kontrolo fenestro ŝanĝos por montri ke vi estas nun en linio 2, la importado tempo linio.

Tretante

Jen resumo de kio okazas kiam vi premas la Paŝo butonon kiam vi kuras la Drako Reĝlando ludo sub erarserĉilo. Detala priskribo estas sube.
  1. Alklaku la butonon Paŝo dufoje kuri la du importado linioj.
  2. Alklaku la butonon Paŝo tri pli tempoj por ekzekuti la tri def deklaroj.
  3. Alklaku la butonon Paŝo denove por difini la playAgain variablo.
  4. Klaku Iru kuri la resto de la programo, aŭ alklakos Quit por nuligi la programon.
Tretante estas la procezo de ekzekuti unu instrukcion de la programo samtempe. Farante ĉi ebligas vidi, kio okazas post kurante sola linio de kodo, kiu povas helpi vin malkovri kie cimon unua aperas en viaj programoj.
La Debug Kontrolo fenestro montros al vi kion linio estas estonta ekzekutita kiam vi klakas la Paŝo butonon en la Debug Kontrolo fenestro. Ĉi fenestro estos ankaŭ al vi, kio numero de linio estas sur kaj montros al vi la linio de kodo mem. Memoru havi la

Alklaku la butonon Paŝo dufoje kuri la du importado linioj.

Alklaku la butonon Paŝo denove ruli la importado tempo instrukcio. La debugger ekzekutos ĉi importado statment kaj poste movi al la linio 4. La debugger saltis linio 3 ĉar estas malplena linio. Rimarku, ke vi povas nur paŝo antaŭen kun la erarserĉilo, vi ne povas iri malantaŭen.

Alklaku la butonon Paŝo tri pli tempoj por ekzekuti la tri def deklaroj.

Alklaku la butonon Paŝo tri pli tempoj. Tio ekzekuti la tri def deklaroj por difini tiujn funkciojn. Kiel vi difinas tiuj funkcioj, ili aperos en la globals areo de la Debug Kontrolo fenestro.
La teksto apud la funkcio nomoj en la Tutmonda areo aspektos ion kiel "<function checkCave ĉe 0x012859B0>". La modulo nomojn ankaŭ konfuzas rigardante tekston apud ili, kiel "<module'random' de'C:\\Python31\\lib\\random.pyc'>". Jen detala informo estas utila al antaŭita Python programistoj, sed vi ne bezonas scii kion signifas elpurigi viaj programoj. Nur vidante, ke la funkcioj kaj moduloj estas tie en la Tutmonda areo diros al vi, se la funkcio estas difinita aŭ de la modulo estis importitaj. Vi ankaŭ povas ignori la __ builtins__, __ doc__, kaj __ name__ linioj en la Tutmonda areo. (Tiuj estas variabloj kiuj aperas en ĉiuj Python programo.)

Alklaku la butonon Paŝo denove por difini la playAgain variablo.

La debugger nun estos (post klako Paŝo kvar fojojn) en linio 35, la playAgain = 'jes' linio. Kiam vi alklakos Paŝo ekzekuti ĉi tiu linio, la playAgain variablo estos kreitaj kaj montros en la Suma areo. Apud ĝi estos la valoro stokita en ĉi variablo, kiu estas la ĉeno 'jes'. La debugger permesas vidi la valorojn de ĉiuj variabloj en la programo kiel la sinsekvo programo kuras. Tio povas esti tre utila se vi devas redifini vian programoj.
La Tutmonda areo en la Debug Kontrolo fenestro estas kie ĉiuj tutmondaj variabloj estas stokitaj. Memoru, tutmonda variabloj estas la variabloj kiuj estas kreitaj ekster ajna funkcioj (tio estas, en la tutmonda medio). Ekzistas ankaŭ loka areo, kiu montras al vi la lokan medion variabloj kaj iliaj valoroj. La loka areo nur havos variabloj en ĝi, kiam la programo ekzekuto estas ene de funkcio. Ĉar ni estas ankoraŭ en la tutmonda amplekso, ĉi tiu areo estas malplena.
La Python debugger (kaj preskaŭ ĉiuj debuggers) nur ebligas paŝon antaŭen en via programo. Se vi jam ekzekutita instrukcion, vi ne povas treti malantaŭen kaj malfari la instrukcio.

La Iru kaj Quit Butonoj

Se vi ricevas laca klakante la paŝo butonon denove kaj denove, kaj volas la programon por ruli kutime, klaku la Go butono ĉe la supro de la Debug Kontrolo fenestro. Ĉi diros la programo por kuri, kvazaŭ vi ne havis la erarserĉilo ŝaltis.
Se vi iam volis fini la programon dum ĝi ruliĝas, simple alklaku la quit butono ĉe la supro de la Debug Kontrolo fenestro. La programo estos tuj eliri. Tio povas esti utila se vi volas halti la programon kaj komenci elpurigante ĝin de la komenco denove.

Tretante Into, Over, and Out

Serĉu Drako Reĝlando programon kun la erarserĉilo, kaj observu tretante (klakante la Paŝo butonon en la Debug Kontrolo fenestro) ĝis la erarserĉilo estas je linio 38 (la alvoko al displayIntro () linio). Kiam vi alklakos Paŝo denove, la erarserĉilo saltos sur cxi tiun funkcion alvokon kaj aperi en linio 5 (la unua linio en la def-bloko de la displayIntro () funkcion. La tipo de tretante ni estis farante nomas tretante en, ĉar ĝi estos paŝo al funkcio alvokoj.

Figuro 7-3: Konservu tretante ĝis vi atingos linio 38.
Se vi alklakos Paŝo kelkaj fojoj pli, vi vidos la eliron de la impreso () funkcion alvoko aperos en la interaga konko fenestro unuope. Kiam vi tretas sur la lasta impreso () funkcion alvoko en la displayIntro () funkcio, la erarserĉilo saltos reen al la unua linio (linio 40) post funkcio nomita.
Klaku Paŝo fojo pli eniri la chooseCave () funkcio. Konservu tretante per la kodo ĝis vi ekzekuti la funkcion alvoko enigo () alvokon. La programo atendos ĝis vi tajpi respondon en la ŝelon, ĝuste kiel kiam vi kuros la programo kutime. Se vi provos klakante la Paŝo butonon nun, nenio okazos ĉar la programo atendas klavaro respondo.
Entajpu respondon klakante denove sur la interaga konko fenestro kaj tipon kiu kaverno vi volas eniri. Vi devas klaki sur la fundo linio en la ŝelon antaux tajpi. Se vi estas tajpi sed nenio aperas sur la ekrano (kaj la palpebrumantaj kursoro ne estas sub la Kiun kaverno vi iros en? (1 aŭ 2) teksto), tiam vi ne klakis sur la lasta linio de la konko fenestro.
Kiam vi premu la Eniga klavo por eniri vian respondon, la erarserĉilo daŭre pasas linioj de kodo denove. Anstataŭ klaki Ŝtupo, provu klaki la butonon El la Debug Kontrolo fenestro. Ĉi tio estas nomita tretante eksteren, ĉar ĝi kaŭzas la erarserĉilo treti sur tiom da linioj kiel ĝi bezonas ĝis saltas el la funkcio kiu estis in Post tio elsaltas, la ekzekuto estos sur la linio post la linio kiu vokis la funkcio. Ekzemple, se vi estus interne de la displayIntro () funkcio sur linio 6, klakante Out havus la erarserĉilo observu tretante ĝis la funkcio estis super kaj revenis al la linio post la alvoko al displayIntro (). Tretante ekster povas savi vin de devi klaki Paŝo saciedad salti el la funkcio.
Se vi ne estas ene de funkcio (te vi estas en la tutmondaj medio) kaj vi klaku El, la erarserĉilo ekzekutos ĉiuj ceteraj linioj en la programo (ĝuste kvazaŭ vi klakis la Go butono).
La lasta speco de tretante estas farita de la Super butonon en la Debug Kontrolo fenestro, kaj ĝi estas por tretante sur funkcio alvokoj. Stepping super signifas ke la erarserĉilo ne treti en funkcio alvokoj. Anstataŭe, la erarserĉilo ekzekutas la tuta kodo interne de la funkcio je unu fojo nur haltas ĉe la linio post la funkcio nomita. Ĉi tio estas utila, se vi ne volas treti tra ĉiu unuopa linio ene de la funkcio. (Pensu pri Stepping Dum la sama kiel Stepping Into kaj tiam tuj Stepping Out.)
Vi nun scias, kion la kvin butonoj en la pinto de la Debug Kontrolo fenestro fari. Jen recap de kio ĉiu butono faras:
  • Go - Ekzekutas la resto de la kodo kiel normala, aŭ ĝis ĝi atingas ripozon punkto. (Break punktoj estas priskribita poste.)
  • Ŝtupo - Ŝtupo unu linio de kodo. Se la linio estas funkcio alvoko, la erarserĉilo estos paŝo al la funkcio.
  • Super - Ŝtupo unu linio de kodo. Se la linio estas funkcio alvoko, la erarserĉilo ne treti en la funkcio, sed anstataŭ treti sur la alvoko.
  • El - subtenas tretante sur linioj de kodo gxis la erarserĉilo lasas la funkcio estis en kiam Out estis klakis. Ĉi paŝoj el la funkcio.
  • Quit - Tuj finas la programon.

Trovu la Insekto

Uzante la erarserĉilo estas bona maniero por kalkuli kio kaŭzas erarojn en via programo. Kiel ekzemplo, jen estas eta programo kiu havas cimon en ĝi. La programo venas kun hazarda Krome problemo por la uzanto por solvi. En la interaga konko fenestro, klaku sur dosiero, tiam Nova Fenestro malfermi novan dosieron redaktanto fenestro. Tajpi ĉi programo en tiun fenestron, kaj savi la programon kiel buggy.py.
buggy.py
  1. importi hazarda
  2. number1 = random.randint (1, 10)
  3. number2 = random.randint (1, 10)
  4. print ("Kio estas '+ str (number1) +' + '+ str (number2) +'? ')
  5. respondi = input ()
  6. se respondon == number1 + number2:
  7. presi ('Correct!')
  8. alie:
  9. print ('Nope! La respondo estas' + str (number1 + number2))
Tajpu la programo en precize kiel ĝi estas supre, eĉ se vi povas jam diri kion la cimo estas. Tiam provas kuri la programon premante F5. Tiu estas simpla aritmetiko ludo kiu venas supren kun du hazardaj nombroj kaj petas vin aldoni ilin. Jen kio povus aspekti, kiam vi kuris de la programo:
Kio estas 5 + 1?
6
Nope! La respondo estas 6
Tio ne pravas! Tiu programo havas semantikan cimo en ĝi. Eĉ se la uzanto tajpas en la ĝusta respondo, la programo diras ke ili eraras.
Vi povus rigardi la kodon kaj pensadi pri kie iris malbone. Kiu funkcias kelkfoje. Sed vi eble kalkuli la kaŭzo de la eraro pli rapide se vi ruli la programaron sub la erarserĉilo. Sur la supro de la interaga konko fenestro, klaku sur Debug, tiam sencimigilo (se ne estas jam por kontroli la sencimigilo menuero) por montri la Debug Kontrolo fenestro. En la Debug Kontrolo fenestro, certigu la kvar markobutonojn (Stack, Fonto, lokaj kaj globals) estas kontrolata. Tio igas la Debug Kontrolo fenestro provizas la plej informo. Tiam premu F5 en la dosiero redaktanto fenestro ruli la programaron sub la erarserĉilo.
La debugger komenciĝas ĉe la importado hazarda linio. Nenio speciala okazas ĉi tie, do simple alklaku Paŝo plenumado. Vi devus vidi la hazarda modulo aldonas al la fundo de la Debug Kontrolo fenestro en la globals areo.
Klaku Paŝo denove kuri linio 2. Nova dosiero redaktanto fenestro popo malfermita montras la random.py dosiero. Memoru ke la randint () funkcio estas ene de la hazarda modulo. Kiam vi pasxis en la funkcio, vi paŝis sur la hazarda modulo ĉar tio estas kie la randint funkcio estas. La funkcioj kiuj venis kun Python moduloj preskaŭ neniam havas erarojn en siaj kodon, do vi povas simple klaki Out treti el la randint () funkcio kaj reen al via programo. Post kiam vi elpaŝis, vi povas fermi la hazarda modulo fenestro.
Linio 3 estas ankaŭ nomita al la randint () funkcio. Ni ne bezonas paŝo tra tiu kodo, tiel simple alklaku Dum treti sur tiu funkcio nomita. La randint () funkcio de kodo estas ankoraŭ ekzekutitaj, ĝi estas ĵus ekzekutita subite tiel ke ni ne devas treti tra ĝi.
Linio 4 estas presita () alvoko por montri la ludanto la hazardaj nombroj. Sed ĉar ni uzas la erarserĉilo, ni scias, kion nombroj la programo presos eĉ antaŭ ĝi presas ilin! Nur rigardu la globals areo de la Debug Kontrolo fenestro. Vi povas vidi la number1 kaj number2 variabloj, kaj apud ili estas la entjera valoroj stokitaj en tiuj variabloj. Kiam mi kuris la erarserĉilo, ĝi aspektis kiel Figuro 7-4.

Figuro 7-4: number1 estas agordita por 9 kaj number2 estas metita al 10.
La number1 variablo havas la valoron 9 kaj la number2 variablo havas la valoron 10. Kiam vi klakas Ŝtupo, la programo montros la ĉenon en la print () alvoko kun tiuj valoroj. (Kompreneble, ni uzas la str () funkcion por ke ni povu concatenate la kordo versio de tiuj entjeroj.)
Klakante sur Paŝo sur linio 5 kaŭzos la erarserĉilo atendi ĝis la ludanto eniras respondon. Iru antaŭen kaj tajpu en la ĝentila respondo (en mia kazo, 19) en la interaga konko fenestro. La debugger rekomencos kaj movi malsupren al vicigas 6.
Linio 6 estas se aserto. La kondiĉo estas ke la valoro en respondo devas parigi la sumo de number1 kaj number2. Se la kondiĉo estas vera, tiam la erarserĉilo movos al la linio 7. Se la kondiĉo estas Falsa, la erarserĉilo movos al la linio 9. Klaku Paŝo pli tempo por eltrovi kie iras.
La erarserĉilo estas nun en la linio 9! Kio okazis? La kondiĉo en la se aserto devas esti falsa. Rigardu la valorojn por number1, number2, kaj respondo. Rimarku ke number1 kaj number2 estas entjeroj, do ilia sumo estus ankaŭ entjero. Sed respondon estas ĉeno. Tio signifas ke la respondo == number1 + number2 kondiĉo estus taksitaj al '19 '== 19. Kordo valoro kaj entjero valoro estos ĉiam ne egala unu la alian, do la kondiĉo estus taksitaj al False.
Tio estas la cimo en la programo. La cimo estas ke ni uzas respondon, kiam ni devas uzi int (respondo). Iru antaŭen kaj ŝanĝi linio 6 uzi int (respondo) == number1 + number2 anstataŭ respondo == number1 + number2, kaj kuri la programon denove.
Kio estas 2 + 3?
5
Korekti!
Ĉi-foje, la programo funkciis ĝuste. Ruli ĝin pli tempon kaj entajpi malĝustan respondon al intenco certigi la programo ne diri ni ni donis la ĝusta respondo. Ni nun elpurigita ĉi tiu programo. Memoru, la komputilo funkcios viaj programoj precize kiel vi tajpas ilin, eĉ se tio, kion vi tajpas ne estas kion vi intencas.

Rompi Punktoj

Tretante per la kodo unu linio samtempe povus ankoraŭ esti tro malrapida. Ofte vi volas ke la programo por kuri al normala rapideco ĝis ĝi atingas iu linio. Vi povas fari tion kun rompo punktoj. Al paŭzo punkto estas metita en linio kiam oni volas la erarserĉilo por proprigi unufoje ekzekuto atingas tiun linion. Do, se vi kredas ke estas problemo kun via kodo en, ni diru, linio 17, simple starigis ripozon punkto sur linio 17 (aŭ eble kelkajn liniojn antaŭ tiu) kaj kiam ekzekuto atingas tiun linion, la erarserĉilo ĉesos ekzekuto. Tiam vi povas treti tra kelkaj linioj por vidi kio okazas. Tiam vi povas klaki Iru lasi la programon ekzekuti ĝis ĝi atingas la finon (aŭ alian rompon punkto).
Por agordi ripozon punkto, dekstra-klaki sur la linio kiu vi volas ripozon punkto sur kaj elektu "Ara Haltpunkto" el la menuo kiu aperas. La linio estos emfazita per flavaj indiki ripozon punkto estas sur tiu linio. Vi povas agordi ripozon punktoj sur tiom da linioj, kiel vi volas. Por forigi la rompo punkto, klaku sur la linio kaj elektu "Klara Haltpunkto" el la menuo kiu aperas.

Figuro 7-5: La dosiero redaktilo kun du ripozon antaŭ subiris.

Ekzemplo de Uzi Break Punktoj

Ni provu elpurigante programo kun rompo punktoj. Jen programo kiu simulas monero klakas per la alvoko random.randint (0, 1). Ĉiufoje tiu funkcio redonas la alvokon entjero 1, ni konsideros ke "kapoj" kaj pliigo variablo nomita kapoj. Ni ankaŭ pliigo variablo nomis klakas al konservi trako de kiom da fojoj ni faru tiun "monero klaki".
La programo estos do "monero klakas" unu mil fojoj. Ĉi prenus persono super horo por fari, sed la komputilo povas fari tion en dua! Enskribu la sekvan kodon en la dosiero redaktoro kaj konservi ĝin kiel coinFlips.py. Vi povas ankaŭ elŝuti tiun kodon de http://inventwithpython.com/coinFlips.py
coinFlips.py
Tiu kodo estas elŝutebla el http://inventwithpython.com/coinFlips.py
Se vi ricevas erarojn post tajpi tiun kodon en, kompari ĝin al la libro kodo kun la linio malsamoj ilo en http://inventwithpython.com/diff aŭ retpoŝtu la aŭtoro en al@inventwithpython.com
  1. importi hazarda
  2. print ('Mi klaki moneron 1000-foje. Divenu kiom da fojoj ĝi venos supren kapojn. (Premu eniri por komenci)')
  3. enigo ()
  4. klakas = 0
  5. kapojn = 0
  6. dum klakas <1000:
  7. se random.randint (0, 1) == 1:
  8. kapojn = kapoj + 1
  9. klakas = klakas + 1

  10. se klakas == 900:
  11. print ('900 klakas kaj tie estis "+ str (kapoj) + 'kapoj.')
  12. se klakas == 100:
  13. print ('Je 100 ĵetas, cxefoj venis supren' + str (kapoj) + 'tempoj ĝis nun.')
  14. se klakas == 500:
  15. print ('Duone faris, kaj kapoj venis supren' + str (kapoj) + 'foje.')

  16. print ()
  17. print ('El 1000 monero ĵetas, cxefoj iris' + str (kapoj) + 'tempoj!')
  18. print ('Ĉu vi fermas?')
La programo kuras bela rapide. Ĝi probable pasis pli tempo atendante la uzanto premu la Eniga klavo ol ĝi faras la monero klakas. Supozu ke ni volis vidi ĝin fari monero klakas unu post unu. En la interaga ŝelon de fenestro, klaku sur Debug kaj poste sencimigilo supre menuo, por porti la Debug Kontrolo fenestro. Tiam premu F5 ruli la programon.
La programo komenciĝas en la erarserĉilo on line 1. Premu Paŝo tri fojojn en la Debug Kontrolo fenestro por ekzekuti la unuaj tri linioj (tio estas, linioj 1, 2, kaj 3). Vi rimarkos ke la butonoj iĝi malebligita ĉar la enigo () funkcio estis nomita kaj la interagaj konko fenestro atendas la ludanto tajpi ion. Alklaku la interaga konko fenestro kaj premi Enter. (Nepre klaku sub la teksto en la ŝelon fenestro, alie sencelaj eble ne ricevi viajn keystrokes.) Post eniri teksto por la enigo () alvoko, la Paŝo butonoj fariĝos ebligis denove.
Vi povas alklaki Paŝo kelkaj fojoj pli, sed vi trovos, ke necesus sufiĉe tempo por trairi la tutan programon. Anstataŭe, turnu ripozon punkto sur linioj 12, 14, kaj 16 (Figuro 7-6).

Figuro 7-6: Tri ripozon antaŭ subiris.
Post opcio la breakpoints, klaku Eniru la Debug Kontrolo fenestro. La programo kuros en lia normala rapido ĝis ĝi atingas flip 100. Sur tiu flip, la kondiĉo por la se aserto on line 13 estas True. Tiu kaŭzas linio 14 (kie ni havas ripozon punkto aro) ekzekuti, kiu rakontas la erarserĉilo por halti la programon kaj transpreni. Rigardu la Debug Kontrolo fenestro en la globals sekcio por vidi kion la valoro de klakas kaj kapoj estas.
Klaku Iru denove kaj la programo sekvos ĝis ĝi atingas la sekvanta paŭzo punkto sur linio 16. Denove, vidi kiel la valoroj en klakas kaj kapoj ŝanĝis. Vi povas klaku Iru pli tempo por daŭrigi la ekzekuto ĝis ĝi atingas la sekvanta paŭzo punkto.
Kaj se vi alklakos Iru denove, la ekzekuto daŭrigos ĝis la sekvanta paŭzo punkto estas atingita, kiu estas sur linio 12. Vi verŝajne rimarkis, ke la impreso () funkcioj sur linioj 12, 14 kaj 16 estas nomitaj en malsama ordo ol ili aperas en la fontkodo. Tio estas ĉar ili estas nomataj en la ordo, ke ilia se aserto estas kondiĉo igas Vera. Uzante la erarserĉilo povas helpi klarigi kial ĉi estas.

Resumo

Skribi programojn estas nur parto de la laboro por fari ludojn. La sekva parto estas certigi la kodo oni skribis efektive funkcias. Debuggers ni tretas tra la kodo unu linio en momento, dum ekzamenante kio linioj ekzekuti (kaj en kiu ordo) kaj kio taksas la variabloj enhavas. Kiam ĉi estas tro malrapida, ni povas agordi ripozon punktoj kaj alklakos Iru lasi la programon funkcii normale ĝis ĝi atingas ripozon punkto.
Uzante la erarserĉilo estas granda vojo por kompreni kion precize programo faras. Dum ĉi tiu libro havigas klarigoj de ĉiuj ludoj en ĝi, la erarserĉilo povas helpi vin trovi pli pri viaj propraj.

Nenhum comentário:

Postar um comentário