<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">You can do a:<div class=""><br class=""></div><div class="">(lldb) frame var --raw temp</div><div class=""><br class=""></div><div class="">It will show you the internals of the std::string. If the string is over 22 characters, one of the items in the raw std::string should point to the buffer and the length should be contained inside there as well. The value you see is due to a special summary plug-in that is extracting the std::string value from the innards of the STL implementation.</div><div class=""><br class=""></div><div class="">So a few things could be wrong:</div><div class="">1 - compiler's location for the variable could be wrong (optimizations?) so we show the wrong value</div><div class="">2 - your STL is newer and might pull some tricks when storing the string and our summary extracting code is doing the wrong thing for your std:string. Many std::string implementations will store up to twenty some character inlined into the std::string itself when the string is short. Maybe we aren't handling that quite correctly. What is the actual length of your std::string named "temp"? </div><div class=""><br class=""></div><div class="">As a work around, try to run an expression to get the "const char *"</div><div class="">(lldb) p temp.c_str()</div><div class=""><br class=""></div><div class="">See if this pointer is the output of the "frame var --raw temp" command. Also to see if the string value is inlined you can do:</div><div class=""><br class=""></div><div class="">(lldb) p &temp</div><div class="">(lldb) p sizeof(temp)</div><div class=""><br class=""></div><div class="">Then see if the "const char *" value from "p temp.c_str()" falls between the "&temp" and "&temp + sizeof(temp)".</div><div class=""><br class=""></div><div class="">Let me know what you find. My guess is we might not be handling special cases when the string is inlined, but that is just a guess.</div><div class=""><br class=""></div><div class="">Greg Clayton</div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Jan 13, 2018, at 6:29 AM, Gabriel Nützi via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org" class="">lldb-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><b class="">Dear Dev-Team</b><div class=""><br class=""></div><div class="">Ok this question is not a really dev-question, but I more seeking for some hints:</div><div class=""><br class=""></div><div class=""><div class="">I have some troubles getting <b class="">lldb</b> to show me a correct string output in a CefSchemeHandlerFactory</div><div class=""><br class=""></div><div class=""><a href="https://github.com/gabyx/ExecutionGraph/blob/a24f4c1b538edd6b138503fb96db6fbd71c3b1c5/gui/executionGraphGui/cefapp/FileSchemeHandlerFactory.cpp#L31" class="">https://github.com/gabyx/ExecutionGraph/blob/a24f4c1b538edd6b138503fb96db6fbd71c3b1c5/gui/executionGraphGui/cefapp/FileSchemeHandlerFactory.cpp#L31</a></div><div class=""><br class=""></div><div class="">When I debug this application built with clang-5.0.1 (llvm install with brew) with the debugger lldb:</div><div class=""><br class=""></div><div class=""><b class="">[code]</b></div><div class=""><i class="">[ 96%] Building CXX object gui/executionGraphGui/CMakeFiles/ExecutionGraphGUI.dir/cefapp/FileSchemeHandlerFactory.cpp.o</i></div><div class=""><i class="">/usr/local/opt/llvm/bin/clang++   -I/Users/gabrielnuetzi/Desktop/ExecutionGraph/gui/executionGraphGui -I/Users/gabrielnuetzi/Desktop/ExecutionGraph/include -I/Users/gabrielnuetzi/Desktop/ExecutionGraph/build/include -I/usr/local/include/eigen3 -I/Users/gabrielnuetzi/Desktop/ExecutionGraph/build/src/meta/include -I/Users/gabrielnuetzi/Desktop/ExecutionGraph/build/external/args-src -I/Users/gabrielnuetzi/Desktop/ExecutionGraph/build/external/cefbinaries-src -I/Users/gabrielnuetzi/Desktop/ExecutionGraph/build/external/cefbinaries-src/include  -g -arch x86_64 -mmacosx-version-min=10.9   -std=c++14 -lc++experimental -ferror-limit=50 -Werror=return-type -g -g3 -fno-omit-frame-pointer -Weverything -Wpedantic -Wno-deprecated-register -Wno-documentation -Wno-old-style-cast -Wno-comment -Wno-float-equal -Wno-deprecated -Wno-c++98-compat-pedantic -Wno-undef -Wno-unused-macros -fsanitize=leak -fsanitize=address -o CMakeFiles/ExecutionGraphGUI.dir/cefapp/FileSchemeHandlerFactory.cpp.o -c /Users/gabrielnuetzi/Desktop/ExecutionGraph/gui/executionGraphGui/cefapp/FileSchemeHandlerFactory.cpp</i></div><div class=""><b class="">[/code]</b></div><div class=""><br class=""></div><div class="">I only see really weird output, such as:</div><div class=""><br class=""></div><div class=""><b class="">[code]</b></div><div class=""><i class="">Process 3741 stopped</i></div><div class=""><i class="">* thread #22, name = 'Chrome_IOThread', stop reason = breakpoint 1.1</i></div><div class=""><i class="">    frame #0: 0x000000010011eb09 ExecutionGraphGUI`FileSchemeHandlerFactory::Create(this=0x00006060000dc340, scheme_name=0x0000700007ac9c18, request=(ptr_ = 0x0000700007ac9c10)) at FileSchemeHandlerFactory.cpp:37</i></div><div class=""><i class="">   34           {</i></div><div class=""><i class="">   35               ++itC;</i></div><div class=""><i class="">   36           }</i></div><div class=""><i class="">-> 37           std::path url(itC, temp.end());</i></div><div class=""><i class="">   38           // e.g. url : "host/folderA/folderB/file.ext""</i></div><div class=""><i class="">   39</i></div><div class=""><i class="">   40           // Split urlPrefix from front (e.g "host/folderA")</i></div><div class=""><i class=""><br class=""></i></div><div class=""><i class="">Process 3741 launched: '/Users/gabrielnuetzi/Desktop/ExecutionGraph/build/gui/executionGraphGui/Debug/ExecutionGraphGUI.app/Contents/MacOS/ExecutionGraphGUI' (x86_64)</i></div><div class=""><i class=""><b class="">(lldb) fr v temp</b></i></div><div class=""><i class=""><b class="">(std::__1::string) temp = "\x85\xac\a\0p\0\0\x10\x85\xac\a\0p\0\0�\a\0p\0\0\xa0\x83\xac\a\0p\0\0`\x83\xac\a\0p\0\0@"</b></i></div><div class=""><b class="">[/code]</b></div><div class=""><br class=""></div><div class="">Why is this, or where could the problem be? I have a really hard time to figure out why I cannot successfully debug these strings in my application.</div><div class="">The above example has been done by launching lldb from the terminal. (No python formatters have been loaded I think…? at least not by me)</div><div class="">In a normal main.cpp Application like the one here: <a href="https://github.com/gabyx/ExecutionGraph/blob/devGUI/gui/testDebugger/build.sh" class="">https://github.com/gabyx/ExecutionGraph/blob/devGUI/gui/testDebugger/build.sh</a></div><div class="">everything works and the strings are formatted normally.</div><div class=""><br class=""></div><div class="">Any help really welcome!</div><div class="">BR </div></div><div class=""><br class=""><div class="">
<div class="">Gabriel Nützi</div><div class="">MSc ETH Mechanical Engineering</div><div class=""><br class=""></div><div class=""><a href="mailto:gnuetzi@gmail.com" class="">gnuetzi@gmail.com</a></div><div class="">+41 (0) 77 424 86 45</div>
</div>
<br class=""></div></div>_______________________________________________<br class="">lldb-dev mailing list<br class=""><a href="mailto:lldb-dev@lists.llvm.org" class="">lldb-dev@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev<br class=""></div></blockquote></div><br class=""></div></body></html>