def fCreateAndAddStackFrame( oStack, uNumber, sCdbSymbolOrAddress, uInstructionPointer, uReturnAddress, uAddress, sUnloadedModuleFileName, oModule, uModuleOffset, oFunction, uFunctionOffset, sSourceFilePath=None, uSourceFileLineNumber=None, ): # frames must be created in order: assert uNumber == len(oStack.aoFrames), \ "Unexpected frame number %d vs %d" % (uNumber, len(oStack.aoFrames)) uMaxStackFramesCount = dxBugIdConfig["uMaxStackFramesCount"] oStackFrame = cStackFrame( oStack, uNumber, sCdbSymbolOrAddress, uInstructionPointer, uReturnAddress, uAddress, sUnloadedModuleFileName, oModule, uModuleOffset, oFunction, uFunctionOffset, sSourceFilePath, uSourceFileLineNumber, ) oStack.aoFrames.append(oStackFrame)
def fCreateAndAddStackFrame(oStack, oCrashInfo, uNumber, uAddress, sCdbModuleId, uModuleOffset, sSymbol, uSymbolOffset): # frames must be created in order: assert uNumber == len(oStack.aoFrames), \ "Unexpected frame number %d vs %d" % (uNumber, len(oStack.aoFrames)); uMaxStackFramesCount = dxCrashInfoConfig["uMaxStackFramesCount"]; assert uNumber < uMaxStackFramesCount, \ "Unexpected frame number %d (max %d)" % (uNumber, uMaxStackFramesCount); if uNumber == uMaxStackFramesCount - 1: oStack.bPartialStack = True; # We leave the last one out so we can truely say there are more. else: if sCdbModuleId == "SharedUserData": # "ShareUserData" is a symbol outside of any module that gets used as a module name in cdb. # Any value referencing it must be converted to an address: sBaseSymbol = "SharedUserData"; if sSymbol: sBaseSymbol += "!%s" % sSymbol; uAddress = oCrashInfo.fuEvaluateExpression(sBaseSymbol); if uModuleOffset: uAddress += uModuleOffset; if uSymbolOffset: uAddress += uSymbolOffset; # Clean up: sCdbModuleId = None; uModuleOffset = None; sSymbol = None; uSymbolOffset = None; oModule = sCdbModuleId and oStack.oProcess.foGetModule(sCdbModuleId); oFunction = oModule and sSymbol and oModule.foGetOrCreateFunction(sSymbol); oStack.aoFrames.append(cStackFrame(uNumber, uAddress, oModule, uModuleOffset, oFunction, uSymbolOffset));
def fCreateAndAddStackFrame(oStack, oCdbWrapper, doModules_by_sCdbId, uNumber, uAddress, sUnloadedModuleFileName, sModuleCdbId, uModuleOffset, sSymbol, uSymbolOffset): # frames must be created in order: assert uNumber == len(oStack.aoFrames), \ "Unexpected frame number %d vs %d" % (uNumber, len(oStack.aoFrames)) uMaxStackFramesCount = dxBugIdConfig["uMaxStackFramesCount"] assert uNumber < uMaxStackFramesCount, \ "Unexpected frame number %d (max %d)" % (uNumber, uMaxStackFramesCount) if uNumber == uMaxStackFramesCount - 1: oStack.bPartialStack = True # We leave the last one out so we can truely say there are more. else: if sModuleCdbId == "SharedUserData": # "ShareUserData" is a symbol outside of any module that gets used as a module name in cdb. # Any value referencing it must be converted to an address: sBaseSymbol = "SharedUserData" if sSymbol: sBaseSymbol += "!%s" % sSymbol uAddress = oCdbWrapper.fuEvaluateExpression(sBaseSymbol) if uModuleOffset: uAddress += uModuleOffset if uSymbolOffset: uAddress += uSymbolOffset # Clean up: sModuleCdbId = None uModuleOffset = None sSymbol = None uSymbolOffset = None oModule = sModuleCdbId and doModules_by_sCdbId[sModuleCdbId] if not oCdbWrapper.bCdbRunning: return None oFunction = oModule and sSymbol and oModule.foGetOrCreateFunction( sSymbol) oStack.aoFrames.append( cStackFrame(uNumber, uAddress, sUnloadedModuleFileName, oModule, uModuleOffset, oFunction, uSymbolOffset))
def fCreateAndAddStackFrame(oStack, uNumber, sCdbLine, uAddress, sUnloadedModuleFileName, oModule, uModuleOffset, \ oFunction, uFunctionOffset, sSourceFilePath, uSourceFileLineNumber): # frames must be created in order: assert uNumber == len(oStack.aoFrames), \ "Unexpected frame number %d vs %d" % (uNumber, len(oStack.aoFrames)); uMaxStackFramesCount = dxBugIdConfig["uMaxStackFramesCount"]; oStackFrame = cStackFrame(uNumber, sCdbLine, uAddress, sUnloadedModuleFileName, oModule, uModuleOffset, \ oFunction, uFunctionOffset, sSourceFilePath, uSourceFileLineNumber) oStack.aoFrames.append(oStackFrame);
def fCreateAndAddStackFrame(oStack, uNumber, sCdbSource, uAddress, sUnloadedModuleFileName, oModule, uModuleOffset, oFunction, uFunctionOffset): # frames must be created in order: assert uNumber == len(oStack.aoFrames), \ "Unexpected frame number %d vs %d" % (uNumber, len(oStack.aoFrames)); uMaxStackFramesCount = dxBugIdConfig["uMaxStackFramesCount"]; assert uNumber < uMaxStackFramesCount, \ "Unexpected frame number %d (max %d)" % (uNumber, uMaxStackFramesCount); if uNumber == uMaxStackFramesCount - 1: oStack.bPartialStack = True; # We leave the last one out so we can truely say there are more. else: oStack.aoFrames.append(cStackFrame(uNumber, sCdbSource, uAddress, sUnloadedModuleFileName, oModule, uModuleOffset, oFunction, uFunctionOffset));
def _fAddStackFrame(oSelf, uNumber, uAddress, sCdbModuleId, uModuleOffset, sSymbol, uSymbolOffset): # frames must be created in order: assert uNumber == len(oSelf.aoFrames), \ "Unexpected frame number %d vs %d" % (uNumber, len(oSelf.aoFrames)); uMaxStackFramesCount = dxCrashInfoConfig.get("uMaxStackFramesCount", 50); assert uNumber < uMaxStackFramesCount, \ "Unexpected frame number %d (max %d)" % (uNumber, uMaxStackFramesCount); if uNumber == uMaxStackFramesCount - 1: oSelf.bPartialStack = True; # We leave the last one out so we can truely say there are more. else: oModule = sCdbModuleId and oSelf.oProcess.foGetModule(sCdbModuleId); oFunction = oModule and sSymbol and oModule.foGetOrCreateFunction(sSymbol); oSelf.aoFrames.append(cStackFrame(uNumber, uAddress, oModule, uModuleOffset, oFunction, uSymbolOffset));
def _fAddStackFrame(oSelf, uNumber, uAddress, sCdbModuleId, uModuleOffset, sSymbol, uSymbolOffset): # frames must be created in order: assert uNumber == len(oSelf.aoFrames), \ "Unexpected frame number %d vs %d" % (uNumber, len(oSelf.aoFrames)) uMaxStackFramesCount = dxCrashInfoConfig.get("uMaxStackFramesCount", 50) assert uNumber < uMaxStackFramesCount, \ "Unexpected frame number %d (max %d)" % (uNumber, uMaxStackFramesCount) if uNumber == uMaxStackFramesCount - 1: oSelf.bPartialStack = True # We leave the last one out so we can truely say there are more. else: oModule = sCdbModuleId and oSelf.oProcess.foGetModule(sCdbModuleId) oFunction = oModule and sSymbol and oModule.foGetOrCreateFunction( sSymbol) oSelf.aoFrames.append( cStackFrame(uNumber, uAddress, oModule, uModuleOffset, oFunction, uSymbolOffset))
def foCreateAndAddStackFrame( oStack, uIndex, sCdbSymbolOrAddress, uInstructionPointer, uReturnAddress, uAddress, sUnloadedModuleFileName, oModule, uModuleOffset, #TODO naming inconsistency with iOffsetFromStartOfFunction oFunction, iOffsetFromStartOfFunction, sSourceFilePath=None, uSourceFileLineNumber=None, ): # frames must be created in order: assert uIndex == len(oStack.aoFrames), \ "Unexpected frame index %d vs %d" % (uIndex, len(oStack.aoFrames)) uMaxStackFramesCount = dxConfig["uMaxStackFramesCount"] oStackFrame = cStackFrame( oStack, uIndex, sCdbSymbolOrAddress, uInstructionPointer, uReturnAddress, uAddress, sUnloadedModuleFileName, oModule, uModuleOffset, oFunction, iOffsetFromStartOfFunction, sSourceFilePath, uSourceFileLineNumber, ) oStack.aoFrames.append(oStackFrame) return oStackFrame