3
h                 @   sj   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ZddlZddlZej	e
Zd
ddZdZddd	ZdS )a  
The Cython debugger

The current directory should contain a directory named 'cython_debug', or a
path to the cython project directory should be given (the parent directory of
cython_debug).

Additional gdb args can be provided only if a path to the project directory is
given.
    N Fc             C   s  |s<t jj| dd}tj|}|s<tjdtt jj| f  tj	 \}}t j
|d}z|j| |jtjdtt d  |rn|st jj| dd}	t|	}
z|
j }W d |
j  X |jd|  |jd	jd
d |D  | s|jtjd| d  |jd W d |j  X |S )NZcython_debugzcython_debug_info_*z.%s.
No debug files were found in %s. Aborting.wa              # This is a gdb command file
            # See https://sourceware.org/gdb/onlinedocs/gdb/Command-Files.html

            set breakpoint pending on
            set print pretty on

            python
            try:
                # Activate virtualenv, if we were launched from one
                import os
                virtualenv = os.getenv('VIRTUAL_ENV')
                if virtualenv:
                    path_to_activate_this_py = os.path.join(virtualenv, 'bin', 'activate_this.py')
                    print("gdb command file: Activating virtualenv: %s; path_to_activate_this_py: %s" % (
                        virtualenv, path_to_activate_this_py))
                    with open(path_to_activate_this_py) as f:
                        exec(f.read(), dict(__file__=path_to_activate_this_py))
                from Cython.Debugger import libcython, libpython
            except Exception as ex:
                from traceback import print_exc
                print("There was an error in Python code originating from the file z")
                print("It used the Python interpreter " + str(sys.executable))
                print_exc()
                exit(1)
            end
            interpreterzfile %s

c             s   s   | ]}d | V  qdS )zcy import %s
N ).0fnr   r   g/var/www/html/CrowdFlow/Picklecon/ble_analysis_env/lib/python3.6/site-packages/Cython/Debugger/Cygdb.py	<genexpr>V   s    z$make_command_file.<locals>.<genexpr>z                    python
                    import sys
                    try:
                        gdb.lookup_type('PyModuleObject')
                    except RuntimeError:
                        sys.stderr.write(
                            "z was not compiled with debug symbols (or it was "
                            "stripped). Some functionality may not work (properly).\n")
                    end
                zsource .cygdbinit)ospathjoinglobsysexitusageabspathtempfilemkstempfdopenwritetextwrapdedentstr__file__openreadclose)path_to_debug_infoZprefix_code	no_importskip_interpreterpatternZdebug_filesfdtempfilenamefr   Zinterpreter_filer   r   r   r	   make_command_file   s@    






r%   z0Usage: cygdb [options] [PATH [-- GDB_ARGUMENTS]]c             C   s  t jtd}|jddddd |jdddd	d
dd |jdddddd |j \}}| dkrxt|dkrr|d
 } ntj} |dkr|dd }| dkrd}tj	}|j
dkrtj}|j
dkrtj}tj|d |j}tjd|j
 tjd|| tjd| | t| ||d}tjd|j|| t|}	tjd||	j  tjd|j tj|jd |g| }
tjd!|j|
j xJy*tjd"|
j |
j }tjd#|
j| W n tk
r   Y nX P qnW tjd$|	j  W dQ R X tjd%| tj| tjd&| dS )'ab  
    Start the Cython debugger. This tells gdb to import the Cython and Python
    extensions (libcython.py and libpython.py) and it enables gdb's pending
    breakpoints.

    path_to_debug_info is the path to the Cython build directory
    gdb_argv is the list of options to gdb
    no_import tells cygdb whether it should import debug information
    )r   z--gdb-executablegdbz$gdb executable to use [default: gdb])destdefaulthelpz	--verbosez-v	verbositycountr   z8Verbose mode. Multiple -v options increase the verbosity)r'   actionr(   r)   z--skip-interpreterr    F
store_truez]Do not automatically point GDB to the same interpreter used to generate debugging information)r'   r(   r,   r)   N   z--T   )levelzverbosity = %rzoptions = %r; args = %rzIDone parsing command-line options. path_to_debug_info = %r, gdb_argv = %r)r   r    z3Launching %s with command file: %s and gdb_argv: %sz%Command file (%s) contains: """
%s"""zSpawning %s...z-commandzSpawned %s (pid %d)z#Waiting for gdb (pid %d) to exit...z3Wait for gdb (pid %d) to exit is done. Returned: %rz%Closing temp command file with fd: %szRemoving temp command file: %szRemoved temp command file: %s)optparseOptionParserr   
add_option
parse_argslenr   curdirloggingWARNr*   INFODEBUGbasicConfigr    loggerinfodebugr%   r&   r   r   
subprocessPopenpidwaitKeyboardInterruptfilenoremove)r   Zgdb_argvr   parseroptionsargsZlogging_levelr    r#   r   pretr   r   r	   mainm   sh    





rK   )r   FF)NNF)__doc__r   r   r   r   r   r?   r1   r7   	getLogger__name__r<   r%   r   rK   r   r   r   r	   <module>   s   
 
P