o
    2f                     @   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d dlZd dlZG dd deZg d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urg dZeD ]Zeeede j d 7 Zqteej j7 Z[[d+ddZ!d+ddZ"dd Z#dd Z$ddddZ%d,ddZ&d d! Z'd"Z(d#d$ Z)d%d& Z*d'Z+d(d) Z,e-d*krd dl.Z.e.,  dS dS )-    Nc                   @   s   e Zd Z	 dS )RestartN)__name__
__module____qualname__ r   r   U/home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/pdb.pyr   W   s    r   )	runpmPdbrunevalrunctxruncall	set_tracepost_mortemhelpc                 C   s   t dt |  }zt|}W n
 ty   Y d S w |' t|ddD ]\}}||r<| ||f  W  d    S q%W d    d S 1 sHw   Y  d S )Nzdef\s+%s\s*[(]   )start)recompileescapetokenizeopenOSError	enumeratematch)funcnamefilenameZcrefplinenoliner   r   r   find_function^   s"   

r    c                 C   sX   t | \}}t | r| j| ju r|dfS t | r|dfS t ||d  |d fS Nr   )inspectZ
findsourceZisframe	f_globalsf_localsZismoduleZgetblock)objlinesr   r   r   r   getsourcelinesk   s   
r'   c                 C   s8   t t| }|  |D ]\}}||kr|  S qdS Nr   )listdisZfindlinestartsreverse)codeZlastiZ
linestartsir   r   r   r   lasti2linenot   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   r3   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 ZWdtdu ZXdvdw ZYeZZeZ[eZ\dxdy Z]e]Z^dzd{ Z_e_Z`d|d} ZaeZbdddZcdd ZdeZedd ZfeZgdd Zhdd Zidd Zjdd Zkdd Zldd Zmg dZndd ZoepfddZqdd ZrerZsdd Ztdd Zudd Zvdd Zwdd ZxdS )r
   NtabFTc           	      C   s\  t jj| |d tj| ||| td |rd| _d| _i | _	i | _
d| _d| _i | _zdd l}|d W n	 tyA   Y nw d| _|| _g | _|rz ttjd}| j| W d    n1 sgw   Y  W n	 tyv   Y nw ztd	}| j| W d    n1 sw   Y  W n	 ty   Y nw i | _i | _i | _d| _d | _d S )
N)skipzpdb.Pdbr   z(Pdb)  Fz 	
`@#$%^&*()=+[{]}\|;:'",<>?z~/.pdbrcz.pdbrc)bdbBdb__init__cmdCmdsysauditZuse_rawinputpromptaliases
displaying
mainpyfile_wait_for_mainpyfile	tb_linenoreadlineZset_completer_delimsImportErrorallow_kbdintnosigintrcLinesr   ospath
expanduserextendr   commandscommands_dopromptcommands_silentcommands_definingcommands_bnum)	r2   completekeystdinstdoutr5   rG   ZreadrcrD   ZrcFiler   r   r   r9      sT   


zPdb.__init__c                 C   s*   | j rt| d |   | | d S )Nz-
Program interrupted. (Use 'cont' to resume).)rF   KeyboardInterruptmessageset_stepr   )r2   signumframer   r   r   sigint_handler   s
   
zPdb.sigint_handlerc                 C   s   t j|  |   d S r0   )r7   r8   resetforgetr1   r   r   r   r[      s   z	Pdb.resetc                 C   s&   d | _ g | _d| _d | _| j  d S r(   )r   stackcurindexcurframerC   clearr1   r   r   r   r\      s
   z
Pdb.forgetc                 C   sj   |    | ||\| _| _|r#t|jj|j}|| j|j< |j	}|s| j| j d | _
| j
j| _|  S r(   )r\   Z	get_stackr]   r^   r.   tb_framef_codetb_lastirC   tb_nextr_   r$   curframe_localsexecRcLines)r2   ftbr   r   r   r   setup   s   
z	Pdb.setupc                 C   sj   | j sd S | j }|  g | _ |r3|  }|r/|d dkr/| |r/|  j t|7  _ dS |sd S d S )Nr   #T)rH   r+   popstriponecmdreversed)r2   rH   r   r   r   r   rf      s   
zPdb.execRcLinesc                 C   s4   	 | j rd S | |r| d | |d  d S d S )Nz--Call--)rB   Z	stop_hererV   interaction)r2   rY   Zargument_listr   r   r   	user_call   s   

zPdb.user_callc                 C   sN   	 | j r| j| |jjks|jdkrd S d| _ | |r%| |d  d S d S )Nr   F)rB   rA   canonicrb   co_filenamef_linenobp_commandsro   )r2   rY   r   r   r   	user_line   s   
zPdb.user_linec                 C   s   	 t | ddrI| j| jv rI| j}d| _| j}| |d  | j| D ]}| | q!|| _| j| s:| | j| j	  | j
| rC|   |   d S dS )N	currentbpFr   r   )getattrrv   rM   lastcmdri   rm   rO   print_stack_entryr]   r^   rN   _cmdloopr\   )r2   rY   rv   Zlastcmd_backr   r   r   r   rt     s$   


zPdb.bp_commandsc                 C   s0   	 | j rd S ||jd< | d | |d  d S )N
__return__z
--Return--)rB   r$   rV   ro   )r2   rY   Zreturn_valuer   r   r   user_return   s   

zPdb.user_returnc                 C   sj   	 | j rd S |\}}}||f|jd< |s|tu rdnd}| d|t||d  f  | || d S )NZ__exception__z	Internal r6   z%s%s)rB   r$   StopIterationrV   	tracebackformat_exception_onlyrl   ro   )r2   rY   exc_infoexc_type	exc_valueexc_tracebackprefixr   r   r   user_exception(  s   
zPdb.user_exceptionc                 C   s<   	 zd| _ |   d| _ W d S  ty   | d Y nw q)NTFz--KeyboardInterrupt--)rF   cmdlooprU   rV   r1   r   r   r   rz   <  s   zPdb._cmdloopc                 C   sb   | j | j}|r-| D ]!\}}| |}||ur,||kr,|||< | d|||f  qd S d S )Nzdisplay %s: %r  [old: %r])r@   getr_   items_getval_exceptrV   )r2   r@   exprZoldvalueZnewvaluer   r   r   preloopI  s   
zPdb.preloopc                 C   sr   t jrz
ttjt j W n	 ty   Y nw d t _| ||r&|   d S | | j| j	  | 
  |   d S r0   )r
   _previous_sigint_handlersignalSIGINT
ValueErrorri   r\   ry   r]   r^   rz   )r2   rY   r   r   r   r   ro   V  s   zPdb.interactionc                 C   s    	 |d ur|  t| d S d S r0   )rV   repr)r2   r%   r   r   r   displayhookh  s   zPdb.displayhookc                 C   s   |d d dkr|dd  }| j }| jj}z;t|d dd}tj}tj}tj}z| jt_| jt_| jt_t||| W |t_|t_|t_W d S |t_|t_|t_w    | 	  Y d S )Nr   !
z<stdin>Zsingle)
re   r_   r#   r   r<   rT   rS   r   exec
_error_exc)r2   r   localsglobalsr,   Zsave_stdoutZ
save_stdinZsave_displayhookr   r   r   defaultp  s*   zPdb.defaultc                 C   s   	 |  s|S | }|d | jv rJ| j|d  }d}|dd  D ]}|dt| |}|d7 }q!|dd|dd  }| }|d | jv s|d dkrq|d}|dkrq||d d   }| j	| |d | 
 }|S )	Nr   r   %z%* aliasz;;   )rl   splitr?   replacestrjoinfindlstripcmdqueueappendrstrip)r2   r   argsiiZtmpArgZmarkernextr   r   r   precmd  s,   

z
Pdb.precmdc                 C   s    	 | j stj| |S | |S r0   )rP   r:   r;   rm   handle_command_def)r2   r   r   r   r   rm     s   
z
Pdb.onecmdc                 C   s   	 |  |\}}}|sd S |dkrd| j| j< d S |dkr"g | _dS | j| j }|r4||d |  n|| z	t| d| }W n tyN   | j}Y nw |j	| j
v r`d| j| j< g | _dS d S )NZsilentTendr   r   do_F)Z	parselinerO   rQ   r   rM   r   rw   AttributeErrorr   r   commands_resumingrN   )r2   r   r:   argZcmdlistfuncr   r   r   r     s0   

zPdb.handle_command_defc                 C   s   t || jd d S )NfileprintrT   r2   msgr   r   r   rV        zPdb.messagec                 C   s   t d|| jd d S )Nz***r   r   r   r   r   r   error     z	Pdb.errorc                 C   s   |  dr	g S z
| ||||}W n ty   g }Y nw tt|d }|D ]$}tj|r;|	|d  q+tj
|rO| drO|	|d  q+|S )N):,*/).pyz.pywr   )rl   endswith_complete_expression	Exceptionglobr   rI   rJ   isdirr   isfilelower)r2   textr   begidxendidx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 urt | rt |qS r0   )r   
startswith).0r-   bpr   r   r   
<listcomp>  s
    z*Pdb._complete_bpnumber.<locals>.<listcomp>)r   r7   
Breakpoint
bpbynumberr2   r   r   r   r   r   r   r   _complete_bpnumber  s   zPdb._complete_bpnumberc              	      s   | j sg S i | j j| j}dv rRd z| d  } dd D ]}t||}q$W n ttfy:   g  Y S w d d d d  fddt|D S fdd|	 D S )N.r   r   r}   c                    s"   g | ]}|  d  r| qS )r}   r   r   n)dottedr   r   r   r     s   " z,Pdb._complete_expression.<locals>.<listcomp>c                       g | ]	}|  r|qS r   r   r   r   r   r   r         )
r_   r#   re   r   rw   KeyErrorr   r   dirkeys)r2   r   r   r   r   nsr%   partr   )r   r   r   r   r     s    
zPdb._complete_expressionc                 C   sD  	 |st tjjd }nzt|}W n   | d Y d S || _|| jv r5| j| | j| | j	| f}nd }g | j|< d| j|< d| j	|< | j
}d| _
d| _zKz|   W n2 ty   |ru|d | j|< |d | j|< |d | j	|< n| j|= | j|= | j	|= | d Y n
w W d| _|| _
d S W d| _|| _
d S d| _|| _
w )	Nr   z.Usage: commands [bnum]
        ...
        endTFz(com) r   r   z1command definition aborted, old commands restored)lenr7   r   r   intr   rQ   rM   rN   rO   r>   rP   r   rU   )r2   r   ZbnumZold_command_defsZprompt_backr   r   r   do_commands  sR   $






zPdb.do_commandsr   c              
   C   s.  	 |s| j r| d tjjD ]}|r| |  qd S d }d }d }|d}|dkr>||d d   }|d |  }|	d}d }	|dkr|d |  }| 
|}
|
sa| d|  d S |
}||d d   }zt|}W ni ty   | d|  Y d S w zt|}W nQ ty   zt|| jj| j}W n   |}Y zt|dr|j}|j}|j}	|j}|j}W n   | |\}}}|s| d	|  Y Y d S |}	t|}Y Y nw |s|  }| ||}|r| |||||	}|r| | d S | ||d
 }| d|j|j|jf  d S 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.r}   zBreakpoint %d at %s:%d) breaksrV   r7   r   r   Zbpformatr   r   r   rfindlookupmoduler   r   r   evalr_   r#   re   hasattrr   __code__co_nameco_firstlinenorr   lineinfodefaultFile	checklineZ	set_break
get_breaksnumberr   r   )r2   r   Z	temporaryr   r   r   condZcommacolonr   rg   r   r,   okZlnr   errr   r   r   do_breakW  s   







zPdb.do_breakc                 C   s$   	 | j jj}|dkr| jr| j}|S )Nz<string>)r_   rb   rr   rA   )r2   r   r   r   r   r     s
   
zPdb.defaultFilec                 C   s   	 |  |d d S r!   )r   r2   r   r   r   r   	do_tbreak  s   zPdb.do_tbreakc           
      C   s   d}| d}t|dkr|d  }nt|dkr!|d  }n|S |dkr)|S | d}|d dkr?|d= t|dkr?|S |  }t|dkrN|d }n| |d }|rY|}|d }t||}	|	pe|S )	N)NNN'r   r      r6   r   r2   )r   r   rl   r   r   r    )
r2   Z
identifierZfailedZidstringidpartsZfnameitemrg   Zanswerr   r   r   r     s,   



zPdb.lineinfoc                 C   s   	 t | dd }|r|jnd }t|||}|s| d dS | }|r:|d dks:|d d dks:|d d dkrA| d dS |S )	Nr_   zEnd of filer   rj   r   z"""z'''zBlank or comment)rw   r#   	linecachegetlinerV   rl   r   )r2   r   r   rY   r   r   r   r   r   r     s    

zPdb.checklinec                 C   l   	 |  }|D ],}z| |}W n ty' } z| | W Y d }~qd }~ww |  | d|  qd S )Nz
Enabled %s)r   get_bpbynumberr   r   enablerV   r2   r   r   r-   r   r   r   r   r   	do_enable   s   zPdb.do_enablec                 C   r  )NzDisabled %s)r   r  r   r   disablerV   r  r   r   r   
do_disable  s   zPdb.do_disablec              
   C   s   	 | dd}z|d }W n ty   d }Y nw z| |d  }W n& ty3   | d Y d S  tyJ } z| | W Y d }~d S d }~ww ||_|sZ| d|j  d S | d|j  d S )Nr   r   r   Breakpoint number expectedz#Breakpoint %d is now unconditional.z$New condition set for breakpoint %d.)	r   
IndexErrorr  rl   r   r   r   rV   r   )r2   r   r   r   r   r   r   r   r   do_condition%  s&   zPdb.do_conditionc              
   C   s   	 |  }z
t|d  }W n   d}Y z| |d  }W n& ty0   | d Y d S  tyG } z| | W Y d }~d S d }~ww ||_|dkrf|dkrXd| }nd}| d||j	f  d S | d|j	  d S )Nr   r   r	  z%d crossingsz
1 crossingz%Will ignore next %s of breakpoint %d.z-Will stop next time breakpoint %d is reached.)
r   r   rl   r  r
  r   r   ignorerV   r   )r2   r   r   countr   r   Zcountstrr   r   r   	do_ignore@  s2   


zPdb.do_ignorec           
      C   s  	 |s:zt d}W n ty   d}Y nw |  }|dv r8dd tjjD }|   |D ]	}| d|  q.d S d|v r|	d}|d | }||d d  }zt
|}W n tyd   d	| }Y nw | ||d d  }| ||}|r~| | d S |D ]	}| d|  qd S | }	|	D ]-}z| |}W n ty } z| | W Y d }~qd }~ww | | | d|  qd S )
NzClear all breaks? no)yZyesc                 S   s   g | ]}|r|qS r   r   )r   r   r   r   r   r   q  s    z Pdb.do_clear.<locals>.<listcomp>z
Deleted %sr   r   zInvalid line number (%s))inputEOFErrorrl   r   r7   r   r   Zclear_all_breaksrV   r   r   r   r   Zclear_breakr   r   r  Zclear_bpbynumber)
r2   r   ZreplyZbplistr   r-   r   r   r   Z
numberlistr   r   r   do_clearc  sT   


zPdb.do_clearc                 C   s   	 |    d S r0   )print_stack_tracer   r   r   r   do_where  s   zPdb.do_wherec                 C   s>   || _ | j| j  d | _| jj| _| | j| j   d | _d S r(   )r^   r]   r_   r$   re   ry   r   )r2   r   r   r   r   _select_frame  s
   

zPdb._select_framec                 C   sz   	 | j dkr| d d S zt|pd}W n ty&   | d|  Y d S w |dk r.d}ntd| j | }| | d S )Nr   zOldest framer   Invalid frame count (%s))r^   r   r   r   maxr  r2   r   r  Znewframer   r   r   do_up  s   

z	Pdb.do_upc                 C   s   	 | j d t| jkr| d d S zt|pd}W n ty+   | d|  Y d S w |dk r8t| jd }ntt| jd | j | }| | d S )Nr   zNewest framer  r   )r^   r   r]   r   r   r   minr  r  r   r   r   do_down  s   
zPdb.do_downc                 C   sh   	 |r)zt |}W n ty   | d|  Y d S w || jjkr(| d d S nd }| | j| dS )NError in argument: %rz7"until" line number is smaller than current line numberr   )r   r   r   r_   rs   Z	set_until)r2   r   r   r   r   r   do_until  s   
zPdb.do_untilc                 C   s   	 |    dS r!   )rW   r   r   r   r   do_step  s   zPdb.do_stepc                 C      	 |  | j dS r!   )Zset_nextr_   r   r   r   r   do_next  s   zPdb.do_nextc              
   C   sx   	 |r:dd l }tjdd }z||t_W n ty2 } z| d||f  W Y d }~d S d }~ww |tjd d< t)Nr   r   zCannot run %s: %s)shlexr<   argvr   r   r   r   )r2   r   r"  Zargv0er   r   r   do_run  s   z
Pdb.do_runc                 C   r   r!   )Z
set_returnr_   r   r   r   r   	do_return  s   zPdb.do_returnc                 C   s>   	 | j szttj| jt_W n	 ty   Y nw |   dS r!   )rG   r   r   rZ   r
   r   r   Zset_continuer   r   r   r   do_continue  s   zPdb.do_continuec              
   C   s   	 | j d t| jkr| d d S zt|}W n ty'   | d Y d S w z|| j_| j| j  d |f| j| j < | | j| j   W d S  ty` } z| d|  W Y d }~d S d }~ww )Nr   z)You can only jump within the bottom framez)The 'jump' command requires a line numberr   zJump failed: %s)	r^   r   r]   r   r   r   r_   rs   ry   )r2   r   r$  r   r   r   do_jump*  s"   

zPdb.do_jumpc                 C   s   	 t d  | jj}| j}t| j| j| j}d| j	
  |_	| d zt |j|||f W n ty<   |   Y nw | d t | j |j| _d S )Nz(%s) zENTERING RECURSIVE DEBUGGERzLEAVING RECURSIVE DEBUGGER)r<   settracer_   r#   re   r
   rR   rS   rT   r>   rl   rV   call_tracingr   r   r   Ztrace_dispatchrx   )r2   r   r   r   pr   r   r   do_debugG  s   


zPdb.do_debugc                 C   s   	 d| _ |   dS )NTr   )_user_requested_quitset_quitr   r   r   r   do_quit]  s   zPdb.do_quitc                 C   s   	 |  d d| _|   dS )Nr6   Tr   )rV   r-  r.  r   r   r   r   do_EOFh  s
   
z
Pdb.do_EOFc                 C   s   	 | j j}| j}|j|j }|jtj@ r|d }|jtj@ r"|d }t	|D ]}|j
| }||v r=| d||| f  q&| d|f  q&d S )Nr   z%s = %rz%s = *** undefined ***)r_   rb   re   co_argcountco_kwonlyargcountco_flagsr"   Z
CO_VARARGSZCO_VARKEYWORDSrangeco_varnamesrV   )r2   r   codictr   r-   namer   r   r   do_argsq  s   
zPdb.do_argsc                 C   s2   	 d| j v r| t| j d  d S | d d S )Nr{   zNot yet returned!)re   rV   r   r   r   r   r   r   	do_retval  s   
zPdb.do_retvalc                 C   s&   z
t || jj| jW S    |    r0   )r   r_   r#   re   r   r   r   r   r   _getval  s
   zPdb._getvalc                 C   sh   z|d u rt || jj| jW S t ||j|jW S    t d d }tj| d 	 }t
d|  Y S )Nr   r}   z** raised %s **)r   r_   r#   re   r$   r<   r   r   r   rl   r/   )r2   r   rY   r   r   r   r   r   r     s   zPdb._getval_exceptc                 C   s,   t  d d }| tj| d   d S )Nr   r}   )r<   r   r   r   r   rl   )r2   r   r   r   r   r     s   zPdb._error_excc                 C   sF   z|  |}W n   Y d S z
| || W d S    |   Y d S r0   )r;  rV   r   )r2   r   r   valr   r   r   _msg_val_func  s   zPdb._msg_val_funcc                 C   s   	 |  |t d S r0   )r=  r   r   r   r   r   do_p  s   zPdb.do_pc                 C   s   	 |  |tj d S r0   )r=  pprintZpformatr   r   r   r   do_pp  s   z	Pdb.do_ppc                 C   sd  	 d| _ d }|rM|dkrMz/d|v r-|d\}}t| }t| }||k r,|| }nt| }td|d }W n) tyL   | d|  Y d S w | jd u sV|dkr`td| jj	d }n| jd }|d u rm|d }| jj
j}| |}z0t|| jj}| ||d | ||| j t|t|| _t||k r| d W d S W d S  ty   Y d S w )	Nr)   r   r   r      r  
   z[EOF])rx   r   r   rl   r  r   r   r   r_   rs   rb   rr   get_file_breaksr   getlinesr#   _print_linesr  r   rV   rU   )r2   r   Zlastfirstr   	breaklistr&   r   r   r   do_list  sL   


zPdb.do_listc              
   C   sp   	 | j jj}| |}z	t| j \}}W n ty, } z| | W Y d }~d S d }~ww | |||| j  d S r0   )r_   rb   rr   rC  r'   r   r   rE  )r2   r   r   rG  r&   r   r   r   r   r   do_longlist  s   


zPdb.do_longlistc              
   C   st   	 z|  |}W n   Y d S zt|\}}W n ttfy1 } z| | W Y d }~d S d }~ww | || d S r0   )r;  r'   r   	TypeErrorr   rE  )r2   r   r%   r&   r   r   r   r   r   	do_source  s   
zPdb.do_sourcer   c           
      C   s   	 |r|j }| j|d}nd }}t||D ]>\}}t|d}	t|	dk r,|	d7 }	||v r5|	d7 }	n|	d7 }	||krB|	d7 }	n||krJ|	d7 }	| |	d |   qd S )	Nr}   r      r   Bz->z>>	)	rs   rC   r   r   r   rjustr   rV   r   )
r2   r&   r   r   rY   Zcurrent_linenoZ
exc_linenor   r   sr   r   r   rE    s$   

zPdb._print_linesc                 C   s   	 z|  |}W n   Y d S d }z|jj}W n	 ty    Y nw |r-| d|j  d S z|j}W n	 ty;   Y nw |rH| d|j  d S |jtu rZ| d|j|j	f  d S | t| d S )Nz	Method %szFunction %szClass %s.%s)
r;  r   r   r   rV   r   	__class__typer   r   )r2   r   valuer,   r   r   r   	do_whatis#  s4   

zPdb.do_whatisc                 C   sp   	 |s|  d | j| ji  D ]	}|  d|  qd S | |}|| j| ji |< |  d||f  d S )NzCurrently displaying:z%s: %rzdisplay %s: %r)rV   r@   r   r_   r   r   
setdefault)r2   r   r   r<  r   r   r   
do_displayF  s   

zPdb.do_displayc                 C   sV   	 |r!z| j | ji |= W d S  ty    | d|  Y d S w | j | jd  d S )Nznot displaying %s)r@   r   r_   r   r   rk   r   r   r   r   do_undisplayY  s   zPdb.do_undisplayc                    s    fdd| j | ji D S )Nc                    r   r   r   )r   r$  r   r   r   r   i  s    
z*Pdb.complete_undisplay.<locals>.<listcomp>)r@   r   r_   r   r   r   r   complete_undisplayh  s   zPdb.complete_undisplayc                 C   s&   	 i | j j| j}tjd|d d S )Nz*interactive*)local)r_   r#   re   r,   interact)r2   r   r   r   r   r   do_interactl  s   zPdb.do_interactc                 C   s   	 |  }t|dkr%t| j }|D ]}| d|| j| f  qd S |d | jv rDt|dkrD| d|d | j|d  f  d S d|dd  | j|d < d S )Nr   z%s = %sr   r   )r   r   sortedr?   r   rV   r   )r2   r   r   r   r   r   r   r   do_aliasu  s   $ zPdb.do_aliasc                 C   s<   	 |  }t|dkrd S |d | jv r| j|d = d S d S r(   )r   r   r?   )r2   r   r   r   r   r   
do_unalias  s   zPdb.do_unaliasc                    s    fdd| j D S )Nc                    r   r   r   )r   ar   r   r   r     r   z(Pdb.complete_unalias.<locals>.<listcomp>)r?   r   r   r   r   complete_unalias  r   zPdb.complete_unalias)r'  r  r!  r&  r/  r(  c                 C   s2   z| j D ]}| | qW d S  ty   Y d S w r0   )r]   ry   rU   )r2   frame_linenor   r   r   r    s   
zPdb.print_stack_tracec                 C   s6   |\}}|| j u rd}nd}| || ||  d S )Nz> z  )r_   rV   Zformat_stack_entry)r2   ra  Zprompt_prefixrY   r   r   r   r   r   ry     s   


zPdb.print_stack_entryc                 C   s   	 |s
t j| |S zzt| d| }| W W S  ty'   t| d| }Y nw W n ty:   | d|  Y d S w tjjdkrJ| d|  d S |j	d u rX| d|  d S | 
|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 helpz&No help for %r; __doc__ string missing)r:   r;   do_helprw   r   r   r<   flagsoptimize__doc__rV   r   )r2   r   ZtopicZcommandr   r   r   rb    s.   

zPdb.do_helpc                 C   s   	 |  | jjpd  d S )Nr6   )rV   	help_execre  rl   r1   r   r   r   rf    s   	zPdb.help_execc                 C   s
   t   d S r0   )r   r1   r   r   r   help_pdb  s   
zPdb.help_pdbc                 C   s   	 t j|rt j|r|S t jtjd |}t j|r)| || jkr)|S t j|\}}|dkr9|d }t j|rA|S tjD ]$}t j	|rWt 
|}t j	|sLt j||}t j|rh|  S qDd S )Nr   r6   r   )rI   rJ   isabsexistsr   r<   rq   rA   splitextislinkreadlink)r2   r   rg   rootextdirnamefullnamer   r   r   r     s(   

zPdb.lookupmodulec              	   C   sr   d| _ d| _dd l}||\}}}| |j| _dd l}|j	  |j
d| j|j|j|td | | d S )NTFr   __main__)r   __file____package__
__loader____spec____builtins__)rB   r-  runpy_get_module_detailsrq   rr   rA   rq  __dict__r`   updateparentloaderrv  r   )r2   module_namerw  Zmod_nameZmod_specr,   rq  r   r   r   
_runmodule  s    
zPdb._runmodulec                 C   s   dd l }|j  |jd|td d| _| || _d| _t	
|}d| | jf }W d    n1 s8w   Y  | | d S )Nr   rq  )r   rr  rv  TFzexec(compile(%r, %r, 'exec')))rq  ry  r`   rz  rv  rB   rq   rA   r-  io	open_codereadr   )r2   r   rq  r   	statementr   r   r   
_runscript  s   

zPdb._runscript)r4   NNNFT)r   r0   )r   N)yr   r   r   r   r9   rZ   r[   r\   ri   rf   rp   ru   rt   r|   r   rz   r   ro   r   r   r   rm   r   rV   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_exitr0  r9  Zdo_ar:  Zdo_rvr;  r   r   r=  r>  r@  Zcomplete_printZ
complete_pZcomplete_pprH  Zdo_lrI  Zdo_llrK  Zcomplete_sourcerE  rT  Zcomplete_whatisrV  Zcomplete_displayrW  rX  r[  r]  r^  r`  r   r  line_prefixry   rb  Zdo_hrf  rg  r   r~  r  r   r   r   r   r
      s    
/	
M
]!!.	

1
!	#	r
   )"r   whereZdownZupbreakZtbreakr`   r  r  r  Z	conditionrM   stepr   ZuntilZjumpreturnZretvalr   continuer)   Zlonglistr   r+  ppZwhatissourceZdisplayZ	undisplayrZ  r   Zunaliasdebugquitr   z

c                 C   s   t  | || d S r0   )r
   r   r  r   r   r   r   r   r   I  r   r   c                 C   s   t  | ||S r0   )r
   r   )Z
expressionr   r   r   r   r   r   L  s   r   c                 C   s   t | || d S r0   )r   r  r   r   r   r   O  s   r   c                  O   s   t  j| i |S r0   )r
   r   )r   kwdsr   r   r   r   S  r   r   )headerc                 C   s,   t  }| d ur||  |t j d S r0   )r
   rV   r   r<   	_getframef_back)r  pdbr   r   r   r   V  s   
r   c                 C   sB   | d u r
t  d } | d u rtdt }|  |d |  d S )Nr   zAA valid traceback must be passed if no exception is being handled)r<   r   r   r
   r[   ro   )tr+  r   r   r   r   ^  s   r   c                   C   s   t tj d S r0   )r   r<   last_tracebackr   r   r   r   r	   l  s   r	   zimport x; x.main()c                   C   s   t t d S r0   )r   TESTCMDr   r   r   r   testt  s   r  c                  C   s   dd l } | t d S r(   )pydocZpagerre  )r  r   r   r   r   x  s   r   a  usage: pdb.py [-c command] ... [-m module | pyfile] [arg] ...

Debug the Python program given by pyfile. Alternatively,
an executable module or package to debug can be specified using
the -m switch.

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   sD  dd l } |  tjdd  dddg\}}|stt td g }d}|D ]!\}}|dv r6tt t  q%|d	v r@|| q%|d
v rFd}q%|d }|s^tj	|s^td|d td |r~dd l
}z|| W n ty}   t  td Y nw |tjd d < |stj|}tj|tjd< t }	|	j| 	 z|r|	| n|	| |	jrW d S td W ng ty   td|d tddtjdd    Y nK ty   tddd tt d  Y n5 ty   t  td Y n$   t  td td t d }
|	d |
 td| d  Y q)Nr   r   zmhc:r   zcommand=r   F)z-hz--help)z-cz	--command)z-mTzError:zdoes not existz*The program finished and will be restartedZ
Restartingzwith arguments:rN  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)getoptr<   r#  r   _usageexitr   rI   rJ   ri  rw  rx  r   r   	print_excrealpathro  r
   rH   rL   r~  r  r-  r   r   
SystemExitr   SyntaxErrorro   )r  Zoptsr   rM   Zrun_as_moduleoptZoptargrA   rw  r  r  r   r   r   main  sz    



 r  rq  )NNr0   )/rI   r  r   r<   r:   r7   r*   r,   r   r?  r   r"   r   r   r   r   r   __all__r    r'   r.   r   r/   r  r8   r;   r
   re  Z_help_orderZ_commandrw   rl   rf  r   r   r   r   r   r   r	   r  r  r   r  r  r   r  r   r   r   r   <module>   sr   C		           7


L