⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phpdebugger.py

📁 wxPython的基本示例程序
💻 PY
📖 第 1 页 / 共 5 页
字号:
            if len(tmp) == 2:                self.shortDesc = tmp[1]            elif len(tmp) == 1:                self.shortDesc = tmp[0]            else:                self.shortDesc = None            return        #        # The fileName is None, we will try our best efforts to get it.        #        if len(tmp) == 2:            #            # We retrieved long finename from the description.  If we haven't            # stored the file mod before, set this one as the new one.            # Otherwise, we prefer to keep the stored one.            #            if self.modNum != 0:                storedFileName = self.interface.getModByNum(self.modNum)                if not storedFileName:                    self.interface.setMod(self.modNum, tmp[0])            self.fileName      = tmp[0]            self.shortFileName = os.path.basename(tmp[0])            self.shortDesc     = tmp[1]        elif len(tmp) == 1:            self.fileName      = None            self.shortFileName = None            self.shortDesc     = tmp[0]        else:            self.shortFileName = None            self.shortDesc     = None            myprint("PHPStackFrame::_getFileNamesAndShortDesc(): something wrong with desc: %s?", self.desc)        return    def getShortFileName(self):        return self.shortFileName    def setShortFileName(self, shortFileName):        self.shortFileName = shortFileName    def getShortDesc(self):        return self.shortDesc    def getLineNo(self):        return self.lineNo    def getInterface(self):        return self.interface    def getVariables(self):        if len(self.variables) == 0:            self.variables = self.interface.getVariables(self)        return self.variables    def findVariables(self, s):        if self.hasVariables():            name = "$" + s            for var in self.variables:                if var.getName() == name:                    return var        return None    def hasVariables(self):        if len(self.variables) == 0:            return False        else:            return True    def getName(self):        if self.getDesc():            return self.getDesc() + " [line: " + str(self.getLineNo()) + "]"        else:            return self.getFileName() + " [line: " + str(self.getLineNo()) + "]"    def getFileName(self):        return self.fileName    def setFileName(self, fileName):        self.fileName = fileName    def setDesc(self, desc):        self.desc = desc    def getDesc(self):        return self.desc    def getFrameScopeId(self):        return self.scopeId    def getFrameIndex(self):        return self.frameIndex    def getDisplayStr(self, stackList = None):        if self.displayStr:            return self.displayStr        if not self.shortFileName:            if stackList:                i = stackList.index(self)                for j in range(i + 1, len(stackList)):                    self.shortFileName = stackList[j].getShortFileName()                    if self.shortFileName:                        self.fileName = stackList[j].getFileName()        if self.shortFileName:            if self.shortDesc:                self.displayStr = "<%s> at %s:%d" % (self.shortDesc, self.shortFileName, self.lineNo)            else:                self.displayStr = "%s:%d" % (self.shortFileName, self.lineNo)        else:            if self.shortDesc:                self.displayStr = "<%s>" % self.shortDesc            else:                self.displayStr = "<internal stack error>"        return self.displayStr    def getLongDisplayStr(self):        if self.longDisplayStr:            return self.longDisplayStr        if self.fileName:            if self.shortDesc:                self.longDisplayStr = "<%s> at %s:%d" % (self.shortDesc, self.fileName, self.lineNo)            else:                self.longDisplayStr = "%s:%d" % (self.fileName, self.lineNo)        else:            if self.shortDesc:                self.longDisplayStr = "<%s>" % self.shortDesc            else:                self.longDisplayStr = "<internal stack error>"        return self.longDisplayStrclass BreakPoint(object):    def __init__(self, interface, fileName, lineNo, modNum = 0, state = BPS_ENABLED + BPS_UNRESOLVED, isTemp = 0, hitCount = 0, skipHits = 0, condition = 0, bpId = 0, isUnderHit = 0):        self.interface  = interface        self.fileName   = fileName        self.lineNo     = lineNo        self.bpID       = bpId        self.state      = state        self.isTemp     = isTemp        self.hitCount   = hitCount        self.skipHits   = skipHits        self.condition  = condition        self.isUnderHit = 0        if modNum == 0:            self.modNum = self.interface.getModByFileName(fileName)        else:            self.modNum = modNum        if self.modNum:            self.fCounterOrZero = 0        else:            self.fCounterOrZero = interface.getNextFrameCounter()    def sendSelf(self):        reqPacket = PHPDBGPacket(DBGA_REQUEST)        reqFrame1 = PHPDBGFrame(FRAME_BPS)        if self.modNum:            reqFrame1.addInt(self.modNum)        else:            #            # 0 in modNum to tell to use fileName instead.            #            reqFrame1.addInt(0)        reqFrame1.addInt(self.lineNo)             # lineNo        reqFrame1.addInt(self.fCounterOrZero)     # fileName frameCounter or 0        reqFrame1.addInt(self.state)              # state        reqFrame1.addInt(self.isTemp)             # isTemp        reqFrame1.addInt(self.hitCount)           # hitCount        reqFrame1.addInt(self.skipHits)           # skipHits        reqFrame1.addInt(self.condition)          # condition        reqFrame1.addInt(self.bpID)               # breakpoint sequence id        reqFrame1.addInt(self.isUnderHit)         # isUnderHit        if not self.modNum:            reqFrame2 = PHPDBGFrame(FRAME_RAWDATA)            reqFrame2.addInt(self.fCounterOrZero)            reqFrame2.addInt(len(self.fileName) + 1)            reqFrame2.addStr(self.fileName)            reqPacket.addFrame(reqFrame2)        reqPacket.addFrame(reqFrame1)        try:            reqPacket.sendPacket(self.interface.lsnrThr)            self.interface.awaitAndHandleResponse()        except PHPDBGConnException:            self.interface.currConnFinished()        return    def addSelf(self):        self.sendSelf()    def removeSelf(self):        self.state = BPS_DISABLED        self.sendSelf()    def isUnderHit(self):        return self.isUnderHit == 1    def update(self, dbgBp):        self.modNum     = dbgBp[0]        self.state      = dbgBp[3]        self.isTemp     = dbgBp[4]        self.hitCount   = dbgBp[5]        self.skipHits   = dbgBp[6]        self.condition  = dbgBp[7]        self.bpID       = dbgBp[8]        self.isUnderHit = dbgBp[9]class PHPDBGEvalString(object):    def __init__(self, stackFrame, dataStr):        self.stackFrame = stackFrame        self.dataStr    = dataStr    #    # Get a list of variables under self.stackFrame.    #    def getVars(self):        return self.parseAVariable(isRealVar = False)    #    # if isRealVar:    #    returnList[0] = The Variable    # else:    #    returnList    = list of variables.    #    def parseAVariable(self, isRealVar = True):        returnList = []        #        # Get the variable name first.  Notice we ignore this entity's data        # type here.        #        if isRealVar:            nameEntity = self.parseAnEntity()            if not nameEntity or len(nameEntity) != 2 or type(nameEntity[1]) != str:                myprint("PHPDBGEvalStr::parseAVariable() got a wrong name entity")                return returnList            else:                varName = nameEntity[1]        #        # Get the variable's value.        #        valueEntity = self.parseAnEntity()        if not valueEntity or len(valueEntity) < 1:            myprint("PHPDBGEvalStr::parseAVariable(): couldn't get a variable's value entity.")            return returnList        #        # This variable's data type.        #        varType = valueEntity[0]        if isRealVar:            #            # If this is a real variable, return a list which contains only            # this variable item.            #            #valueEntity = valueEntity[1:]            variable    = PHPVariable(self.stackFrame, None, varType, varName, valueEntity[1:])            #myprint("xxxxCreated variable varName=%s, valueEntity=%s", (repr(varName), repr(valueEntity[1])))            myprint("xxxxCreated variable: %s", repr(variable.toString()))            returnList.append(variable)        else:            #            # If this is a root variable container, returns a list of            # variables under the root.  Do a sanity check here.            #            if valueEntity[0] != PHPValue.PEVT_ARRAY:                myprint("PHPDBGEvalStr::parseAVariable(): failed to parse the root variable container.")            else:                returnList = valueEntity[1:]        return returnList    #    # An entity could be a variable's name or its value.    #    # returnList[0]  = variable data type    # returnList[1:] = the real list    #    def parseAnEntity(self):        if not self.dataStr or len(self.dataStr) < 2  or (self.dataStr[1] != ':' and self.dataStr[1] != ';'):            myprint("PHPDBGEvalStr::parseAnEntity(): failed to parse %s.", repr(self.dataStr))            return None        returnList    = []        typeChar      = self.dataStr[0]        self.dataStr  = self.dataStr[2:]        if typeChar   == 'i':            returnList.append(PHPValue.PEVT_LONG)            self.parseInt(returnList)        elif typeChar == 'a':            returnList.append(PHPValue.PEVT_ARRAY)            self.parseArray(returnList)        elif typeChar == 's':            returnList.append(PHPValue.PEVT_STRING)            self.parseString(returnList)        elif typeChar == 'O':            returnList.append(PHPValue.PEVT_OBJECT)            self.parseObject(returnList)        elif typeChar == 'r':            returnList.append(PHPValue.PEVT_SOFTREF)            self.parseReference(returnList, isSoftRef = True)        elif typeChar == 'R':            returnList.append(PHPValue.PEVT_REF)            self.parseReference(returnList, isSoftRef = False)        elif typeChar == 'b':            returnList.append(PHPValue.PEVT_BOOLEAN)            self.parseBoolean(returnList)        elif typeChar == 'd':            returnList.append(PHPValue.PEVT_DOUBLE)            self.parseDouble(returnList)        elif typeChar == 'z':            returnList.append(PHPValue.PEVT_RESOURCE)            self.parseResource(returnList)        elif typeChar == 'N':            returnList.append(PHPValue.PEVT_NULL)            self.parseNull(returnList)        else:            myprint("PHPDBGEvalStr::parseAnEntity(): unknown data type: %s", typeChar)        return returnList    def parseInt(self, returnList):        myprint("enter parseInt().")        returnList.append(self.getAnIntStr(';'))        return    def parseArray(self, returnList):        myprint("enter parseArray().")        #        # The shortest array is 'a:0:{}'.        #        if len(self.dataStr) < 4:            myprint("PHPDBGEvalStr::parseArray(): failed (1) to parse an array: %s.", repr(self.dataStr))            return        expectedNumItems = self.getAnInt(':')        if len(self.dataStr) < 2 or self.dataStr[0] != '{':            myprint("PHPDBGEvalStr::parseArray(): failed (3) to parse an array: %s.", repr(self.dataStr))            return        self.dataStr = self.dataStr[1:]        varList      = []        while self.dataStr and len(self.dataStr) > 0 and self.dataStr[0] != '}':            tmpList = self.parseAVariable()            if not tmpList or len(tmpList) != 1 or not tmpList[0]:                myprint("PHPDBGEvalStr::parseArray(): failed (4) to parse an array.  dataStr=%s.", repr(self.dataStr))                break            else:                varList.append(tmpList[0])        if expectedNumItems != len(varList):            myprint("PHPDBGEvalStr::parseArray(): failed (5) expected no. of items=%d, but got %d", (expectedNumItems, len(varList)))        #        # An array should end with a '}'.        #        if self.dataStr and len(self.dataStr) > 0 and self.dataStr[0] == '}':            self.dataStr = self.dataStr[1:]            returnList.extend(varList)        else:            myprint("PHPDBGEvalStr::parseArray(): failed (6) to parse an array.  dataStr=%s.", repr(self.dataStr))        myprint("parseArray() ends.")        return    def parseString(self, returnList, endChar = ';'):        myprint("enter parseString().")    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -