PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  lY:[@sdZddlZddlZddlZddlmZdddgZGdddeZGdddZ d d Z Gd ddZ d d Z ddZ Gddde ZddZddZddZdS)zDebugger basicsN) CO_GENERATORBdbQuitBdb Breakpointc@seZdZdZdS)rz Exception to give up completely.N)__name__ __module__ __qualname____doc__r r "/opt/python35/lib/python3.5/bdb.pyr s c@s2eZdZdZdddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&d'Zdd(d)Zd*d+Zd,d-Zd.d/Zdd0d1Zd2d3Zd4d5Zd6ddd7d8Zd9d:Zd;d<Zd=d>Z d?d@Z!dAdBZ"dCdDZ#dEdFZ$dGdHZ%dIdJZ&dKdLZ'dMdNZ(dOdPdQZ)dddRdSZ*dddTdUZ+dVdWZ,dXdYZ-dS)ZrzGeneric Python debugger base class. This class takes care of details of the trace facility; a derived class should implement user interaction. The standard debugger class (pdb.Pdb) is an example. NcCs:|rt|nd|_i|_i|_d|_dS)N)setskipbreaksfncacheframe_returning)selfr r r r __init__s  z Bdb.__init__cCso|d|dddkr"|S|jj|}|sktjj|}tjj|}||j|<|S)N<>)rgetospathabspathnormcase)rfilenamecanonicr r r rs z Bdb.canoniccCs3ddl}|jd|_|jdddS)Nr) linecache checkcachebotframe _set_stopinfo)rrr r r reset&s   z Bdb.resetcCs|jr dS|dkr&|j|S|dkrB|j||S|dkr^|j||S|dkrz|j||S|dkr|jS|dkr|jS|dkr|jStdt||jS) Nlinecallreturn exceptionZc_callZ c_exceptionZc_returnz*bdb.Bdb.dispatch: unknown debugging event:)quitting dispatch_line dispatch_calldispatch_returndispatch_exceptiontrace_dispatchprintrepr)rframeeventargr r r r,,s$         zBdb.trace_dispatchcCsA|j|s|j|r:|j||jr:t|jS)N) stop_here break_here user_liner'rr,)rr/r r r r(@s   zBdb.dispatch_linecCs|jdkr"|j|_|jS|j|p=|j|sDdS|jrd|jjt@rd|jS|j |||j rt |jS)N) r f_backr,r2break_anywhere stopframef_codeco_flagsr user_callr'r)rr/r1r r r r)Fs  zBdb.dispatch_callc Cs|j|s||jkr|jr>|jjt@r>|jSz||_|j||Wdd|_X|j rwt |j|kr|j dkr|j dd|jS)Nrr) r2 returnframer7r8r9rr,r user_returnr'r stoplinenor!)rr/r1r r r r*Vs   zBdb.dispatch_returncCs|j|ra|jjt@o<|dtko<|ddks|j|||jrtn`|jr||jk r|jjjt@r|dtt fkr|j|||jrt|j S)Nr) r2r8r9r StopIterationuser_exceptionr'rr7 GeneratorExitr,)rr/r1r r r r+fs   zBdb.dispatch_exceptioncCs.x'|jD]}tj||r dSq WdS)NTF)r fnmatch)r module_namepatternr r r is_skipped_moduleszBdb.is_skipped_modulecCsk|jr(|j|jjdr(dS||jkrZ|jdkrJdS|j|jkS|jsgdSdS)NrFrTr)r rE f_globalsrr7r=f_lineno)rr/r r r r2s  z Bdb.stop_herecCs|j|jj}||jkr(dS|j}||j|krg|jj}||j|krgdSt|||\}}|r|j|_|r|j r|j t |jdSdSdS)NFT) rr8 co_filenamerrGco_firstlineno effectivenumberZ currentbp temporarydo_clearstr)rr/rlinenobpflagr r r r3s   zBdb.break_herecCstddS)Nz)subclass of bdb must implement do_clear())NotImplementedError)rr1r r r rMsz Bdb.do_clearcCs|j|jj|jkS)N)rr8rHr)rr/r r r r6szBdb.break_anywherecCsdS)znThis method is called when there is the remote possibility that we ever need to stop in this function.Nr )rr/Z argument_listr r r r:sz Bdb.user_callcCsdS)z9This method is called when we stop or break at this line.Nr )rr/r r r r4sz Bdb.user_linecCsdS)z5This method is called when a return trap is set here.Nr )rr/Z return_valuer r r r<szBdb.user_returncCsdS)zmThis method is called if an exception occurs, but only if we are to stop at or just below this level.Nr )rr/exc_infor r r r@szBdb.user_exceptionrcCs(||_||_d|_||_dS)NF)r7r;r'r=)rr7r;r=r r r r!s   zBdb._set_stopinfocCs0|dkr|jd}|j|||dS)zxStop when the line with the line no greater than the current one is reached or when returning from current frameNr)rGr!)rr/rOr r r set_untils  z Bdb.set_untilcCsE|jr1|jj}|r1|j r1|j|_|jdddS)zStop after one line of code.N)rr5f_tracer,r!)rZ caller_framer r r set_steps    z Bdb.set_stepcCs|j|ddS)z2Stop on the next line in or below the given frame.N)r!)rr/r r r set_nextsz Bdb.set_nextcCs=|jjt@r&|j|ddn|j|j|dS)z)Stop when returning from the given frame.Nrr)r8r9rr!r5)rr/r r r set_returnszBdb.set_returncCsn|dkrtjj}|jx(|rO|j|_||_|j}q(W|jtj|jdS)zpStart debugging from `frame`. If frame is not specified, debugging starts from caller's frame. N) sys _getframer5r"r,rUr rVsettrace)rr/r r r set_traces       z Bdb.set_tracecCsj|j|jdd|jsftjdtjj}x(|re||jk re|`|j}q>WdS)Nrr)r!r rrYr[rZr5rU)rr/r r r set_continues  zBdb.set_continuecCs/|j|_d|_d|_tjddS)NT)r r7r;r'rYr[)rr r r set_quits   z Bdb.set_quitFc Cs|j|}ddl}|j||}|sAd||fS|jj|g}||kro|j|t|||||} dS)NrzLine %s:%d does not exist)rrgetliner setdefaultappendr) rrrOrLcondfuncnamerr#listrPr r r set_breaks   z Bdb.set_breakcCsD||ftjkr)|j|j||j|s@|j|=dS)N)rbplistrremove)rrrOr r r _prune_breaks!s zBdb._prune_breakscCs|j|}||jkr&d|S||j|krGd||fSx/tj||fddD]}|jqeW|j||dS)NzThere are no breakpoints in %szThere is no breakpoint at %s:%d)rrrrfdeleteMerh)rrrOrPr r r clear_break's$zBdb.clear_breakcCsiy|j|}Wn/tk rD}zt|SWYdd}~XnX|j|j|j|jdS)N)get_bpbynumber ValueErrorrNrirhfiler#)rr1rPerrr r r clear_bpbynumber3s  zBdb.clear_bpbynumbercCsz|j|}||jkr&d|SxC|j|D]4}tj||f}x|D]}|jqTWq4W|j|=dS)NzThere are no breakpoints in %s)rrrrfri)rrr#ZblistrPr r r clear_all_file_breaks;s zBdb.clear_all_file_breakscCs>|js dSx!tjD]}|r|jqWi|_dS)NzThere are no breakpoints)rr bpbynumberri)rrPr r r clear_all_breaksEs  zBdb.clear_all_breakscCs|stdyt|}Wn"tk rFtd|YnXytj|}Wn"tk r|td|YnX|dkrtd||S)NzBreakpoint number expectedz Non-numeric breakpoint number %sz!Breakpoint number %d out of rangezBreakpoint %d already deleted)rlintrrq IndexError)rr1rKrPr r r rkMs    zBdb.get_bpbynumbercCs/|j|}||jko.||j|kS)N)rr)rrrOr r r get_break\sz Bdb.get_breakcCsH|j|}||jkrD||j|krDtj||fpGgS)N)rrrrf)rrrOr r r get_breaksaszBdb.get_breakscCs1|j|}||jkr)|j|SgSdS)N)rr)rrr r r get_file_breaksgs zBdb.get_file_breakscCs|jS)N)r)rr r r get_all_breaksnszBdb.get_all_breakscCsg}|r$|j|kr$|j}x?|dk re|j||jf||jkrYP|j}q'W|jtdt|d}x2|dk r|j|j|j f|j}qW|dkrtdt|d}||fS)Nrr) tb_frametb_nextrarGr r5reversemaxlen tb_lineno)rftstackir r r get_stackts      z Bdb.get_stackz: c Cs,ddl}ddl}|\}}|j|jj}d||f}|jjrh||jj7}n |d7}d|jkr|jd} nd} | r||j| 7}n |d7}d|jkr|jd} |d7}||j| 7}|j|||j } | r(||| j 7}|S)Nrz%s(%r)zZ__args__z()Z __return__z->) rreprlibrr8rHco_namef_localsr.r_rFstrip) rZ frame_linenoZlprefixrrr/rOrsargsrvr#r r r format_stack_entrys*      zBdb.format_stack_entrycCs|dkr!ddl}|j}|dkr3|}|jt|tr^t|dd}tj|jz-yt |||Wnt k rYnXWdd|_ tjdXdS)NrzexecT) __main____dict__r" isinstancerNcompilerYr[r,rrr')rcmdglobalslocalsrr r r runs        zBdb.runcCs|dkr!ddl}|j}|dkr3|}|jtj|jz-yt|||SWntk rxYnXWdd|_tjdXdS)NrT) rrr"rYr[r,evalrr')rexprrrrr r r runevals        z Bdb.runevalcCs|j|||dS)N)r)rrrrr r r runctxsz Bdb.runctxcOsj|jtj|jd}z,y|||}Wntk rJYnXWdd|_tjdX|S)NT)r"rYr[r,rr')rfuncrkwdsresr r r runcalls    z Bdb.runcall).rrrr rrr"r,r(r)r*r+rEr2r3rMr6r:r4r<r@r!rTrVrWrXr\r]r^rerhrjrorprrrkrurvrwrxrrrrrrr r r r rsX                              cCstjdS)N)rr\r r r r r\sr\c@seZdZdZdZiZdgZdddddZddZd d Z d d Z dd dZ ddZ ddZ dS)raBreakpoint class. Implements temporary breakpoints, ignore counts, disabling and (re)-enabling, and conditionals. Breakpoints are indexed by number through bpbynumber and by the file,line tuple using bplist. The former points to a single instance of class Breakpoint. The latter points to a list of such instances since there may be more than one breakpoint per line. rNFcCs||_d|_||_||_||_||_d|_d|_d|_t j |_ t j d7_ |j j |||f|jkr|j||fj |n|g|j||fq|jd7_|js|jdkrz|jd8_qq|dfSqyPt|j|j|j }|r|jdkr|jd8_n |dfSWq|dfSYqXqWdS)zDetermine which breakpoint for this file:line is to be acted upon. Called only if we know there is a bpt at this location. Returns breakpoint that was triggered and a flag that indicates if it is ok to delete a temporary bp. rrTFN)NN) rrfrrrrbrrrFr)rmr#r/Z possiblesrvalr r r rJTs*    rJc@s@eZdZddZddZddZddZd S) TdbcCs,|jj}|sd}td||dS)Nz???z+++ call)r8rr-)rr/rnamer r r r:s z Tdb.user_callcCszddl}|jj}|s$d}|j|jj}|j||j|j}td||j|d|j dS)Nrz???z+++:) rr8rrrHr_rGrFr-r)rr/rrfnr#r r r r4s  z Tdb.user_linecCstd|dS)Nz +++ return)r-)rr/Zretvalr r r r<szTdb.user_returncCstd||jdS)Nz +++ exception)r-r])rr/Z exc_stuffr r r r@s zTdb.user_exceptionN)rrrr:r4r<r@r r r r rs    rcCs1td|dt|d}td|dS)Nzfoo() z bar returned)r-bar)nxr r r foosrcCstd|d|dS)Nzbar(rr>)r-)ar r r rsrcCst}|jddS)Nzimport bdb; bdb.foo(10))rr)rr r r tests r)r rBrYrinspectr__all__ Exceptionrrr\rrrJrrrrr r r r s     Z  0