@@ -507,20 +507,29 @@ def symbolize_address(self, addr, binary, offset, arch):
507507 assert result
508508 return result
509509
510- def get_symbolized_lines (self , symbolized_lines , inc_frame_counter = True ):
510+ def get_symbolized_lines (self , symbolized_lines ):
511511 if not symbolized_lines :
512- if inc_frame_counter :
513- self . frame_no += 1
514- return [ self . current_line ]
515- else :
516- assert inc_frame_counter
517- result = []
518- for symbolized_frame in symbolized_lines :
519- result . append (
520- " #%s %s" % ( str ( self .frame_no ), symbolized_frame . rstrip ())
512+ # If it is an unparsable frame, but contains a frame counter and address
513+ # replace the frame counter so the stack is still consistent.
514+ unknown_stack_frame_format = r"^( *#([0-9]+) +)(0x[0-9a-f]+) +.*"
515+ match = re . match ( unknown_stack_frame_format , self . current_line )
516+ if match :
517+ rewritten_line = (
518+ self . current_line [: match . start ( 2 )]
519+ + str ( self . frame_no )
520+ + self .current_line [ match . end ( 2 ) :]
521521 )
522522 self .frame_no += 1
523- return result
523+ return [rewritten_line ]
524+ # Not a frame line so don't increment the frame counter.
525+ return [self .current_line ]
526+ result = []
527+ for symbolized_frame in symbolized_lines :
528+ result .append (
529+ " #%s %s" % (str (self .frame_no ), symbolized_frame .rstrip ())
530+ )
531+ self .frame_no += 1
532+ return result
524533
525534 def process_logfile (self ):
526535 self .frame_no = 0
@@ -546,8 +555,7 @@ def process_line_posix(self, line):
546555 match = re .match (stack_trace_line_format , line )
547556 if not match :
548557 logging .debug ('Line "{}" does not match regex' .format (line ))
549- # Not a frame line so don't increment the frame counter.
550- return self .get_symbolized_lines (None , inc_frame_counter = False )
558+ return self .get_symbolized_lines (None )
551559 logging .debug (line )
552560 _ , frameno_str , addr , binary , offset = match .groups ()
553561
0 commit comments