
    *dw"                         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 Zd Zd	 Zd
 Zd ZdS )    N)launcher)log	messaging)outputwin32)winapic                  "    dt           j         dS )NzDebuggee[PID=])processpid     9lib/python3.11/site-packages/debugpy/launcher/debuggee.pydescriber   $   s    )7;))))r   c           
         t          j        d||           t                      }	 |rGt          j                    \  }}t          j                    \  }}|||||hz  }t          ||          }	ni }	t          j        dk    rd }
|	                    |
           	 t          j
        |f|dd|	an:# t          $ r-}t          j        d                    ||                    d }~ww xY wt          j        d	t!                                 t          j        dk    r	 t"          j                            d d           at#          j                    }t#          j        t/          j        |                    }t"          j                            t(          t"          j        t/          j        |          |t/          j        |                     |j        xj        t"          j        t"          j        z  z  c_        t"          j                             t(          t"          j        t/          j        |          |           t"          j        !                    t"          j"        t"          j#        z  d
t          j$                  }t"          j        %                    t(          |           n&# t          $ r t          j&        dd           Y nw xY wtO          j(        tR                     tT          j+        ,                    dddt          j$        | t[          j.        d          dz  d           |r]d|t          j/        fd|t          j0        ffD ]>\  }}}tc          j2        t!                      |||           |3                    |           ?ti          j5        tl          d          }d|_7        |8                                 |D ]<}	 t          j9        |           # t          $ r t          j&        d           Y 9w xY wd S # |D ]<}	 t          j9        |           # t          $ r t          j&        d           Y 9w xY ww xY w)NzOSpawning debuggee process:

Command line: {0!r}

Environment variables: {1!r}

)stdoutstderrr   c                  @   	 t          j                     t          j        t          j        t          j                  } 	 t          j        dt           j                  }	 t          j        |t          j                               t          j	        |           n# t          j	        |           w xY w	 t          j        t          j        |            d S # t          j        t          j        |            w xY w# t          $ r t          j        dd           Y d S w xY 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)old_handlerttys     r   
preexec_fnzspawn.<locals>.preexec_fn?   s    JLLL
 #)-"O"OKC gj")<<*Lbjll;;;HSMMMMBHSMMMMMfnkBBBBBfnkBBBB    )8      s@   <C9 C &B C B00C 4C9 !C66C9 9 DD)r&   r   )envbufsizez0Couldn't spawn debuggee: {0}

Command line:{1!r}zSpawned {0}.FzFailed to set up job objectwarningr   r   launchTP   )startMethodisLocalProcesssystemProcessIdnamepointerSizer   r   zwait_for_exit())targetr0   ):r   r   setr   pipedictsysplatformupdate
subprocessPopenr   r"   r   MessageHandlingErrorformatr   r   kernel32CreateJobObjectA
job_handle$JOBOBJECT_EXTENDED_LIMIT_INFORMATIONDWORDctypessizeofQueryInformationJobObject!JobObjectExtendedLimitInformationpointerBasicLimitInformation
LimitFlags"JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSEJOB_OBJECT_LIMIT_BREAKAWAY_OKSetInformationJobObjectOpenProcessPROCESS_TERMINATEPROCESS_SET_QUOTAr   AssignProcessToJobObjectr#   atexitregisterkillr   channel
send_eventstructcalcsizer   r   r   CaptureOutputremove	threadingThreadwait_for_exitdaemonstartr!   )process_namecmdliner'   redirect_output	close_fdsstdout_rstdout_wstderr_rstderr_wkwargsr&   excjob_infojob_info_sizeprocess_handlecategoryfdteewait_threads                      r   spawnro   (   s~   H	+ 	   I|7 	 "$Hh!#Hh(HhAAI(;;;FFF<7""  0 MMZM000	 &wMCMMfMMGG 	 	 	0DKK   	 	,,,<7""&V#_==dDII
!FHH &V]8-D-D E E99<N8,,!N=11   .99 = 8999 77<N8,,!	   "(!<!<,v/GGK" " 88^TTTT V V V%&C9UUUUUUV 	##'"&#*;$%s33a7 		
 		
 		
  	%8SZ08SZ0& % %!"c $XZZ2sCCC  $$$$&mBSTTT!  	7 	7B7 7 7 7%I6666667	7 	7) 	7 	7B7 7 7 7%I6666667	7s   A4O> B1 0O> 1
C(;(C##C((5O> FJ$ #O> $ KO> KC6O> OO98O9>P?PP?P;	8P?:P;	;P?c                     t           d S 	 t                                           t          j        dt	                                 t
          j        dk    r't          j        	                    t          d           d S t          j        t           j        t          j                   d S d S # t           $ r% t          j        dt	                                 Y d S w xY w)NzKilling {0}r   r   zFailed to kill {0})r   pollr   r   r   r6   r7   r   r=   TerminateJobObjectr?   r   killpgr   r   SIGKILLr"   r#   r   r   r   rR   rR      s    @<<>>!H]HJJ///|w&&22:qAAAAA 	'+v~66666 "!  @ @ @2HJJ??????@s   A/B) <)B) )+CCc                  T   	 t                                           t          j        dk    rdk     rdz  n&# t          $ r t          j        d           dY nw xY wt          j        dt                                 t          j
                     t          fdt          D                       } 	 t          j                            dd	i           n# t          $ r Y nw xY w| rt!                       	 t          j                            d
           d S # t          $ r Y d S w xY w)Nr   r      z$Couldn't determine process exit codez{0} exited with code {1}c              3   .   K   | ]} |          V  d S )Nr   ).0predcodes     r   	<genexpr>z wait_for_exit.<locals>.<genexpr>   s+      EETdd4jjEEEEEEr   exitedexitCode
terminated)r   waitr6   r7   r"   r   r#   r   r   r   wait_for_remaining_outputanywait_on_exit_predicatesr   rS   rT   _wait_for_user_input)should_waitr{   s    @r   r[   r[      s[   
||~~<7""taxx
 DLD   DEEE H'T:::
$&&& EEEE-DEEEEEK##Hz4.@AAAA     ##L11111   s3   48  AA4"C 
C$#C$8D 
D'&D'c                  d   t           j        rt           j        rt           j                                        rddlm}  	 dd l}d}n# t          $ r d}Y nw xY w|rc | j        d           t           j        	                    d           t           j        
                                 |                                 d S  | j        d           t           j        	                    d           t           j        
                                 t           j                            d	           d S d S d S d S )
Nr   )r   TFz5msvcrt 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 . . .    )r6   r   stdinisattydebugpy.commonr   msvcrtImportErrordebugwriteflushgetchread)r   r   	can_getchs      r   r   r      sH   
z ci CI$4$4$6$6 &&&&&&	MMM II  	 	 	III	
  		CIMNNNJ?@@@JLLNNNNNCIPQQQJ=>>>JINN1'     s    A AA)rP   rB   r   r   rU   r9   r6   rY   debugpyr   r   r   r   debugpy.launcherr   r7   r   r   r?   r   r   ro   rR   r[   r   r   r   r   <module>r      s*  
   				       



           ) ) ) ) ) ) ) ) # # # # # #<7''''''  9
 R * * *F7 F7 F7R@ @ @$  D    r   