17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochimport sys 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfrom lib.bucket import BUCKET_ID 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfrom lib.subcommand import SubCommand 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass StacktraceCommand(SubCommand): 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def __init__(self): 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch super(StacktraceCommand, self).__init__( 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 'Usage: %prog stacktrace <dump>') 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def do(self, sys_argv): 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch _, args = self._parse_args(sys_argv, 1) 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch dump_path = args[1] 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch (bucket_set, dump) = SubCommand.load_basic_files(dump_path, False) 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch StacktraceCommand._output(dump, bucket_set, sys.stdout) 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return 0 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch @staticmethod 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def _output(dump, bucket_set, out): 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Outputs a given stacktrace. 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Args: 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bucket_set: A BucketSet object. 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch out: A file object to output. 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """ 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for line in dump.iter_stacktrace: 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch words = line.split() 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bucket = bucket_set.get(int(words[BUCKET_ID])) 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if not bucket: 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch continue 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for i in range(0, BUCKET_ID - 1): 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch out.write(words[i] + ' ') 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for frame in bucket.symbolized_stackfunction: 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch out.write(frame + ' ') 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch out.write('\n') 42