[Lldb-commits] [PATCH] D107669: [trace] [intel pt] Create a "process trace save" command

walter erquinigo via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Mon Aug 9 19:03:29 PDT 2021


wallace added inline comments.


================
Comment at: lldb/include/lldb/Target/Trace.h:75
+  virtual llvm::Error SaveToDisk(FileSpec directory,
+                                 lldb::ProcessSP &process_sp) = 0;
+
----------------
clayborg wrote:
> This class will already have a process in "Process *m_live_process" member variable, so no need to pass in the process. This will be NULL if we loaded a trace from disk already, but that should be ok because it was already loaded from something on disk.
Fair enough. Then better rename this method to SaveLiveProcessTraceToDisk or SaveLiveTraceToDisk, and make a comment mentioning that this will return an error if this is not tracing a live process.


================
Comment at: lldb/source/Plugins/Trace/intel-pt/IntelPTDecoder.h:36
 
+  /// Get thr raw trace of the thread.
+  ///
----------------
thr -> the


================
Comment at: lldb/source/Plugins/Trace/intel-pt/IntelPTDecoder.h:40
+  ///     raw trace from the thread buffer as bytes.
+  virtual llvm::Expected<std::vector<uint8_t>> GetRawTrace() = 0;
+
----------------
clayborg wrote:
> This data is quite large, can we just get a reference to the data without making a copy by using llvm::ArrayRef?
Sadly this can't work. LiveThreadDecoder::GetRawTrace() gets the raw trace from lldb-server and puts it in a vector without any object owning it. So the actual vector will need to be returned because no one wants to own it. It's not that bad though, because Expected just moves the inner data without creating copies.


================
Comment at: lldb/test/API/commands/trace/TestTraceSave.py:38-43
+        self.expect("process trace save -d " +
+            os.path.join(self.getSourceDir(), "intelpt-trace", "trace_copy_dir"))
+        # Load the trace just saved
+        self.expect("trace load -v " +
+            os.path.join(self.getSourceDir(), "intelpt-trace", "trace_copy_dir", "trace.json"),
+            substrs=["intel-pt"])
----------------
use self.getBuildDir() instead of self.getSourceDir() for the files were you will store data


================
Comment at: lldb/test/API/commands/trace/TestTraceSave.py:69-70
+
+        #remove <trace_copy_dir>
+        shutil.rmtree(os.path.join(self.getSourceDir(), "intelpt-trace", "trace_copy_dir"))
----------------
you don't need to do this. Every time the test runs all the previous data will be wiped out


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

https://reviews.llvm.org/D107669



More information about the lldb-commits mailing list