def __init__(self, *args, **kwargs): StacktraceProcessor.__init__(self, *args, **kwargs) # If true, the project has been opted into using the symbolicator # service for native symbolication, which also means symbolic is not # used at all anymore. # The (iOS) symbolserver is still used regardless of this value. self.use_symbolicator = _is_symbolicator_enabled( self.project, self.data) metrics.incr('native.use_symbolicator', tags={'value': self.use_symbolicator}) self.arch = cpu_name_from_data(self.data) self.signal = signal_from_data(self.data) self.sym = None self.difs_referenced = set() images = get_path(self.data, 'debug_meta', 'images', default=(), filter=self._is_valid_image) if images: self.available = True self.sdk_info = get_sdk_from_event(self.data) self.object_lookup = ObjectLookup(images) self.images = images else: self.available = False
def __init__(self, *args, **kwargs): StacktraceProcessor.__init__(self, *args, **kwargs) # If true, the project has been opted into using the symbolicator # service for native symbolication, which also means symbolic is not # used at all anymore. # The (iOS) symbolserver is still used regardless of this value. self.use_symbolicator = _is_symbolicator_enabled(self.project, self.data) metrics.incr('native.use_symbolicator', tags={'value': self.use_symbolicator}) self.arch = cpu_name_from_data(self.data) self.signal = signal_from_data(self.data) self.sym = None self.difs_referenced = set() images = get_path(self.data, 'debug_meta', 'images', default=(), filter=self._is_valid_image) if images: self.available = True self.sdk_info = get_sdk_from_event(self.data) self.object_lookup = ObjectLookup(images) self.images = images else: self.available = False
def __init__(self, *args, **kwargs): StacktraceProcessor.__init__(self, *args, **kwargs) self.arch = cpu_name_from_data(self.data) self.signal = signal_from_data(self.data) self.sym = None images = get_path(self.data, 'debug_meta', 'images', default=(), filter=self._is_valid_image) if images: self.available = True self.sdk_info = get_sdk_from_event(self.data) self.object_lookup = ObjectLookup(images) self.images = images else: self.available = False
def process_payload(data): project = Project.objects.get_from_cache(id=data["project"]) symbolicator = Symbolicator(project=project, event_id=data["event_id"]) stacktrace_infos = [ stacktrace for stacktrace in find_stacktraces_in_data(data) if any( is_native_platform(x) for x in stacktrace.platforms) ] modules = native_images_from_data(data) stacktraces = [{ "registers": sinfo.stacktrace.get("registers") or {}, "frames": get_frames_for_symbolication( sinfo.stacktrace.get("frames") or (), data, modules), } for sinfo in stacktrace_infos] if not any(stacktrace["frames"] for stacktrace in stacktraces): return signal = signal_from_data(data) response = symbolicator.process_payload(stacktraces=stacktraces, modules=modules, signal=signal) if not _handle_response_status(data, response): return data assert len(modules) == len(response["modules"]), (modules, response) sdk_info = get_sdk_from_event(data) for raw_image, complete_image in zip(modules, response["modules"]): _merge_image(raw_image, complete_image, sdk_info, data) assert len(stacktraces) == len(response["stacktraces"]), (stacktraces, response) for sinfo, complete_stacktrace in zip(stacktrace_infos, response["stacktraces"]): complete_frames_by_idx = {} for complete_frame in complete_stacktrace.get("frames") or (): complete_frames_by_idx.setdefault(complete_frame["original_index"], []).append(complete_frame) new_frames = [] native_frames_idx = 0 for raw_frame in reversed(sinfo.stacktrace["frames"]): if not _handles_frame(data, raw_frame): new_frames.append(raw_frame) continue for complete_frame in complete_frames_by_idx.get( native_frames_idx) or (): merged_frame = dict(raw_frame) _merge_frame(merged_frame, complete_frame) if merged_frame.get("package"): raw_frame["package"] = merged_frame["package"] new_frames.append(merged_frame) native_frames_idx += 1 if sinfo.container is not None and native_frames_idx > 0: sinfo.container["raw_stacktrace"] = { "frames": list(sinfo.stacktrace["frames"]), "registers": sinfo.stacktrace.get("registers"), } new_frames.reverse() sinfo.stacktrace["frames"] = new_frames return data
def process_payload(data): project = Project.objects.get_from_cache(id=data['project']) symbolicator = Symbolicator(project=project, event_id=data['event_id']) stacktrace_infos = [ stacktrace for stacktrace in find_stacktraces_in_data(data) if any( is_native_platform(x) for x in stacktrace.platforms) ] stacktraces = [{ 'registers': sinfo.stacktrace.get('registers') or {}, 'frames': [ f for f in reversed(sinfo.stacktrace.get('frames') or ()) if _handles_frame(data, f) ] } for sinfo in stacktrace_infos] if not any(stacktrace['frames'] for stacktrace in stacktraces): return modules = native_images_from_data(data) signal = signal_from_data(data) response = symbolicator.process_payload( stacktraces=stacktraces, modules=modules, signal=signal, ) if not _handle_response_status(data, response): return data assert len(modules) == len(response['modules']), (modules, response) sdk_info = get_sdk_from_event(data) for raw_image, complete_image in zip(modules, response['modules']): _merge_image(raw_image, complete_image, sdk_info, lambda e: write_error(e, data)) assert len(stacktraces) == len(response['stacktraces']), (stacktraces, response) for sinfo, complete_stacktrace in zip(stacktrace_infos, response['stacktraces']): complete_frames_by_idx = {} for complete_frame in complete_stacktrace.get('frames') or (): complete_frames_by_idx \ .setdefault(complete_frame['original_index'], []) \ .append(complete_frame) new_frames = [] native_frames_idx = 0 for raw_frame in reversed(sinfo.stacktrace['frames']): if not _handles_frame(data, raw_frame): new_frames.append(raw_frame) continue for complete_frame in complete_frames_by_idx.get( native_frames_idx) or (): merged_frame = dict(raw_frame) _merge_frame(merged_frame, complete_frame) if merged_frame.get('package'): raw_frame['package'] = merged_frame['package'] new_frames.append(merged_frame) native_frames_idx += 1 if sinfo.container is not None and native_frames_idx > 0: sinfo.container['raw_stacktrace'] = { 'frames': list(sinfo.stacktrace['frames']), 'registers': sinfo.stacktrace.get('registers') } new_frames.reverse() sinfo.stacktrace['frames'] = new_frames return data