Author: Dave Lee
Date: 2023-02-15T15:25:59-08:00
New Revision: f1ddfa6d8a72bcc89e01ab8f73bbe5ae5a0dc475

URL: 
https://github.com/llvm/llvm-project/commit/f1ddfa6d8a72bcc89e01ab8f73bbe5ae5a0dc475
DIFF: 
https://github.com/llvm/llvm-project/commit/f1ddfa6d8a72bcc89e01ab8f73bbe5ae5a0dc475.diff

LOG: [lldb] Remove pydoc import during script interpreter init

The Python script interpreter imports `pydoc` during initialization, but this 
can be
slow in some cases, and doesn't seem to be necessary any more.

This can be slow because pydoc may execute shell commands (for example `xcrun` 
on
macOS). The shell commands may have variable performance, depending on their 
caches and
search space.

The 2012 bug report for the original commit 
(f71a8399997bfdc1ddeeb30c6a8897554a11c382)
says the following:

> "script help" in lldb pipes the help documentation through less(1) but 
> there's some
> problem with the key handling and often the keys you'd use to move in less 
> (space to
> move down a page, 'q' to quit) are not received by less (they're going to lldb
> instead)

This was resolved at the time by overriding `pydoc`'s pager to be the 
`plainpager`
function.

I have manually tested `script help(lldb.SBDebugger)` and found no issues with 
the
pager, including using "space" for paging, "/" for searching, and "q" for 
quitting.

The presumption is that lldb and/or Python have improved I/O handling that 
eliminates
the original problem.

The original bug report gave an ~/.lldbinit workaround:

```
script import pydoc; pydoc.pager = pydoc.plainpager
```

Note that calling Python's `help()` will import `pydoc`, but this will only 
happen for
users who use `help()` from the `script` command.

Differential Revision: https://reviews.llvm.org/D144138

Added: 
    

Modified: 
    lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp

Removed: 
    


################################################################################
diff  --git 
a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp 
b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
index 1a2307424750d..edce7c894e4d3 100644
--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
@@ -441,7 +441,7 @@ 
ScriptInterpreterPythonImpl::ScriptInterpreterPythonImpl(Debugger &debugger)
   // do their task
   run_string.Clear();
   run_string.Printf(
-      "run_one_line (%s, 'import lldb.formatters, lldb.formatters.cpp, 
pydoc')",
+      "run_one_line (%s, 'import lldb.formatters, lldb.formatters.cpp')",
       m_dictionary_name.c_str());
   PyRun_SimpleString(run_string.GetData());
   run_string.Clear();
@@ -454,7 +454,7 @@ 
ScriptInterpreterPythonImpl::ScriptInterpreterPythonImpl(Debugger &debugger)
   run_string.Clear();
 
   run_string.Printf("run_one_line (%s, 'lldb.debugger_unique_id = %" PRIu64
-                    "; pydoc.pager = pydoc.plainpager')",
+                    "')",
                     m_dictionary_name.c_str(), m_debugger.GetID());
   PyRun_SimpleString(run_string.GetData());
 }


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

Reply via email to