U
    ‡ª/eö  ã                   @   sL   d 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„ Zdd„ Z	dS )zFProvides facilities to dump all stacks of all threads in the process.
é    N)Úlogc               	   C   s¢   t  ¡ j} t ¡ }t d|¡ t ¡  	¡ D ]f\}}|| kr<q*t  
¡ D ]}|j| krD|j}|j} qlqDd }}d t |¡¡}t d|||||¡ q*t d|¡ dS )zJDump stacks of all threads in this process, except for the current thread.z!Dumping stacks for process {0}...z	<unknown>Ú z8Stack of thread {0} (tid={1}, pid={2}, daemon={3}):

{4}z(Finished dumping stacks for process {0}.N)Ú	threadingÚcurrent_threadÚidentÚosÚgetpidr   ÚinfoÚsysÚ_current_framesÚitemsÚ	enumerateÚnameÚdaemonÚjoinÚ	tracebackÚformat_stack)ÚtidÚpidZt_identÚframeÚtZt_nameZt_daemonÚstack© r   ú9/tmp/pip-unpacked-wheel-dg3irmqq/debugpy/common/stacks.pyÚdump   s,    

ú	r   c                    s*   ‡ fdd„}t j|d}d|_| ¡  dS )zKInvokes dump() on a background thread after waiting for the specified time.c                      s.   t  ˆ ¡ z
tƒ  W n   t ¡  Y nX d S )N)ÚtimeÚsleepr   r   Zswallow_exceptionr   ©Úsecsr   r   Údumper5   s
    

zdump_after.<locals>.dumper)ÚtargetTN)r   ÚThreadr   Ústart)r   r   Úthreadr   r   r   Ú
dump_after2   s    r$   )
Ú__doc__r   r
   r   r   r   Zdebugpy.commonr   r   r$   r   r   r   r   Ú<module>   s   !