Download - Cómo Depurar Un Programa Python Con Pdb _ Pybonacci

Transcript
  • 18-1-2015 Cmo depurar un programa Python con pdb | Pybonacci

    https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/ 1/9

    Pybonacci

    ComputacinCientficaconPythonencastellano

    CmodepurarunprogramaPythonconpdb

    Introduccin

    EnesteartculovamosaexplicarcmodepurarunprogramaPythonusandoelmdulopdbdelabibliotecaestndar.Sinosabesquesexactamentedepurarunprogramaoparaqutepuedeservir,sigueleyendo.

    Depurarconsisteenseguirelflujodeunprogramaamedidaqueseejecuta,deformaquepodemosmonitorizarquesloqueestsucediendoencadamomento.Esunmtodomuyefectivoparaencontrarfallos,porque:

    Permitedetenermomentneamentelaejecucindelprogramausandopuntosderuptura(breakpoints).Permiteexaminarencadamomentolasvariablesqueseestnutilizando(nonecesitasllenartucdigodeprint).Permitecambiarelvalordeunavariablemientrasestdetenidalaejecucin.

    Sieslaprimeravezqueoyeshablardeesto,enseguidadescubrirselmundodeposibilidadesqueofreceladepuracin.

    Puedesleeronlineladocumentacindelmdulopdb.

    Enestaentradasehausadopython3.3.2.

    Primerospasos

    VamosautilizaresteprogramaextradodellibroDiveintoPython3:

    https://pybonacci.wordpress.com/http://docs.python.org/3.3/library/pdb.html

  • 18-1-2015 Cmo depurar un programa Python con pdb | Pybonacci

    https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/ 2/9

    Quesimplementeproducelasiguientesalida:

    Laformamsdirectadeiniciareldepuradoresconlalnea:

    Deacuerdo,quacabadesuceder?Nosencontramosconunintrpreteinteractivoesperandordenes,ylalneaqueempiezapor->eslalneadondeseencuentradetenidalaejecucinahoramismo.

    LoprimeroqueobservamosesquepodemosejecutarcualquierinstruccinPythonquequeramos:

    123456789

    10111213141516171819202122232425262728

    SUFFIXES={1000:['KB','MB','GB','TB','PB','EB','ZB','YB'1024:['KiB','MiB','GiB','TiB','PiB','EiB','ZiB'defapproximate_size(size,a_kilobyte_is_1024_bytes=True):'''Convertafilesizetohumanreadableform.Keywordarguments:sizefilesizeinbytesa_kilobyte_is_1024_bytesifTrue(default),usemultiplesof1024ifFalse,usemultiplesof1000Returns:string'''ifsizeSUFFIXES={1000:['KB','MB','GB','TB','PB','EB','ZB','YB'],(Pdb)

    12345

    (Pdb)2*816(Pdb)"Hello".lower()'hello'(Pdb)importnumpyasnpnp.sqrt(2)

  • 18-1-2015 Cmo depurar un programa Python con pdb | Pybonacci

    https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/ 3/9

    Paramostrarunalistadecomandosdisponibles,escribimoshelp.Tambinpodemosmostrarlaayudadecadacomandoindividial:

    Comosepuedeleer,podemosusarelcomandolistparaexaminarelcdigofuentedelarchivoqueestamosejecutando.Laprimeravezqueloejecutemossinargumentosmostrarlas11primeraslneasymarcarcon->lalneaactual,ysiseguimosejecutndoloproseguiravanzando.Veamos:

    6 1.4142135623730951

    123456789

    101112131415161718192021222324252627282930313233

    (Pdb)helpDocumentedcommands(typehelp):========================================EOFcldisableinteractnextreturnuwhereacleardisplayjpretvalunaliasaliascommandsdownjumppprunundisplayargsconditionenablelprintrvuntbcontexitlistqsuntilbreakcontinuehllquitsourceupbtdhelplonglistrstepwcdebugignorenrestarttbreakwhatisMiscellaneoushelptopics:==========================execpdb(Pdb)helplistl(ist)[first[,last]|.]Listsourcecodeforthecurrentfile.Withoutarguments,list11linesaroundthecurrentlineorcontinuethepreviouslisting.With.asargument,list11linesaroundthecurrentline.Withoneargument,list11linesstartingatthatline.Withtwoarguments,listthegivenrangeifthesecondargumentislessthanthefirst,itisacount.Thecurrentlineinthecurrentframeisindicatedby">".Ifanexceptionisbeingdebugged,thelinewheretheexceptionwasoriginallyraisedorpropagatedisindicatedby">>",ifitdiffersfromthecurrentline.(Pdb)

    123456789

    (Pdb)list1>SUFFIXES={1000:['KB','MB','GB','TB','PB','EB','ZB','YB'],21024:['KiB','MiB','GiB','TiB','PiB','EiB','ZiB',3'YiB']}45defapproximate_size(size,a_kilobyte_is_1024_bytes=True):6'''Convertafilesizetohumanreadableform.78Keywordarguments:

  • 18-1-2015 Cmo depurar un programa Python con pdb | Pybonacci

    https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/ 4/9

    Ahora,unpardetrucos:

    Hasvistoque,almostrarlalistadecomandos,habamuchosconunasolaletra?Loquesucedeesquesonatajos:porejemplo,lesunatajoparalist,asquenotienesqueescribirelcomandoentero.Pararepetirelltimocomandointroducido,simplementepresionaEnter.Siquieresrepetirelcomandolisttresveces,introducelunavezyEnterotrasdos.Msfcilimposible

    Porejemplo,paramostrardndeestamosdetenidospodemosusarelcomandowhereosimplementew:

    Siqueremoscerrareldepuradorusaramosquit,ysiqueremosqueelprogramacontinuehastaelfinal,usaremoscontinueoc:

    Elprogramatermina,sereiniciayestamosenelmismopuntoqueantes.Demomentonohemoshechonadademasiadointeresante:comencemos

    101112131415161718192021222324

    9sizefilesizeinbytes10a_kilobyte_is_1024_bytesifTrue(default),usemultiplesof102411ifFalse,usemultiplesof1000(Pdb)list1213Returns:string1415'''16ifsize/home/juanlu/Development/Python/test/pdb/example.py(1)()>SUFFIXES={1000:['KB','MB','GB','TB','PB','EB','ZB','YB'],

    1234567

    (Pdb)c1.0TB931.3GiBTheprogramfinishedandwillberestarted>/home/juanlu/Development/Python/test/pdb/example.py(1)()>SUFFIXES={1000:['KB','MB','GB','TB','PB','EB','ZB','YB'],(Pdb)

  • 18-1-2015 Cmo depurar un programa Python con pdb | Pybonacci

    https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/ 5/9

    Flujoeinspeccindevariables

    Ahora,cmoconseguimosiravanzandoenelflujodeejecucin?Paraellotenemosdoscomandos:step(s)ynext(n).Ambosejecutanunalneadelprogramayavanzanalasiguiente,conladiferenciadequestepseintroducedentrodelasfuncionescuandoseinvocaalguna.Volviendoanuestroejemplo:

    Hemosidoejecutandolaslneasunaauna,yalllegaralalneaprintyusarnextsehaejecutadotambinyhasaltadoalasiguiente.Siparalasiguientelneaprintusamosstep,nosintroduciremosenelcuerpodelafuncinapproximate_sizeyseguiremosdepurandodesdeah:

    123456789

    10111213141516171819202122

    Theprogramfinishedandwillberestarted>/home/juanlu/Development/Python/test/pdb/example.py(1)()>SUFFIXES={1000:['KB','MB','GB','TB','PB','EB','ZB','YB'],(Pdb)n>/home/juanlu/Development/Python/test/pdb/example.py(2)()>1024:['KiB','MiB','GiB','TiB','PiB','EiB','ZiB',(Pdb)#PresionamosEnter,lomismoqueejecutarnextotravez>/home/juanlu/Development/Python/test/pdb/example.py(3)()(Pdb)>/home/juanlu/Development/Python/test/pdb/example.py(5)()>defapproximate_size(size,a_kilobyte_is_1024_bytes=True):(Pdb)>/home/juanlu/Development/Python/test/pdb/example.py(27)()>if__name__=='__main__':(Pdb)>/home/juanlu/Development/Python/test/pdb/example.py(28)()>print(approximate_size(1000000000000,False))(Pdb)#nextejecutalalneaperonoseintroduceenapproximate_size1.0TB>/home/juanlu/Development/Python/test/pdb/example.py(29)()>print(approximate_size(1000000000000))(Pdb)

    123456789

    1011121314

    >/home/juanlu/Development/Python/test/pdb/example.py(29)()>print(approximate_size(1000000000000))(Pdb)sCall>/home/juanlu/Development/Python/test/pdb/example.py(5)approximate_size()>defapproximate_size(size,a_kilobyte_is_1024_bytes=True):(Pdb)>/home/juanlu/Development/Python/test/pdb/example.py(16)approximate_size()>ifsize

  • 18-1-2015 Cmo depurar un programa Python con pdb | Pybonacci

    https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/ 6/9

    Estamosahoraenesalneaynosabemosloquevaasuceder.Cmoaveriguamoselvalordeunavariable?Usandoelcomandoprint(p):

    Ysiahoranosapetecesalirdelcuerpodelafuncinyvolveralprogramaprincipal,escribimosreturn(r):

    Puntosderuptura

    Imaginaquetienesunprogramamuylargoynoquieresirlneaporlneadesdeelprincipiohastaelpuntoqueteinteresa.Paraesoexistenlospuntosderuptura:siestablecesunpuntoderupturaenunalnea,elcomandocontinueejecutarelprogramasindepuracinhastaqueencuentreuno,yentoncessedetendr.Sivuelvesausarcontinueeldepuradorsevolveradetenerenelsiguientepuntoderuptura,yassucesivamentehastaqueyanoquedenyelprogramafinalice,comovimosalprincipiodelartculo.

    Paraestablecerunpuntoderupturaseutilizaelcomandobreak(b):

    1516171819202122

    15'''16>ifsize/home/juanlu/Development/Python/test/pdb/example.py(23)approximate_size()>'931.3GiB'>return'{0:.1f}{1}'.format(size,suffix)(Pdb)931.3GiBReturn>/home/juanlu/Development/Python/test/pdb/example.py(29)()>None>print(approximate_size(1000000000000))(Pdb)

    12345

    $pythonmpdbexample.py>/home/juanlu/Development/Python/test/pdb/example.py(1)()>SUFFIXES={1000:['KB','MB','GB','TB','PB','EB','ZB','YB'],(Pdb)l1>SUFFIXES={1000:['KB','MB','GB','TB','PB','EB','ZB','YB'],

  • 18-1-2015 Cmo depurar un programa Python con pdb | Pybonacci

    https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/ 7/9

    Hemosestablecidounpuntoderupturaenlalnea21delprograma,yacontinuacineldepuradorlohaejecutadohastallegaradichalnea.Yapartirdeahtodofuncionaigualqueantes

    Otraformadeestablecerunpuntoderupturaentuprogramaesincluirlasiguientelnea:

    Deestemodo,alejecutarlosaltareldepuradordirectamente:

    Tehaayudadoestoaencontrareseerrorqueseteresista?Cuntanosenloscomentarios

    Unsaludo!

    6789

    101112131415161718192021222324252627282930313233

    21024:['KiB','MiB','GiB','TiB','PiB','EiB','ZiB',3'YiB']}45defapproximate_size(size,a_kilobyte_is_1024_bytes=True):6'''Convertafilesizetohumanreadableform.78Keywordarguments:9sizefilesizeinbytes10a_kilobyte_is_1024_bytesifTrue(default),usemultiplesof102411ifFalse,usemultiplesof1000(Pdb)1213Returns:string1415'''16ifsizesize/=multiple(Pdb)

    12345

    multiple=1024ifa_kilobyte_is_1024_byteselse1000forsuffixinSUFFIXES[multiple]:importpdbpdb.set_trace()size/=multipleifsize/home/juanlu/Development/Python/test/pdb/example.py(22)approximate_size()>size/=multiple(Pdb)

  • 18-1-2015 Cmo depurar un programa Python con pdb | Pybonacci

    https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/ 8/9

    WrittenbyJuanlu001

    14dejuniode2013at14:51

    PublicadoenTutoriales

    Taggedwithbugs,depuracin,pdb,python

    6comentarios

    SubscribetocommentswithRSS.

    Muybuenarticulo!muycompleto..muchosIDEtraenunaliasparacuandoescribesdebugteagreguelalineadepdbenvim(mieditor)yolabindeeasienel.vimrc:

    auFileTypepythoniabdebugimportpdbpdb.set_trace()

    angvp

    14dejuniode2013at15:12

    Graciasangvp!Ygraciasporeltrucodevim,seguroqueaalgunosdenuestroslectoreslesvienebienUnsaludo!

    Juanlu001

    14dejuniode2013at16:16

    ReblogueestoenElBlogdeFoxCarlosycomentado:Yaleechabademenosaundepuradordecodigo#pythonqueporcuestionesdetiemponohabiatenidotiempomdebuscaruno,puesaquilagentede#pybonacciescribiesteesxcelentepostsobre#depuraciondecodigoconPDB

    foxcarlos

    14dejuniode2013at15:29

    Graciasporelreblogging!

    Juanlu001

    14dejuniode2013at16:17

    Muchasgraciasporelartculo,mesirveparaempezarausarherramientasmaspoderosasqueunmontndeprints seagradeceeltiempoenescribirartculostantiles!

    https://pybonacci.wordpress.com/category/tutoriales/https://pybonacci.wordpress.com/tag/bugs/https://pybonacci.wordpress.com/tag/depuracion/https://pybonacci.wordpress.com/tag/pdb/https://pybonacci.wordpress.com/tag/python/https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/feed/http://gravatar.com/angvphttp://twitter.com/Juanlu001http://foxcarlos.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/http://www.foxcarlos.wordpress.com/http://twitter.com/Juanlu001

  • 18-1-2015 Cmo depurar un programa Python con pdb | Pybonacci

    https://pybonacci.wordpress.com/2013/06/14/como-depurar-un-programa-python-con-pdb/ 9/9

    Schcriher

    14dejuniode2013at23:46

    Graciasatiporelcomentario!Sindudaladepuracinesunapoderosaherramienta Sitienesdudasyasabesdndeencontrarnos!

    Juanlu001

    15dejuniode2013at10:31

    Loscomentariosestncerrados.

    CreaunblogounsitiowebgratuitosconWordPress.com.EltemaJournalistv1.9.

    Seguir

    SeguirPybonacci

    ConstruyeunsitiowebconWordPress.com

    http://www.schcriher.com.ar/http://twitter.com/Juanlu001https://es.wordpress.com/?ref=footer_websitehttps://wordpress.com/themes/journalist/javascript:void(0)https://es.wordpress.com/?ref=lof