def __init__(self, tpl_filename, trace_filename): self.si = StaticInfo.StaticInfo(tpl_filename) self.reader = TraceReader.TraceReaderFile(trace_filename) #evaluator => from raw events and Static info. Get events self.evaluator = TraceEvaluate.TraceEvaluate(self.si) #export => font end (txt, gui) self.export = TraceExport.TraceExport() self.evaluator.setExport(self.export)
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()
import TraceReader import TraceEvaluate import TraceExport except ImportError: print("I can't find trace tools scripts") print("=> searched in '" + traceToolFolder + "'") print( "Maybe the TRAMPOLINE_BASE_PATH is not correctly set in your .oil file" ) print("Correct it and run goil again.") sys.exit(1) #reader => getting raw events if args.serial: #serial line? serialParams = args.serial.split(',') reader = TraceReader.TraceReaderSerial(serialParams, args.verbose) else: #then file. if not args.input: args.input = defaultTraceFile reader = TraceReader.TraceReaderFile(args.input) #output outputToFile = False if args.output: outputToFile = True rawEventList = [] else: #export => front end (txt, gui) export = TraceExport.TraceExportTxt() #read static information si = StaticInfo.StaticInfo('conf/tpl_static_info.json')