[Lldb-commits] [PATCH] D107386: [LLDB][GUI] Add Breakpoints window

Greg Clayton via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Aug 5 16:46:33 PDT 2021

clayborg added inline comments.

Comment at: lldb/source/Core/IOHandlerCursesGUI.cpp:4331-4333
+    if (StateIsRunningState(process->GetState())) {
+      return false;
+    }
Remove {} for single statement if statements per LLVM guidelines

Comment at: lldb/source/Core/IOHandlerCursesGUI.cpp:4448
+    Process *process = m_debugger.GetSelectedTarget()->GetProcessSP().get();
+    symbol_context.DumpStopContext(&stream, process, address,
+                                   false, /* Show full paths. */
I would show the address first, then the dump of the symbol context. You can ask the address from the location to dump itself as a load address and fallback to module + file address. Check out the Address::Dump function:

  bool Address::Dump(Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, DumpStyle fallback_style, uint32_t addr_byte_size) const;

To get the raw address first in the string, you can first call the dump with:

// Emit the breakpoint location ID
stream.Format("{0} ", breakpoint_location->GetID())
// Emit the the address as a load address if the process is running, or fallback to <module>[<file-addr>] format if no process is running
address.Dump(&stream, process,  DumpStyleLoadAddress, DumpStyleModuleWithFileAddress, process->GetAddressByteSize());

Then you can add a space and then call this again with:

stream.PutChar(' ');
// Dump the resolved address description
address.Dump(&stream, process,  DumpStyleResolvedDescription, DumpStyleInvalid, process->GetAddressByteSize());

I believe that "DumpStyleResolvedDescription" will dump something verify similar to what you are dumping here with the "symbol_context.DumpStopContext(...)" call.

Comment at: lldb/source/Core/IOHandlerCursesGUI.cpp:4454
+                                   true /* Show function name. */);
+    window.PutCStringTruncated(1, stream.GetString().str().c_str());
+  }
Breakpoint locations have integer IDs. We should show these as the first item in the string.

Take a look at the output of "breakpoint list" or "breakpoint list --verbose" for ideas on how to format the string.

Comment at: lldb/source/Core/IOHandlerCursesGUI.cpp:4457
+  void TreeDelegateGenerateChildren(TreeItem &item) override {}
We could allow locations to be expanded and then show the details of the resolved address like in the "breakpoint list --verbose" output:
(lldb) breakpoint list --verbose
Current breakpoints:
1: name = 'main'
      module = /Users/gclayton/Documents/src/args/build/a.out
      compile unit = main.cpp
      function = main
      location = /Users/gclayton/Documents/src/args/main.cpp:5:3
      address = a.out[0x0000000100003f3a]
      resolved = false
      hardware = false
      hit count = 0   
We could make a child for each of the lines in this output. I believe the about output is from calling Address::Dump(...) with a DumpStyle of "DumpStyleDetailedSymbolContext" (see above details on how to call Address::Dump(...)). You can dump this to a "StringStream" and then get the std::string back from it and split the string using newlines if you like that idea. I like the idea of getting full details on a breakpoint location by being able to expand it.

Comment at: lldb/source/Core/IOHandlerCursesGUI.cpp:4481
+    BreakpointSP breakpoint = GetBreakpoint(item);
+    StreamString stream;
+    breakpoint->GetResolverDescription(&stream);
Breakpoints have integer IDs. We should show these as the first item in the string. Not sure on the formatting of this number, maybe just the raw number followed by a space or possibly with square brackets and a space.

Take a look at the output of "breakpoint list" or "breakpoint list --verbose" for ideas on how to format the string.

Comment at: lldb/source/Core/IOHandlerCursesGUI.cpp:6635
         MenuSP(new Menu("Backtrace", nullptr, 'b',
We would switch this one to 't' for backTrace and then let the breakpoint view take the 'b' key?

Comment at: lldb/source/Core/IOHandlerCursesGUI.cpp:6646
+    view_menu_sp->AddSubmenu(
+        MenuSP(new Menu("Breakpoints", nullptr, 'k',
+                        ApplicationDelegate::eMenuID_ViewBreakpoints)));
switch to 'b' and mentioned above?

  rG LLVM Github Monorepo



More information about the lldb-commits mailing list