[Lldb-commits] [lldb] r141810 - in /lldb/trunk/examples/customization/import-python: ./ README importcmd.py

Johnny Chen johnny.chen at apple.com
Wed Oct 12 13:47:04 PDT 2011


Author: johnny
Date: Wed Oct 12 15:47:04 2011
New Revision: 141810

URL: http://llvm.org/viewvc/llvm-project?rev=141810&view=rev
Log:
Patch by Enrico to provide an example of 'import' commnad for importing .py/.pyc files.

Added:
    lldb/trunk/examples/customization/import-python/
    lldb/trunk/examples/customization/import-python/README
    lldb/trunk/examples/customization/import-python/importcmd.py

Added: lldb/trunk/examples/customization/import-python/README
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/customization/import-python/README?rev=141810&view=auto
==============================================================================
--- lldb/trunk/examples/customization/import-python/README (added)
+++ lldb/trunk/examples/customization/import-python/README Wed Oct 12 15:47:04 2011
@@ -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

Added: lldb/trunk/examples/customization/import-python/importcmd.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/customization/import-python/importcmd.py?rev=141810&view=auto
==============================================================================
--- lldb/trunk/examples/customization/import-python/importcmd.py (added)
+++ lldb/trunk/examples/customization/import-python/importcmd.py Wed Oct 12 15:47:04 2011
@@ -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





More information about the lldb-commits mailing list