???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \              "   @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZG dd deZdddddd	d
ddg	Zdd Zdd Zdd ZG dd deZdZG dd dejejZedk	r^ddddddddddd d!d"d#d$d%d&d'dd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6g"Zx*eD ]"Zeeed7e jj d8 7 Zq(W eejj7 Z[[dHd9dZdId:dZ d;d Z!d<d	 Z"d=d
 Z#dJd>dZ$d?d Z%d@Z&dAdB Z'dCd Z(dDZ)dEdF Z*e+dGkrd dl,Z,e,j*  dS )K    Nc               @   s   e Zd ZdS )RestartN)__name__
__module____qualname__ r   r   /usr/lib64/python3.6/pdb.pyr   U   s   r   runpmPdbrunevalrunctxruncall	set_tracepost_mortemhelpc             C   sx   t jdt j|  }yt|}W n tk
r4   d S X |4 x,t|ddD ]\}}|j|rJ| ||fS qJW W d Q R X d S )Nzdef\s+%s\s*[(]   )start)recompileescapeopenOSError	enumeratematch)funcnamefilenameZcrefplinenoliner   r   r   find_function\   s    
r   c             C   sX   t j| \}}t j| r,| j| jkr,|dfS t j| r>|dfS t j||d  |d fS )Nr   )inspectZ
findsourceZisframe	f_globalsf_localsZismoduleZgetblock)objlinesr   r   r   r   getsourcelinesi   s    
r%   c             C   s8   t tj| }|j  x|D ]\}}||kr|S qW dS )Nr   )listdisZfindlinestartsreverse)codeZlastiZ
linestartsir   r   r   r   lasti2linenor   s    r+   c               @   s   e Zd Zdd ZdS )_rstrc             C   s   | S )Nr   )selfr   r   r   __repr__}   s    z_rstr.__repr__N)r   r   r   r.   r   r   r   r   r,   {   s   r,   z
-> c               @   s  e Zd ZdZdd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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)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 ZeZdd8d9Zd:d; ZeZ eZ!eZ"d<d= Z#eZ$d>d? Z%d@dA Z&dBdC Z'eZ(dDdE Z)eZ*dFdG Z+eZ,dHdI Z-eZ.dJdK Z/e/Z0eZ1eZ2dLdM Z3e3Z4e3Z5dNdO Z6dPdQ Z7e7Z8dRdS Z9e9Z:dTdU Z;e;Z<dVdW Z=e=Z>dXdY Z?e?Z@dZd[ ZAeAZBd\d] ZCeCZDd^d_ ZEeE ZFZGd`da ZHeHZIdbdc ZJeZKddde ZLeLZMeLZNdfdg ZOdhdi ZPePZQdjdk ZReRZSdldm ZTddndoZUdpdq ZVdrds ZWeZXeZYeZZdtdu Z[e[Z\dvdw Z]e]Z^dxdy Z_eZ`f dfdzd{Zad|d} ZbeZcd~d ZdeZedd Zfdd Zgdd Zhdd Zidd Zjdd ZkddddddgZldd ZmenfddZodd ZpepZqdd Zrdd Zsdd Ztdd ZudS )r
   NtabFTc       
   $   C   sJ  t jj| |d tjj| ||| |r,d| _d| _i | _i | _d| _	d| _
i | _ydd l}|jd W n tk
rz   Y nX d| _|| _g | _|r(dtjkrtjd }y.ttjj|d}	| jj|	 W d Q R X W n tk
r   Y nX y$td}	| jj|	 W d Q R X W n tk
r&   Y nX i | _i | _i | _d| _d | _d S )	N)skipr   z(Pdb)  Fz 	
`@#$%^&*()=+[{]}\|;:'",<>?HOMEz.pdbrc)bdbBdb__init__cmdCmdZuse_rawinputpromptaliases
displaying
mainpyfile_wait_for_mainpyfile	tb_linenoreadlineZset_completer_delimsImportErrorallow_kbdintnosigintrcLinesosenvironr   pathjoinextendr   commandscommands_dopromptcommands_silentcommands_definingcommands_bnum)
r-   completekeystdinstdoutr0   rA   Zreadrcr>   ZenvHomeZrcFiler   r   r   r5      sH    


zPdb.__init__c             C   s*   | j r
t| jd | j  | j| d S )Nz-
Program interrupted. (Use 'cont' to resume).)r@   KeyboardInterruptmessageset_stepr   )r-   Zsignumframer   r   r   sigint_handler   s
    
zPdb.sigint_handlerc             C   s   t jj|  | j  d S )N)r3   r4   resetforget)r-   r   r   r   rU      s    z	Pdb.resetc             C   s&   d | _ g | _d| _d | _| jj  d S )Nr   )r   stackcurindexcurframer=   clear)r-   r   r   r   rV      s
    z
Pdb.forgetc             C   sl   | j   | j||\| _| _x*|rFt|jj|j}|| j|j< |j	}qW | j| j d | _
| j
j| _| j S )Nr   )rV   Z	get_stackrW   rX   r+   tb_framef_codetb_lastir=   tb_nextrY   r"   curframe_localsexecRcLines)r-   ftbr   r   r   r   setup   s    

z	Pdb.setupc             C   sh   | j s
d S | j }|j  g | _ xD|rb|j j }|r |d dkr | j|r |  j t|7  _ dS q W d S )Nr   #T)rB   r(   popstriponecmdreversed)r-   rB   r   r   r   r   r`      s    
zPdb.execRcLinesc             C   s.   | j r
d S | j|r*| jd | j|d  d S )Nz--Call--)r<   Z	stop_hererQ   interaction)r-   rS   Zargument_listr   r   r   	user_call   s
    

zPdb.user_callc             C   sH   | j r.| j| j|jjks$|jdkr(d S d| _ | j|rD| j|d  d S )Nr   F)r<   r;   canonicr\   co_filenamef_linenobp_commandsri   )r-   rS   r   r   r   	user_line   s    

zPdb.user_linec             C   s   t | ddr| j| jkr| j}d| _| j}| j|d  x| j| D ]}| j| qBW || _| j| sv| j| j| j	  | j
| r| j  | j  d S dS )N	currentbpFr   r   )getattrrp   rH   lastcmdrc   rg   rJ   print_stack_entryrW   rX   rI   _cmdlooprV   )r-   rS   rp   Zlastcmd_backr   r   r   r   rn     s     

zPdb.bp_commandsc             C   s.   | j r
d S ||jd< | jd | j|d  d S )N
__return__z
--Return--)r<   r"   rQ   ri   )r-   rS   Zreturn_valuer   r   r   user_return  s
    

zPdb.user_returnc             C   sj   | j r
d S |\}}}||f|jd< | r4|tkr4dnd}| jd|tj||d j f  | j|| d S )NZ__exception__z	Internal r1   z%s%sr   )r<   r"   StopIterationrQ   	tracebackformat_exception_onlyrf   ri   )r-   rS   exc_infoexc_type	exc_valueexc_tracebackprefixr   r   r   user_exception'  s    
zPdb.user_exceptionc             C   sD   x>yd| _ | j  d| _ P W q tk
r:   | jd Y qX qW d S )NTFz--KeyboardInterrupt--)r@   cmdlooprP   rQ   )r-   r   r   r   rt   ;  s    zPdb._cmdloopc             C   sb   | j j| j}|r^xJ|j D ]>\}}| j|}||k	r||kr|||< | jd|||f  qW d S )Nzdisplay %s: %r  [old: %r])r:   getrY   items_getval_exceptrQ   )r-   r:   exprZoldvalueZnewvaluer   r   r   preloopH  s    
zPdb.preloopc             C   sZ   t jrtjtjt j d t _| j||r4| j  d S | j| j| j  | j	  | j  d S )N)
r
   _previous_sigint_handlersignalSIGINTrc   rV   rs   rW   rX   rt   )r-   rS   ry   r   r   r   ri   U  s    zPdb.interactionc             C   s   |d k	r| j t| d S )N)rQ   repr)r-   r#   r   r   r   displayhookc  s    zPdb.displayhookc       	      C   s   |d d dkr|dd  }| j }| jj}ydt|d dd}tj}tj}tj}z(| jt_| jt_| jt_t||| W d |t_|t_|t_X W n4   tj	 d d }| j
tj| d j  Y nX d S )Nr   !
z<stdin>Zsingle   rw   )r_   rY   r!   r   sysrO   rN   r   execr{   errorry   rz   rf   )	r-   r   localsglobalsr)   Zsave_stdoutZ
save_stdinZsave_displayhookr{   r   r   r   defaultk  s(     zPdb.defaultc             C   s   |j  s|S |j }xx|d | jkr| j|d  }d}x0|dd  D ] }|jdt| |}|d7 }qDW |jddj|dd  }|j }qW |d dkr|jd}|dkr||d d  j }| jj	| |d | j
 }|S )	Nr   r   %z%* aliasz;;r   )rf   splitr9   replacestrrF   findlstripcmdqueueappendrstrip)r-   r   argsZiiZtmpArgZmarkernextr   r   r   precmd  s&    
z
Pdb.precmdc             C   s"   | j stjj| |S | j|S d S )N)rK   r6   r7   rg   handle_command_def)r-   r   r   r   r   rg     s    z
Pdb.onecmdc             C   s   | j |\}}}|sd S |dkr0d| j| j< d S |dkrBg | _dS | j| j }|rf|j|d |  n
|j| yt| d| }W n tk
r   | j}Y nX |j	| j
krd| j| j< g | _dS d S )NZsilentTendr   r   do_F)Z	parselinerJ   rL   r   rH   r   rq   AttributeErrorr   r   commands_resumingrI   )r-   r   r6   argZcmdlistfuncr   r   r   r     s,    
zPdb.handle_command_defc             C   s   t || jd d S )N)file)printrO   )r-   msgr   r   r   rQ     s    zPdb.messagec             C   s   t d|| jd d S )Nz***)r   )r   rO   )r-   r   r   r   r   r     s    z	Pdb.errorc             C   s   |j  jdrg S y| j||||}W n tk
r>   g }Y nX tj|d }xP|D ]H}tjj|rt|j|d  qTtjj	|rT|j
 jdrT|j|d  qTW |S )	N:,*/.py.pyw)r   r   )r   r   )rf   endswith_complete_expression	ExceptionglobrC   rE   isdirr   isfilelower)r-   textr   begidxendidxZretglobsfnr   r   r   _complete_location  s    

zPdb._complete_locationc                s    fddt tjjD S )Nc                s.   g | ]&\}}|d k	rt |j rt |qS )N)r   
startswith).0r*   bp)r   r   r   
<listcomp>  s    z*Pdb._complete_bpnumber.<locals>.<listcomp>)r   r3   
Breakpoint
bpbynumber)r-   r   r   r   r   r   )r   r   _complete_bpnumber  s    zPdb._complete_bpnumberc                s   | j s
g S | j jj }|j| j dkrjd y0| d  }x dd D ]}t||}qPW W n ttfk
r|   g S X dj	 d d d  fddt
|D S fdd|j D S d S )	N.r   r   c                s"   g | ]}|j  d r| qS )r   rw   )r   )r   n)dottedr   r   r   r     s    z,Pdb._complete_expression.<locals>.<listcomp>c                s   g | ]}|j  r|qS r   )r   )r   r   )r   r   r   r     s    rw   rw   )rY   r!   copyupdater_   r   rq   KeyErrorr   rF   dirkeys)r-   r   r   r   r   nsr#   partr   )r   r   r   r   r     s    
zPdb._complete_expressionc             C   s(  |st tjjd }n"yt|}W n   | jd d S || _|| jkrf| j| | j| | j	| f}nd }g | j|< d| j|< d| j	|< | j
}d| _
d| _zzy| j  W nh tk
r   |r|d | j|< |d | j|< |d | j	|< n| j|= | j|= | j	|= | jd Y nX W d d| _|| _
X d S )	Nr   z.Usage: commands [bnum]
        ...
        endTFz(com) r   r   z1command definition aborted, old commands restored)lenr3   r   r   intr   rL   rH   rI   rJ   r8   rK   r   rP   )r-   r   ZbnumZold_command_defsZprompt_backr   r   r   do_commands  s@    %




zPdb.do_commandsr   c             C   s@  |s<| j r8| jd x"tjjD ]}|r| j|j  qW d S d }d }d }|jd}|dkr~||d d  j }|d | j }|j	d}d }	|dkr|d | j }| j
|}
|
s| jd|  d S |
}||d d  j }yt|}W n$ tk
r   | jd|  d S X nyt|}W n tk
r   yt|| jj| j}W n   |}Y nX y.t|drl|j}|j}|j}	|j}|j}W n@   | j|\}}}|s| jd	|  d S |}	t|}Y nX Y nX |s| j }| j||}|r<| j|||||	}|r| j| n*| j||d }| jd
|j|j|jf  d S )Nz!Num Type         Disp Enb   Wherer   r   r   r   z%r not found from sys.pathzBad lineno: %s__func__zJThe specified object %r is not a function or was not found along sys.path.zBreakpoint %d at %s:%drw   ) breaksrQ   r3   r   r   Zbpformatr   r   r   rfindlookupmoduler   r   
ValueErrorevalrY   r!   r_   hasattrr   __code__co_nameco_firstlinenorl   lineinfodefaultFile	checklineZ	set_break
get_breaksnumberr   r   )r-   r   Z	temporaryr   r   r   condZcommaZcolonr   ra   r   r)   oklnr   errr   r   r   do_breakT  s~    






zPdb.do_breakc             C   s"   | j jj}|dkr| jr| j}|S )Nz<string>)rY   r\   rl   r;   )r-   r   r   r   r   r     s    
zPdb.defaultFilec             C   s   | j |d d S )Nr   )r   )r-   r   r   r   r   	do_tbreak  s    zPdb.do_tbreakc       
      C   s   d}|j d}t|dkr(|d j }nt|dkrB|d j }n|S |dkrR|S |j d}|d dkr~|d= t|dkr~|S | j }t|dkr|d }n| j|d }|r|}|d }t||}	|	p|S )	N'r   r      r1   r   r-   )NNN)r   r   rf   r   r   r   )
r-   Z
identifierZfailedZidstringidpartsZfnameitemra   Zanswerr   r   r   r     s.    
 


zPdb.lineinfoc             C   s   t | dr| jjnd }tj|||}|s6| jd dS |j }| sp|d dksp|d d dksp|d d dkr~| jd dS |S )	NrY   zEnd of filer   rd   r   z"""z'''zBlank or comment)r   rY   r!   	linecachegetlinerQ   rf   r   )r-   r   r   r   r   r   r   r   r     s    
 
zPdb.checklinec             C   sl   |j  }x^|D ]V}y| j|}W n, tk
rL } z| j| W Y d d }~X qX |j  | jd|  qW d S )Nz
Enabled %s)r   get_bpbynumberr   r   enablerQ   )r-   r   r   r*   r   r   r   r   r   	do_enable  s    
zPdb.do_enablec             C   sl   |j  }x^|D ]V}y| j|}W n, tk
rL } z| j| W Y d d }~X qX |j  | jd|  qW d S )NzDisabled %s)r   r   r   r   disablerQ   )r-   r   r   r*   r   r   r   r   r   
do_disable  s    
zPdb.do_disablec             C   s   |j dd}y|d }W n tk
r0   d }Y nX y| j|d j }W nH tk
rf   | jd Y nX tk
r } z| j| W Y d d }~X n.X ||_|s| jd|j  n| jd|j  d S )Nr   r   r   zBreakpoint number expectedz#Breakpoint %d is now unconditional.z$New condition set for breakpoint %d.)	r   
IndexErrorr   rf   r   r   r   rQ   r   )r-   r   r   r   r   r   r   r   r   do_condition!  s    
zPdb.do_conditionc             C   s   |j  }yt|d j }W n   d}Y nX y| j|d j }W nH tk
rb   | jd Y nv tk
r } z| j| W Y d d }~X nLX ||_|dkr|dkrd| }nd}| jd||j	f  n| jd|j	  d S )Nr   r   zBreakpoint number expectedz%d crossingsz
1 crossingz%Will ignore next %s of breakpoint %d.z-Will stop next time breakpoint %d is reached.)
r   r   rf   r   r   r   r   ignorerQ   r   )r-   r   r   countr   r   Zcountstrr   r   r   	do_ignore<  s(    	

zPdb.do_ignorec       
   !   C   s  |sxyt d}W n tk
r(   d}Y nX |j j }|dkrtdd tjjD }| j  x|D ]}| jd|  q^W d S d|kr|j	d}|d | }||d	 d  }yt
|}W n tk
r   d
| }Y nX | j||}| j||}| r| j| nx|D ]}| jd|  qW d S |j }	xd|	D ]\}y| j|}W n. tk
rl } z| j| W Y d d }~X nX | j| | jd|  q,W d S )NzClear all breaks? noyyesc             S   s   g | ]}|r|qS r   r   )r   r   r   r   r   r   m  s    z Pdb.do_clear.<locals>.<listcomp>z
Deleted %sr   r   zInvalid line number (%s))r   r   )inputEOFErrorrf   r   r3   r   r   Zclear_all_breaksrQ   r   r   r   r   Zclear_breakr   r   r   Zclear_bpbynumber)
r-   r   ZreplyZbplistr   r*   r   r   r   Z
numberlistr   r   r   do_clear_  sF    






zPdb.do_clearc             C   s   | j   d S )N)print_stack_trace)r-   r   r   r   r   do_where  s    zPdb.do_wherec             C   s>   || _ | j| j  d | _| jj| _| j| j| j   d | _d S )Nr   )rX   rW   rY   r"   r_   rs   r   )r-   r   r   r   r   _select_frame  s
    
zPdb._select_framec             C   sx   | j dkr| jd d S yt|p"d}W n" tk
rJ   | jd|  d S X |dk rZd}ntd| j | }| j| d S )Nr   zOldest framer   zInvalid frame count (%s))rX   r   r   r   maxr  )r-   r   r   newframer   r   r   do_up  s    

z	Pdb.do_upc             C   s   | j d t| jkr"| jd d S yt|p,d}W n" tk
rT   | jd|  d S X |dk rnt| jd }ntt| jd | j | }| j| d S )Nr   zNewest framezInvalid frame count (%s)r   )rX   r   rW   r   r   r   minr  )r-   r   r   r  r   r   r   do_down  s    
zPdb.do_downc             C   sf   |rPyt |}W n" tk
r2   | jd|  d S X || jjkrT| jd d S nd }| j| j| dS )NzError in argument: %rz7"until" line number is smaller than current line numberr   )r   r   r   rY   rm   Z	set_until)r-   r   r   r   r   r   do_until  s    
zPdb.do_untilc             C   s   | j   dS )Nr   )rR   )r-   r   r   r   r   do_step  s    zPdb.do_stepc             C   s   | j | j dS )Nr   )Zset_nextrY   )r-   r   r   r   r   do_next  s    zPdb.do_nextc             C   s<   |r4dd l }tjdd }|j|t_|tjd d< td S )Nr   r   )shlexr   argvr   r   )r-   r   r  Zargv0r   r   r   do_run  s    z
Pdb.do_runc             C   s   | j | j dS )Nr   )Z
set_returnrY   )r-   r   r   r   r   	do_return  s    zPdb.do_returnc             C   s>   | j s2ytjtj| jt_W n tk
r0   Y nX | j  dS )Nr   )rA   r   r   rT   r
   r   r   Zset_continue)r-   r   r   r   r   do_continue  s    zPdb.do_continuec             C   s   | j d t| jkr"| jd d S yt|}W n tk
rL   | jd Y nnX y:|| j_| j| j  d |f| j| j < | j| j| j   W n0 tk
r } z| jd|  W Y d d }~X nX d S )Nr   z)You can only jump within the bottom framez)The 'jump' command requires a line numberr   zJump failed: %s)	rX   r   rW   r   r   r   rY   rm   rs   )r-   r   er   r   r   do_jump"  s    
zPdb.do_jumpc             C   sz   t jd  | jj}| j}t| j| j| j}d| j	j
  |_	| jd t j|j|||f | jd t j| j |j| _d S )Nz(%s) zENTERING RECURSIVE DEBUGGERzLEAVING RECURSIVE DEBUGGER)r   settracerY   r!   r_   r
   rM   rN   rO   r8   rf   rQ   call_tracingr   Ztrace_dispatchrr   )r-   r   r   r   pr   r   r   do_debug?  s    


zPdb.do_debugc             C   s   d| _ | j  dS )NTr   )_user_requested_quitset_quit)r-   r   r   r   r   do_quitR  s    zPdb.do_quitc             C   s   | j d d| _| j  dS )Nr1   Tr   )rQ   r  r  )r-   r   r   r   r   do_EOF]  s    
z
Pdb.do_EOFc             C   s   | j j}| j}|j}|jd@ r&|d }|jd@ r8|d }xJt|D ]>}|j| }||krp| jd||| f  qB| jd|f  qBW d S )N   r      z%s = %rz%s = *** undefined ***)rY   r\   r_   co_argcountco_flagsrangeco_varnamesrQ   )r-   r   codictr   r*   namer   r   r   do_argsf  s    
 
 
zPdb.do_argsc             C   s.   d| j kr | jt| j d  n
| jd d S )Nru   zNot yet returned!)r_   rQ   r   r   )r-   r   r   r   r   	do_retvalw  s    
zPdb.do_retvalc          
   C   sN   yt || jj| jS    tj d d }| jtj| d j	   Y nX d S )Nr   r   rw   )
r   rY   r!   r_   r   r{   r   ry   rz   rf   )r-   r   r{   r   r   r   _getval  s    zPdb._getvalc          
   C   sh   y.|d krt || jj| jS t ||j|jS W n4   tj d d }tj| d j	 }t
d| S d S )Nr   r   z** raised %s **rw   )r   rY   r!   r_   r"   r   r{   ry   rz   rf   r,   )r-   r   rS   r{   r   r   r   r   r     s    zPdb._getval_exceptc          
   C   s*   y| j t| j| W n   Y nX d S )N)rQ   r   r%  )r-   r   r   r   r   do_p  s    zPdb.do_pc          
   C   s,   y| j tj| j| W n   Y nX d S )N)rQ   pprintZpformatr%  )r-   r   r   r   r   do_pp  s    z	Pdb.do_ppc             C   sd  d| _ d }|r|dkry^d|krX|jd\}}t|j }t|j }||k rr|| }nt|j }td|d }W q tk
r   | jd|  d S X n0| jd ks|dkrtd| jj	d }n
| jd }|d kr|d }| jj
j}| j|}yZtj|| jj}| j||d | ||| j t|t|| _t||k rF| jd W n tk
r^   Y nX d S )	Nr&   r   r   r      zError in argument: %r
   z[EOF])rr   r   r   rf   r  r   r   r   rY   rm   r\   rl   get_file_breaksr   getlinesr!   _print_linesr  r   rQ   rP   )r-   r   Zlastfirstr   	breaklistr$   r   r   r   do_list  s>    



zPdb.do_listc             C   sh   | j jj}| j|}yt| j \}}W n* tk
rP } z| j| d S d }~X nX | j|||| j  d S )N)rY   r\   rl   r+  r%   r   r   r-  )r-   r   r   r/  r$   r   r   r   r   r   do_longlist  s    


zPdb.do_longlistc             C   sj   y| j |}W n
   d S yt|\}}W n. ttfk
rX } z| j| d S d }~X nX | j|| d S )N)r%  r%   r   	TypeErrorr   r-  )r-   r   r#   r$   r   r   r   r   r   	do_source  s    
zPdb.do_sourcec       
      C   s   |r|j }| jj|d	}nd
 }}xt||D ]|\}}t|jd}	t|	dk rX|	d7 }	||krj|	d7 }	n|	d7 }	||kr|	d7 }	n||kr|	d7 }	| j|	d |j   q.W d S )Nr   r   r  r   Bz->z>>	rw   rw   )	rm   r=   r   r   r   rjustr   rQ   r   )
r-   r$   r   r   rS   Zcurrent_linenoZ
exc_linenor   r   sr   r   r   r-    s     

zPdb._print_linesc             C   s   y| j |}W n
   d S d }y
|j}W n tk
r<   Y nX |rV| jd|j  d S y|jj}W n tk
rv   Y nX |r| jd|j  d S |jtkr| jd|j|j	f  d S | jt| d S )NzFunction %sz	Method %szClass %s.%s)
r%  r   r   rQ   r   r   	__class__typer   r   )r-   r   valuer)   r   r   r   	do_whatis  s.    

zPdb.do_whatisc             C   sp   |s<| j d x\| jj| ji j D ]}| j d|  q$W n0| j|}|| jj| ji |< | j d||f  d S )NzCurrently displaying:z%s: %rzdisplay %s: %r)rQ   r:   r   rY   r   r   
setdefault)r-   r   r   valr   r   r   
do_display4  s    

zPdb.do_displayc             C   sT   |r@y| j j| ji |= W qP tk
r<   | jd|  Y qPX n| j j| jd  d S )Nznot displaying %s)r:   r   rY   r   r   re   )r-   r   r   r   r   do_undisplayG  s    zPdb.do_undisplayc                s    fdd| j j| ji D S )Nc                s   g | ]}|j  r|qS r   )r   )r   r  )r   r   r   r   W  s    z*Pdb.complete_undisplay.<locals>.<listcomp>)r:   r   rY   )r-   r   r   r   r   r   )r   r   complete_undisplayV  s    zPdb.complete_undisplayc             C   s*   | j jj }|j| j tjd|d d S )Nz*interactive*)Zlocal)rY   r!   r   r   r_   r)   interact)r-   r   r   r   r   r   do_interactZ  s    zPdb.do_interactc             C   s   |j  }t|dkrLt| jj }x$|D ]}| jd|| j| f  q(W d S |d | jkrt|dkr| jd|d | j|d  f  ndj|dd  | j|d < d S )Nr   z%s = %sr   r   )r   r   sortedr9   r   rQ   rF   )r-   r   r   r   r   r   r   r   do_aliasd  s    
"zPdb.do_aliasc             C   s6   |j  }t|dkrd S |d | jkr2| j|d = d S )Nr   )r   r   r9   )r-   r   r   r   r   r   
do_unalias  s
     zPdb.do_unaliasc                s    fdd| j D S )Nc                s   g | ]}|j  r|qS r   )r   )r   a)r   r   r   r     s    z(Pdb.complete_unalias.<locals>.<listcomp>)r9   )r-   r   r   r   r   r   )r   r   complete_unalias  s    zPdb.complete_unaliasr  r	  r
  r  r  r  c             C   s8   yx| j D ]}| j| q
W W n tk
r2   Y nX d S )N)rW   rs   rP   )r-   frame_linenor   r   r   r     s
    zPdb.print_stack_tracec             C   s6   |\}}|| j krd}nd}| j|| j||  d S )Nz> z  )rY   rQ   Zformat_stack_entry)r-   rH  Zprompt_prefixrS   r   r   r   r   r   rs     s    
zPdb.print_stack_entryc             C   s   |st jj| |S y<yt| d| }| S  tk
rJ   t| d| }Y nX W n" tk
rp   | jd|  Y n0X tjjdkr| jd|  d S | j	|j
j  d S )NZhelp_r   zNo help for %rr   zJNo help for %r; please do not run Python with -OO if you need command help)r6   r7   do_helprq   r   r   r   flagsoptimizerQ   __doc__r   )r-   r   ZtopicZcommandr   r   r   rI    s    zPdb.do_helpc             C   s   | j | jjpdj  d S )Nr1   )rQ   	help_execrL  rf   )r-   r   r   r   rM    s    
zPdb.help_execc             C   s
   t   d S )N)r   )r-   r   r   r   help_pdb  s    zPdb.help_pdbc             C   s   t jj|rt jj|r|S t jjtjd |}t jj|rP| j|| jkrP|S t jj|\}}|dkrp|d }t jj|r|S xHtjD ]>}xt jj	|rt j
|}qW t jj||}t jj|r|S qW d S )Nr   r1   z.py)rC   rE   isabsexistsrF   r   rk   r;   splitextislinkreadlink)r-   r   ra   rootZextdirnamefullnamer   r   r   r     s"    zPdb.lookupmodulec          
   C   st   dd l }|jj  |jjd|td d| _| j|| _d| _t	|d}d|j
 | jf }W d Q R X | j| d S )Nr   __main__)r   __file____builtins__TFrbzexec(compile(%r, %r, 'exec')))rW  __dict__rZ   r   rY  r<   rk   r;   r  r   readr   )r-   r   rW  r   	statementr   r   r   
_runscript  s    

zPdb._runscript)r/   NNNFT)r   )N)vr   r   r   r   r5   rT   rU   rV   rc   r`   rj   ro   rn   rv   r   rt   r   ri   r   r   r   rg   r   rQ   r   r   r   r   r   Zcomplete_commandsr   r   Zdo_bZcomplete_breakZ
complete_br   Zcomplete_tbreakr   r   r   Zcomplete_enabler   Zcomplete_disabler   Zcomplete_conditionr   Zcomplete_ignorer   Zdo_clZcomplete_clearZcomplete_clr  Zdo_wZdo_btr  r  Zdo_ur  Zdo_dr  Zdo_untr	  Zdo_sr
  Zdo_nr  Z
do_restartr  Zdo_rr  Zdo_cZdo_contr  Zdo_jr  Zcomplete_debugr  Zdo_qZdo_exitr  r#  Zdo_ar$  Zdo_rvr%  r   r&  r(  Zcomplete_printZ
complete_pZcomplete_ppr0  Zdo_lr1  Zdo_llr3  Zcomplete_sourcer-  r;  Zcomplete_whatisr>  Zcomplete_displayr?  r@  rB  rD  rE  rG  r   r   line_prefixrs   rI  Zdo_hrM  rN  r   r^  r   r   r   r   r
      s    
/	
M
]!!.	
		1!
#	
whereZdownZupbreakZtbreakrZ   r   r   r   Z	conditionrH   stepr   ZuntilZjumpreturnZretvalcontinuer&   Zlonglistr   r  ZppZwhatissourceZdisplayZ	undisplayrA  r   Zunaliasdebugquitr   z

c             C   s   t  j| || d S )N)r
   r   )r]  r   r   r   r   r   r   #  s    c             C   s   t  j| ||S )N)r
   r   )Z
expressionr   r   r   r   r   r   &  s    c             C   s   t | || d S )N)r   )r]  r   r   r   r   r   r   )  s    c              O   s   t  j| |S )N)r
   r   )r   kwdsr   r   r   r   -  s    c               C   s   t  jtj j d S )N)r
   r   r   	_getframef_backr   r   r   r   r   0  s    c             C   sB   | d krt j d } | d kr$tdt }|j  |jd |  d S )Nr   zAA valid traceback must be passed if no exception is being handled)r   r{   r   r
   rU   ri   )tr  r   r   r   r   5  s    c               C   s   t tj d S )N)r   r   last_tracebackr   r   r   r   r	   C  s    zimport x; x.main()c               C   s   t t d S )N)r   TESTCMDr   r   r   r   testK  s    rn  c              C   s   dd l } | jt d S )Nr   )pydocZpagerrL  )ro  r   r   r   r   O  s    a  usage: pdb.py [-c command] ... pyfile [arg] ...

Debug the Python program given by pyfile.

Initial commands are read from .pdbrc files in your home directory
and in the current directory, if they exist.  Commands supplied with
-c are executed after commands from .pdbrc files.

To let the script run until an exception occurs, use "-c continue".
To let the script run up to a given line X in the debugged file, use
"-c 'until X'".c        	      C   s  dd l } | j tjdd  dddg\}}|s>tt tjd g }x<|D ]4\}}|dkrjtt tj  qH|dkrH|j| qHW |d }tjj	|std
|d tjd |tjd d < tjj
|tjd< t }|jj| xy|j| |jrP td W q tk
r0   td|d tddj|  Y q tk
r`   tddd ttj d  Y q tk
r   tj  tjd Y q   tj  td td tj d }|jd | td| d  Y qX qW d S )Nr   r   zhc:--helpz
--command=r   -h-c	--commandzError:zdoes not existz*The program finished and will be restartedZ
Restartingzwith arguments:r5  r   z/The program exited via sys.exit(). Exit status:)r   z2Uncaught exception. Entering post mortem debuggingz1Running 'cont' or 'step' will restart the programz#Post mortem debugger finished. The z will be restarted)rq  rp  )rr  rs  )getoptr   r  r   _usageexitr   rC   rE   rP  rU  r
   rB   rG   r^  r  r   rF   
SystemExitr{   SyntaxErrorry   	print_excri   )	rt  Zoptsr   rH   optZoptargr;   pdbrk  r   r   r   main`  sV     



r|  rW  )NN)NN)N)-rC   r   r   r6   r3   r'   r)   r   r'  r   r    ry   r   r   r   __all__r   r%   r+   r   r,   r_  r4   r7   r
   rL  Z_help_orderZ_commandrq   rf   rM  r   r   r   r   r   r   r	   rm  rn  r   ru  r|  r   r{  r   r   r   r   <module>F   sr   		           

"


<
