summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/examples/customization/import-python
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lldb/examples/customization/import-python')
-rw-r--r--gnu/llvm/lldb/examples/customization/import-python/README40
-rw-r--r--gnu/llvm/lldb/examples/customization/import-python/importcmd.py39
2 files changed, 79 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/examples/customization/import-python/README b/gnu/llvm/lldb/examples/customization/import-python/README
new file mode 100644
index 00000000000..9122f8f46dc
--- /dev/null
+++ b/gnu/llvm/lldb/examples/customization/import-python/README
@@ -0,0 +1,40 @@
+Files in this directory:
+
+o importcmd.py:
+
+Python module which provides implementation for the 'import' command.
+
+o README:
+
+The file you are reading now.
+
+================================================================================
+The import command defined by importcmd.py can be used in LLDB to load a Python
+module given its full pathname.
+The command works by extending Python's sys.path lookup to include the path to
+the module to be imported when required, and then going through the language
+ordinary 'import' mechanism. In this respect, modules imported from LLDB command
+line should not be distinguishable from those imported using the script interpreter.
+The following terminal output shows an interaction with lldb using this new command.
+
+Enrico-Granatas-MacBook-Pro:Debug enricogranata$ ./lldb
+(lldb) script import importcmd
+(lldb) command script add import -f importcmd.pyimport_cmd
+(lldb) import ../demo.py
+(lldb) script demo.test_function('hello world')
+I am a Python function that says hello world
+(lldb) quit
+Enrico-Granatas-MacBook-Pro:Debug enricogranata$
+
+Of course, the commands to import the importcmd.py module and to define the import
+command, can be included in the .lldbinit file to make this feature available at
+debugger startup
+
+WARNING: The import command defined by importcmd.py is now obsolete
+In TOT LLDB, you can say:
+(lldb) command script import ../demo.py
+(lldb) script demo.test_function('hello world')
+I am a Python function that says hello world
+(lldb) quit
+
+using the native "command script import" command, which offers a superset of what the import command provided by importcmd.py does
diff --git a/gnu/llvm/lldb/examples/customization/import-python/importcmd.py b/gnu/llvm/lldb/examples/customization/import-python/importcmd.py
new file mode 100644
index 00000000000..cf7ac979966
--- /dev/null
+++ b/gnu/llvm/lldb/examples/customization/import-python/importcmd.py
@@ -0,0 +1,39 @@
+from __future__ import print_function
+import sys
+import os
+import lldb
+
+
+def check_has_dir_in_path(dirname):
+ return sys.path.__contains__(dirname)
+
+
+def ensure_has_dir_in_path(dirname):
+ dirname = os.path.abspath(dirname)
+ if not (check_has_dir_in_path(dirname)):
+ sys.path.append(dirname)
+
+
+def do_import(debugger, modname):
+ if (len(modname) > 4 and modname[-4:] == '.pyc'):
+ modname = modname[:-4]
+ if (len(modname) > 3 and modname[-3:] == '.py'):
+ modname = modname[:-3]
+ debugger.HandleCommand("script import " + modname)
+
+
+def pyimport_cmd(debugger, args, result, dict):
+ """Import a Python module given its full path"""
+ print('WARNING: obsolete feature - use native command "command script import"')
+ if args == "":
+ return "no module path given"
+ if not (os.sep in args):
+ modname = args
+ ensure_has_dir_in_path('.')
+ else:
+ endofdir = args.rfind(os.sep)
+ modname = args[endofdir + 1:]
+ args = args[0:endofdir]
+ ensure_has_dir_in_path(args)
+ do_import(debugger, modname)
+ return None