Op 27-3-2013 23:28, Greg Clayton schreef:
You will need to sample the application that is running LLDB (MSVC?) to see 
what it is doing. This delay happens _after_ a read and before the next write, 
so the program is up to something in between there.


I did; one of the biggest slowdowns seems to be due to my "exception breakpoint":

self->m_target.BreakpointCreateForException(lldb::eLanguageTypeObjC, false, true);

When set, after libresolv.dylib got loaded, it loads the DWARF symbols for all referenced libraries then tries to find "objc_exception_throw",

Setting a BP in :
void
Breakpoint::ResolveBreakpointInModules (ModuleList &module_list)
{
    if (m_resolver_sp)
m_resolver_sp->ResolveBreakpointInModules(*m_filter_sp, module_list);
}

the "ResolveBerakpointInModules" takes 6 seconds (for 120 modules)

If i press pause i get a callstack like:
msvcr100d.dll!unaligned_memcmp(const unsigned char * bLHS, const unsigned char * bRHS, unsigned int siz) + 0xcf bytes C msvcr100d.dll!memcmp(const void * lhs, const void * rhs, unsigned int siz) + 0x19c bytes C llvm::StringRef::compareMemory(const char * Lhs, const char * Rhs, unsigned int Length) Line 65 + 0x11 bytes C++
llvm::StringRef::equals(llvm::StringRef RHS)  Line 131 + 0x1e bytes     C++
llvm::operator==(llvm::StringRef LHS, llvm::StringRef RHS)  Line 516    C++
llvm::StringMapImpl::LookupBucketFor(llvm::StringRef Name) Line 97 + 0x29 bytes C++ llvm::StringMap<char const *,llvm::BumpPtrAllocator>::GetOrCreateValue<char const *>(llvm::StringRef Key, const char * Val) Line 350 + 0x10 bytes C++ Pool::GetConstCStringWithLength(const char * cstr, int cstr_len) Line 96 + 0x15 bytes C++
Pool::GetConstCString(const char * cstr)  Line 85 + 0x19 bytes  C++
lldb_private::ConstString::ConstString(const char * cstr) Line 212 + 0x1e bytes C++
ObjectFileMachO::ParseSymtab(bool minimize)  Line 2922 + 0x12 bytes     C++
ObjectFileMachO::GetSymtab()  Line 744  C++
SymbolFileSymtab::CalculateAbilities()  Line 89 + 0x15 bytes    C++
lldb_private::SymbolFile::GetAbilities()  Line 96 + 0xf bytes   C++
lldb_private::SymbolFile::FindPlugin(lldb_private::ObjectFile * obj_file) Line 39 + 0xf bytes C++ lldb_private::SymbolVendor::AddSymbolFileRepresentation(const std::tr1::shared_ptr<lldb_private::ObjectFile> & objfile_sp) Line 99 + 0xe bytes C++ lldb_private::SymbolVendor::FindPlugin(const std::tr1::shared_ptr<lldb_private::Module> & module_sp, lldb_private::Stream * feedback_strm) Line 63 + 0x1f bytes C++ lldb_private::Module::GetSymbolVendor(bool can_create, lldb_private::Stream * feedback_strm) Line 780 + 0x19 bytes C++ lldb_private::Module::FindFunctions(const lldb_private::ConstString & name, const lldb_private::ClangNamespaceDecl * namespace_decl, unsigned int name_type_mask, bool include_symbols, bool include_inlines, bool append, lldb_private::SymbolContextList & sc_list) Line 589 + 0x13 bytes C++ lldb_private::BreakpointResolverName::SearchCallback(lldb_private::SearchFilter & filter, lldb_private::SymbolContext & context, lldb_private::Address * addr, bool containing) Line 179 + 0x38 bytes C++ lldb_private::LanguageRuntime::ExceptionBreakpointResolver::SearchCallback(lldb_private::SearchFilter & filter, lldb_private::SymbolContext & context, lldb_private::Address * addr, bool containing) Line 153 + 0x2e bytes C++ lldb_private::SearchFilter::DoModuleIteration(const lldb_private::SymbolContext & context, lldb_private::Searcher & searcher) Line 198 + 0x1b bytes C++ lldb_private::SearchFilter::DoModuleIteration(const std::tr1::shared_ptr<lldb_private::Module> & module_sp, lldb_private::Searcher & searcher) Line 185 + 0x10 bytes C++ lldb_private::SearchFilter::SearchInModuleList(lldb_private::Searcher & searcher, lldb_private::ModuleList & modules) Line 173 + 0x13 bytes C++ lldb_private::BreakpointResolver::ResolveBreakpointInModules(lldb_private::SearchFilter & filter, lldb_private::ModuleList & modules) Line 53 + 0x17 bytes C++ lldb_private::Breakpoint::ResolveBreakpointInModules(lldb_private::ModuleList & module_list) Line 341 + 0x2d bytes C++ lldb_private::Breakpoint::ModulesChanged(lldb_private::ModuleList & module_list, bool load, bool delete_locations) Line 420 C++ lldb_private::BreakpointList::UpdateBreakpoints(lldb_private::ModuleList & module_list, bool added) Line 213 + 0x21 bytes C++ lldb_private::Target::ModulesDidLoad(lldb_private::ModuleList & module_list) Line 1136 C++ DynamicLoaderMacOSXDYLD::AddModulesUsingImageInfos(std::vector<DynamicLoaderMacOSXDYLD::DYLDImageInfo,std::allocator<DynamicLoaderMacOSXDYLD::DYLDImageInfo> > & image_infos) Line 938 C++ DynamicLoaderMacOSXDYLD::AddModulesUsingImageInfosAddress(unsigned __int64 image_infos_addr, unsigned int image_infos_count) Line 836 + 0xc bytes C++ DynamicLoaderMacOSXDYLD::InitializeFromAllImageInfos() Line 1109 + 0x23 bytes C++ DynamicLoaderMacOSXDYLD::NotifyBreakpointHit(void * baton, lldb_private::StoppointCallbackContext * context, unsigned __int64 break_id, unsigned __int64 break_loc_id) Line 641 + 0x8 bytes C++ lldb_private::BreakpointOptions::InvokeCallback(lldb_private::StoppointCallbackContext * context, unsigned __int64 break_id, unsigned __int64 break_loc_id) Line 150 + 0x4c bytes C++ lldb_private::Breakpoint::InvokeCallback(lldb_private::StoppointCallbackContext * context, int bp_loc_id) Line 322 C++ lldb_private::BreakpointLocation::InvokeCallback(lldb_private::StoppointCallbackContext * context) Line 208 C++ lldb_private::BreakpointLocation::ShouldStop(lldb_private::StoppointCallbackContext * context) Line 340 + 0xc bytes C++ lldb_private::BreakpointLocationCollection::ShouldStop(lldb_private::StoppointCallbackContext * context) Line 144 + 0x2d bytes C++ lldb_private::BreakpointSite::ShouldStop(lldb_private::StoppointCallbackContext * context) Line 66 C++ lldb_private::StopInfoBreakpoint::ShouldStopSynchronous(lldb_private::Event * event_ptr) Line 163 + 0x2a bytes C++ lldb_private::Thread::ShouldStop(lldb_private::Event * event_ptr) Line 602 + 0x34 bytes C++


(top part varies, but it always has GetSymtab in it.)


I haven't found a sampling profiler that works yet so I don't know how to get much more info from this yet. Is there any chance this is long optimized and I'm just behind on revisions on the Windows branch?
_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to