diff options
Diffstat (limited to 'gnu/llvm/lldb/examples/customization/import-python')
-rw-r--r-- | gnu/llvm/lldb/examples/customization/import-python/README | 40 | ||||
-rw-r--r-- | gnu/llvm/lldb/examples/customization/import-python/importcmd.py | 39 |
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 |