3 Õì2a™Jã@s¬ddlZddlZddlTddlmZddlmZddlmZddl m Z Gdd„dej ƒZ Gd d „d ƒZ Gd d „d eƒZGd d„dƒZedkr¨ddlmZedddd�dS)éN)Ú*)Ú Scrollbar)Úmacosx)Ú ScrolledList)ÚListedToplevelc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚIdbcCs||_tjj|ƒdS)N)ÚguiÚbdbÚBdbÚ__init__)Úselfr©r ú-/opt/alt/python36/lib64/python3.6/debugger.pyr sz Idb.__init__c CsL|j|ƒr|jƒdS|j|ƒ}y|jj||ƒWntk rFYnXdS)N)Ú in_rpc_codeÚset_stepÚ_Idb__frame2messagerÚ interactionZTclError)r ÚframeÚmessager r rÚ user_lines  z Idb.user_linecCs4|j|ƒr|jƒdS|j|ƒ}|jj|||ƒdS)N)rrrrr)r rÚinforr r rÚuser_exceptions   zIdb.user_exceptioncCsB|jjjdƒrdS|j}|jj}d|kr4d|kr4dS|j|ƒSdS)Nzrpc.pyTÚidlelibZdebuggerF)Úf_codeÚ co_filenameÚcountÚf_backr)r rZ prev_frameZ prev_namer r rr#szIdb.in_rpc_codecCsF|j}|j}|j}tjj|ƒ}d||f}|jdkrBd||jf}|S)Nz%s:%sú?z%s: %s())rrÚf_linenoÚosÚpathÚbasenameÚco_name)r rÚcodeÚfilenameÚlinenor!rr r rZ__frame2message/s   zIdb.__frame2messageN)Ú__name__Ú __module__Ú __qualname__r rrrrr r r rr s   rc@sèeZdZdZZZZd1dd„Zdd„Zd2dd„Z dd „Z d3d d „Z d d „Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdZdd„Zdd„Zd d!„ZdZdZd"d#„Zd$d%„Zd4d'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Z dS)5ÚDebuggerNcCs:|dkrt|ƒ}||_||_d|_|jƒd|_d|_dS)Nr)rÚpyshellÚidbrÚmake_guiÚ interactingÚ nesting_level)r r*r+r r rr >szDebugger.__init__c sNˆjdkr.ˆjƒˆjjd‡‡fdd„ƒdSzdˆ_ˆjjˆŽSdˆ_XdS)Nrédcs ˆjˆŽS)N)Úrunr )Úargsr r rÚhszDebugger.run..é)r.Ú abort_loopÚrootÚafterr-r+r0)r r1r )r1r rr0Hs  z Debugger.runc Csdy |jƒWntk r YnX|jr6|jjƒdS|jrL|jjƒd|_|jjƒ|jj ƒdS)N) ÚquitÚ Exceptionr-ÚtopZbellÚ stackviewerÚcloser*Zclose_debuggerÚdestroy)r Úeventr r rr;ps    zDebugger.closecCsF|j}|j|_|j|_}t|ƒ|_}|jjdƒ|jjdƒ|jd|jƒ|jj d|jƒt |ƒ|_ }|j j dd�g|_ }t|d|jd�|_}|j|ƒt|d |jd�|_}|j|ƒt|d |jd�|_}|j|ƒt|d |jd�|_}|j|ƒt|d |jd�|_}|j|ƒx&|D]}|jd d�|j dd��q*Wt |ƒ|_}|jj dd�|j�sˆt|ƒ|j_|jjdƒt|d|j |jd�|_!|j!j"ddd�|j#�sÂt|ƒ|j_#t|d|j$|j#d�|_%|j%j"ddd�|j&�st|ƒ|j_&|j&jdƒt|d|j'|j&d�|_(|j(j"ddd�|j)�sBt|ƒ|j_)t|d|j*|j)d�|_+|j+j"ddd�t,|dd�|_-|j-j dd�t,|dd�|_.|j.j ddd�|j.j/dƒ|_0t |dd�|_1|j1j ddd�t |ƒ|_2|j2j ddd�t |dd�|_3|j3j ddd�|jj4ƒ�r|j ƒ|j&j4ƒ�r.|j'ƒ|j)j4ƒ�rB|j*ƒdS)Nz Debug ControlZDebugZWM_DELETE_WINDOWzÚw)ÚanchorZGo)ÚtextÚcommandZStepZOverZOutZQuitÚdisabled)ÚstateÚleft)Úsider3ZStack)r@rAÚvariabler)ÚrowÚcolumnZSourceÚLocalsÚGlobalsÚx)r?ÚfillÚ background)ÚheightÚboth)ÚexpandrL)5r*Úflistr5rr9Zwm_titleZ wm_iconnameZ wm_protocolr;ZbindÚFrameÚbframeÚpackÚbuttonsZButtonÚcontZbcontÚappendÚstepZbstepÚnextZbnextÚretZbretr7Ú configureÚcframeÚvstackZ BooleanVarÚ __class__ÚsetZ CheckbuttonÚ show_stackZbstackÚgridÚvsourceÚ show_sourceZbsourceÚvlocalsÚ show_localsZblocalsÚvglobalsÚ show_globalsZbglobalsÚLabelÚstatusÚerrorZcgetÚerrorbgÚfstackÚflocalsÚfglobalsÚget)r r*r5r9rSZblÚbr\r r rr,�s‚                     zDebugger.make_guic Cs|||_|jj|d�|r~|\}}}y |j}Wn tk rLdt|ƒ}YnX|dk rxyd|t|ƒf}Wn YnXd}nd}d}|j}|jj||d�|j} | rÆ|j j |j|ƒ\} } | j | | ƒ|j dƒ|j jƒrâ|jƒx|jD]} | jdd �qêW|jjƒ|jd7_|jjjd d ƒ|jd8_x|jD]} | jd d ��qéÿÿÿÿ)rÚ_Debugger__frame2filelinerr ÚexistsrQZ gotofileline)r rr$r%r r rrwýs (zDebugger.sync_source_linecCs|j}|j}|j}||fS)N)rrr)r rr#r$r%r r rZ__frame2filelineszDebugger.__frame2filelinecCs|jjƒ|jƒdS)N)r+Z set_continuer4)r r r rrV s z Debugger.contcCs|jjƒ|jƒdS)N)r+rr4)r r r rrXs z Debugger.stepcCs|jj|jƒ|jƒdS)N)r+Zset_nextrr4)r r r rrYsz Debugger.nextcCs|jj|jƒ|jƒdS)N)r+Z set_returnrr4)r r r rrZsz Debugger.retcCs|jjƒ|jƒdS)N)r+Zset_quitr4)r r r rr7s z Debugger.quitcCs|jjjdddƒdS)Nr_z::idledebugwaitÚ1)r5ryrz)r r r rr4szDebugger.abort_loopcCs‚|j rP|jjƒrPt|j|j|ƒ|_}|jr~|jj|jdƒ\}}|j ||ƒn.|j}|rt|jjƒ rtd|_|j ƒd|jd<dS)Nr3rN) r:r]roÚ StackViewerrlrQrr+rtrur;)r r€r�r‚r r rr`$szDebugger.show_stackcCs|jjƒr|jƒdS)N)rbrorw)r r r rrc1s zDebugger.show_sourcecCs|d|_|jƒdS)Nr)rrv)r Z stackitemr r rÚ show_frame5s zDebugger.show_framecCsL|j}|jjƒr$|s@t|jdƒ|_n|r@d|_|jƒd|jd<|jƒdS)NrIr3rN)Ú localsviewerrdroÚNamespaceViewerrmr;rv)r Úlvr r rre<s  zDebugger.show_localscCsL|j}|jjƒr$|s@t|jdƒ|_n|r@d|_|jƒd|jd<|jƒdS)NrJr3rN)Ú globalsviewerrfrorŠrnr;rv)r Úgvr r rrgHs  zDebugger.show_globalsrcCst|j}|j}|j}|s d}}n |j}|j}|r@|r@||kr@d}|rX|j|||jjjƒ|rp|j|||jjjƒdS)N) r‰rŒrÚf_localsÚ f_globalsÚ load_dictr*ZinterpZrpcclt)r Úforcer‹r�rZldictZgdictr r rrvTs zDebugger.show_variablescCs|jj||ƒdS)N)r+Z set_break)r r$r%r r rÚset_breakpoint_heredszDebugger.set_breakpoint_herecCs|jj||ƒdS)N)r+Z clear_break)r r$r%r r rÚclear_breakpoint_heregszDebugger.clear_breakpoint_herecCs|jj|ƒdS)N)r+Zclear_all_file_breaks)r r$r r rÚclear_file_breaksjszDebugger.clear_file_breaksc CsXxR|jjjD]D}|jj}y x|jD]}|j||ƒq"WWq tk rNw Yq Xq WdS)N)r*rQZ inversedictÚior$Z breakpointsr’rr)r Zeditwinr$r%r r rÚload_breakpointsms zDebugger.load_breakpoints)N)N)N)r)!r&r'r(r]rbrdrfr r0r;r,rrwr„rVrXrYrZr7r4r:r`rcrˆr‰rŒrergrvr’r“r”r–r r r rr):s6 ( K 1   r)c@sVeZdZdd„Zddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dS)r‡cCs<tjƒrtj||ƒntj||dd�||_||_g|_dS)NéP)Úwidth)rZisAquaTkrr rQrr�)r ÚmasterrQrr r rr ys zStackViewer.__init__Nc CsÖ||_|jƒx°tt|ƒƒD] }||\}}y|jd}Wnd}YnX|j}|j}|j} ddl} | j ||ƒ} | j ƒ} | dkr’d||| f} nd|| || f} ||kr²d| } |j | ƒqW|dk rÒ|j |ƒdS) Nr&rrrqz%s, line %d: %sz%s.%s(), line %d: %sz> )rrqN) r�ÚclearÚrangeÚlenr�rrr"Ú linecacheÚgetlineÚstriprWZselect) r r�Úindexr‚rr%Úmodnamer#r$Úfuncnamer�Z sourcelineÚitemr r rru…s.    zStackViewer.load_stackcCs|jrtj||ƒSdS)N)r�rÚ popup_event)r r=r r rr¤ŸszStackViewer.popup_eventcCs*|j}|jd|jd�|jd|jd�dS)NzGo to source line)ÚlabelrAzShow stack frame)ÚmenuZ add_commandÚgoto_source_lineÚshow_stack_frame)r r¦r r rÚ fill_menu¤s  zStackViewer.fill_menucCs4d|kot|jƒknr0|jj|j|ƒdS)Nr)rœr�rrˆ)r r r r rÚ on_select¬szStackViewer.on_selectcCs|j|ƒdS)N)rc)r r r r rÚ on_double±szStackViewer.on_doublecCs|jjdƒ}|j|ƒdS)NÚactive)Úlistboxr rc)r r r r rr§µs zStackViewer.goto_source_linecCs@|jjdƒ}d|ko$t|jƒknr<|jj|j|ƒdS)Nr¬r)r­r rœr�rrˆ)r r r r rr¨¹s zStackViewer.show_stack_framecCsfd|kot|jƒkns"dS|j|\}}|j}|j}tjj|ƒrb|jj|ƒ}|rb|j |ƒdS)Nr) rœr�rrrr ÚisfilerQÚopenZgotoline)r r rr%r#r$Zeditr r rrc¾s  zStackViewer.show_source)N) r&r'r(r rur¤r©rªr«r§r¨rcr r r rr‡ws r‡c@s,eZdZd dd„Zd Zd dd„Zdd „ZdS) rŠNc Cs d}d}|rdt|ƒ}||_||_ddl}|jƒ|_d|j_d|j_t|ƒ|_ }|j j ddd�t ||dd d �|_ |j j d d �t |d d�|_}|j ddd�t|tdtd|ƒƒdd||fd�|_} | j dddd�| j|d<|j| d<t| ƒ|_} | jdd| dd�|_|j|ƒdS)Nré(éé<r3rO)rPrLéZgroove)r@Ú borderwidthZreliefrK)rLÚvbar)ÚnameÚrightÚy)rErLi,)rNÚ scrollregionrD)rErLrPrAZyscrollcommandÚnw)Zwindowr?)rœr™ÚtitleÚreprlibÚReprÚreprÚ maxstringÚmaxotherrRrrTrhr¥rrµZCanvasÚminÚmaxÚcanvasZyviewr_ÚsubframeZ create_windowZsfidr�) r r™r»Údictr˜rNr¼rrµrÃrÄr r rr Ìs2    zNamespaceViewer.__init__r3rcCsh||jkr| rdS|j}|j}xt|jjƒƒD] }|jƒq0Wd|_|sft|dd�}|jddd�n”|j ƒ}t |ƒ} d} x~| D]v} || } |j j | ƒ} |r¨| dd …} t|| d�}|j| ddd�t |ddd�}|j d| ƒ|j| ddd�| d} q€W||_|jƒ|jƒ}|jƒ}|j}dd||f|jd <|d k�rPd |d <|jdd �n||d <|jdd �dS)NÚNone)r@r)rGrHr3rº)rGrHZsticky)r˜r´r¹i,rN)rPrƒ)rÅrÄrÚlistZchildrenÚvaluesr<rhraÚkeysÚsortedr¾ZEntryÚinsertZupdate_idletasksZwinfo_reqwidthZwinfo_reqheightrÃrT)r rÅr‘Z rpc_clientrÄrÚcÚlZ keys_listÚnamesrGr¶r|Zsvaluer˜rNrÃr r rr�ésF          zNamespaceViewer.load_dictcCs|jjƒdS)N)rr<)r r r rr;szNamespaceViewer.close)Nrƒ)rN)r&r'r(r rÅr�r;r r r rrŠÊs  6rŠÚ__main__)Úmainzidlelib.idle_test.test_debuggerr³F)Ú verbosityÚexit)r rZtkinterZ tkinter.ttkrrrZidlelib.scrolledlistrZidlelib.windowrr rr)r‡rŠr&ZunittestrÐr r r rÚs    .?SX