def find_best_instruction(self, processable_frame): """Given a frame, stacktrace info and frame index this returns the interpolated instruction address we then use for symbolication later. """ if self.arch is None: return parse_addr(processable_frame['instruction_addr']) crashing_frame = False signal = None ip_reg = None # We only need to provide meta information for frame zero if processable_frame.idx == 0: # The signal is useful information for symbolic in some situations # to disambiugate the first frame. If we can get this information # from the mechanism we want to pass it onwards. signal = self.signal registers = processable_frame.stacktrace_info.stacktrace.get('registers') if registers: ip_reg_name = arch_get_ip_reg_name(self.arch) if ip_reg_name: ip_reg = registers.get(ip_reg_name) crashing_frame = True return find_best_instruction( processable_frame['instruction_addr'], arch=self.arch, crashing_frame=crashing_frame, signal=signal, ip_reg=ip_reg )
def find_best_instruction(self, processable_frame): """Given a frame, stacktrace info and frame index this returns the interpolated instruction address we then use for symbolication later. """ if self.arch is None: return parse_addr(processable_frame['instruction_addr']) crashing_frame = False signal = None ip_reg = None # We only need to provide meta information for frame zero if processable_frame.idx == 0: # The signal is useful information for symbolic in some situations # to disambiugate the first frame. If we can get this information # from the mechanism we want to pass it onwards. signal = self.signal registers = processable_frame.stacktrace_info.stacktrace.get( 'registers') if registers: ip_reg_name = arch_get_ip_reg_name(self.arch) if ip_reg_name: ip_reg = registers.get(ip_reg_name) crashing_frame = True return find_best_instruction(processable_frame['instruction_addr'], arch=self.arch, crashing_frame=crashing_frame, signal=signal, ip_reg=ip_reg)
def find_best_instruction(self, processable_frame): """Given a frame, stacktrace info and frame index this returns the interpolated instruction address we then use for symbolication later. """ if self.arch is None: return parse_addr(processable_frame['instruction_addr']) crashing_frame = False signal = None ip_reg = None # We only need to provide meta information for frame zero if processable_frame.idx == 0: # The signal is useful information for symbolic in some situations # to disambiugate the first frame. If we can get this information # from the mechanism we want to pass it onwards. signal = None exc = self.data.get('sentry.interfaces.Exception') if exc is not None: mechanism = exc['values'][0].get('mechanism') if mechanism and 'meta' in mechanism and \ 'signal' in mechanism['meta'] and \ 'number' in mechanism['meta']['signal']: signal = int(mechanism['meta']['signal']['number']) registers = processable_frame.stacktrace_info.stacktrace.get( 'registers') if registers: ip_reg_name = arch_get_ip_reg_name(self.arch) if ip_reg_name: ip_reg = registers.get(ip_reg_name) crashing_frame = True return find_best_instruction( processable_frame['instruction_addr'], arch=self.arch, crashing_frame=crashing_frame, signal=signal, ip_reg=ip_reg )