def _recvStackTrace(self, bpInfo, tid): ctxt = self.sess.ctxt l = [] tcObj = ctxt.objpool(ThreadContext,tid,self.sess) framList = tcObj.frams() bGetvaule = True for fram in framList: fId = fram[0] loc = fram[1] args = [] clsObj = ctxt.objpool(ClassType,loc.rtId,self.sess) clsName = clsObj.name funcName = clsObj.getMethodName(loc.mId) methObj = ctxt.objpool(MethodContext,loc.rtId,loc.mId,self.sess) parfunc = funcName[0]+TraceReader.jniparse(funcName[1]) funcFullName = '@'.join([clsName,parfunc]) if cmp(funcFullName,"com/android/internal/os/ZygoteInit$MethodAndArgsCaller@run()") == 0: bGetvaule = False if bGetvaule: framObj = ctxt.objpool(FrameInfo,fId,loc,tid,self.sess) args = framObj.GetValues() l.append((funcFullName,loc.idx,args)) tcObj.resume() self.stackTraceWindow.addTraceResult(l)
def _traceCntHandle(self, reader): sort = 1 for m in reader.callInfo: if m["method_action"]: try: method_info = reader.funcData[m["method_id"]] except: print m["method_id"] continue funcName = method_info["method_name"] className = method_info["class_name"] jniName = method_info["jni"] parfunc = funcName+TraceReader.jniparse(jniName) fullFuncName = '@'.join([className,parfunc]) if fullFuncName in self._traceFuncCntDict.keys(): data = self._traceFuncCntDict[fullFuncName] callCnt = data[0] callCnt += 1 self._traceFuncCntDict[fullFuncName] = (callCnt,data[1],data[2]) else: self._traceFuncCntDict[fullFuncName] = (1, sort,m["method_id"]) sort += 1 self._funcTraceCntFilteShow()