grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026î £ f:[ã@sçdZddlZddlZddlZddlmZdddgZGdd„deƒZGdd„dƒZ d d „Z Gd d„dƒZ d d „Z dd„Z Gdd„de ƒZdd„Zdd„Zdd„ZdS)zDebugger basicséN)Ú CO_GENERATORÚBdbQuitÚBdbÚ Breakpointc@seZdZdZdS)rz Exception to give up completely.N)Ú__name__Ú __module__Ú __qualname__Ú__doc__©r r ú(/opt/alt/python34/lib64/python3.4/bdb.pyr s c@s2eZdZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&d'„Zdd(d)„Zd*d+„Zd,d-„Zd.d/„Zdd0d1„Zd2d3„Zd4d5„Zd6ddd7d8„Zd9d:„Zd;d<„Zd=d>„Z d?d@„Z!dAdB„Z"dCdD„Z#dEdF„Z$dGdH„Z%dIdJ„Z&dKdL„Z'dMdN„Z(dOdPdQ„Z)dddRdS„Z*dddTdU„Z+dVdW„Z,dXdY„Z-dS)ZrzÕGeneric 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)ÚsetÚskipÚbreaksÚfncacheÚframe_returning)Úselfr r r r Ú__init__s  z Bdb.__init__cCsr|d|dd…dkr"|S|jj|ƒ}|sntjj|ƒ}tjj|ƒ}||j|éÿÿÿÿ)rÚgetÚosÚpathÚabspathÚnormcase)rÚfilenameÚcanonicr r r rsz Bdb.canoniccCs3ddl}|jƒd|_|jddƒdS)Nr)Ú linecacheÚ checkcacheÚbotframeÚ _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) NÚlineÚcallÚreturnZ exceptionZc_callZ c_exceptionZc_returnz*bdb.Bdb.dispatch: unknown debugging event:)ÚquittingÚ dispatch_lineÚ dispatch_callÚdispatch_returnÚdispatch_exceptionÚtrace_dispatchÚprintÚrepr)rÚframeZeventÚargr r r r+,s$         zBdb.trace_dispatchcCsG|j|ƒs|j|ƒr@|j|ƒ|jr@t‚q@n|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 r†t ‚n|jS)N) r Úf_backr+r0Úbreak_anywhereÚ stopframeÚf_codeÚco_flagsrÚ user_callr&r)rr.r/r r r r(Fs  zBdb.dispatch_callc Csµ|j|ƒs||jkr®|jr>|jjt@r>|jSz||_|j||ƒWdd|_X|j rzt ‚n|j|kr®|j dkr®|j ddƒq®n|jS)Nrr) r0Ú returnframer5r6r7rr+rÚ user_returnr&rÚ stoplinenor!)rr.r/r r r r)Vs   zBdb.dispatch_returncCsÔ|j|ƒrg|jjt@o<|dtko<|ddksÍ|j||ƒ|jrdt‚qdqÍnf|jrÍ||jk rÍ|jjjt@rÍ|dtt fkrÍ|j||ƒ|jrÍt‚qÍn|j S)Nré) r0r6r7rÚ StopIterationÚuser_exceptionr&rr5Ú GeneratorExitr+)rr.r/r r r r*fs   zBdb.dispatch_exceptioncCs.x'|jD]}tj||ƒr dSq WdS)NTF)r Úfnmatch)rZ module_nameÚpatternr r r Úis_skipped_moduleszBdb.is_skipped_modulecCsk|jr(|j|jjdƒƒr(dS||jkrZ|jdkrJdS|j|jkS|jsgdSdS)NrFrTr)r rBÚ f_globalsrr5r;Úf_lineno)rr.r r r r0…s  z Bdb.stop_herecCsÈ|j|jjƒ}||jkr(dS|j}||j|krj|jj}||j|krjdSnt|||ƒ\}}|rÀ|j|_|r¼|j r¼|j t |jƒƒndSdSdS)NFT) rr6Ú co_filenamerrDÚco_firstlinenoÚ effectiveÚnumberZ currentbpÚ temporaryÚdo_clearÚstr)rr.rÚlinenoÚbpZflagr r r r1“s   zBdb.break_herecCstdƒ‚dS)Nz)subclass of bdb must implement do_clear())ÚNotImplementedError)rr/r r r rJ©sz Bdb.do_clearcCs|j|jjƒ|jkS)N)rr6rEr)rr.r r r r4¬szBdb.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 r8²sz Bdb.user_callcCsdS)z9This method is called when we stop or break at this line.Nr )rr.r r r r2·sz 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)r5r9r&r;)rr5r9r;r r r r!Äs   zBdb._set_stopinfocCs3|dkr|jd}n|j|||ƒdS)zxStop when the line with the line no greater than the current one is reached or when returning from current frameNr)rDr!)rr.rLr r r Ú set_untilÏs z Bdb.set_untilcCsK|jr7|jj}|r7|j r7|j|_q7n|jddƒdS)zStop after one line of code.N)rr3Úf_tracer+r!)rZ caller_framer r r Úset_step×s   z Bdb.set_stepcCs|j|dƒdS)z2Stop on the next line in or below the given frame.N)r!)rr.r r r Úset_nextãsz Bdb.set_nextcCs=|jjt@r&|j|ddƒn|j|j|ƒdS)z)Stop when returning from the given frame.Nrr)r6r7rr!r3)rr.r r r Ú set_returnçszBdb.set_returncCsq|dkrtjƒj}n|jƒx(|rR|j|_||_|j}q+W|jƒtj|jƒdS)zpStart debugging from `frame`. If frame is not specified, debugging starts from caller's frame. N) ÚsysÚ _getframer3r"r+rQr rRÚsettrace)rr.r r r Ú set_traceîs       z Bdb.set_tracecCsm|j|jddƒ|jsitjdƒtjƒj}x+|re||jk re|`|j}q>WndS)Nrr)r!r rrUrWrVr3rQ)rr.r r r Ú set_continueýs  zBdb.set_continuecCs/|j|_d|_d|_tjdƒdS)NT)r r5r9r&rUrW)rr r r Úset_quits   z Bdb.set_quitFc CsŽ|j|ƒ}ddl}|j||ƒ}|sAd||fS|jj|gƒ}||krr|j|ƒnt|||||ƒ} dS)NrzLine %s:%d does not exist)rrÚgetlinerÚ setdefaultÚappendr) rrrLrIÚcondÚfuncnamerr#ÚlistrMr r r Ú set_breaks  z Bdb.set_breakcCsJ||ftjkr,|j|j|ƒn|j|sF|j|=ndS)N)rÚbplistrÚremove)rrrLr r r Ú _prune_breaks!s zBdb._prune_breakscCs�|j|ƒ}||jkr&d|S||j|krGd||fSx/tj||fdd…D]}|jƒqeW|j||ƒdS)NzThere are no breakpoints in %szThere is no breakpoint at %s:%d)rrrrbÚdeleteMerd)rrrLrMr r r Ú clear_break's$zBdb.clear_breakcCsiy|j|ƒ}Wn/tk rD}zt|ƒSWYdd}~XnX|jƒ|j|j|jƒdS)N)Úget_bpbynumberÚ ValueErrorrKrerdÚfiler#)rr/rMÚerrr r r Úclear_bpbynumber3s  zBdb.clear_bpbynumbercCsz|j|ƒ}||jkr&d|SxC|j|D]4}tj||f}x|D]}|jƒqTWq4W|j|=dS)NzThere are no breakpoints in %s)rrrrbre)rrr#ZblistrMr r r Úclear_all_file_breaks;s zBdb.clear_all_file_breakscCsA|js dSx$tjD]}|r|jƒqqWi|_dS)NzThere are no breakpoints)rrÚ bpbynumberre)rrMr r r Úclear_all_breaksEs  zBdb.clear_all_breakscCs£|stdƒ‚nyt|ƒ}Wn"tk rItd|ƒ‚YnXytj|}Wn"tk rtd|ƒ‚YnX|dkrŸtd|ƒ‚n|S)NzBreakpoint number expectedz Non-numeric breakpoint number %sz!Breakpoint number %d out of rangezBreakpoint %d already deleted)rhÚintrrmÚ IndexError)rr/rHrMr r r rgMs   zBdb.get_bpbynumbercCs/|j|ƒ}||jko.||j|kS)N)rr)rrrLr r r Ú get_break\sz Bdb.get_breakcCsH|j|ƒ}||jkrD||j|krDtj||fpGgS)N)rrrrb)rrrLr 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_breakscCsög}|r'|j|kr'|j}nxB|dk rk|j||jfƒ||jkr_Pn|j}q*W|jƒtdt|ƒdƒ}x2|dk rÃ|j|j|j fƒ|j}q’W|dkrìtdt|ƒdƒ}n||fS)Nrr) Útb_frameÚtb_nextr]rDr r3ÚreverseÚmaxÚlenÚ tb_lineno)rÚfÚtÚstackÚir r r Ú get_stackts      z Bdb.get_stackz: c Cs2ddl}ddl}|\}}|j|jjƒ}d||f}|jjrh||jj7}n |d7}d|jkr‘|jd} nd} | r³||j| ƒ7}n |d7}d|jkrù|jd} |d7}||j| ƒ7}n|j|||j ƒ} | r.||| j ƒ7}n|S)Nrz%s(%r)zZ__args__z()Z __return__z->) rÚreprlibrr6rEÚco_nameÚf_localsr-r[rCÚstrip) rZ frame_linenoZlprefixrr€r.rLrÚsÚargsÚrvr#r r r Úformat_stack_entry†s*      zBdb.format_stack_entrycCsÂ|dkr$ddl}|j}n|dkr9|}n|jƒt|tƒrgt|ddƒ}ntj|jƒz-yt |||ƒWnt k r¢YnXWdd|_ tjdƒXdS)NrzÚexecT) Ú__main__Ú__dict__r"Ú isinstancerKÚcompilerUrWr+rˆrr&)rÚcmdÚglobalsÚlocalsr‰r r r Úrun¤s         zBdb.runcCsž|dkr$ddl}|j}n|dkr9|}n|jƒtj|jƒz-yt|||ƒSWntk r~YnXWdd|_tjdƒXdS)NrT) r‰rŠr"rUrWr+Úevalrr&)rÚexprrŽr�r‰r r r Úruneval¶s         z Bdb.runevalcCs|j|||ƒdS)N)r�)rr�rŽr�r r r ÚrunctxÆsz Bdb.runctxcOsj|jƒtj|jƒd}z,y|||Ž}Wntk rJYnXWdd|_tjdƒX|S)NT)r"rUrWr+rr&)rÚfuncr…ÚkwdsÚresr r r ÚruncallÌs    z Bdb.runcall).rrrr rrr"r+r'r(r)r*rBr0r1rJr4r8r2r:r>r!rPrRrSrTrXrYrZrardrfrkrlrnrgrqrrrsrtrr‡r�r“r”r˜r r r r rsX                              cCstƒjƒdS)N)rrXr r r r rXÚsrXc@s‹eZdZdZdZiZdgZddddd„Zdd„Zd d „Z d d „Z dd d„Z dd„Z dd„Z dS)ra•Breakpoint 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||f’s zTdb.user_exceptionN)rrrr8r2r:r>r r r r rª„s    rªcCs1td|dƒt|dƒ}td|ƒdS)Nzfoo(ú)é z bar returned)r,Úbar)ÚnÚxr r r Úfoo–sr³cCstd|dƒ|dS)Nzbar(r®r<)r,)Úar r r r°›sr°cCstƒ}|jdƒdS)Nzimport bdb; bdb.foo(10))rªr�)r|r r r ÚtestŸs rµ)r r@rUrÚinspectrÚ__all__Ú ExceptionrrrXrr¨rGrªr³r°rµr r r r Ús    ÿÍ Z  0