> On Apr 21, 2016, at 9:59 PM, Jeffrey Tan <jeffrey.fu...@gmail.com> wrote: > > Hi Greg, > > Thanks for the explanation. Even we strip the arguments we definitely will > provide a UI for users to toggle arguments type/name/values. It's just, with > argument types, the function name can be really long and hard to read: > <Screen Shot 2016-04-19 at 23.13.43.png>
You should probably not wrap the stack frame view IMHO and have it be scrollable horizontally. That might help. > > I was surprised that I need to strip out arguments manually because in > command line I can do "settings set frame-format > [...%{function.name-without-args}]" telling lldb to print callstack(using bt > command) without arguments. My understanding is that the get function name > without arguments exists because may not be exposed in python API yet. Is > this not true? Yes, this isn't in the API yet. You might want to add a function to SBCommandInterpreter like: We could also add a new "SBFormat" class that can wrap up a parsed format string: class FormatImpl; typedef std::shared_ptr<FormatImpl> FormatImplSP; namespace lldb { class SBFormat { public: SBFormat(); lldb::SBError ParseFormat (const char *format); lldb::SBExecutionContext GetExecutionContext(); lldb::SBAddress GetAddress(); lldb::SBValue SetValue(); void SetExecutionContext(lldb::SBExecutionContext &exe_ctx); void SetAddress(lldb::SBAddress &addr); void SetValue(lldb::SBValue &value); void ApplyFormat(lldb::SBStream &strm); protected: FormatImplSP m_opaque_sp; }; } Then FormatImpl would contain be defined in SBFormat.cpp only: class FormatImpl { protected: FormatEntity::Entry m_format; ExecutionContextRef m_exe_ctx_ref; Address m_address; ValueObjectSP m_value_sp; }; This would allow you to make format objects that would stay around and already be precompiled so evaluating a format would be quick and be able to set the execution context, address, or value as needed. > // bt command output after settings set frame-format > [...%{function.name-without-args}...] > * frame #0: 0x0000000000403372 min`main + 586 at minimal.cpp:46 > frame #1: 0x00007f9a44c050f6 libc.so.6`__libc_start_main + 246 > frame #2: 0x0000000000402fb8 min`_start + 41 at start.S:122 > > Jeffrey > > On Thu, Apr 21, 2016 at 2:49 PM, Greg Clayton <gclay...@apple.com> wrote: > The difference is how the debug info is emitted in the DWARF. Functions that > come from C++ will have mangled names. These mangled names contain the > arguments. If a function has a mangled name we will demangle it and display > that. You can easily strip this if you want to by looking for the first "(" > character and stripping the contents. We don't do anything like this. The > main issue you will run into is if you have code like: > > > int foo(int f) > { > return f*2; // Break here... > } > > float foo(float d) > { > return (float)foo((int)d); > } > > int main(int argc, const char **argv) > { > float f = float(2.3); > return 0; > } > > > If you set a breakpoint at "Break here" and run you will currently get: > > foo(int) + 16 > foo(float) + 23 > main + 25 > > But you are saying you would rather see: > > foo + 16 > foo + 23 > main + 25 > > Or: > > foo(...) + 16 > foo(...) + 23 > main + 25 > > "main" is funny because C++ compilers will often 'extern "C"' the function > auto magically. This will stop it from getting a mangled name and stop us > from showing "main(int, const char **)" as the function name. > > The other reason you might not want to strip anything from the actual name is > what happens when you are debugging another language? If you strip any text > between "(" and ")", you might ruin a stack frame for the "q" language that > has a function name like "foo.bar.baz{int (hello)}" and display this as > "foo.bar.baz{int ()}". So any stripping you do, you will want to only do this > for specific languages. We do have "const char * > SBFunction::GetDisplayName()", but we currently only do something different > for Swift (the new Apple language). You can't change the output of that for > C++. > > Personally I like to see all of the arguments that uniquely identify each > function, but that is me. So anything you do in your debugger, you will want > to make that configurable. > > Greg > > > > On Apr 21, 2016, at 1:45 PM, Jeffrey Tan via lldb-dev > > <lldb-dev@lists.llvm.org> wrote: > > > > Hi, > > > > I call SBFrame.name to get function name and display in our debugger > > callstack window. However, this seems to include arguments types > > sometimes.(Btw: why it includes arguments types for subFunction but not > > main() in screenshot?) > > > > <Screen Shot 2016-04-21 at 1.40.55 PM.png> > > > > This is fine for small function, but can be really long if the function has > > a lot of arguments and the arguments are of template type. > > > > Is there any way to only get the function name without arguments types? > > > > I have tried ""settings set frame-format [..]" " which seems to only apply > > to "bt" command. > > I have tried SBFrame.function.name the same result. > > > > Did I miss anything? > > Jeffrey > > _______________________________________________ > > lldb-dev mailing list > > lldb-dev@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev > > _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev