def symbolize_stacktrace(unsymbolized_crash_stacktrace, enable_inline_frames=True): """Symbolize a crash stacktrace.""" if environment.is_trusted_host(): from bot.untrusted_runner import symbolize_host return symbolize_host.symbolize_stacktrace(unsymbolized_crash_stacktrace, enable_inline_frames) platform = environment.platform() if platform == 'WINDOWS': # Windows Clang ASAN provides symbolized stacktraces anyway. return unsymbolized_crash_stacktrace if platform == 'FUCHSIA': # Fuchsia Clang ASAN provides symbolized stacktraces anyway. return unsymbolized_crash_stacktrace # FIXME: Support symbolization on ChromeOS device. if platform == 'CHROMEOS': return unsymbolized_crash_stacktrace # Initialize variables. global llvm_symbolizer_path global pipes global stack_inlining global symbolizers pipes = [] stack_inlining = str(enable_inline_frames).lower() symbolizers = {} # Make sure we have a llvm symbolizer for this platform. llvm_symbolizer_path = environment.get_llvm_symbolizer_path() if not llvm_symbolizer_path: return unsymbolized_crash_stacktrace # Disable buffering for stdout. disable_buffering() loop = SymbolizationLoop( binary_path_filter=filter_binary_path, dsym_hint_producer=chrome_dsym_hints) symbolized_crash_stacktrace = loop.process_stacktrace( unsymbolized_crash_stacktrace) return symbolized_crash_stacktrace
def test_symbolize(self): """Test symbolize.""" self._setup_env(job_type='job') self.assertIsNotNone(build_manager.setup_build()) app_dir = environment.get_value('APP_DIR') unsymbolized_stacktrace = ( '#0 0x4f1eb4 ({0}/app+0x4f1eb4)\n' '#1 0x4f206e ({0}/app+0x4f206e)\n').format(app_dir) expected_symbolized_stacktrace = ( ' #0 0x4f1eb4 in Vuln(char*, unsigned long) /usr/local/google/home/' 'ochang/crashy_binary/test.cc:9:15\n' ' #1 0x4f206e in main /usr/local/google/home/ochang/crashy_binary/' 'test.cc:32:3\n') symbolized_stacktrace = symbolize_host.symbolize_stacktrace( unsymbolized_stacktrace) self.assertEqual(expected_symbolized_stacktrace, symbolized_stacktrace)