Patch by Enrico to provide an example of 'import' commnad for importing .py/.pyc files.
llvm-svn: 141810
This commit is contained in:
parent
ebcfbb5d22
commit
7f01ac39b9
|
@ -0,0 +1,31 @@
|
|||
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
|
|
@ -0,0 +1,30 @@
|
|||
import sys,os,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"""
|
||||
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
|
Loading…
Reference in New Issue