[Lldb-commits] [PATCH] D133042: Add auto deduce source map setting

jeffrey tan via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Sep 14 16:38:25 PDT 2022


yinghuitan added a comment.

@clayborg , it is my intention to make `target.auto-deduce-source-map` boolean flag ultimately working for both relative paths and two full paths (two full paths are really important for off build host debugging, e.g. dump or production debugging). In this patch, I focuses on getting relative path working because that's the default behavior; a follow-up patch can get two full paths working. 
In my opinion boolean flag setting is dead simple to use (to enable both) and an enumeration setting would add extra barrier for adoption.

I can add description to `target.auto-deduce-source-map` to explain it only works for relative paths.



================
Comment at: lldb/include/lldb/Breakpoint/BreakpointResolverFileLine.h:70
+  llvm::Optional<llvm::StringRef> m_removed_prefix_opt;
+  lldb::TargetSP m_target = nullptr;
+  bool m_auto_deduce_source_map = false;
----------------
clayborg wrote:
> Store this as a weak pointer to a target to avoid a target that owns an object that will keep the target object from ever being able to destruct itself. Anytime you need to use the target then you use a local variable that is a shared pointer:
> ```
> TargetSP target_sp = m_target_wp.lock();
> if (!target_sp)
>   return;
> ```
> 
Your later comment reminds me that we can get target from `GetBreakpoint()->GetTarget()` so we do not need to store target point at all. 


================
Comment at: lldb/source/Breakpoint/BreakpointResolverFileLine.cpp:217
+
+  const bool case_sensitive = m_location_spec.GetFileSpec().IsCaseSensitive();
+  for (uint32_t i = 0; i < sc_list.GetSize(); ++i) {
----------------
clayborg wrote:
> clayborg wrote:
> > Can we just return if m_location_spec.IsRelative() returns true here to short circuit this entire function? Many users type "b main.cpp:12" and we probably don't need to do any auto source map stuff if the request starts as a relative path like "main.cpp" or "foo/bar/baz.cpp" right?
> Move the "request_file" below to this line and use it to avoid copying it each time through the loop.
I do not think we can because if an existing reverse source mapping is applied `m_location_spec` will become a relative path even though original request is full path (Remember the prefix is stripped and stored in `removed_prefix_opt`? )

I guess I can check:
1. If `removed_prefix_opt` is not available, then return if m_location_spec.IsRelative() is true.
2. If `removed_prefix_opt` is available, do nothing.



================
Comment at: lldb/source/Breakpoint/BreakpointResolverFileLine.cpp:222
+
+    FileSpec sc_file = sc.line_entry.file;
+    FileSpec request_file = m_location_spec.GetFileSpec();
----------------
clayborg wrote:
> Should we quickly continue here if "sc_file" is not relative?
I do not think so. Here is an example:
```
dwarf sc_file:
/build/repo/x/y/z/foo.cpp

breakpoint request:
/user/root/new_repo_location/x/y/z/foo.cpp

User has an existing source mapping entry so a reverse mapping is applied:
original: .
replacement: /user/root/new_repo_location

After reverse mapping:
Breakpoint::m_location_spec: x/y/z/foo.cpp

With the new auto-deduce-source-map a new source mapping entry is added:
original: /build/repo
replacement: /user/root/new_repo_location

You can see the sc_list is full path in this example. 

```



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133042/new/

https://reviews.llvm.org/D133042



More information about the lldb-commits mailing list