Xׯd>ddlZddlZddlZddlZddlZddlZddlZdZdZdZ dZ dZ dZ GddZ Gd d ejZdS) Ng?c4eZdZddZdZdZdZdZdZdS) PersistentBreakpointNcZ||_||_||_||_d|_d|_dS)NF)ownerfilelinecondfuncnameactive)selfr r r r rs ..\grt_python_debugger.py__init__zPersistentBreakpoint.__init__9s0      cv||_|jr*||dSdSN)r r deactivateactivate)rr s r set_conditionz"PersistentBreakpoint.set_conditionAs> ;  OO    MMOOOOO  rc|j|j|j|j|j}|d|_nd|_|S)N)r TF)r set_breakcanonicr r r r)rfs rrzPersistentBreakpoint.activateHsP J !3!3DI!>!> PTPY Z Z 9DKKDKrc|j|j|j|jdSr)r clear_breakrr r rs rrzPersistentBreakpoint.deactivateQs4 tz11$)<d|jrdndd|jd|jSN[ONOFFz] :rr r rs r__repr__zPersistentBreakpoint.__repr__T,'+{=tt==tyyy$))TTrc>d|jrdndd|jd|jSr!r&rs r__str__zPersistentBreakpoint.__str__Wr(r)NN) __name__ __module__ __qualname__rrrrr'r*rrrr8s~IIIUUUUUUUUrrceZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d%d ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!d!Z"d"Z#d#Z$d$S)& PyDebuggerctj|||_d|_d|_d|_d|_g|_d|_ d|_ d|_ dS)NFr) bdbBdbrui main_file current_stacktop_stack_indexstarted_steppingpersistent_breakpointslast_heartbeat is_stepping pause_pending)rr4s rrzPyDebugger.__init__\sd !# %&(# "rcN|jD]}|j|kr|j|kr|cSdSr)r9r r rr r pbs rfind_pbreakpointzPyDebugger.find_pbreakpointjs8-  Bw$27d?? trc||jD]0}|}|r|d|z1dS)Nz Error activating breakpoint: %s )clear_all_breaksr9rui_print)rr?ss renable_breakpointszPyDebugger.enable_breakpointsqsc - G GB A G AAEFFF G Grcddl}ddl}|t|ddD]\}}d}|jjr|jj}|dkrd}nd}|jjd|jj}|r#|r|dd|zz}n|d z}| || ||dS) NrrTzFzz(%s)z, z()) linecachereprlibui_clear_stackreversedf_codeco_name co_varnames co_argcountjoin ui_add_stackparse_filename) rstackrGrHframer show_argslocationargss r show_stackzPyDebugger.show_stackys!!!!!!!! #E!""I.. J JKE4I|# & </z)) %I%<+,EU\-E,EFD --' $)??HH'}H   h(;(;E(B(BD I I I I J JrcF||jtdSr)handle_program_stoptb_frameSTOP_REASON_EXCEPTION)rtbs runcaught_exceptionzPyDebugger.uncaught_exceptions!   .CDDDDDrcn|jjdkr|jn||jjS)Nz)rK co_filenamer5r)rrSs rrQzPyDebugger.parse_filenames0!&!9Z!G!Gt~~T\\Z_ZfZrMsMssrc0||}|j}||d\|_|_t |jdkr|dS|j|jd|_||j| |j| |||}|sd}t|d|z}|tkr|dkr|ddS|dS)Nrrabortwdb_continueT)quiet) rQf_lineno get_stackr6r7lenset_step current_framerWwdb_refresh_variablesui_program_stoppedgetattrSTOP_REASON_HEARTBEAT)rrSreasonfilenamer next_command_name next_commands rrYzPyDebugger.handle_program_stops&&&u--~37>>%3N3N0D0 t! " "a ' ' MMOOO F!/0DEaH *+++ ""4#7888!33HdFKK  ( ' tV,=%=>> * * */@J/N/N Lt $ $ $ $ $ $ LNNNNNrc d|_|rd|_|dnd|_|d |nY#t$rL}|d|z|t jdzYd}~dSd}~wwxYw|||_ | d|j dd zdS#|d |ztj \}}}t j |}|d t j|d d|d t j||dz|j|j}|j||YdSxYw) NFT> step z> run z!Error activating breakpoints: %s  zexec(open("%s").read())\z\\z'Uncaught exception while executing %s: )r<r8rCrE Exception traceback format_excrr5runreplacesysexc_info extract_tbrO format_listformat_exception_onlytb_nextr])rrosteppingexcevtrRs rwdb_runzPyDebugger.wdb_runs"  %$(D ! MM* % % % %$)D ! MM) $ $ $   # # % % % %    MM>D E E E MM).005 6 6 6 FFFFF  h// ' HH.1G1GV1T1TT U U U U U ' MMDxO P P PlnnGAq!(++E MM"'')"7abb "B"BCC D D D MM"'')"A!Q"G"GHHM N N N)'I)'  # #A & & & & & &s&A B/#AB**B/ 1DC/G2c|d|d|_d|_d|_dS)Nz> stop rCset_quitrir6r7rs rwdb_stopzPyDebugger.wdb_stops? j!!! !!#rc|d|d|_d|_d|_dS)Nz> abort rrs r wdb_abortzPyDebugger.wdb_aborts? k""" !!#rcf|d|d|_dS)Nz> pause T)rCrhr<rs r wdb_pausezPyDebugger.wdb_pauses/ k""" !rFc|s|d|d|_d|_d|_d|_dS)Nz > continue FrCrhrir6r7r;)rrds r wdb_continuezPyDebugger.wdb_continuesO * MM. ) ) ) !!# rc|d||jd|_d|_d|_d|_dS)NrsT)rCset_nextrir6r7r;rs rwdb_stepzPyDebugger.wdb_stepsO j!!! d()))!!#rc|d|d|_d|_d|_d|_dS)Nz > step into Trrs r wdb_step_intozPyDebugger.wdb_step_intosG o&&& !!#rc|d||jd|_d|_d|_d|_dS)Nz > step out T)rC set_returnrir6r7r;rs r wdb_step_outzPyDebugger.wdb_step_outsO n%%% *+++!!#rc||jD].}||j|j|j|j/dSr)ui_clear_breakpointsr9ui_add_breakpointrr r r )rr?s rwdb_refresh_breakpointsz"PyDebugger.wdb_refresh_breakpoints sY !!###- I IB  " "29bgrw H H H H I Irc|dkr:|t|jkr"|j||dSdS)NrTF)rgr9r)rbp_indexr s rwdb_set_bp_conditionzPyDebugger.wdb_set_bp_conditionsF q==XD,G(H(HHH  ' 1 ? ? E E E4urc|js|dS|dkrd}|j|d}|d}||jks|dkrd|zdz|jkrd}|s|dd|jjd|jjD]V}||jvr2|d |zt|j|=|d |zdW|d d|jj|jjdD]V}||jvr2|d |zt|j|=|d |zdWdS|d dt|j D]+\}}|d |zt|,dS) NrrFrT Argumentsrvz LocalsGlobals) r6ui_clear_variablesr7ui_add_variablerKrMrNf_localsreprsorted f_globalsitems)r frame_indexrStoplevelvarnamevalues rrjz PyDebugger.wdb_refresh_variabless5!   # # % % % F !  K";/2 !!! $. . .;??r+~VWGW[_[oGoGoH B  b 1 1 1 <34MU\5M4MN = =en,,((enW>U9V9VWWWW((<<<<  2 . . . <3EL4L4M4MN = =en,,((enW>U9V9VWWWW((<<<<  = =  B / / /"()>)>)@)@"A"A B B$$VG^T%[[AAAA B Brc|||}|rD|j|||dSt |||}|j||||j |j |j |j dS)NFT) r@r9removerrrappendrrrr r r r>s rwdb_toggle_breakpointz PyDebugger.wdb_toggle_breakpoint>s  " "4 . .   ' . .r 2 2 2 MMOOO  ( ( * * *5%dD$77B  ' . .r 2 2 2 KKMMM  " "29bgrw H H H4rc2|jD]z}|j|kr|j|ks|dkr[|j|krP|jr9||xj|z c_|j|xj|z c_{|dS)Nr)r9r r rrrr)rr r deltabps rwdb_update_breakpointz PyDebugger.wdb_update_breakpointMs- % %Bw$w~~%!))49%MMOOOGGu$GGKKMMMMGGu$GG $$&&&&&rctj||d}t t jD]}t|dd}|rtj|d}||krb| d|z tj |n1#| d|zddl }|j xYwdSdS)Nr__file__zReloading module %s...zThere was an error reloading %s)ospathsplitextrlistr}modulesvaluesrlrCimpreloadry print_exc)rr rmodulempathrys rwdb_reload_module_for_filez%PyDebugger.wdb_reload_module_for_file]s w T 2 233A63;--//00  FFJ55E ((//2D==MM":4"?@@@ 6**** &G$&NOOO((((+ +---EE  s =C.DcFt|j|dSr)wbpdbrCr4)rmsgs rrCzPyDebugger.ui_printrs tw$$$$$rcDt|jdSr)rrr4rs rrzPyDebugger.ui_clear_breakpointsvs ""47+++++rcLt|j||||dSr)rrr4)rrr r r s rrzPyDebugger.ui_add_breakpointzs& tTBBBBBrcFt|j|||Sr)rrkr4)rror rns rrkzPyDebugger.ui_program_stopped~s''4HHHrcDt|jdSr)rrIr4rs rrIzPyDebugger.ui_clear_stacks TW%%%%%rcJt|j|||dSr)rrPr4)rrUr r s rrPzPyDebugger.ui_add_stacks$ 47HdD99999rcDt|jdSr)rrr4rs rrzPyDebugger.ui_clear_variabless   )))))rcHt|j||dSr)rrr4)rvariablers rrzPyDebugger.ui_add_variables" dgx77777rcdS)zThis method is called from dispatch_call() when there is the possibility that a break might be necessary anywhere inside the called function.Nr.)rrS argument_lists r user_callzPyDebugger.user_call  rc<|jrd|_t}n|jrt}n||r|dt }n|||jvrD|j |j||vr|dt }n/tj }||j z tkrdSt}d|_|||tj |_ dS)z_This method is called from dispatch_line() when either stop_here() or break_here() yields True.FzBreakpoint hit N)r<STOP_REASON_PAUSEr;STOP_REASON_STEP break_hererCSTOP_REASON_BREAKPOINTrQbreaksretimer:HEARTBEAT_INTERVALrmrY)rrSrnrs r user_linezPyDebugger.user_lines   +!&D &FF   +%FF __U # # + MM, - - -+FF   ' '4; 6 65>T[Y]YlYlmrYsYsMt;t;t MM, - - -+FF A4&&);;;*F    ///"ikkrcdS)zJThis method is called from dispatch_return() when stop_here() yields True.Nr.)rrS return_values r user_returnzPyDebugger.user_returnrrcdS)zMThis method is called from dispatch_exception() when stop_here() yields True.Nr.)rrSr~s ruser_exceptionzPyDebugger.user_exceptions  rcdS)zCHandle how a breakpoint must be removed when it is a temporary one.Nr.)r bp_numbers rdo_clearzPyDebugger.do_clearrrN)F)%r+r,r-rr@rErWr]rQrYrrrrrrrrrrrjrrrrCrrrkrIrPrrrrrrrr.rrr0r0[s1 # # #GGGJJJ,EEEttt<'''B$$$$$$""" !!!!         III !B!B!BH    ' ' ' *%%%,,,CCCIII&&&:::***888    ***<           rr0)rr}r2rytempfilerrrrr[rmrrrr3r0r.rrrs,  $ U U U U U U U UFj j j j j j j j j j r