labath added a comment.

In https://reviews.llvm.org/D54617#1302376, @JDevlieghere wrote:

> In https://reviews.llvm.org/D54617#1302366, @labath wrote:
>
> > I am confused by differing scopes of various objects that are interacting 
> > here. It seems you are implementing capture/replay as something that can be 
> > flicked on/off at any point during a debug session (`Debugger` lifetime). 
> > However, you are modifying global state (the filesystem singleton, at 
> > least), which is shared by all debug sessions. If multiple debug sessions 
> > try to enable capture/replay (or even access the filesystem concurrently, 
> > as none of this is synchronized in any way), things will break horribly. 
> > This seems like a bad starting point in implementing a feature, as I don't 
> > see any way to fix incrementally in the future.
>
>
> Maybe I should've added a comment (I didn't want to litter the code with 
> design goals) but the goal of the commands is not really to enable/disable 
> the reproducer feature. I'm currently abusing the commands to do that, but 
> the long term goal is that you can enable/disable part of the reproducer. For 
> example, you could say only capture GDB packets or capture only files. It 
> makes testing a lot easier if you can isolate a single source of information. 
> Since there's currently only GDB packets I didn't split it up (yet).
>
> Also I piggy-backed off this to enable/disable the feature as a whole because 
> I needed to go through the debugger. See my reply below on why and how 
> that'll be fixed by the next patch :-)


Ok, that makes sense, thanks for the explanation. I guess that means that 
filesystem capturing (due to it being global) will then be one of the things 
that cannot be enabled/disabled at runtime ?



================
Comment at: source/Host/common/FileSystem.cpp:71-74
+  llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> buffer =
+      m_fs->getBufferForFile(mapping);
+  if (!buffer)
+    return;
----------------
Do you want to propagate this error up the stack?


================
Comment at: source/Utility/FileCollector.cpp:31-32
+  // default.
+  for (auto &C : path)
+    upper_dest.push_back(toUpper(C));
+  if (sys::fs::real_path(upper_dest, real_dest) && path.equals(real_dest))
----------------
`upper_dest = path.upper();` ?


================
Comment at: source/Utility/FileCollector.cpp:82-87
+  // Remove redundant leading "./" pieces and consecutive separators.
+  absolute_src = sys::path::remove_leading_dotslash(absolute_src);
+
+  // Canonicalize the source path by removing "..", "." components.
+  SmallString<256> virtual_path = absolute_src;
+  sys::path::remove_dots(virtual_path, /*remove_dot_dot=*/true);
----------------
Is there anything which `remove_leading_dotslash` does, which wouldn't be done 
by the latter `remove_dots` call?


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D54617



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to