grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 û“qc:[ã@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/python35/lib64/python3.5/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__cCso|d|dd…dkr"|S|jj|ƒ}|sktjj|ƒ}tjj|ƒ}||j|<|S)Nú<éú>éÿÿÿÿ)rÚgetÚosÚpathÚabspathÚnormcase)rÚfilenameÚcanonicr r r rs z 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ÚlineZcallÚ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_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 rƒt ‚|jS)N) r Úf_backr*r/Ú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 rwt ‚|j|kr¥|j dkr¥|j ddƒ|jS)Nrr) r/Ú returnframer4r5r6rr*rÚ user_returnr%rÚ stoplinenor!)rr-r.r r r r(Vs   zBdb.dispatch_returncCsÈ|j|ƒra|jjt@o<|dtko<|ddksÁ|j||ƒ|jrÁt‚n`|jrÁ||jk rÁ|jjjt@rÁ|dtt fkrÁ|j||ƒ|jrÁt‚|j S)Nré) r/r5r6rÚ StopIterationÚuser_exceptionr%rr4Ú 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 rAÚ f_globalsrr4r:Úf_lineno)rr-r r r r/…s  z Bdb.stop_herecCsÂ|j|jjƒ}||jkr(dS|j}||j|krg|jj}||j|krgdSt|||ƒ\}}|rº|j|_|r¶|j r¶|j t |jƒƒdSdSdS)NFT) rr5Ú co_filenamerrCÚco_firstlinenoÚ effectiveÚnumberZ currentbpÚ temporaryÚdo_clearÚstr)rr-rÚlinenoÚbpZflagr r r r0“s   zBdb.break_herecCstdƒ‚dS)Nz)subclass of bdb must implement do_clear())ÚNotImplementedError)rr.r r r rI©sz Bdb.do_clearcCs|j|jjƒ|jkS)N)rr5rDr)rr-r r r r3¬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 r7²sz Bdb.user_callcCsdS)z9This method is called when we stop or break at this line.Nr )rr-r r r r1·sz Bdb.user_linecCsdS)z5This method is called when a return trap is set here.Nr )rr-Z return_valuer r r r9»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)r4r8r%r:)rr4r8r: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)rCr!)rr-rKr r r Ú set_untilÏs  z Bdb.set_untilcCsE|jr1|jj}|r1|j r1|j|_|jddƒdS)zStop after one line of code.N)rr2Ú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)r5r6rr!r2)rr-r r r Ú set_returnçszBdb.set_returncCsn|dkrtjƒj}|jƒx(|rO|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Ú _getframer2r"r*rPr rQÚsettrace)rr-r r r Ú set_traceîs       z Bdb.set_tracecCsj|j|jddƒ|jsftjdƒtjƒj}x(|re||jk re|`|j}q>WdS)Nrr)r!r rrTrVrUr2rP)rr-r r r Ú set_continueýs  zBdb.set_continuecCs/|j|_d|_d|_tjdƒdS)NT)r r4r8r%rTrV)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)rrÚgetlinerÚ setdefaultÚappendr) rrrKrHÚcondÚfuncnamerr#ÚlistrLr r r Ú set_breaks   z Bdb.set_breakcCsD||ftjkr)|j|j|ƒ|j|s@|j|=dS)N)rÚbplistrÚremove)rrrKr 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)rrrraÚdeleteMerc)rrrKrLr r r Ú clear_break's$zBdb.clear_breakcCsiy|j|ƒ}Wn/tk rD}zt|ƒSWYdd}~XnX|jƒ|j|j|jƒdS)N)Úget_bpbynumberÚ ValueErrorrJrdrcÚfiler#)rr.rLÚ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)rrrrard)rrr#ZblistrLr r r Úclear_all_file_breaks;s zBdb.clear_all_file_breakscCs>|js dSx!tjD]}|r|jƒqWi|_dS)NzThere are no breakpoints)rrÚ bpbynumberrd)rrLr r r Úclear_all_breaksEs  zBdb.clear_all_breakscCs�|stdƒ‚yt|ƒ}Wn"tk rFtd|ƒ‚YnXytj|}Wn"tk r|td|ƒ‚YnX|dkr™td|ƒ‚|S)NzBreakpoint number expectedz Non-numeric breakpoint number %sz!Breakpoint number %d out of rangezBreakpoint %d already deleted)rgÚintrrlÚ IndexError)rr.rGrLr r r rfMs    zBdb.get_bpbynumbercCs/|j|ƒ}||jko.||j|kS)N)rr)rrrKr r r Ú get_break\sz Bdb.get_breakcCsH|j|ƒ}||jkrD||j|krDtj||fpGgS)N)rrrra)rrrKr 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}x?|dk re|j||jfƒ||jkrYP|j}q'W|jƒtdt|ƒdƒ}x2|dk r½|j|j|j fƒ|j}qŒW|dkrãtdt|ƒdƒ}||fS)Nrr) Útb_frameÚtb_nextr\rCr r2ÚreverseÚmaxÚlenÚ tb_lineno)rÚfÚtÚstackÚir 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->) rÚreprlibrr5rDÚco_nameÚf_localsr,rZrBÚstrip) rZ frame_linenoZlprefixrrr-rKrÚsÚargsÚrvr#r r r Úformat_stack_entry†s*      zBdb.format_stack_entrycCs¹|dkr!ddl}|j}|dkr3|}|jƒt|tƒr^t|ddƒ}tj|jƒz-yt |||ƒWnt k r™YnXWdd|_ tjdƒXdS)NrzÚexecT) Ú__main__Ú__dict__r"Ú isinstancerJÚcompilerTrVr*r‡rr%)rÚcmdÚglobalsÚlocalsrˆr r r Úrun¤s        zBdb.runcCs˜|dkr!ddl}|j}|dkr3|}|jƒtj|jƒz-yt|||ƒSWntk rxYnXWdd|_tjdƒXdS)NrT) rˆr‰r"rTrVr*Ú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"rTrVr*rr%)rÚfuncr„ÚkwdsÚresr r r ÚruncallÌs    z Bdb.runcall).rrrr rrr"r*r&r'r(r)rAr/r0rIr3r7r1r9r=r!rOrQrRrSrWrXrYr`rcrerjrkrmrfrprqrrrsr~r†r�r’r“r—r r r r rsX                              cCstƒjƒdS)N)rrWr r r r rWÚsrWc@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||fq|jd7_|js‡|jdkrz|jd8_qqì|dfSqyPt|j|j|j ƒ}|rÖ|jdkrÌ|jd8_n |dfSWq|dfSYqXqWdS)zôDetermine 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) rrar™r§r›r]ršr�rBr�)rhr#r-Z possiblesr¦Úvalr r r rFTs*    rFc@s@eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTdbcCs,|jj}|sd}td||ƒdS)Nz???z+++ call)r5r€r+)rr-r„Únamer r r r7…s z Tdb.user_callcCszddl}|jj}|s$d}|j|jjƒ}|j||j|jƒ}td||j|d|j ƒƒdS)Nrz???z+++ú:) rr5r€rrDrZrCrBr+r‚)rr-rrªÚfnr#r r r r1‰s  z Tdb.user_linecCstd|ƒdS)Nz +++ return)r+)rr-Zretvalr r r r9�szTdb.user_returncCstd|ƒ|jƒdS)Nz +++ exception)r+rX)rr-Z exc_stuffr r r r=’s zTdb.user_exceptionN)rrrr7r1r9r=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?rTrÚinspectrÚ__all__Ú ExceptionrrrWrr§rFr©r²r¯r´r r r r Ús    ÿÍ Z  0