
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
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�rÖd 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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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d¡d8d9„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„ ZTd¢dndo„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Zed€d�„ Zfd‚dƒ„ Zgd„d…„ Zhd†d‡„ Zidˆd‰„ ZjdŠd‹„ ZkdŒd�dŽd�d�d‘gZld’d“„ Zmenfd”d•„Zod–d—„ ZpepZqd˜d™„ Zrdšd›„ Zsdœd�„ ZtdždŸ„ 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rìt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rÀd| 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 n¼y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r®d| }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ršy^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rÀt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
 }}xŠt||ƒ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rˆt|ƒ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	|ƒr¦t j
|ƒ}qŽW t jj||ƒ}t jj|ƒrˆ|S qˆW 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	|ƒsªtd
|dƒ tjdƒ |tjd d …< tjj
|ƒtjd< tƒ }|jj|ƒ xøy|j|ƒ |jròP 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 qÞX qÞW 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   		           

"


<
