a oeF@sdZddlZddlZddlZddlZddlZddlZddlZddlZ ddl m Z m Z m Z ddlmZddlmZmZmZddZzejd dZWneydZYn0eZeZere Ze ZGd d d Zd d ZdaddZGdddejejZ ddZ!dS)zQThe glue between the Python debugger interface and the Active Debugger interface N)_wrap _wrap_removetrace)unwrap)axdebuggateways stackframecGsdSN)argsr r 8C:\Program Files\Certbot\pkgs\win32comext\axdebug\adb.pyfnullsrZ DEBUG_AXDEBUGc@s$eZdZddZddZddZdS)OutputReflectorcCs||_||_dSr ) writefuncfile)selfrrr r r __init__%szOutputReflector.__init__cCs t|j|Sr )getattrrrnamer r r __getattr__)szOutputReflector.__getattr__cCs|||j|dSr )rrwrite)rmessager r r r,s zOutputReflector.writeN)__name__ __module__ __qualname__rrrr r r r r$srcCs<|dur dSd}|jdurd}dt||jj|j|fSdS)Nzz (with trace!)z **No Trace Set **z Frame at %d, file %s, line: %d%s)f_traceidf_code co_filenamef_lineno)frameZaddnr r r _dumpf1s r#cCs\zB|j}ddl}dd|j|f|j|<t||||dWntYn0dS)Nrr) Z codeContainerZ GetFileName linecacheZGetTextcacheg_adb_OnSetBreakPoint traceback print_exc) codeContextZbreakPointStatelineNoZfileNamer$r r r OnSetBreakPointCs r,c@seZdZddZddZddZdBdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'ZdCd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zdd?Z!d@dAZ"dS)DAdbcCsvd|_d|_d|_d|_|_d|_d|_d|_d|_d|_d|_ d|_ d|_ g|_ t j|t|_|dSr )debugApplicationdebuggingThreaddebuggingThreadStateHandlestackSnifferCookie stackSniffercodeContainerProvider breakFlags breakReason appDebuggerappEventConnectionlogicalbotframe currentframe recursiveDatabdbBdbr_thread allocate_lock_threadprotectlockresetrr r r rPs    z Adb.__init__cCs|ddkr|Stj||S)Nr<)r;r<canonic)rfnamer r r rCbs z Adb.canoniccCstdtj|dS)Nz adb.reset) traceenterr;r<r@rAr r r r@gsz Adb.resetNcCsN||jvrg|j|<|j|}||vr*dS|||durJ||j||f<dS)Nz$There is already a breakpoint there!)breaksappendZcbreaks)rfilenamelinenoZcondlistr r r Z__xxxxx__set_breakks    zAdb.__xxxxx__set_breakcCs0tdt|t|j||jur$dStddS)N stop_hererzstop_here said 'No'!r)rEr# stopframetracevrr"r r r rKvs  z Adb.stop_herecCstd|jt|d|_|jtjkr.tj|_nN|jtjkrDtj|_n8|jtj krZtj |_n"t d|j t j||r|tj|_|jduS)N break_herezCalling base 'break_here' with)rEr4r#r5rAPPBREAKFLAG_DEBUGGER_HALTBREAKREASON_DEBUGGER_HALTZAPPBREAKFLAG_DEBUGGER_BLOCKZBREAKREASON_DEBUGGER_BLOCKZAPPBREAKFLAG_STEPBREAKREASON_STEPprintrFr;r<rOZBREAKREASON_BREAKPOINTrNr r r rOs       zAdb.break_herecCsJtdt||jtjkr&tj|_dStj ||}t dt|d||S)Nbreak_anywhererZ returning) rEr#r4rrPrQr5r;r<rTrM)rr"rcr r r rTs zAdb.break_anywherecCsHtdt|||j|ur0tdtddS|j|_tj |||S)Ndispatch_returnz#dispatch_return resetting sys.trace) rEr#r8rMsyssettracef_backr9r;r<rVrr"argr r r rVs  zAdb.dispatch_returncCs~tdt|t|j||jurBtdt|dt|j|jS|j |j j durjtdt|ddS||_ t j||S)N dispatch_linez for bottom frame returing tracerz!dispatch_line has no document for- skipping trace!)rEr#botframer8rrWrXtrace_dispatchr3 FromFileNamerr r9r;r<r\rNr r r r\s   zAdb.dispatch_linecCsbtdt|t|jd<||jur4td|jS|j |j j dur\tdt|ddS|jS)N dispatch_call__axstack_address__z1dispatch_call is self.botframe - returning tracerz!dispatch_call has no document forr]) rEr#rGetStackAddressf_localsr^rr_r3r`rr rZr r r ras  zAdb.dispatch_callcCs:tdt||||jdur(tddStj||||S)Nr_z"trace_dispatch has no application!)rEr#r.rr;r<r_)rr"Zeventr[r r r r_s  zAdb.trace_dispatchcCs>tdt||jdkr:|j}|dur,tj}||d|dS)N user_liner)rEr#r!r5rrR_HandleBreakPoint)rr"r5r r r res  z Adb.user_linecCstj|||dSr )r;r< user_return)rr"Z return_valuer r r rgszAdb.user_returncCstj|||dSr )r;r<user_exception)rr"exc_infor r r rhszAdb.user_exceptionc Cstd|dt|tdt|jz|j|}td|Wn6tjyr}ztj }t d|WYd}~n d}~00g|_ d|_ |tj kr|n~|tj krtd|nb|tjkrtd|nF|tjkrtd ||n(|tjkr td ||ntd d|_dS) Nz$Calling HandleBreakPoint with reasonzat framez Current frame iszHandleBreakPoint returned with zHandleBreakPoint FAILED withrzresume action is continuezresume action is stepzresume action is nextzresume action is stop outzunknown resume action flags)rEr#r9r.ZHandleBreakPointrM pythoncom com_errorrZBREAKRESUMEACTION_CONTINUErstackZcurindexZBREAKRESUMEACTION_ABORTset_quitZ set_continueZBREAKRESUMEACTION_STEP_INTOZset_stepZBREAKRESUMEACTION_STEP_OVERZset_nextZBREAKRESUMEACTION_STEP_OUTZ set_return ValueErrorr5)rr"tbreasonZ resumeActionZdetailsr r r rfs8             zAdb._HandleBreakPointcCstj|_tj|dSr )rZBREAKREASON_LANGUAGE_INITIATEDr5r;r< set_tracerAr r r rqsz Adb.set_tracecCstd|d|_|jdurVz|j|jWn"tjyTtd|jYn0|j rft |j d|_|_ |j dur|j d|_ d|_d|_ |jdur|jd|_dS)NZ ClosingAppz(*** Could not RemoveStackFrameSniffer %d)rEr@r8r1r.ZRemoveStackFrameSnifferrjrkrr2rr7Z Disconnectr6r3CloserAr r r CloseApps.        z Adb.CloseAppcCsJ||_||_tt|tj|_||j|_ t j j |j|tj|_dSr )r3r.rr ZDebugStackFrameSnifferrZIID_IDebugStackFrameSnifferr2ZAddStackFrameSnifferr1win32comZclientZconnectZSimpleConnectionZ!IID_IRemoteDebugApplicationEventsr7)rr.r3r r r AttachApp,s  z Adb.AttachAppcCstd|dt|jt|jkr.tddSt|jdkrXd|_d|_d|_d|_ dS|jd\|_ |_ |_|_ |jdd|_dS)NResetAXDebuggingz with refcountz'ResetAXDebugging called on other threadrr) rElenr:win32apiGetCurrentThreadIdr/rr8r9r0Z logbotframerLrAr r r rv=s"zAdb.ResetAXDebuggingcCs|dur|}nt|jd<td||jzht}|jdurL||_n@|j|krnt dW|j dS|j d|j |j|j|jfW|j n |j 0t dt|||_||_||_ d|_t|_|dS)ziGet ready for potential debugging. Must be called on the thread that is being debugged. NrbSetupAXDebuggingz2SetupAXDebugging called on other thread - ignored!rz"SetupAXDebugging has base frame as)rrcrdrEr?acquirerxryr/rreleaser:insertr8rLr9r0r#r^ZGetThreadStateHandle_BreakFlagsChanged)rZ baseFrameZ userFrameZ thisThreadr r r rzSs<       zAdb.SetupAXDebuggingcs<td|_fdd}ttj|t_ttj|t_dS)NOnConnectDebuggercs |Sr )Z onDebugOutput)sr6r r z'Adb.OnConnectDebugger..)rEr6rrWstdoutstderr)rr6rr rr rs   zAdb.OnConnectDebuggercCsFtdttjtrtjjt_ttjtr4tjjt_d|_|dS)NOnDisconnectDebugger) rE isinstancerWrrrrr6rmrAr r r rs    zAdb.OnDisconnectDebuggercCstd|dS)N OnSetNamerErr r r rsz Adb.OnSetNamecCstd|dS)N OnDebugOutputr)rstringr r r rszAdb.OnDebugOutputcCs tddS)NOnCloserrAr r r rsz Adb.OnClosecCstd|dS)NOnEnterBreakPointrrrdatr r r rszAdb.OnEnterBreakPointcCstd|dS)NOnLeaveBreakPointrrr r r rszAdb.OnLeaveBreakPointcCstd|dS)NOnCreateThreadrrr r r rszAdb.OnCreateThreadcCstd|dS)NOnDestroyThreadrrr r r rszAdb.OnDestroyThreadcCstd||||_|dS)NzDebugger OnBreakFlagChange)rEr4r~)rZabfrr r r OnBreakFlagChanges zAdb.OnBreakFlagChangecCstd|j|jtftd|jt|js6|jrt|jrXtdt |j|j |j_ ntd|j durt|j |j _ |j dur|jr|jtkrt|j |j dS)NzH_BreakFlagsChanged to %s with our thread = %s, and debugging thread = %sz_BreakFlagsChanged has breakszBreakFlagsChange with bot framez&BreakFlagsChanged, but no bottom frame)rEr4r/rxryrrFrwr8r#r_rrLr0rZSetThreadStateTracerAr r r r~s,     zAdb._BreakFlagsChangedcCshtd||||||tjkrD|||}|r6td|td|jn ||||td|jdS)Nr'z*** set_break failed -z+_OnSetBreakPoint just set BP and has breaksz$_OnSetBreakPoint leaving with breaks) rErZBREAKPOINT_ENABLEDZ set_breakrSrrFZ clear_breakr~)rkeyr*Zbpsr+Zproblemr r r r's    zAdb._OnSetBreakPoint)N)NN)#rrrrrCr@Z_Adb__xxxxx__set_breakrKrOrTrVr\rar_rergrhrfrqrsrurvrzrrrrrrrrrrr~r'r r r r r-Os@      " - #r-cCstdurtatSr )r&r-r r r r Debuggersr)"__doc__r=r;osrWr(rjrxZwin32com.client.connectrtZwin32com.axdebug.utilrrrZwin32com.server.utilrrrr renvironZ debuggingKeyErrorrErMrr#r&r,r<ZRemoteDebugApplicationEventsr-rr r r r s>