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