
    8\h)                     B   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d dlm	Z	  ej
        d          pdZe j                            e j                            ej                  d          Ze j                            e j                            e          d          ZdZdZd Zd	Zd d
ddZd Z e            \  ZZedk     r% ej        ded           ded          de           d Z e             d Z e            Zd Z G d dej                  Z dS )    N)supportgdbzpython-gdb.pyzgdb_sample.py
builtin_id123c                  R    d t           j                                        D             S )Nc                 D    i | ]\  }}|                     d           ||S )PYTHON)
startswith).0namevalues      </opt/python-3.11.14/usr/lib/python3.11/test/test_gdb/util.py
<dictcomp>z%clean_environment.<locals>.<dictcomp>   s>     . . .KD%??8,,.D% . . .    )osenvironitems r   r   clean_environmentr      s0    . .2:+;+;+=+= . . . .r   )r   r   T)exitcodecheckc                    	 t                      }|r|                    |           t          ddg}t          dk    r|                    ddt
           f           |                    |           t          j        |t          j        t          j        t          j        dd|          }|j	        }|j
        }|rA|j        | k    r6t          j        |          }	t          |	 d	|j         d
|  d|d|	          ||fS )Nz--batchz-nx      z--init-eval-commandzadd-auto-load-safe-path utf8backslashreplace)stdinstdoutstderrencodingerrorsenvz failed with exit code z, expected exit code z	:
stdout=z
stderr=)r   updateGDB_PROGRAMGDB_VERSIONextendCHECKOUT_HOOK_PATH
subprocessrunPIPEr   r    
returncodeshlexjoin	Exception)
r   r   argsenv_varsr#   cmdprocr   r    cmd_texts
             r   run_gdbr5   !   sS    

C 

8  C f

)C/ACCE 	F 	F 	FJJt>o 2  D [F[F .H,,:c??8 - -DO - -.6- -"(- - #)- - . . 	.
 Fr   c                  j   	 t          d          \  } }n)# t          $ r}t          j        d|           d }~ww xY wt	          j        d|           }|t          d| z            | }t          |                    d                    }t          |                    d                    }||f}||fS )Nz	--versionz'Couldn't find gdb program on the path: z ^(?:GNU|HP) gdb.*?\b(\d+)\.(\d+)zunable to parse gdb version: %r      )	r5   OSErrorunittestSkipTestresearchr/   intgroup)r   r    excmatchversion_textmajorminorversions           r   get_gdb_versionrF   K   s    Q -- Q Q Q  O# O OPPPQ I96BBE}9FBCCCLAEAEenG'""s    
;6;)r   r   zIgdb versions before 7.0 didn't support python embedding. Saw gdb version .r7   z:
c                      t          ddt          j        d          \  } }d|v rt          j        d|          | st          j        d|          d| v rt          j        d	          d S )
Nz9--eval-command=python import sys; print(sys.version_info)--argsF)r   zauto-loading has been declinedz;gdb security settings prevent use of custom hooks; stderr: z4gdb not built with embedded python support; stderr: zmajor=2zgdb built with Python 2)r5   sys
executabler:   r;   )r   r    s     r   check_usable_gdbrL   j   s     C#.  NFF
 (611"" "# # 	#  #"" "# # 	# F 9::: r   c                      t          j        d          } | sdS |                                 }d|v ot          d |D                       S )NCFLAGSFz-mcetc              3   l   K   | ]/}|                     d           o|                    d           V  0dS )z-fcf-protection)z=nonez=returnN)r
   endswith)r   flags     r   	<genexpr>z!cet_protection.<locals>.<genexpr>   s\       ' ' __%677 A!]]+?@@@' ' ' ' ' 'r   )	sysconfigget_config_varsplitany)cflagsflagss     r   cet_protectionrY      si    %h//F uLLNNE  ' ' ' %' ' ' ' '(r   c                      t           j        rt          dt          d          dt          d          d           t                                          D ]} t          d| z              t          dt                      t                       d S d S )Nzgdb version r   rG   r7   :z    z
    path: )r   verboseprintr&   GDB_VERSION_TEXT
splitlinesr%   )lines    r   setup_modulera      s     ?[^??k!n???@@@$//11 	" 	"D'D.!!!!(;(())) r   c                   0    e Zd Z	 ddedddfdZd Zd ZdS )DebuggerTestsNFc                 ,   	 dd|z  ddg}t           dk    r|dgz  }|rt          r|dgz  }||z  }n|dgz  }d	 |D             }|d
t          j        gz  }|                    t          j                               |s|dgz  }|r|d|gz  }n|r||gz  }t          |dt          i\  }	}
|s2|
	                                D ]}t          |t          j                   d|
v rt          j        d          dD ]}||	v rt          j        |d          |	S )Nzset breakpoint pending yeszbreak %szset print address offr*   r   zset print entry-values nonext	backtracec                     g | ]}d |z  S )z--eval-command=%sr   )r   r2   s     r   
<listcomp>z1DebuggerTests.get_stack_trace.<locals>.<listcomp>   s    >>>c#c)>>>r   rI   z-Sz-cPYTHONHASHSEED)filezPC not savedzKgdb cannot walk the frame object because the Program Counter is not present)z!(frame information optimized out)z*Unable to read information on python framez)(unable to read python frame information)z,Backtrace stopped: frame did not save the PCz ?? ()z found in gdb output)r&   CET_PROTECTIONrJ   rK   r'   r)   _args_from_interpreter_flagsr5   ri   r_   r]   r    r:   r;   )selfsourcescript
breakpointcmds_after_breakpointimport_siteignore_stderrcommandsr0   outerrr`   patterns                r   get_stack_tracezDebuggerTests.get_stack_trace   s   
	0 )# $
. &  455H  		& %
 VH$--HH%H
 ?>X>>>! 	!J;==>>> 	TFND 	T6N"DD 	VHD D@@@S 	-(( - -d,,,,, S  # %3 4 4 4
 	L 	LG$ #~~'7(J(J(JKKK  
r   c                 f    	 |                      |                    |          |d|           d S )Nz did not end with msg)
assertTruerP   )rm   actualexp_ends      r   assertEndsWithzDebuggerTests.assertEndsWith  sK    G008>H 	 	J 	J 	J 	J 	Jr   c                     t          j        ||t           j                  }|s|                     |d|           d S d S )Nz did not match rz   )r<   rA   DOTALLfail)rm   r}   rw   ms       r   assertMultilineMatchesz$DebuggerTests.assertMultilineMatches   sQ    HWfbi00 	EII66677CIDDDDD	E 	Er   )__name__
__module____qualname__BREAKPOINT_FNrx   r   r   r   r   r   rc   rc      sg        2%)$#0.2$)&+	z z z zxJ J J
E E E E Er   rc   )!r   r<   r-   shutilr)   rJ   rS   r:   testr   whichr%   pathr.   dirnamerK   r(   __file__SAMPLE_SCRIPTr   ri   r   r&   r5   rF   r^   r;   rL   rY   rk   ra   TestCaserc   r   r   r   <module>r      s    				 				       



            fl5!!*U W\\"'//#."A"A"13 3  RW__X66HH. . . T ' ' ' ' 'T# # #. !0 1 1  +
(
	&q>	 	,7N	 		 	  ; ; ;,     
( 
( 
(  !!  HE HE HE HE HEH% HE HE HE HE HEr   