Current File : //usr/local/lib/python3.6/site-packages/ptrace/debugger/__pycache__/application.cpython-36.pyc
3

�d�
�@s�ddlmZddlmZmZmZmZmZmZddl	m
Z
ddlmZddlm
Z
ddlmZddlmZmZddlmZdd	lmZGd
d�de�ZdS)
�)�OptionGroup)�	getLogger�
StreamHandler�DEBUG�INFO�WARNING�ERROR)�exit)�PtraceError)�error)�
locateProgram)�ProcessExit�
DebuggerError)�EPERM)�createChildc@sNeZdZdd�Zdd�Zdd�Zdd�Zdd
d�Zdd
�Zdd�Z	dd�Z
d	S)�ApplicationcCsdS)N�)�selfrr�D/tmp/pip-build-in2aja_b/python-ptrace/ptrace/debugger/application.py�__init__szApplication.__init__cCsTt�}t|�}|j|�|jjr&t}n |jjr4t}n|jjrBt	}nt
}|j|�dS)N)rr�
addHandler�options�debugr�verboser�quietrr�setLevel)r�fd�logger�handler�levelrrr�	_setupLogs
zApplication._setupLogcCs|jrt|jd�|jd<dS)Nr)�programr)rrrr�processOptions szApplication.processOptionscCsRt|d�}|jdddddd�|jdd	d
ddd�|jddddd�|j|�dS)
NZLoggingz--quietz-qz!Be quiet (set log level to ERROR)�
store_trueF)�help�action�defaultz	--verbosez-vz"Debug mode (set log level to INFO)z--debugz#Debug mode (set log level to DEBUG))r�
add_option�add_option_group)r�parser�logrrr�createLogOptions$s





zApplication.createLogOptionsNcCst||jj|�S)N)rrZ	no_stdout)rZ	arguments�envrrrr.szApplication.createChildcCsd|jjr<y|jj�Wn$tk
r:td�td�YnX|jjrN|jj�|jj	r`|jj
�dS)Nz1--fork option is not supported by your OS, sorry!�)r�fork�debuggerZ	traceForkrrr	Z
trace_execZ	traceExecZtrace_cloneZ
traceClone)rrrr�
setupDebugger1s
zApplication.setupDebuggercCs�|jjr"|jj}d}td|�n|j|j�}d}y|jj||d�Sttfk
r�}z4t	|t�rz|j
tkrztd|�ntd|�WYdd}~XnXdS)NFzAttach process %sT)�is_attachedz\ERROR: You are not allowed to trace process %s (permission denied or process already traced)z%ERROR: Process can no be attached! %s)r�pidrrr!r/Z
addProcessr
r
�
isinstance�errnor)rr2r1�errrrr�
createProcess>s

zApplication.createProcesscCsb|jdddddd�|jdddd	d
d�|jdd
d	d
d�|jddd	d
d�|jddd	d
d�dS)Nz--pidz-pz2Attach running process specified by its identifier�int)r$�typer&z--forkz-fz&Trace fork() event and child processesr#F)r$r%r&z--trace-execzTrace execve() eventz
--trace-clonezTrace clone() eventz--no-stdoutzUUse /dev/null as stdout/stderr, or close stdout and stderr if /dev/null doesn't exist)r')rr)rrr�createCommonOptionsQs





zApplication.createCommonOptions)N)�__name__�
__module__�__qualname__rr r"r+rr0r6r9rrrrr
s


rN)�optparser�loggingrrrrrr�sysr	Zptracer
rZptrace.toolsrZptrace.debuggerr
rr4rZptrace.debugger.childr�objectrrrrr�<module>s