1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import sys
6
7from lib.bucket import BUCKET_ID
8from lib.subcommand import SubCommand
9
10
11class StacktraceCommand(SubCommand):
12  def __init__(self):
13    super(StacktraceCommand, self).__init__(
14        'Usage: %prog stacktrace <dump>')
15
16  def do(self, sys_argv):
17    _, args = self._parse_args(sys_argv, 1)
18    dump_path = args[1]
19    (bucket_set, dump) = SubCommand.load_basic_files(dump_path, False)
20
21    StacktraceCommand._output(dump, bucket_set, sys.stdout)
22    return 0
23
24  @staticmethod
25  def _output(dump, bucket_set, out):
26    """Outputs a given stacktrace.
27
28    Args:
29        bucket_set: A BucketSet object.
30        out: A file object to output.
31    """
32    for line in dump.iter_stacktrace:
33      words = line.split()
34      bucket = bucket_set.get(int(words[BUCKET_ID]))
35      if not bucket:
36        continue
37      for i in range(0, BUCKET_ID - 1):
38        out.write(words[i] + ' ')
39      for frame in bucket.symbolized_stackfunction:
40        out.write(frame + ' ')
41      out.write('\n')
42