
    eJ                         d dl Z d dlZd dl 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e j                        Z G d	 d
      Z G d de	      Z G d d      Zedk(  rd dlmZ  eddd       yy)    N)*)Frame	Scrollbar)macosx)ScrolledList)ListedToplevelc                   *    e Zd Zd Zd Zd Zd Zd Zy)Idbc                 P    || _         t        j                  j                  |        y N)guibdbBdb__init__)selfr   s     "lib/python3.12/idlelib/debugger.pyr   zIdb.__init__   s        c                     | j                  |      r| j                          y | j                  |      }	 | j                  j	                  ||       y # t
        $ r Y y w xY wr   )in_rpc_codeset_step_Idb__frame2messager   interactionTclError)r   framemessages      r   	user_linezIdb.user_line   sW    E"MMO&&u-	HH  %0 		s   A 	AAc                     | j                  |      r| j                          y | j                  |      }| j                  j	                  |||       y r   )r   r   r   r   r   )r   r   infor   s       r   user_exceptionzIdb.user_exception   sB    E"MMO&&u-WeT2r   c                     |j                   j                  j                  d      ry|j                  }|j                   j                  }d|v rd|v ry| j	                  |      S )Nzrpc.pyTidlelibdebuggerF)f_codeco_filenamecountf_backr   )r   r   
prev_frame	prev_names       r   r   zIdb.in_rpc_code#   s\    <<##))(3J"))55II%*	*A ##J//r   c                     |j                   }|j                  }|j                  }t        j                  j                  |      }| d| }|j                  dk7  r| d|j                   d}|S )N:?: z())r#   r$   f_linenoospathbasenameco_name)r   r   codefilenamelinenor0   r   s          r   __frame2messagezIdb.__frame2message/   sj    ||##77##H-Jax(<<3 	DLL>4Gr   N)__name__
__module____qualname__r   r   r   r   r    r   r   r
   r
      s    3
0r   r
   c                       e Zd ZdxZxZxZZddZd ZddZ	d Z
ddZd Zd Zd	 Zd
 Zd Zd Zd Zd ZdZd Zd Zd ZdZdZd Zd ZddZd Zd Zd Zd Z y)DebuggerNc                     |t        |       }|| _        || _        d | _        | j	                          d| _        d| _        y Nr   )r
   pyshellidbr   make_guiinteractingnesting_level)r   r>   r?   s      r   r   zDebugger.__init__>   s>    ;d)C
r   c                       j                   dkD  r1 j                           j                  j                  d fd       y 	 d _          j
                  j                   d _        S # d _        w xY w)Nr   d   c                  "     j                     S r   )run)argsr   s   r   <lambda>zDebugger.run.<locals>.<lambda>h   s    4 r      )rB   
abort_looprootafterrA   r?   rF   )r   rG   s   ``r   rF   zDebugger.runH   sc    < !OOIIOOC!89	! D488<<& DqDs   A+ +	A4c                 T   	 | j                          | j                  r| j                  j	                          y | j
                  r!| j
                  j                          d | _        | j                  j                          | j                  j                          y # t        $ r Y w xY wr   )
quit	ExceptionrA   topbellstackviewercloser>   close_debuggerdestroyr   events     r   rS   zDebugger.closep   s    	IIK HHMMO""$d&6 	##%  		s   B 	B'&B'c                 J   | j                   }|j                  | _        |j                  x| _        }t        |      x| _        }| j                  j                  d       | j                  j                  d       |j                  d| j                         | j                  j                  d| j                         t        |      x| _        }| j                  j                  d       g x| _        }t        |d| j                        x| _        }|j#                  |       t        |d	| j$                        x| _        }|j#                  |       t        |d
| j(                        x| _        }|j#                  |       t        |d| j,                        x| _        }|j#                  |       t        |d| j0                        x| _        }|j#                  |       |D ]&  }|j3                  d       |j                  d       ( t        |      x| _        }| j4                  j                  d       | j6                  s5t9        |      | j:                  _        | j6                  j=                  d       t?        |d| j@                  | j6                        | _!        | jB                  jE                  dd       | jF                  st9        |      | j:                  _#        t?        |d| jH                  | jF                        | _%        | jJ                  jE                  dd       | jL                  s5t9        |      | j:                  _&        | jL                  j=                  d       t?        |d| jN                  | jL                        | _(        | jP                  jE                  dd       | jR                  st9        |      | j:                  _)        t?        |d| jT                  | jR                        | _+        | jV                  jE                  dd       tY        |d      | _-        | jZ                  j                  d       tY        |d      | _.        | j\                  j                  dd       | j\                  j_                  d      | _0        t        |d      | _1        | jb                  j                  dd       t        |      | _2        | jd                  j                  dd       t        |d      | _3        | jf                  j                  dd       | j6                  ji                         r| jA                          | jL                  ji                         r| jO                          | jR                  ji                         r| jU                          y y )NzDebug ControlDebugWM_DELETE_WINDOWz<Escape>w)anchorGo)textcommandStepOverOutQuitdisabledstateleft)siderI   Stack)r^   r_   variabler   rowcolumnSourceLocalsGlobalsx)r\   fill
background)heightbothexpandrr   )5r>   flistrK   r   rP   wm_titlewm_iconnamewm_protocolrS   bindr   bframepackbuttonsButtoncontbcontappendstepbstepnextbnextretbretrN   	configurecframevstack
BooleanVar	__class__setCheckbutton
show_stackbstackgridvsourceshow_sourcebsourcevlocalsshow_localsblocalsvglobalsshow_globalsbglobalsLabelstatuserrorcgeterrorbgfstackflocalsfglobalsget)r   r>   rK   rP   r}   blbr   s           r   r@   zDebugger.make_gui   s-   ,,]]
"<<'	D'--3/*W%*DJJ7j$**-$Sz)f$rT499EE
Q
		!VTYYGG
Q
		!VTYYGG
Q
		!vE488DD	A
		!vFDIIFF	A
		! 	 AKKjK)FFF	   %V},ff%{{$.sODNN!KKOOA!&$//DKKIQq)||%/_DNN""64#3#3dllLa*||%/_DNN"LLQ"64#3#3dllLa*}}&0oDNN##FD$5$5Oq+C,$3s+


s-zz|4C*/Sz0c!,!&1;;??OO<<== r   c                 0   || _         | j                  j                  |       |r |\  }}}	 |j                  }|	 | d| }d}nd}d }| j                  }| j                  j                  ||       | j                  }	|	r;| j                  j                  | j                   |      \  }
}|	j                  |
|       | j                  d       | j                  j                         r| j                          | j                   D ]  }|j                  d	        | j"                  j%                          | xj&                  dz  c_        | j(                  j*                  j-                  d
d       | xj&                  dz  c_        | j                   D ]  }|j                  d	        | j                  j                  d       | j                  j                  d| j                         d | _         y # t        $ r dt        |      z  }Y w xY w#  Y xY w)Nr^   z%sr,   yellow )r^   rs   rI   normalre   vwait::idledebugwaitrd   )r   r   r   r6   AttributeErrorstrr   r   rR   r?   	get_stack
load_stackshow_variablesr   r   sync_source_liner   rP   wakeuprB   rK   tkcall)r   r   r   r   typevaluetbm1bgsvstackir   s                r   r   zDebugger.interaction   s   
7+"OD%&]]  4r%)B BBBB

"4xx))$**b9HE1MM%#A<<!!# 	(AKKhK'	( 	 	a		'#45a 	*AKKjK)	*2&

">
Q " &CI%&s   G2 H 2HHHc                     | j                   }|sy | j                  |      \  }}|d d |dd  z   dk7  r=t        j                  j	                  |      r| j
                  j                  ||       y y y )NrI   z<>)r   _Debugger__frame2fileliner.   r/   existsrx   gotofileline)r   r   r3   r4   s       r   r   zDebugger.sync_source_line   sk    

007&BQ<(23-'4/BGGNN84LJJ##Hf5 5M/r   c                 R    |j                   }|j                  }|j                  }||fS r   )r#   r$   r-   )r   r   r2   r3   r4   s        r   __frame2filelinezDebugger.__frame2fileline  s*    ||##r   c                 X    | j                   j                          | j                          y r   )r?   set_continuerJ   r   s    r   r   zDebugger.cont  s    r   c                 X    | j                   j                          | j                          y r   )r?   r   rJ   r   s    r   r   zDebugger.step      r   c                 n    | j                   j                  | j                         | j                          y r   )r?   set_nextr   rJ   r   s    r   r   zDebugger.next  s"    $**%r   c                 n    | j                   j                  | j                         | j                          y r   )r?   
set_returnr   rJ   r   s    r   r   zDebugger.ret  s"    DJJ'r   c                 X    | j                   j                          | j                          y r   )r?   set_quitrJ   r   s    r   rN   zDebugger.quit  r   r   c                 R    | j                   j                  j                  ddd       y )Nr   r   1)rK   r   r   r   s    r   rJ   zDebugger.abort_loop   s    		%!2C8r   c                    | j                   s| j                  j                         rqt        | j                  | j
                  |       x| _         }| j                  r<| j                  j                  | j                  d       \  }}|j                  ||       y y | j                   }|r1| j                  j                         sd | _         |j                          d| j                  d<   y )NrI   rt   )rR   r   r   StackViewerr   rx   r   r?   r   r   rS   )r   r   r   r   s       r   r   zDebugger.show_stack%  s    DKKOO$5$/TZZ$NNDrzz88--djj$?qeQ'  !!B$++//+#' 
$%DKK!r   c                 Z    | j                   j                         r| j                          y y r   )r   r   r   r   s    r   r   zDebugger.show_source2  s#    <<!!# r   c                 8    |d   | _         | j                          y r=   )r   r   )r   	stackitems     r   
show_framezDebugger.show_frame6  s    q\
r   c                     | j                   }| j                  j                         r|sDt        | j                  d      | _         n(|r&d | _         |j                          d| j                  d<   | j                          y )Nro   rI   rt   )localsviewerr   r   NamespaceViewerr   rS   r   )r   lvs     r   r   zDebugger.show_locals=  sa    <<$3DLL($K!$(!
)*X&r   c                     | j                   }| j                  j                         r|sDt        | j                  d      | _         n(|r&d | _         |j                          d| j                  d<   | j                          y )Nrp   rI   rt   )globalsviewerr   r   r   r   rS   r   )r   gvs     r   r   zDebugger.show_globalsI  sa    ==%4T]]I%N"%)"
*+h'r   c                 l   | j                   }| j                  }| j                  }|sd x}}n"|j                  }|j                  }|r|r||u rd }|r1|j                  ||| j                  j                  j                         |r2|j                  ||| j                  j                  j                         y y r   )	r   r   r   f_locals	f_globals	load_dictr>   interprpcclt)r   forcer   r   r   ldictgdicts          r   r   zDebugger.show_variablesU  s    

  EENNEOOEbUe^LLt||':':'A'ABLLt||':':'A'AB r   c                 <    | j                   j                  ||       y r   )r?   	set_breakr   r3   r4   s      r   set_breakpoint_herezDebugger.set_breakpoint_heree  s    8V,r   c                 <    | j                   j                  ||       y r   )r?   clear_breakr   s      r   clear_breakpoint_herezDebugger.clear_breakpoint_hereh  s    Xv.r   c                 :    | j                   j                  |       y r   )r?   clear_all_file_breaks)r   r3   s     r   clear_file_breakszDebugger.clear_file_breaksk  s    &&x0r   c                     | j                   j                  j                  D ]<  }|j                  j                  }	 |j
                  D ]  }| j                  ||        > y# t        $ r Y Kw xY w)z=Load PyShellEditorWindow breakpoints into subprocess debuggerN)r>   rx   inversedictior3   breakpointsr   r   )r   editwinr3   r4   s       r   load_breakpointszDebugger.load_breakpointsn  sn    ||))55 	Gzz**H%11 ?F,,Xv>?	
 " s   #A!!	A-,A-r   )r   )!r6   r7   r8   r   r   r   r   r   rF   rS   r@   r   r   r   r   r   r   r   rN   rJ   rR   r   r   r   r   r   r   r   r   r   r   r   r   r9   r   r   r;   r;   :   s    ,00F0W0w&!P"I V0d6 9 K&$ LM

C -/1r   r;   c                   D    e Zd Zd ZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zy)r   c                     t        j                         rt        j                  | |       nt        j                  | |d       || _        || _        g | _        y )NP   )width)r   isAquaTkr   r   rx   r   r   )r   masterrx   r   s       r   r   zStackViewer.__init__z  sE    ?? !!$/!!$b9

r   Nc                    || _         | j                          t        t        |            D ]  }||   \  }}	 |j                  d   }|j
                  }|j                  }|j                  }	dd l}
|
j                  ||      }|j                         }|	dv r	d|||fz  }n	d||	||fz  }||k(  rd|z   }| j                  |        || j                  |       y y #  d}Y xY w)Nr6   r+   r   )r+   r   Nz%s, line %d: %sz%s.%s(), line %d: %sz> )r   clearrangelenr   r#   r$   r1   	linecachegetlinestripr   select)r   r   indexr   r   r4   modnamer2   r3   funcnamer  
sourcelineitems                r   r   zStackViewer.load_stack  s    


s5z" 	A!!HME6//*5 <<D''H||H"**8V<J#))+J?*(GVZ+HH-(171E EEzd{KK'	( KK !s   CCc                 H    | j                   rt        j                  | |      S yoverride base methodN)r   r   popup_eventrV   s     r   r  zStackViewer.popup_event  s!    ::++D%88 r   c                     | j                   }|j                  d| j                         |j                  d| j                         y)r  zGo to source line)labelr_   zShow stack frameN)menuadd_commandgoto_source_lineshow_stack_frame)r   r  s     r   	fill_menuzStackViewer.fill_menu  sI    yy2!%!6!6 	 	81!%!6!6 	 	8r   c                     d|cxk  rt        | j                        k  r,n y| j                  j                  | j                  |          yy)r  r   N)r  r   r   r   r   r  s     r   	on_selectzStackViewer.on_select  s7    'DJJ'HH

5 12 (r   c                 &    | j                  |       yr  )r   r  s     r   	on_doublezStackViewer.on_double  s    r   c                 \    | j                   j                  d      }| j                  |       y )Nactive)listboxr  r   r  s     r   r  zStackViewer.goto_source_line  s$    ""8,r   c                     | j                   j                  d      }d|cxk  rt        | j                        k  r,n y | j                  j                  | j                  |          y y )Nr  r   )r  r  r  r   r   r   r  s     r   r  zStackViewer.show_stack_frame  sK    ""8,'DJJ'HH

5 12 (r   c                 8   d|cxk  rt        | j                        k  sy  y | j                  |   \  }}|j                  }|j                  }t        j
                  j                  |      r0| j                  j                  |      }|r|j                  |       y y y r=   )
r  r   r#   r$   r.   r/   isfilerx   opengotoline)r   r  r   r4   r2   r3   edits          r   r   zStackViewer.show_source  s    U,S_, -

5)v||##77>>(#::??8,Df%  $r   r   )r6   r7   r8   r   r   r  r  r  r  r  r  r   r9   r   r   r   r   x  s/    
49
83
  3
	&r   r   c                   &    e Zd ZddZdZddZd Zy)r   Nc           
         d}d}|rdt        |      z  }|| _        || _        dd l}|j	                         | _        d| j
                  _        d| j
                  _        t        |      x| _	        }| j                  j                  dd       t        ||dd	
      | _        | j                  j                  d       t        |d      x| _        }|j                  dd       t        |t!        dt#        d|            dd||f      x| _        }	|	j                  ddd       |	j&                  |d<   |j(                  |	d<   t        |	      x| _        }
|	j-                  dd|
d      | _        | j1                  |       y )Nr   (      <   rI   ru   rv      groove)r^   borderwidthreliefrq   )rr   vbar)namerighty)rh   rr   ,  )rt   scrollregionrg   )rh   rr   rw   r_   yscrollcommandnw)windowr\   )r  r   titlereprlibReprrepr	maxstringmaxotherr   r   r~   r   r  r   r/  Canvasminmaxcanvasyviewr   subframecreate_windowsfidr   )r   r   r8  dictr   rt   r9  r   r/  rA  rC  s              r   r   zNamespaceViewer.__init__  sW   D	\F
LLN	 				"6]*
U

qv.5u!HM


S!$U88	D		wS	)%e-0c"fo-F45q%3H J 	Jf 	fQ7 ,,Y#'88 #(=0((Aht(L	tr   r   c                 x   || j                   u r|sy | j                  }| j                  }t        |j                  j                               D ]  }|j                           d | _         |s!t        |d      }|j                  dd       n|j                         }t        |      }	d}
|	D ]  }||   }| j                  j                  |      }|r|dd }t        ||      }|j                  |
dd       t        |dd	      }|j                  d|       |j                  |
dd       |
dz   }
 || _         |j                          |j                         }|j!                         }| j"                  }dd||f| j"                  d
<   |dkD  rd|d<   |j%                  d       y ||d<   |j%                  d       y )NNoner   r   rk   rI   r   r6  )rl   rm   sticky)r   r-  r4  r3  rt   )rw   )rF  rC  r   listchildrenvaluesrU   r   r   keyssortedr;  Entryinsertupdate_idletaskswinfo_reqwidthwinfo_reqheightrA  r~   )r   rF  r   
rpc_clientrC  r   cl	keys_listnamesrl   r0  r   svaluer   rt   rA  s                    r   r   zNamespaceViewer.load_dict  s   499U==

h''..01 	AIIK		hV,AFFqF# 		I9%EC T
. #Ab\F(.3q6(!;F#3q6!e 	!!#'')))+'(!UF&;N#C<"F8JJaJ %F8JJaJ r   c                 8    | j                   j                          y r   )r   rU   r   s    r   rS   zNamespaceViewer.close   s    

r   r   )r   N)r6   r7   r8   r   rF  r   rS   r9   r   r   r   r     s    6 D4!lr   r   __main__)mainzidlelib.idle_test.test_debuggerr+  F)	verbosityexit)r   r.   tkintertkinter.ttkr   r   r!   r   idlelib.scrolledlistr   idlelib.windowr   r   r
   r;   r   r   r6   unittestr\  r9   r   r   <module>rd     ss    
 	  (  - )+#'' +\| ||	P&, P&fV Vp z	*aeD r   