a
    IfJ                     @   s   d dl Z d dlZd dlT d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ G dd de jZG d	d
 d
ZG dd de	ZG dd dZedkrd dlmZ edddd dS )    N)*)Frame	Scrollbar)macosx)ScrolledList)ListedToplevelc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Idbc                 C   s   || _ tj|  d S N)guibdbBdb__init__)selfr
    r   !lib/python3.9/idlelib/debugger.pyr      s    zIdb.__init__c                 C   sJ   |  |r|   d S | |}z| j|| W n tyD   Y n0 d S r	   )in_rpc_codeset_step_Idb__frame2messager
   interactionZTclError)r   framemessager   r   r   	user_line   s    

zIdb.user_linec                 C   s4   |  |r|   d S | |}| j||| d S r	   )r   r   r   r
   r   )r   r   infor   r   r   r   user_exception   s
    

zIdb.user_exceptionc                 C   sB   |j jdrdS |j}|j j}d|v r4d|v r4dS | |S d S )Nzrpc.pyTidlelibZdebuggerF)f_codeco_filenamecountf_backr   )r   r   Z
prev_frameZ	prev_namer   r   r   r   #   s    zIdb.in_rpc_codec                 C   sF   |j }|j}|j}tj|}d||f }|jdkrBd||jf }|S )Nz%s:%s?z%s: %s())r   r   f_linenoospathbasenameco_name)r   r   codefilenamelinenor#   r   r   r   r   Z__frame2message/   s    
zIdb.__frame2messageN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r      s
   
r   c                   @   s   e Zd Zd Z Z ZZd1ddZdd Zd2ddZ	dd	 Z
d3d
dZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdZdd Zdd Zd d! ZdZdZd"d# Zd$d% Zd4d'd(Zd)d* Zd+d, Zd-d. Zd/d0 Z dS )5DebuggerNc                 C   s:   |d u rt | }|| _|| _d | _|   d| _d| _d S Nr   )r   pyshellidbr   make_guiinteractingnesting_level)r   r-   r.   r   r   r   r   >   s    zDebugger.__init__c                    sV   j dkr.  jd fdd d S zd_jj  W d_S d_0 d S )Nr   d   c                      s
   j   S r	   )runr   argsr   r   r   <lambda>h       zDebugger.run.<locals>.<lambda>   )r1   
abort_looprootZafterr0   r.   r3   )r   r5   r   r4   r   r3   H   s    
zDebugger.runc                 C   sb   z|    W n ty   Y n0 | jr4| j  d S | jrJ| j  d | _| j  | j	  d S r	   )
quit	Exceptionr0   topZbellstackviewercloser-   Zclose_debuggerdestroyr   Zeventr   r   r   r?   p   s    

zDebugger.closec                 C   sB  | j }|j| _|j | _}t| | _}| jd | jd |d| j | j	d| j t
| | _}| jjdd g  | _}t|d| jd | _}|| t|d	| jd | _}|| t|d
| jd | _}|| t|d| jd | _}|| t|d| jd | _}|| |D ]}|jdd |jdd q(t
| | _}| jjdd | jst|| j_| jd t|d| j | jd| _!| j!j"ddd | j#st|| j_#t|d| j$| j#d| _%| j%j"ddd | j&st|| j_&| j&d t|d| j'| j&d| _(| j(j"ddd | j)s>t|| j_)t|d| j*| j)d| _+| j+j"ddd t,|dd| _-| j-jdd t,|dd| _.| j.jddd | j./d| _0t
|dd| _1| j1jddd t
|| _2| j2jddd t
|dd| _3| j3jddd | j4 r|    | j&4 r*| '  | j)4 r>| *  d S )NzDebug ControlZDebugZWM_DELETE_WINDOWz<Escape>w)anchorZGo)textcommandZStepZOverZOutZQuitdisabledstateleft)sider8   ZStack)rD   rE   Zvariabler   rowcolumnZSourceLocalsGlobalsx)rC   fill
background)heightbothexpandrQ   )5r-   flistr:   r   r=   Zwm_titleZwm_iconnameZwm_protocolr?   Zbindr   bframepackbuttonsZButtoncontZbcontappendstepZbstepnextZbnextretZbretr;   	configurecframevstackZ
BooleanVar	__class__setZCheckbutton
show_stackZbstackgridvsourceshow_sourceZbsourcevlocalsshow_localsZblocalsvglobalsshow_globalsZbglobalsLabelstatuserrorZcgeterrorbgfstackflocalsfglobalsget)r   r-   r:   r=   rX   Zblbra   r   r   r   r/      s    










zDebugger.make_guic                 C   sr  || _ | jj|d |r||\}}}z
|j}W n tyJ   dt| }Y n0 |d urvzd|t|f }W n   Y n0 d}nd}d }| j}| jj||d | j}	|	r| j	
| j |\}
}|	|
| | d | j r|   | jD ]}|jdd	 q| j  |  jd7  _| jjd
d |  jd8  _| jD ]}|jdd	 q4| jjdd | jjd| jd d | _ d S )NrD   z%sz%s: %sZyellow )rD   rR   r8   ZnormalrG   Zvwait::idledebugwaitrF   )r   rn   r`   r(   AttributeErrorstrrp   ro   r>   r.   	get_stack
load_stackshow_variablesrg   rt   sync_source_linerZ   r=   wakeupr1   r:   tkcall)r   r   r   r   typevaluetbZm1Zbgsvstackiru   r   r   r   r      sH    






zDebugger.interactionc                 C   sV   | j }|sd S | |\}}|d d |dd   dkrRtj|rR| j|| d S )Nr8   z<>)r   _Debugger__frame2fileliner!   r"   existsrW   Zgotofileline)r   r   r&   r'   r   r   r   r~      s    (zDebugger.sync_source_linec                 C   s   |j }|j}|j}||fS r	   )r   r   r    )r   r   r%   r&   r'   r   r   r   Z__frame2fileline  s    zDebugger.__frame2filelinec                 C   s   | j   |   d S r	   )r.   Zset_continuer9   r   r   r   r   r[     s    
zDebugger.contc                 C   s   | j   |   d S r	   )r.   r   r9   r   r   r   r   r]     s    
zDebugger.stepc                 C   s   | j | j |   d S r	   )r.   Zset_nextr   r9   r   r   r   r   r^     s    zDebugger.nextc                 C   s   | j | j |   d S r	   )r.   Z
set_returnr   r9   r   r   r   r   r_     s    zDebugger.retc                 C   s   | j   |   d S r	   )r.   Zset_quitr9   r   r   r   r   r;     s    
zDebugger.quitc                 C   s   | j jddd d S )Nrd   rx   1)r:   r   r   r   r   r   r   r9     s    zDebugger.abort_loopc                 C   s~   | j sN| j rNt| j| j|  | _ }| jrz| j| jd \}}|	|| n,| j }|rp| j spd | _ |
  d| jd< d S )Nr8   rS   )r>   rb   rt   StackViewerrq   rW   r   r.   r{   r|   r?   )r   r   r   r   r   r   r   re   $  s    zDebugger.show_stackc                 C   s   | j  r|   d S r	   )rg   rt   r~   r   r   r   r   rh   1  s    
zDebugger.show_sourcec                 C   s   |d | _ |   d S r,   )r   r}   )r   Z	stackitemr   r   r   
show_frame5  s    
zDebugger.show_framec                 C   sL   | j }| j r$|s@t| jd| _ n|r@d | _ |  d| jd< |   d S )NrN   r8   rS   )localsviewerri   rt   NamespaceViewerrr   r?   r}   )r   lvr   r   r   rj   <  s    

zDebugger.show_localsc                 C   sL   | j }| j r$|s@t| jd| _ n|r@d | _ |  d| jd< |   d S )NrO   r8   rS   )globalsviewerrk   rt   r   rs   r?   r}   )r   gvr   r   r   rl   H  s    

zDebugger.show_globalsr   c                 C   st   | j }| j}| j}|s d  }}n |j}|j}|r@|r@||u r@d }|rX|||| jjj |rp|||| jjj d S r	   )	r   r   r   f_locals	f_globals	load_dictr-   ZinterpZrpcclt)r   forcer   r   r   ZldictZgdictr   r   r   r}   T  s    
zDebugger.show_variablesc                 C   s   | j || d S r	   )r.   Z	set_breakr   r&   r'   r   r   r   set_breakpoint_hered  s    zDebugger.set_breakpoint_herec                 C   s   | j || d S r	   )r.   Zclear_breakr   r   r   r   clear_breakpoint_hereg  s    zDebugger.clear_breakpoint_herec                 C   s   | j | d S r	   )r.   Zclear_all_file_breaks)r   r&   r   r   r   clear_file_breaksj  s    zDebugger.clear_file_breaksc              	   C   sP   | j jjD ]@}|jj}z|jD ]}| || qW q
 tyH   Y q
Y q
0 q
dS )z=Load PyShellEditorWindow breakpoints into subprocess debuggerN)r-   rW   Zinversedictior&   Zbreakpointsr   ry   )r   Zeditwinr&   r'   r   r   r   load_breakpointsm  s    
zDebugger.load_breakpoints)N)N)N)r   )!r(   r)   r*   rb   rg   ri   rk   r   r3   r?   r/   r   r~   r   r[   r]   r^   r_   r;   r9   r>   re   rh   r   r   r   rj   rl   r}   r   r   r   r   r   r   r   r   r+   :   s6   

(
K
1
r+   c                   @   sV   e Zd Zdd ZdddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd ZdS )r   c                 C   s<   t  rt| | ntj| |dd || _|| _g | _d S )NP   )width)r   ZisAquaTkr   r   rW   r
   r   )r   masterrW   r
   r   r   r   r   y  s    zStackViewer.__init__Nc                 C   s   || _ |   tt|D ]}|| \}}z|jd }W n   d}Y n0 |j}|j}|j}	dd l}
|
	||}|
 }|	dv rd|||f }nd||	||f }||krd| }| | q|d ur| | d S )Nr(   r   r   )r   rw   Nz%s, line %d: %sz%s.%s(), line %d: %sz> )r   clearrangelenr   r   r   r$   	linecachegetlinestripr\   Zselect)r   r   indexr   r   r'   modnamer%   r&   funcnamer   Z
sourcelineitemr   r   r   r|     s0    
zStackViewer.load_stackc                 C   s   | j rt| |S dS override base methodN)r   r   popup_eventrA   r   r   r   r     s    zStackViewer.popup_eventc                 C   s*   | j }|jd| jd |jd| jd dS )r   zGo to source line)labelrE   zShow stack frameN)menuZadd_commandgoto_source_lineshow_stack_frame)r   r   r   r   r   	fill_menu  s    zStackViewer.fill_menuc                 C   s4   d|  krt | jk r0n n| j| j|  dS )r   r   N)r   r   r
   r   r   r   r   r   r   	on_select  s    zStackViewer.on_selectc                 C   s   |  | dS r   )rh   r   r   r   r   	on_double  s    zStackViewer.on_doublec                 C   s   | j d}| | d S )Nactive)listboxr   rh   r   r   r   r   r     s    zStackViewer.goto_source_linec                 C   s@   | j d}d|  kr&t| jk r<n n| j| j|  d S )Nr   r   )r   r   r   r   r
   r   r   r   r   r   r     s    zStackViewer.show_stack_framec                 C   sd   d|  krt | jk s n d S | j| \}}|j}|j}tj|r`| j|}|r`|	| d S r,   )
r   r   r   r   r!   r"   isfilerW   openZgotoline)r   r   r   r'   r%   r&   Zeditr   r   r   rh     s    zStackViewer.show_source)N)r(   r)   r*   r   r|   r   r   r   r   r   r   rh   r   r   r   r   r   w  s   
r   c                   @   s,   e Zd Zd
ddZdZdddZdd	 ZdS )r   Nc                 C   s   d}d}|rdt | }|| _|| _dd l}| | _d| j_d| j_t| | _	}| j	j
ddd t||dd	d
| _| jj
dd t|dd | _}|j
ddd t|tdtd|dd||fd | _}	|	j
dddd |	j|d< |j|	d< t|	 | _}
|	jdd|
dd| _| | d S )Nr   (      <   r8   rT   rU      Zgroove)rD   borderwidthZreliefrP   )rQ   vbar)namerighty)rJ   rQ   ,  )rS   scrollregionrI   )rJ   rQ   rV   rE   Zyscrollcommandnw)ZwindowrC   )r   r   titlereprlibReprrepr	maxstringmaxotherr   r   rY   rm   r   r   r   ZCanvasminmaxcanvasZyviewrd   subframeZcreate_windowZsfidr   )r   r   r   dictr   rS   r   r   r   r   r   r   r   r   r     s4    



zNamespaceViewer.__init__r   r   c                 C   s^  || j u r|sd S | j}| j}t|j D ]}|  q,d | _ |s`t|dd}|jddd n|	 }t
|}	d}
|	D ]v}|| }| j|}|r|dd }t||d}|j|
ddd t|ddd	}|d| |j|
ddd |
d }
qx|| _ |  | }| }| j}dd||f| jd
< |dkrFd|d< |jdd n||d< |jdd d S )NNonerv   r   rK   r8   r   r   )rL   rM   Zsticky)r   r   r   r   rS   )rV   )r   r   r   listZchildrenvaluesr@   rm   rf   keyssortedr   ZEntryinsertZupdate_idletasksZwinfo_reqwidthZwinfo_reqheightr   rY   )r   r   r   Z
rpc_clientr   r   clZ	keys_listnamesrL   r   r   Zsvaluer   rS   r   r   r   r   r     sF    


zNamespaceViewer.load_dictc                 C   s   | j   d S r	   )r   r@   r   r   r   r   r?     s    zNamespaceViewer.close)N)r   N)r(   r)   r*   r   r   r   r?   r   r   r   r   r     s   

6r   __main__)mainzidlelib.idle_test.test_debuggerr   F)	verbosityexit)r   r!   ZtkinterZtkinter.ttkr   r   r   r   Zidlelib.scrolledlistr   Zidlelib.windowr   r   r   r+   r   r   r(   Zunittestr   r   r   r   r   <module>   s   .  ?SX