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

�dD�@sbddlmZmZddlmZmZddlmZGdd�de�Z	Gdd�de�Z
dd
d�Zdd
�ZdS)�)�
formatAddress�
formatWordHex)�
CPU_WORD_SIZE�CPU_MAX_UINT)�PtraceErrorc@s eZdZdZdd�Zdd�ZdS)�BacktraceFramez�
    Backtrace frame.

    Attributes:
     - ip: instruction pointer
     - name: name of the function
     - arguments: value of the arguments
    cCs||_d|_g|_dS)Nz???)�ip�name�	arguments)�selfr�r�B/tmp/pip-build-in2aja_b/python-ptrace/ptrace/debugger/backtrace.py�__init__szBacktraceFrame.__init__cCs,dd�|jD�}dt|j�|jdj|�fS)Ncss|]}t|�VqdS)N)r)�.0�argrrr
�	<genexpr>sz)BacktraceFrame.__str__.<locals>.<genexpr>zIP=%s: %s (%s)z, )r
rrr	�join)rr
rrr
�__str__szBacktraceFrame.__str__N)�__name__�
__module__�__qualname__�__doc__rrrrrr
rsrc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�	BacktracezA
    Backtrace: all process frames since the start function.
    cCsg|_d|_dS)NF)�frames�	truncated)rrrr
rszBacktrace.__init__cCs|jj|�dS)N)r�append)r�framerrr
r#szBacktrace.appendcCs
t|j�S)N)�iterr)rrrr
�__iter__&szBacktrace.__iter__cCs
t|j�S)N)�lenr)rrrr
�__len__)szBacktrace.__len__N)rrrrrrrr rrrr
rs
r��c

Cs�t�}|j�}|j�}d}x�||kr,d|_Py|j|�}Wntk
rRd}YnX|rx|rx||td}t||�}nd}t||||�}	|j	|	�|s�P|j|t�}|t
kr�P|}|d7}qW|S)z�
    Get the current backtrace of the specified process:
     - max_args: maximum number of arguments in a frame
     - max_depth: maximum number of frames

    Return a Backtrace object.
    rTN��)rZgetInstrPointerZgetFramePointerr�readWordrr�min�getBacktraceFramerr)
�processZmax_argsZ	max_depthZ	backtracer�fp�depthZnextfp�nargsrrrr
�getBacktrace-s4

r,cCs^t|�}|t}y4x.t|�D]"}|t7}|j|�}|jj|�qWWntk
rXYnX|S)z�
    Get a backtrace frame:
     - ip: instruction pointer
     - fp: frame pointer
     - nargs: number of arguments

    Return a BacktraceFrame object.
    )rr�ranger%r
rr)r(rr)r+r�address�index�wordrrr
r'`s	
r'N)r!r")
Zptrace.ctypes_toolsrrZptrace.cpu_inforrZptracer�objectrrr,r'rrrr
�<module>s
3