<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Feb 18, 2021, at 6:55 AM, Ivan Hernandez <<a href="mailto:ivanhernandez@google.com" class="">ivanhernandez@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Thank you for the very detailed explanation Greg! </div></div></blockquote><div><br class=""></div><div>Happy to help! I wrote the original DebugSymbols.framework when I worked at Apple many many years ago, so I am quite familiar with what it does.</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class="">Good to know about why DBGSpotlightPaths was not working and that DBGSearchPaths is a possible option. I do expect this directory will get quite large so it looks like DBGFileMappedPaths is the better alternative.</div></div></blockquote><div><br class=""></div>Yeah, should be easy to have a python script that can take files from a directory and create any needed file mapped paths for you that is run each time you download some new symbols files. If you make a stand alone python file that does this kind of utility, you can check it into the lldb repository in lldb/examples/python</div><div><br class=""></div><div>Greg</div><div><br class=""><blockquote type="cite" class=""><div class=""><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Feb 17, 2021 at 6:53 PM Greg Clayton <<a href="mailto:clayborg@gmail.com" class="">clayborg@gmail.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;" class="">DBGSpotlightPaths is to limit spotlight searches to _only_ those directories, but they must be valid locations that spotlight would normally index. If you want to see if spotlight indexes a directory that contains a dSYM file, then you can us "mdls":<div class=""><br class=""></div><div class="">$ mdls a.out.dSYM<br class="">_kMDItemDisplayNameWithExtensions      = "a.out.dSYM"<br class="">com_apple_xcode_dsym_paths             = (<br class="">    "Contents/Resources/DWARF/a.out"<br class="">)<br class="">com_apple_xcode_dsym_uuids             = (<br class="">    "4B8A7479-4DF6-3828-AB99-3EF71E79B00E"<br class="">)<br class=""><br class=""><div class=""><br class=""></div><div class="">if you see "com_apple_xcode_dsym_paths" and "com_apple_xcode_dsym_uuids", then spotlight already indexes this directory and nothing should need to be done. This won't work for locations that spotlight normally doesn't index like "/tmp/*", "~/Library/Caches/*" and many more locations. This will just let you know if spotlight is indexing files already.</div><div class=""><br class=""></div><div class="">If you have a directory that contains dSYM files that you want to search, you have a few options:</div><div class="">1 - specify a directory that will be used for the current LLDB session only</div><div class="">2 - add dsym files manually as you need them</div><div class="">3 - specify a directory that will always be searched for all debug sessions</div><div class=""><span style="white-space:pre-wrap" class="">       </span></div><div class=""><br class=""></div><div class="">For solution #1 you can do this in LLDB with a setting:</div><div class=""><br class=""></div><div class="">(lldb) settings set target.debug-file-search-paths /symbols/dir/number1 [/symbols/dir/number2 ...]</div><div class="">(lldb) target create ....</div><div class=""><br class=""></div><div class="">Any dSYM files that aren't found by spotlight, will fall back and look for matching dsym files in the directories you specify for the current LLDB session only.</div><div class=""><br class=""></div><div class="">For solution #2, you can add dSYM files manually:</div><div class=""><br class=""></div><div class="">(lldb) target create a.out</div><div class="">(lldb) target symbols add /path/to/libfoo.dSYM</div><div class=""><br class=""></div><div class="">LLDB will find the executable that matches /path/to/libfoo.dSYM and add it</div><div class=""><br class=""></div><div class="">For solution #3, you can modify the DebugSymbols.framework global defaults which will help LLDB and any other Xcode tools (sample, Instruments, Xcode, etc) to find your symbols:</div><div class=""><br class=""></div><div class=""><div class="">$ defaults write com.apple.DebugSymbols DBGSearchPaths -string /single/path/to/search</div><div class="">$ defaults write com.apple.DebugSymbols DBGSearchPaths -array /path/to/search1 /path/to/search2</div><div class=""><br class=""></div><div class="">The main issue with this settings, is each time you have a program that loads DebugSymbols.framework (like LLDB), it will need to scan this entire directory and find all matching dSYM files. If you end up placing a lot of files in this directory, then it can become a performance cost. So this method is not preferred due to its possible costs that depends on how many dSYM files are in these directories.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">A better solution that works well for solution #3 but has no cost associated with it is to store you dSYM files in a directory that isn't indexed by spotlight, then have a script that ends up chopping up your UUID into 4 byte hex values as specified in <a href="https://lldb.llvm.org/use/symbols.html#id3" target="_blank" class="">File Mapped UUID Directories</a> page. This allows direct access for looking up symbol files when needed and doesn't cost you much besides a few stat() calls when you are looking for specific symbols.</div><div class=""><br class=""></div><div class="">More comments inlined below!</div><div class=""><br class=""></div><br class=""><br class=""></div><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Feb 11, 2021, at 8:29 AM, Ivan Hernandez via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org" target="_blank" class="">lldb-dev@lists.llvm.org</a>> wrote:</div><br class=""><div class=""><div dir="ltr" class=""><div class="">Hello,</div><div class=""><br class=""></div><div class="">I am in need of configuring dSYM lookups on macOS for a directory under ~/Library/Caches which is not indexed by Spotlight and does not seem to be picked up when adding my directory to DBGSpotlightPaths. </div></div></div></blockquote><div class=""><br class=""></div><div class="">Spotlight purposely doesn't index in ~/Library/Caches at all and DBGSpotlightPaths setting for DebubSymbols.framework is used to only limit spotlight's search to existing directories. The DBGSpotlightPaths setting is typically used when you might have multiple external drives and you want to limit spotlight searches to only a few root drives that contain symbols. It won't cause a location that isn't indexed by Spotlight to suddenly become indexed.</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="">The <a href="https://lldb.llvm.org/use/symbols.html" target="_blank" class="">Symbols on macOS</a> page includes "Explicit search paths" as a method of dSYM lookups but mentions no way of configuring it. I happened to come across this very old <a href="https://opensource.apple.com/source/gdb/gdb-696/doc/ReleaseNotes.xml" target="_blank" class="">GDB release notes</a> page which mentions that DBGSearchPaths can be used to configure explicit search paths. </div></div></div></blockquote><div class=""><br class=""></div><div class="">Yes this is correct as I detailed above, but it comes with unacceptable costs according to most people as each process has to scan these directories recursively, so you want to make sure to specify a directory with only a few files if you do end up using this method. If you specify an entire hard drive, each time you start a process that uses DebugSymbols.framework, it will recursively search the entire drive and all subdirectories for dSYM files which can obviously slow things down!</div><div class=""><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="">I can use DBGFileMappedPaths or DBGShellCommands but DBGSearchPaths seems to be working fine and looks like a much simpler approach if it is intended to be supported in the long term.</div></div></div></blockquote><div class=""><br class=""></div>It has been support for over 10 years, so yes, this is supported and will continue to be, as long as you know the costs involved and are ok with that, you can use this method.</div><div class=""><br class=""></div><div class="">Greg Clayton<br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Ivan</div></div>
_______________________________________________<br class="">lldb-dev mailing list<br class=""><a href="mailto:lldb-dev@lists.llvm.org" target="_blank" class="">lldb-dev@lists.llvm.org</a><br class=""><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a><br class=""></div></blockquote></div><br class=""></div></div></blockquote></div>
</div></blockquote></div><br class=""></body></html>