@@ -681,22 +681,46 @@ def parse_asi_backtrace(self, thread, bt):
681
681
print ("error: can't parse application specific backtrace." )
682
682
return False
683
683
684
- frame_id = frame_img_name = frame_addr = frame_symbol = frame_offset = frame_file = frame_line = frame_column = None
684
+ frame_id = (
685
+ frame_img_name
686
+ ) = (
687
+ frame_addr
688
+ ) = (
689
+ frame_symbol
690
+ ) = frame_offset = frame_file = frame_line = frame_column = None
685
691
686
692
if len (frame_match .groups ()) == 3 :
687
693
# Get the image UUID from the frame image name.
688
694
(frame_id , frame_img_name , frame_addr ) = frame_match .groups ()
689
695
elif len (frame_match .groups ()) == 5 :
690
- (frame_id , frame_img_name , frame_addr ,
691
- frame_symbol , frame_offset ) = frame_match .groups ()
696
+ (
697
+ frame_id ,
698
+ frame_img_name ,
699
+ frame_addr ,
700
+ frame_symbol ,
701
+ frame_offset ,
702
+ ) = frame_match .groups ()
692
703
elif len (frame_match .groups ()) == 7 :
693
- (frame_id , frame_img_name , frame_addr ,
694
- frame_symbol , frame_offset ,
695
- frame_file , frame_line ) = frame_match .groups ()
704
+ (
705
+ frame_id ,
706
+ frame_img_name ,
707
+ frame_addr ,
708
+ frame_symbol ,
709
+ frame_offset ,
710
+ frame_file ,
711
+ frame_line ,
712
+ ) = frame_match .groups ()
696
713
elif len (frame_match .groups ()) == 8 :
697
- (frame_id , frame_img_name , frame_addr ,
698
- frame_symbol , frame_offset ,
699
- frame_file , frame_line , frame_column ) = frame_match .groups ()
714
+ (
715
+ frame_id ,
716
+ frame_img_name ,
717
+ frame_addr ,
718
+ frame_symbol ,
719
+ frame_offset ,
720
+ frame_file ,
721
+ frame_line ,
722
+ frame_column ,
723
+ ) = frame_match .groups ()
700
724
701
725
thread .add_ident (frame_img_name )
702
726
if frame_img_name not in self .crashlog .idents :
@@ -769,24 +793,24 @@ class CrashLogParseMode:
769
793
770
794
771
795
class TextCrashLogParser (CrashLogParser ):
772
- parent_process_regex = re .compile (r' ^Parent Process:\s*(.*)\[(\d+)\]' )
773
- thread_state_regex = re .compile (r' ^Thread \d+ crashed with' )
774
- thread_instrs_regex = re .compile (r' ^Thread \d+ instruction stream' )
775
- thread_regex = re .compile (r' ^Thread (\d+).*:' )
776
- app_backtrace_regex = re .compile (r' ^Application Specific Backtrace (\d+).*:' )
796
+ parent_process_regex = re .compile (r" ^Parent Process:\s*(.*)\[(\d+)\]" )
797
+ thread_state_regex = re .compile (r" ^Thread \d+ crashed with" )
798
+ thread_instrs_regex = re .compile (r" ^Thread \d+ instruction stream" )
799
+ thread_regex = re .compile (r" ^Thread (\d+).*:" )
800
+ app_backtrace_regex = re .compile (r" ^Application Specific Backtrace (\d+).*:" )
777
801
778
802
class VersionRegex :
779
- version = r' \(.+\)|(?:arm|x86_)[0-9a-z]+'
803
+ version = r" \(.+\)|(?:arm|x86_)[0-9a-z]+"
780
804
781
805
class FrameRegex (VersionRegex ):
782
806
@classmethod
783
807
def get (cls ):
784
- index = r' ^(\d+)\s+'
785
- img_name = r' (.+?)\s+'
786
- version = r' (?:' + super ().version + r' \s+)?'
787
- address = r' (0x[0-9a-fA-F]{4,})' # 4 digits or more
808
+ index = r" ^(\d+)\s+"
809
+ img_name = r" (.+?)\s+"
810
+ version = r" (?:" + super ().version + r" \s+)?"
811
+ address = r" (0x[0-9a-fA-F]{4,})" # 4 digits or more
788
812
789
- symbol = """
813
+ symbol = """
790
814
(?:
791
815
[ ]+
792
816
(?P<symbol>.+)
@@ -804,24 +828,28 @@ def get(cls):
804
828
)?
805
829
"""
806
830
807
- return re .compile (index + img_name + version + address + symbol ,
808
- flags = re .VERBOSE )
831
+ return re .compile (
832
+ index + img_name + version + address + symbol , flags = re .VERBOSE
833
+ )
809
834
810
835
frame_regex = FrameRegex .get ()
811
- null_frame_regex = re .compile (r'^\d+\s+\?\?\?\s+0{4,} +' )
812
- image_regex_uuid = re .compile (r'(0x[0-9a-fA-F]+)' # img_lo
813
- r'\s+-\s+' # -
814
- r'(0x[0-9a-fA-F]+)\s+' # img_hi
815
- r'[+]?(.+?)\s+' # img_name
816
- r'(?:(' +
817
- VersionRegex .version + # img_version
818
- r')\s+)?'
819
- r'(?:<([-0-9a-fA-F]+)>\s+)?' # img_uuid
820
- r'(\?+|/.*)' # img_path
821
- )
822
- exception_type_regex = re .compile (r'^Exception Type:\s+(EXC_[A-Z_]+)(?:\s+\((.*)\))?' )
823
- exception_codes_regex = re .compile (r'^Exception Codes:\s+(0x[0-9a-fA-F]+),\s*(0x[0-9a-fA-F]+)' )
824
- exception_extra_regex = re .compile (r'^Exception\s+.*:\s+(.*)' )
836
+ null_frame_regex = re .compile (r"^\d+\s+\?\?\?\s+0{4,} +" )
837
+ image_regex_uuid = re .compile (
838
+ r"(0x[0-9a-fA-F]+)" # img_lo
839
+ r"\s+-\s+" # -
840
+ r"(0x[0-9a-fA-F]+)\s+" # img_hi
841
+ r"[+]?(.+?)\s+" # img_name
842
+ r"(?:(" + VersionRegex .version + r")\s+)?" # img_version
843
+ r"(?:<([-0-9a-fA-F]+)>\s+)?" # img_uuid
844
+ r"(\?+|/.*)" # img_path
845
+ )
846
+ exception_type_regex = re .compile (
847
+ r"^Exception Type:\s+(EXC_[A-Z_]+)(?:\s+\((.*)\))?"
848
+ )
849
+ exception_codes_regex = re .compile (
850
+ r"^Exception Codes:\s+(0x[0-9a-fA-F]+),\s*(0x[0-9a-fA-F]+)"
851
+ )
852
+ exception_extra_regex = re .compile (r"^Exception\s+.*:\s+(.*)" )
825
853
826
854
def __init__ (self , debugger , path , verbose ):
827
855
super ().__init__ (debugger , path , verbose )
@@ -1011,22 +1039,44 @@ def parse_thread(self, line):
1011
1039
print ('error: frame regex failed for line: "%s"' % line )
1012
1040
return
1013
1041
1014
- frame_id = frame_img_name = frame_addr = frame_symbol = frame_offset = frame_file = frame_line = frame_column = None
1042
+ frame_id = (
1043
+ frame_img_name
1044
+ ) = (
1045
+ frame_addr
1046
+ ) = frame_symbol = frame_offset = frame_file = frame_line = frame_column = None
1015
1047
1016
1048
if len (frame_match .groups ()) == 3 :
1017
1049
# Get the image UUID from the frame image name.
1018
1050
(frame_id , frame_img_name , frame_addr ) = frame_match .groups ()
1019
1051
elif len (frame_match .groups ()) == 5 :
1020
- (frame_id , frame_img_name , frame_addr ,
1021
- frame_symbol , frame_offset ) = frame_match .groups ()
1052
+ (
1053
+ frame_id ,
1054
+ frame_img_name ,
1055
+ frame_addr ,
1056
+ frame_symbol ,
1057
+ frame_offset ,
1058
+ ) = frame_match .groups ()
1022
1059
elif len (frame_match .groups ()) == 7 :
1023
- (frame_id , frame_img_name , frame_addr ,
1024
- frame_symbol , frame_offset ,
1025
- frame_file , frame_line ) = frame_match .groups ()
1060
+ (
1061
+ frame_id ,
1062
+ frame_img_name ,
1063
+ frame_addr ,
1064
+ frame_symbol ,
1065
+ frame_offset ,
1066
+ frame_file ,
1067
+ frame_line ,
1068
+ ) = frame_match .groups ()
1026
1069
elif len (frame_match .groups ()) == 8 :
1027
- (frame_id , frame_img_name , frame_addr ,
1028
- frame_symbol , frame_offset ,
1029
- frame_file , frame_line , frame_column ) = frame_match .groups ()
1070
+ (
1071
+ frame_id ,
1072
+ frame_img_name ,
1073
+ frame_addr ,
1074
+ frame_symbol ,
1075
+ frame_offset ,
1076
+ frame_file ,
1077
+ frame_line ,
1078
+ frame_column ,
1079
+ ) = frame_match .groups ()
1030
1080
1031
1081
self .thread .add_ident (frame_img_name )
1032
1082
if frame_img_name not in self .crashlog .idents :
@@ -1057,15 +1107,24 @@ def parse_thread(self, line):
1057
1107
def parse_images (self , line ):
1058
1108
image_match = self .image_regex_uuid .search (line )
1059
1109
if image_match :
1060
- (img_lo , img_hi , img_name , img_version ,
1061
- img_uuid , img_path ) = image_match .groups ()
1062
-
1063
- image = self .crashlog .DarwinImage (int (img_lo , 0 ), int (img_hi , 0 ),
1064
- img_name .strip (),
1065
- img_version .strip ()
1066
- if img_version else "" ,
1067
- uuid .UUID (img_uuid ), img_path ,
1068
- self .verbose )
1110
+ (
1111
+ img_lo ,
1112
+ img_hi ,
1113
+ img_name ,
1114
+ img_version ,
1115
+ img_uuid ,
1116
+ img_path ,
1117
+ ) = image_match .groups ()
1118
+
1119
+ image = self .crashlog .DarwinImage (
1120
+ int (img_lo , 0 ),
1121
+ int (img_hi , 0 ),
1122
+ img_name .strip (),
1123
+ img_version .strip () if img_version else "" ,
1124
+ uuid .UUID (img_uuid ),
1125
+ img_path ,
1126
+ self .verbose ,
1127
+ )
1069
1128
unqualified_img_name = os .path .basename (img_path )
1070
1129
if unqualified_img_name in self .symbols :
1071
1130
for symbol in self .symbols [unqualified_img_name ]:
@@ -1326,7 +1385,9 @@ def load_crashlog_in_scripted_process(debugger, crash_log_file, options, result)
1326
1385
if target is None or not target .IsValid ():
1327
1386
arch = crashlog .process_arch
1328
1387
if not arch :
1329
- raise InteractiveCrashLogException ("couldn't create find the architecture to create the target" )
1388
+ raise InteractiveCrashLogException (
1389
+ "couldn't create find the architecture to create the target"
1390
+ )
1330
1391
target = debugger .CreateTargetWithFileAndArch (None , arch )
1331
1392
# 4. Fail
1332
1393
if target is None or not target .IsValid ():
0 commit comments