[Lldb-commits] [PATCH] D88123: Add the ability to write 'target stop-hooks' in Python

Jonas Devlieghere via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Sep 23 15:58:56 PDT 2020


JDevlieghere added a comment.

I'm very excited about this feature. Great job on the documentation, both in the help output as for the website.  Do you have a potential use case in mind that we could add to the examples?



================
Comment at: lldb/docs/use/python-reference.rst:843
+|                    |                                       | **target** is the SBTarget to which the stop hook is added.                                                      |
+|                    |                                       |                                                                                                                  |
+|                    |                                       |                                                                                                                  |
----------------
Any reason for the double empty lines?


================
Comment at: lldb/docs/use/python-reference.rst:863
+
+::
+   (lldb) command script import MyModule.py
----------------
There needs to be a newline here for this to be rendered as code. 


================
Comment at: lldb/include/lldb/Interpreter/ScriptInterpreter.h:302
+  virtual StructuredData::GenericSP
+  CreateScriptedStopHook(lldb::TargetSP target_sp, const char *class_name,
+                         StructuredDataImpl *args_data, Status &error) {
----------------
Could this function return an `Expected<StructuredData::GenericSP>` instead?


================
Comment at: lldb/include/lldb/Target/Target.h:1198
+
+    StringList *GetCommandPointer() { return &m_commands; }
+    const StringList &GetCommands() { return m_commands; }
----------------
Can we drop this altogether? We can always get the address of the reference at the call site. 


================
Comment at: lldb/include/lldb/Target/Target.h:1200
+    const StringList &GetCommands() { return m_commands; }
+    void SetActionFromString(std::string &strings);
+    void SetActionFromStrings(std::vector<std::string> &strings);
----------------
can this be a const reference? Maybe even a `StringRef`? Similar question for the methods below.


================
Comment at: lldb/include/lldb/Target/Target.h:1231
+    std::string m_class_name;
+    StructuredDataImpl *m_extra_args; // We own this structured data,
+                                      // but the SD itself manages the UP.
----------------
Please make these Doxygen comments (`///`) and put them on the line above the variable. 


================
Comment at: lldb/include/lldb/Target/Target.h:1237
+    // Use CreateStopHook to make a new empty stop hook. The GetCommandPointer
+    // and fill it with commands, and SetSpecifier to set the specifier shared
+    // pointer (can be null, that will match anything.)
----------------
`///`


================
Comment at: lldb/include/lldb/Target/Target.h:1246
 
   // Add an empty stop hook to the Target's stop hook list, and returns a
   // shared pointer to it in new_hook. Returns the id of the new hook.
----------------
And you might as well fix that here too :-) 


================
Comment at: lldb/include/lldb/Target/Target.h:1248
   // shared pointer to it in new_hook. Returns the id of the new hook.
-  StopHookSP CreateStopHook();
+  StopHookSP CreateStopHook(bool use_commands);
+
----------------
I think we should make this a little enum that has the values command and scripted.


================
Comment at: lldb/source/Commands/CommandObjectTarget.cpp:4691
+        // The IOHandler editor is only for command lines stop hooks:
+        Status error;
+        Target::StopHookCommandLine *hook_ptr =
----------------
Is this used?


================
Comment at: lldb/source/Target/Target.cpp:3149
+  SymbolContextSpecifier *specifier = GetSpecifier();
+  if (!specifier)
+    return true;
----------------
So many early returns in this patch 😍


================
Comment at: lldb/source/Target/Target.cpp:3269
+
+  m_extra_args = new StructuredDataImpl();
+
----------------
It looks like we will leak this if script_interp is null. One solution for that would be to wrap it in a unique_ptr and release it when passing it to CreateScriptedStopHook. If we do the `m_extra_args` assignment just before that call that also guarantees that the variable remains null until then.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D88123



More information about the lldb-commits mailing list