o
    f                     @   sn   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	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   s2  |st j| dd}t|}|stdtt j| f  t	 \}}t 
|d}zi|| |tdtt d  |rAnL|sft j| dd}	t|	}
z
|
 }W |
  n|
  w |d|  |d	d
d |D  |s|td| d  |d W |  |S W |  |S |  w )N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   Q/var/www/html/mig_web/myenv/lib/python3.10/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_infoprefix_code	no_importskip_interpreterpatterndebug_filesfdtempfilenamefr   interpreter_filer   r   r   r
   make_command_file   sT   





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 | \}}| du r<t|dkr9|d
 } ntj} |du rF|dd }| dkrLd}tj	}|j
dkrWtj}|j
dkr_tj}tj|d |j}td|j
 td|| td| | t| ||d}td|j|| t|V}	td||	  td|j t|jd |g| }
td!|j|
j 	 ztd"|
j |
 }td#|
j| W n	 ty   Y nw nqtd$|	  W d   n1 sw   Y  td%| t| t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,   r0   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   gdb_argvr!   parseroptionsargslogging_levelr"   r&   r   pretr   r   r
   mainm   sz   




	
rQ   )r   FF)NNF)__doc__r   r   r   r   r   rC   r5   r;   	getLogger__name__r@   r)   r   rQ   r   r   r   r
   <module>   s   

Q