o
    [Zh!                     @   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m	Z	 d dl
mZmZ d dlmZ ejdkr?d dlmZ da	 da	 g Z	 dd Zd	d
 Zdd Zdd Zdd ZdS )    N)launcher)log	messaging)outputwin32)winapic                   C   s   dt j dS )NzDebuggee[PID=])processpid r   r   P/var/www/html/lang_env/lib/python3.10/site-packages/debugpy/launcher/debuggee.pydescribe$   s   r   c                 C   s  t d|| t }z2|r)t \}}t \}}|||||hO }t||d}	ni }	tjdkr@tjj	dkr@dd }
|	j
|
d ztj|f|dd	|	aW n tyc } z	td
||d }~ww t dt  tjdkrzStjd d at }tt|}tjttjt||t| |j jtj tj!B O  _tj"ttjt|| tj#tj$tj%B dtj&}tj't| W n ty   t j(ddd Y nw t)*t+ t,j-.dddtj&| t/0dd d |rd|tj1fd|tj2ffD ]\}}}t34t ||| |5| qt6j7t8dd}d|_9|:  W |D ]}zt;| W q  ty;   t j(dd Y q w d S |D ]}zt;| W q@ ty[   t j(dd Y q@w w )NzOSpawning debuggee process:

Command line: {0!r}

Environment variables: {1!r}

)stdoutstderrr   Zgraalpyc               
   S   s   z=t   ttjtj} z(t dt j}zt |t   W t 	| nt 	| w W ttj|  W d S ttj|  w  t
yN   tjddd Y d S w )Nz/dev/ttyzFailed to set up process groupinfolevel)ossetpgrpsignalSIGTTOUSIG_IGNopenO_RDWR	tcsetpgrpgetpgrpclose	Exceptionr   swallow_exception)Zold_handlerttyr   r   r   
preexec_fn@   s   $zspawn.<locals>.preexec_fn)r    r   )envbufsizez0Couldn't spawn debuggee: {0}

Command line:{1!r}zSpawned {0}.FzFailed to set up job objectwarningr   r	   ZlaunchTP   )ZstartMethodZisLocalProcessZsystemProcessIdnameZpointerSizer   r   zwait_for_exit())targetr&   )<r   r   setr   pipedictsysplatformimplementationr&   update
subprocessPopenr	   r   r   ZMessageHandlingErrorformatr   r   kernel32ZCreateJobObjectA
job_handleZ$JOBOBJECT_EXTENDED_LIMIT_INFORMATIONZDWORDctypesZsizeofZQueryInformationJobObjectZ!JobObjectExtendedLimitInformationZpointerZBasicLimitInformationZ
LimitFlagsZ"JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSEZJOB_OBJECT_LIMIT_BREAKAWAY_OKZSetInformationJobObjectZOpenProcessZPROCESS_TERMINATEZPROCESS_SET_QUOTAr
   ZAssignProcessToJobObjectr   atexitregisterkillr   channel
send_eventstructcalcsizer   r   r   ZCaptureOutputremove	threadingThreadwait_for_exitdaemonstartr   )Zprocess_nameZcmdliner!   Zredirect_output	close_fdsZstdout_rZstdout_wZstderr_rZstderr_wkwargsr    excZjob_infoZjob_info_sizeZprocess_handlecategoryfdteeZwait_threadr   r   r   spawn(   s   





rH   c                   C   s   t d u rd S z*t  d u r.tdt  tjdkr#tj	t
d W d S tt jtj W d S W d S  tyA   tdt  Y d S w )NzKilling {0}r   r   zFailed to kill {0})r	   pollr   r   r   r+   r,   r   r2   ZTerminateJobObjectr3   r   killpgr
   r   SIGKILLr   r   r   r   r   r   r7      s   
	r7   c                     s   zt   tjdkr dk r dM  W n ty#   td d Y nw tdt   t	
  t fddtD } ztjd	d
 i W n	 tyO   Y nw | rUt  z	tjd W d S  tyh   Y d S w )Nr   r      z$Couldn't determine process exit codez{0} exited with code {1}c                 3   s    | ]}| V  qd S )Nr   ).0predcoder   r   	<genexpr>   s    z wait_for_exit.<locals>.<genexpr>ZexitedZexitCodeZ
terminated)r	   waitr+   r,   r   r   r   r   r   r   Zwait_for_remaining_outputanywait_on_exit_predicatesr   r8   r9   _wait_for_user_input)Zshould_waitr   rP   r   r?      s0   
r?   c                  C   s   t jrUt jrWt j rYddlm}  zdd l}W n ty"   d}Y nw d}|r=| d t j	d t j
  |  d S | d t j	d t j
  t jd	 d S d S d S d S )
Nr   )r   FTz5msvcrt available - waiting for user input via getch()z Press any key to continue . . . z8msvcrt not available - waiting for user input via read()zPress Enter to continue . . .    )r+   r   stdinisattydebugpy.commonr   msvcrtImportErrordebugwriteflushZgetchread)r   r[   Z	can_getchr   r   r   rV      s$   



rV   )r5   r4   r   r   r:   r/   r+   r=   Zdebugpyr   rZ   r   r   Zdebugpy.launcherr   r,   r   r	   r3   rU   r   rH   r7   r?   rV   r   r   r   r   <module>   s2   
 "