1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)# found in the LICENSE file. 4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import os 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import cr 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class GdbDebugger(cr.Debugger): 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """An implementation of cr.Debugger that launches gdb.""" 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DETECTED = cr.Config('DETECTED') 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @property 16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def enabled(self): 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return (cr.LinuxPlatform.GetInstance().is_active and 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.DETECTED.Find('CR_GDB')) 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch def Invoke(self, targets, arguments): 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) for target in targets: 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch with target: 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch cr.Host.Execute( 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch '{CR_GDB}', '--eval-command=run', '--args', 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch '{CR_BINARY}', 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch '{CR_RUN_ARGUMENTS}', 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *arguments 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ) 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch def Attach(self, targets, arguments): 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) raise NotImplementedError('Attach not currently supported for gdb.') 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) @classmethod 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def ClassInit(cls): 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # Attempt to find a valid gdb on the path. 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gdb_binaries = cr.Host.SearchPath('gdb') 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if gdb_binaries: 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cls.DETECTED.Set(CR_GDB=gdb_binaries[0]) 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 40