BreakpointResolverFileRegex.cpp revision 263363
1//===-- BreakpointResolverFileRegex.cpp --------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "lldb/Breakpoint/BreakpointResolverFileRegex.h" 11 12// C Includes 13// C++ Includes 14// Other libraries and framework includes 15// Project includes 16#include "lldb/Breakpoint/BreakpointLocation.h" 17#include "lldb/Core/SourceManager.h" 18#include "lldb/Core/Log.h" 19#include "lldb/Core/StreamString.h" 20#include "lldb/Symbol/CompileUnit.h" 21#include "lldb/Target/Target.h" 22#include "lldb/lldb-private-log.h" 23 24using namespace lldb; 25using namespace lldb_private; 26 27//---------------------------------------------------------------------- 28// BreakpointResolverFileRegex: 29//---------------------------------------------------------------------- 30BreakpointResolverFileRegex::BreakpointResolverFileRegex 31( 32 Breakpoint *bkpt, 33 RegularExpression ®ex 34) : 35 BreakpointResolver (bkpt, BreakpointResolver::FileLineResolver), 36 m_regex (regex) 37{ 38} 39 40BreakpointResolverFileRegex::~BreakpointResolverFileRegex () 41{ 42} 43 44Searcher::CallbackReturn 45BreakpointResolverFileRegex::SearchCallback 46( 47 SearchFilter &filter, 48 SymbolContext &context, 49 Address *addr, 50 bool containing 51) 52{ 53 54 assert (m_breakpoint != NULL); 55 if (!context.target_sp) 56 return eCallbackReturnContinue; 57 58 CompileUnit *cu = context.comp_unit; 59 FileSpec cu_file_spec = *(static_cast<FileSpec *>(cu)); 60 std::vector<uint32_t> line_matches; 61 context.target_sp->GetSourceManager().FindLinesMatchingRegex(cu_file_spec, m_regex, 1, UINT32_MAX, line_matches); 62 63 uint32_t num_matches = line_matches.size(); 64 for (uint32_t i = 0; i < num_matches; i++) 65 { 66 SymbolContextList sc_list; 67 const bool search_inlines = false; 68 const bool exact = false; 69 70 cu->ResolveSymbolContext (cu_file_spec, line_matches[i], search_inlines, exact, eSymbolContextEverything, sc_list); 71 const bool skip_prologue = true; 72 73 BreakpointResolver::SetSCMatchesByLine (filter, sc_list, skip_prologue, m_regex.GetText()); 74 } 75 assert (m_breakpoint != NULL); 76 77 return Searcher::eCallbackReturnContinue; 78} 79 80Searcher::Depth 81BreakpointResolverFileRegex::GetDepth() 82{ 83 return Searcher::eDepthCompUnit; 84} 85 86void 87BreakpointResolverFileRegex::GetDescription (Stream *s) 88{ 89 s->Printf ("source regex = \"%s\"", m_regex.GetText()); 90} 91 92void 93BreakpointResolverFileRegex::Dump (Stream *s) const 94{ 95 96} 97 98