def iterate(): bt = None dsym_path = os.path.join(res_path, 'Crash-Tester.app.dSYM') rep = ReportSymbolizer(driver, [dsym_path], report['binary_images']) for thread in report['crash']['threads']: if thread['crashed']: assert bt is None bt = rep.symbolize_backtrace(thread['backtrace']['contents']) assert bt is not None
def iterate(): bt = None dsym_path = os.path.join(res_path, 'Crash-Tester.app.dSYM') rep = ReportSymbolizer(driver, [dsym_path], report['binary_images']) for thread in report['crash']['threads']: if thread['crashed']: assert bt is None bt = rep.symbolize_backtrace(thread['backtrace']['contents']) assert bt is not None
def test_swift_report(res_path, driver): with open(os.path.join(res_path, 'swift-crash-report.json')) as f: report = json.load(f) bt = None dsym_path = os.path.join(res_path, 'Swift-Tester.app.dSYM') rep = ReportSymbolizer(driver, dsym_path, report['binary_images']) for thread in report['crash']['threads']: if thread['crashed']: assert bt is None bt = rep.symbolize_backtrace(thread['backtrace']['contents']) assert bt is not None assert bt == []
def test_swift_report(res_path, driver): with open(os.path.join(res_path, 'swift-crash-report.json')) as f: report = json.load(f) bt = None dsym_path = os.path.join(res_path, 'Swift-Tester.app.dSYM') rep = ReportSymbolizer(driver, dsym_path, report['binary_images']) for thread in report['crash']['threads']: if thread['crashed']: assert bt is None bt = rep.symbolize_backtrace(thread['backtrace']['contents']) assert bt is not None assert bt == [ ]
def make_symbolizer(project, binary_images, threads=None): """Creates a symbolizer for the given project and binary images. If a list of threads is referenced (from an apple crash report) then only images needed by those frames are loaded. """ if not have_symsynd: raise RuntimeError('symsynd is unavailable. Install sentry with ' 'the dsym feature flag.') driver = Driver(options.get('dsym.llvm-symbolizer-path') or None) if threads is None: to_load = [x['uuid'] for x in binary_images] else: image_map = {} for image in binary_images: image_map[image['image_addr']] = image['uuid'] to_load = set() for thread in threads: for frame in thread['backtrace']['contents']: img_uuid = image_map.get(frame['object_addr']) if img_uuid is not None: to_load.add(img_uuid) to_load = list(to_load) dsym_paths, loaded = dsymcache.fetch_dsyms(project, to_load) return ReportSymbolizer(driver, dsym_paths, binary_images)
def make_symbolizer(project, image_lookup, referenced_images=None, on_dsym_file_referenced=None): """Creates a symbolizer for the given project and binary images. If a list of referenced images is referenced (UUIDs) then only images needed by those frames are loaded. """ driver = Driver() to_load = referenced_images if to_load is None: to_load = image_lookup.get_uuids() dsym_paths, loaded = dsymcache.fetch_dsyms( project, to_load, on_dsym_file_referenced=on_dsym_file_referenced) # We only want to pass the actually loaded symbols to the report # symbolizer to avoid the expensive FS operations that will otherwise # happen. user_images = [] for img in image_lookup.iter_images(): if img['uuid'] in loaded: user_images.append(img) return ReportSymbolizer(driver, dsym_paths, user_images)
def make_symbolizer(project, binary_images): if not have_symsynd: raise RuntimeError('symsynd is unavailable. Install sentry with ' 'the dsym feature flag.') driver = Driver() dsym_path, loaded = dsymcache.fetch_dsyms( project, [x['uuid'] for x in binary_images]) return ReportSymbolizer(driver, dsym_path, binary_images)
def make_symbolizer(project, binary_images, referenced_images=None): """Creates a symbolizer for the given project and binary images. If a list of referenced images is referenced (UUIDs) then only images needed by those frames are loaded. """ if not have_symsynd: raise RuntimeError('symsynd is unavailable. Install sentry with ' 'the dsym feature flag.') driver = Driver(options.get('dsym.llvm-symbolizer-path') or None) to_load = referenced_images if to_load is None: to_load = [x['uuid'] for x in binary_images] dsym_paths, loaded = dsymcache.fetch_dsyms(project, to_load) return ReportSymbolizer(driver, dsym_paths, binary_images)
def test_basic_report(res_path, driver): with open(os.path.join(res_path, 'crash-report.json')) as f: report = json.load(f) bt = None dsym_path = os.path.join(res_path, 'Crash-Tester.app.dSYM') rep = ReportSymbolizer(driver, dsym_path, report['binary_images']) for thread in report['crash']['threads']: if thread['crashed']: assert bt is None bt = rep.symbolize_backtrace(thread['backtrace']['contents']) assert bt is not None import pprint pprint.pprint(bt) assert bt == [{ u'instruction_addr': 653426999, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653426872, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 887639159, u'object_addr': 887611392, u'object_name': u'libobjc.A.dylib', u'symbol_addr': 887639120, u'symbol_name': u'objc_exception_throw' }, { u'instruction_addr': 653448701, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653448512, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 653440217, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653439504, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 652585432, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 652585408, u'symbol_name': u'_CF_forwarding_prep_0' }, { 'column': 5, 'filename': u'/Users/karl/Projects/KSCrash/Source/Common-Examples/Crasher.mm', u'instruction_addr': 782745, 'line': 96, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'-[Crasher throwUncaughtNSException]', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da' }, { 'column': 11, 'filename': u'/Users/karl/Projects/KSCrash/iOS/Crash-Tester/AppDelegate+UI.m', u'instruction_addr': 794881, 'line': 358, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'__32-[AppDelegate(UI) crashCommands]_block_invoke', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da' }, { 'column': 5, 'filename': u'/Users/karl/Projects/KSCrash/iOS/Crash-Tester/CommandTVC.m', u'instruction_addr': 802133, 'line': 48, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'-[CommandEntry executeWithViewController:]', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da' }, { 'column': 5, 'filename': u'/Users/karl/Projects/KSCrash/iOS/Crash-Tester/CommandTVC.m', u'instruction_addr': 803225, 'line': 128, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'-[CommandTVC tableView:didSelectRowAtIndexPath:]', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da' }, { u'instruction_addr': 711430419, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 711429500, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 712146443, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 712146248, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 710792953, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 710792644, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 710246199, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 710245732, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 653189741, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653189720, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 653179217, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653178940, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 653180243, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653179328, u'symbol_name': u'<redacted>' }, { u'instruction_addr': 652442017, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 652441540, u'symbol_name': u'CFRunLoopRunSpecific' }, { u'instruction_addr': 652441523, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 652441416, u'symbol_name': u'CFRunLoopRunInMode' }, { u'instruction_addr': 777949609, u'object_addr': 777912320, u'object_name': u'GraphicsServices', u'symbol_addr': 777949472, u'symbol_name': u'GSEventRunModal' }, { u'instruction_addr': 710682261, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 710680820, u'symbol_name': u'UIApplicationMain' }, { 'column': 12, 'filename': u'/Users/karl/Projects/KSCrash/iOS/Crash-Tester/main.m', u'instruction_addr': 801763, 'line': 17, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'main', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da' }, { u'instruction_addr': 893569711, u'object_addr': 893562880, u'object_name': u'libdyld.dylib', u'symbol_addr': 893569708, u'symbol_name': u'<redacted>' }]
def test_basic_report(res_path, driver): with open(os.path.join(res_path, 'crash-report.json')) as f: report = json.load(f) bt = None dsym_path = os.path.join(res_path, 'Crash-Tester.app.dSYM') rep = ReportSymbolizer(driver, dsym_path, report['binary_images']) for thread in report['crash']['threads']: if thread['crashed']: assert bt is None bt = rep.symbolize_backtrace(thread['backtrace']['contents']) assert bt is not None import pprint pprint.pprint(bt) assert bt == [ {u'instruction_addr': 653426999, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653426872, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 887639159, u'object_addr': 887611392, u'object_name': u'libobjc.A.dylib', u'symbol_addr': 887639120, u'symbol_name': u'objc_exception_throw'}, {u'instruction_addr': 653448701, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653448512, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 653440217, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653439504, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 652585432, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 652585408, u'symbol_name': u'_CF_forwarding_prep_0'}, {'column': 5, 'filename': u'/Users/karl/Projects/KSCrash/Source/Common-Examples/Crasher.mm', u'instruction_addr': 782745, 'line': 96, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'-[Crasher throwUncaughtNSException]', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da'}, {'column': 11, 'filename': u'/Users/karl/Projects/KSCrash/iOS/Crash-Tester/AppDelegate+UI.m', u'instruction_addr': 794881, 'line': 358, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'__32-[AppDelegate(UI) crashCommands]_block_invoke', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da'}, {'column': 5, 'filename': u'/Users/karl/Projects/KSCrash/iOS/Crash-Tester/CommandTVC.m', u'instruction_addr': 802133, 'line': 48, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'-[CommandEntry executeWithViewController:]', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da'}, {'column': 5, 'filename': u'/Users/karl/Projects/KSCrash/iOS/Crash-Tester/CommandTVC.m', u'instruction_addr': 803225, 'line': 128, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'-[CommandTVC tableView:didSelectRowAtIndexPath:]', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da'}, {u'instruction_addr': 711430419, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 711429500, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 712146443, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 712146248, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 710792953, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 710792644, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 710246199, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 710245732, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 653189741, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653189720, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 653179217, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653178940, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 653180243, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 653179328, u'symbol_name': u'<redacted>'}, {u'instruction_addr': 652442017, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 652441540, u'symbol_name': u'CFRunLoopRunSpecific'}, {u'instruction_addr': 652441523, u'object_addr': 652337152, u'object_name': u'CoreFoundation', u'symbol_addr': 652441416, u'symbol_name': u'CFRunLoopRunInMode'}, {u'instruction_addr': 777949609, u'object_addr': 777912320, u'object_name': u'GraphicsServices', u'symbol_addr': 777949472, u'symbol_name': u'GSEventRunModal'}, {u'instruction_addr': 710682261, u'object_addr': 710225920, u'object_name': u'UIKit', u'symbol_addr': 710680820, u'symbol_name': u'UIApplicationMain'}, {'column': 12, 'filename': u'/Users/karl/Projects/KSCrash/iOS/Crash-Tester/main.m', u'instruction_addr': 801763, 'line': 17, u'object_addr': 749568, u'object_name': u'Crash-Tester', u'symbol_addr': 749568, u'symbol_name': u'main', 'uuid': u'8094558b-3641-36f7-ba80-a1aaabcf72da'}, {u'instruction_addr': 893569711, u'object_addr': 893562880, u'object_name': u'libdyld.dylib', u'symbol_addr': 893569708, u'symbol_name': u'<redacted>'} ]