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
Beispiel #2
0
  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)