
    
hF                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKr	SSK
JrJr  SSKJrJrJr  S rS\R$                  ;   r\r\r\(       a  \r\r " S S	5      rS
 rSqS r " S S\R4                  \R6                  5      rS rg)zPThe glue between the Python debugger interface and the Active Debugger interface    N)_wraptrace   )axdebuggateways
stackframec                      g N )argss    jC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\win32comext/axdebug/adb.pyfnullr      s        DEBUG_AXDEBUGc                   &    \ rS rSrS rS rS rSrg)OutputReflector   c                     X l         Xl        g r
   )	writefuncfile)selfr   r   s      r   __init__OutputReflector.__init__   s    "	r   c                 .    [        U R                  U5      $ r
   )getattrr   r   names     r   __getattr__OutputReflector.__getattr__#   s    tyy$''r   c                 \    U R                  U5        U R                  R                  U5        g r
   )r   r   write)r   messages     r   r!   OutputReflector.write&   s    w		 r   )r   r   N)__name__
__module____qualname____firstlineno__r   r   r!   __static_attributes__r   r   r   r   r      s    (!r   r   c                     U c  gSnU R                   c  SnS[        U 5       SU R                  R                   SU R                   U 3$ )Nz<None>z(with trace!)z **No Trace Set **z	Frame at z, file z, line: )f_traceidf_codeco_filenamef_lineno)frameaddns     r   _dumpfr1   +   sQ    }== 'D2e9+WU\\-E-E,Fhu~~N^_c^deer   c                     U R                   R                  5       nSS KnSSU R                   R                  5       U4UR                  U'   [
        R                  X0XS-   5        g !   [        R                  " 5          g = f)Nr   r   )	codeContainerGetFileName	linecacheGetTextcacheg_adb_OnSetBreakPoint	traceback	print_exc)codeContextbreakPointStatelineNofileNamer5   s        r   OnSetBreakPointr@   8   sl    ,,88:$%q+*C*C*K*K*Mx$W	!xoPQzRs   A"A% %A>c                       \ rS rSrS rS rS rS$S jrS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS%S jrS rS rS rS rS rS rS rS rS r S  r!S! r"S" r#S#r$g)&AdbD   c                 Z   S U l         S U l        S U l        S =U l        U l        S U l        S U l        S U l        S U l        S U l        S U l	        S U l
        S U l        / U l        [        R                  R                  U 5        [         R"                  " 5       U l        U R'                  5         g r
   )debugApplicationdebuggingThreaddebuggingThreadStateHandlestackSnifferCookiestackSniffercodeContainerProvider
breakFlagsbreakReasonappDebuggerappEventConnectionlogicalbotframecurrentframerecursiveDatabdbBdbr   _threadallocate_lock_threadprotectlockresetr   s    r   r   Adb.__init__E   s     $#*.'6::$"3%)"#"&# ")"7"7"9

r   c                 V    US   S:X  a  U$ [         R                  R                  X5      $ )Nr   <)rR   rS   canonic)r   fnames     r   r\   Adb.canonicW   s%    8s?Lwwt++r   c                 X    [        S5        [        R                  R                  U 5        g )Nz	adb.reset)
traceenterrR   rS   rW   rX   s    r   rW   	Adb.reset\   s    ;dr   Nc                     XR                   ;  a  / U R                   U'   U R                   U   nX$;   a  gUR                  U5        Ub  X0R                  X4'   g g )Nz$There is already a breakpoint there!)breaksappendcbreaks)r   filenamelinenocondlists        r   __xxxxx__set_breakAdb.__xxxxx__set_break`   sV    ;;&$&DKK!{{8$>9F-1LL)* r   c                     [        S[        U5      [        U R                  5      5        XR                  L a  g[        S5        g)N	stop_herer   zstop_here said 'No'!r   )r`   r1   	stopframetracevr   r/   s     r   rm   Adb.stop_herek   s6    ;uvdnn/EF NN"%&r   c                 B   [        SU R                  [        U5      5        S U l        U R                  [        R
                  :X  a  [        R                  U l        OU R                  [        R                  :X  a  [        R                  U l        OU R                  [        R                  :X  a  [        R                  U l        OO[        SU R                  5        [        R                  R                  X5      (       a  [        R                   U l        U R                  S L$ )N
break_herezCalling base 'break_here' with)r`   rK   r1   rL   r   APPBREAKFLAG_DEBUGGER_HALTBREAKREASON_DEBUGGER_HALTAPPBREAKFLAG_DEBUGGER_BLOCKBREAKREASON_DEBUGGER_BLOCKAPPBREAKFLAG_STEPBREAKREASON_STEPprintrc   rR   rS   rs   BREAKREASON_BREAKPOINTrp   s     r   rs   Adb.break_herev   s    <&-@??g@@@&@@D__ C CC&AAD__ 9 99&77D2DKK@ww!!$..#*#A#A t++r   c                    [        S[        U5      5        U R                  [        R                  :X  a  [        R
                  U l        g[        R                  R                  X5      n[        S[        U5      SU5        U$ )Nbreak_anywherer   	returning)r`   r1   rK   r   rt   ru   rL   rR   rS   r~   ro   )r   r/   rcs      r   r~   Adb.break_anywhere   s`    #VE]3??g@@@&@@DWW##D0R@	r   c                     [        S[        U5      U5        U R                  UL a"  [        S5        [        R
                  " S 5        g UR                  U l        [        R                  R                  XU5      $ )Ndispatch_returnz#dispatch_return resetting sys.trace)r`   r1   rO   ro   syssettracef_backrP   rR   rS   r   r   r/   args      r   r   Adb.dispatch_return   s\    $fUmS95(89LL!LLww&&tC88r   c                    [        S[        U5      [        U R                  5      5        XR                  L aB  [	        S[        U5      S5        [
        R                  " U R                  5        U R                  $ U R                  R                  UR                  R                  5      c  [	        S[        U5      S5        g UU l        [        R                  R                  X5      $ )Ndispatch_linez for bottom frame returing tracerz!dispatch_line has no document for- skipping trace!)r`   r1   botframerO   r   r   r   trace_dispatchrJ   FromFileNamer,   r-   rP   rR   rS   r   rp   s     r   r   Adb.dispatch_line   s    ?F5M6$--3HI(((/6%=2TU LL,,- &&&%%225<<3K3KLT3VE]DW  	 ww$$T11r   c                 `   [        S[        U5      5        [        R                  " 5       UR                  S'   XR
                  L a  [        S5        U R                  $ U R                  R                  UR                  R                  5      c  [        S[        U5      S5        g U R                  $ )Ndispatch_call__axstack_address__z1dispatch_call is self.botframe - returning tracerz!dispatch_call has no document forr   )r`   r1   r   GetStackAddressf_localsr   r   r   rJ   r   r,   r-   r   s      r   r   Adb.dispatch_call   s    ?F5M2070G0G0I,-MM!EF&&& %%225<<3K3KLT3VE]DW """r   c                     [        S[        U5      X#5        U R                  c  [        S5        g [        R
                  R                  XX#5      $ )Nr   z"trace_dispatch has no application!)r`   r1   rE   r   rR   rS   r   )r   r/   eventr   s       r   r   Adb.trace_dispatch   sB    #VE]E?  (67ww%%d5>>r   c                     [        S[        U5      5        UR                  S:w  a3  U R                  nUc  [        R
                  nU R                  US U5        g g )N	user_liner   )r`   r1   r.   rL   r   ry   _HandleBreakPoint)r   r/   rL   s      r   r   Adb.user_line   sO    ;u.>>Q**K"%66""5$<	 r   c                 D    [         R                  R                  XU5        g r
   )rR   rS   user_return)r   r/   return_values      r   r   Adb.user_return   s    D6r   c                 D    [         R                  R                  XU5        g r
   )rR   rS   user_exception)r   r/   exc_infos      r   r   Adb.user_exception   s    tH5r   c                 J   [        SUS[        U5      5        [        S[        U R                  5      5         U R                  R	                  U5      n[        SU5        / U l        SU l        U[        R                  :X  a  U R                  5         OU[        R                  :X  a  [        S5        U R                  5         OU[        R                   :X  a  [        S5        U R#                  5         OmU[        R$                  :X  a  [        S	5        U R'                  U5        O<U[        R(                  :X  a  [        S
5        U R+                  U5        O[-        S5      eS U l        g ! [        R                   a'  n[        R                  n[        SU5         S nAGN>S nAff = f)Nz$Calling HandleBreakPoint with reasonzat framez Current frame iszHandleBreakPoint returned with zHandleBreakPoint FAILED withr   zresume action is continuezresume action is stepzresume action is nextzresume action is stop outzunknown resume action flags)r`   r1   rP   rE   HandleBreakPointro   	pythoncom	com_errorr   BREAKRESUMEACTION_CONTINUEr   stackcurindexBREAKRESUMEACTION_ABORTset_quitset_continueBREAKRESUMEACTION_STEP_INTOset_stepBREAKRESUMEACTION_STEP_OVERset_nextBREAKRESUMEACTION_STEP_OUT
set_return
ValueErrorrL   )r   r/   tbreasonresumeActiondetailss         r   r   Adb._HandleBreakPoint   sL   2FJu	
 	&t/@/@(AB	;00AA&IL4lC 
7:::MMOW???./W@@@*+MMOW@@@*+MM% W???./OOE":;;1 "" 	; #==L0'::		;s   'E' 'F";FF"c                 l    [         R                  U l        [        R                  R                  U 5        g r
   )r   BREAKREASON_LANGUAGE_INITIATEDrL   rR   rS   	set_tracerX   s    r   r   Adb.set_trace  s"    "AA$r   c                    [        S5        U R                  5         S U l        U R                  b&   U R                  R                  U R                  5        S =U l        U l	        U R                  b!  U R                  R                  5         S U l
        S U l        S U l        U R                  b"  U R                  R                  5         S U l        g g ! [        R                   a    [        SU R                   35         Nf = f)N
ClosingAppz&*** Could not RemoveStackFrameSniffer )r`   rW   rO   rH   rE   RemoveStackFrameSnifferr   r   r   rI   rN   
DisconnectrM   rJ   CloserX   s    r   CloseAppAdb.CloseApp  s    < 

#"".%%==d>U>UV 7;:$"3"".##..0&*D# $%%1&&,,.)-D& 2 && <T=T=T<UVs   %C ,C?>C?c                 R   X l         Xl        [        [        R                  " U 5      [
        R                  5      U l        UR                  U R                  5      U l	        [        R                  R                  R                  U R                  U [
        R                  5      U l        g r
   )rJ   rE   r   r   DebugStackFrameSnifferr   IID_IDebugStackFrameSnifferrI   AddStackFrameSnifferrH   win32comclientconnectSimpleConnection!IID_IRemoteDebugApplicationEventsrN   )r   rE   rJ   s      r   	AttachAppAdb.AttachApp  s    %:" 0!--d3W5X5X
 #3"G"G#
 #+//"9"9"J"J!!4)R)R#
r   c                    [        SU S[        U R                  5      5        [        R                  " 5       U R
                  :w  a  [        S5        g [        U R                  5      S:X  a  S U l        S U l        S U l        S U l	        g U R                  S   u  U l
        U l        U l        U l	        U R                  SS  U l        g )NResetAXDebuggingzwith refcountz'ResetAXDebugging called on other threadr   r   )r`   lenrQ   win32apiGetCurrentThreadIdrF   r   rO   rP   rG   logbotframern   rX   s    r   r   Adb.ResetAXDebugging/  s    %t_c$BTBT>UV&&(D,@,@@;<t!!"a'#'D #'D  $D.2D+ q!	
N+!//3r   c                    Uc  UnO"[         R                  " 5       UR                  S'   [        SU 5        U R                  R                  5          [        R                  " 5       nU R                  c  X0l        OU R                  U:w  a'  [        S5         U R                  R                  5         gU R                  R                  SU R                  U R                  U R                  U R                   45        U R                  R                  5         [        S[#        U5      5        Xl        X l        Xl        SU l        [         R&                  " 5       U l        U R)                  5         g! U R                  R                  5         f = f)zYGet ready for potential debugging.  Must be called on the thread
that is being debugged.
Nr   SetupAXDebuggingz2SetupAXDebugging called on other thread - ignored!r   z"SetupAXDebugging has base frame as)r   r   r   r`   rV   acquirer   r   rF   r   releaserQ   insertrO   rn   rP   rG   r1   r   GetThreadStateHandle_BreakFlagsChanged)r   	baseFrame	userFrame
thisThreads       r   r   Adb.SetupAXDebuggingE  sK    !I 9@8O8O8QI45%t,'')	.!446J##+'1$'':5NO ##++- "")),,))77	 ##++-2F94EF!"( *1*F*F*H'! ##++-s   AE+ 0AE+ +Fc                    ^ [        ST5        TU l        U4S jn[        [        R                  U5      [        l        [        [        R
                  U5      [        l        g )NOnConnectDebuggerc                 &   > TR                  U 5      $ r
   )onDebugOutput)srM   s    r   <lambda>'Adb.OnConnectDebugger.<locals>.<lambda>v  s    k77:r   )r`   rM   r   r   stdoutstderr)r   rM   r   s    ` r   r   Adb.OnConnectDebuggerr  s?    &4&:	$SZZ;
$SZZ;
r   c                 `   [        S5        [        [        R                  [        5      (       a#  [        R                  R
                  [        l        [        [        R                  [        5      (       a#  [        R                  R
                  [        l        S U l        U R                  5         g )NOnDisconnectDebugger)	r`   
isinstancer   r   r   r   r   rM   r   rX   s    r   r   Adb.OnDisconnectDebuggerz  s\    )*cjj/22CJcjj/22CJr   c                     [        SU5        g )N	OnSetNamer`   r   s     r   r   Adb.OnSetName  s    ;%r   c                     [        SU5        g )NOnDebugOutputr   )r   strings     r   r   Adb.OnDebugOutput  s    ?F+r   c                     [        S5        g )NOnCloser   rX   s    r   r   Adb.OnClose  s
    9r   c                     [        SU5        g )NOnEnterBreakPointr   r   rdats     r   r   Adb.OnEnterBreakPoint      &-r   c                     [        SU5        g )NOnLeaveBreakPointr   r   s     r   r  Adb.OnLeaveBreakPoint  r  r   c                     [        SU5        g )NOnCreateThreadr   r   s     r   r  Adb.OnCreateThread  s    #T*r   c                     [        SU5        g )NOnDestroyThreadr   r   s     r   r
  Adb.OnDestroyThread  s    $d+r   c                 H    [        SX5        Xl        U R                  5         g )NzDebugger OnBreakFlagChange)r`   rK   r   )r   abfr   s      r   OnBreakFlagChangeAdb.OnBreakFlagChange  s    /;!r   c                    [        SU R                   S3SU R                   S3-   S[        R                  " 5        3-   5        [        SU R                  5        [        U R                  5      (       d  U R                  (       a  U R                  (       a;  [        S[        U R                  5      5        U R                  U R                  l        O3[        S5        U R                  b  U R                  U R                  l        U R                  bb  U R                  (       aP  U R                  [        R                  " 5       :w  a,  [        R                  " U R                  U R                  5        g g g g )	Nz_BreakFlagsChanged to  zwith our thread = z, zand debugging thread = z_BreakFlagsChanged has breakszBreakFlagsChange with bot framez&BreakFlagsChanged, but no bottom frame)r`   rK   rF   r   r   r   rc   r   rO   r1   r   r*   rn   rG   r   SetThreadStateTracerX   s    r   r   Adb._BreakFlagsChanged  s*   $T__$5Q7"4#7#7"8;<'(C(C(E'FGH	

 	-t{{;
 t{{t##7@T@T9UV
 04/B/B$$,>?>>--1-@-@DNN* ++7$$(C(C(EE''//1D1D F   8r   c                 ,   [        SXX#U5        U[        R                  :X  a;  U R                  X5      nU(       a  [	        SU5        [        SU R                  5        OU R                  X5        U R                  5         [        SU R                  5        g )Nr9   z*** set_break failed -z+_OnSetBreakPoint just set BP and has breaksz$_OnSetBreakPoint leaving with breaks)	r`   r   BREAKPOINT_ENABLED	set_breakrz   r   rc   clear_breakr   )r   keyr<   bpsr>   problems         r   r9   Adb._OnSetBreakPoint  ss    %t+FK',,,nnS1G.8?MS)!4dkkBr   )rV   rM   rN   r   rK   rL   rJ   r   rP   rE   rF   rG   r   rO   rQ   r   rI   rH   rn   r
   )NN)%r$   r%   r&   r'   r   r\   rW   _Adb__xxxxx__set_breakrm   rs   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r   r9   r(   r   r   r   rB   rB   D   s    $,
	2	,	92,#(?=76  D ..
"4,*"Z<&,..+,"
"H
Cr   rB   c                  0    [         c
  [        5       q [         $ r
   )r8   rB   r   r   r   Debuggerr    s    }Lr   )__doc__rT   rR   osr   r:   r   r   win32com.client.connectr   win32com.axdebug.utilr   r    r   r   r   r   environ	debuggingr`   ro   r   r1   r8   r@   rS   RemoteDebugApplicationEventsrB   r  r   r   r   <module>r'     s    V  
 	 
     . + +	 rzz)	
	JF
! 
!f 		HC#''888 HCVr   