[Lldb-commits] [PATCH] D156970: Fix crash in lldb-vscode when missing function name

Tom Yang via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Aug 3 00:46:47 PDT 2023


zhyty created this revision.
Herald added a project: All.
zhyty requested review of this revision.
Herald added subscribers: lldb-commits, wangpc.
Herald added a project: LLDB.

In cases where the PC has no function name, lldb-vscode crashes.

`lldb::SBFrame::GetDisplayFunctionName()` returns a `nullptr`, and when we
attempt to construct an `std::string`, it raises an exception.

Test plan:
This can be observed with creating a test file (credit to @clayborg for the
example):

  int main() {
    typedef void (*FooCallback)();
    FooCallback foo_callback = (FooCallback)0;
    foo_callback(); // Crash at zero!
    return 0;
  }

and attempting to debug the file through VSCode.

I add a test case in D156732 <https://reviews.llvm.org/D156732> which should cover this.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D156970

Files:
  lldb/tools/lldb-vscode/JSONUtils.cpp


Index: lldb/tools/lldb-vscode/JSONUtils.cpp
===================================================================
--- lldb/tools/lldb-vscode/JSONUtils.cpp
+++ lldb/tools/lldb-vscode/JSONUtils.cpp
@@ -696,7 +696,11 @@
   int64_t frame_id = MakeVSCodeFrameID(frame);
   object.try_emplace("id", frame_id);
 
-  std::string frame_name = frame.GetDisplayFunctionName();
+  // `function_name` can be a nullptr, which throws an error when assigned to an
+  // `std::string`.
+  const char *function_name = frame.GetDisplayFunctionName();
+  std::string frame_name =
+      function_name == nullptr ? std::string() : function_name;
   if (frame_name.empty())
     frame_name = "<unknown>";
   bool is_optimized = frame.GetFunction().GetIsOptimized();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D156970.546734.patch
Type: text/x-patch
Size: 742 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20230803/38fd40e5/attachment.bin>


More information about the lldb-commits mailing list