aboutsummaryrefslogtreecommitdiff
path: root/examples/customization/pwd-cd-and-system
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2016-01-06 20:12:03 +0000
committerDimitry Andric <dim@FreeBSD.org>2016-01-06 20:12:03 +0000
commit9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch)
treedd2a1ddf0476664c2b823409c36cbccd52662ca7 /examples/customization/pwd-cd-and-system
parent3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff)
Notes
Diffstat (limited to 'examples/customization/pwd-cd-and-system')
-rw-r--r--examples/customization/pwd-cd-and-system/.lldbinit7
-rw-r--r--examples/customization/pwd-cd-and-system/README41
-rw-r--r--examples/customization/pwd-cd-and-system/utils.py49
3 files changed, 97 insertions, 0 deletions
diff --git a/examples/customization/pwd-cd-and-system/.lldbinit b/examples/customization/pwd-cd-and-system/.lldbinit
new file mode 100644
index 000000000000..f477b5797bec
--- /dev/null
+++ b/examples/customization/pwd-cd-and-system/.lldbinit
@@ -0,0 +1,7 @@
+script import os, sys
+# So that ~/utils.py takes precedence.
+script sys.path[:0] = [os.path.expanduser('~')]
+script import utils
+command alias pwd script print os.getcwd()
+command script add -f utils.chdir cd
+command script add -f utils.system system
diff --git a/examples/customization/pwd-cd-and-system/README b/examples/customization/pwd-cd-and-system/README
new file mode 100644
index 000000000000..1b67d0b09c01
--- /dev/null
+++ b/examples/customization/pwd-cd-and-system/README
@@ -0,0 +1,41 @@
+Files in this directory:
+
+o .lldbinit:
+
+An example lldb init file that imports the utils.py module and adds the
+following commands: 'pwd', 'cd', and 'system'.
+
+o utils.py:
+
+Python module which provides implementation for the 'cd' and 'system' commands.
+
+o README:
+
+The file you are reading now.
+
+================================================================================
+The following terminal output shows an interaction with lldb using the .lldbinit
+and the utils.py files which are located in my HOME directory. The lldb init
+file imports the utils Python module and adds the 'pwd', 'cd', and 'system'
+commands.
+
+Johnnys-MacBook-Pro:multiple_threads johnny$ pwd
+/Volumes/data/lldb/svn/trunk/test/functionalities/watchpoint/multiple_threads
+Johnnys-MacBook-Pro:multiple_threads johnny$ lldb
+(lldb) pwd
+/Volumes/data/lldb/svn/trunk/test/functionalities/watchpoint/multiple_threads
+(lldb) cd ..
+Current working directory: /Volumes/data/lldb/svn/trunk/test/functionalities/watchpoint
+(lldb) help system
+
+Execute the command (a string) in a subshell.
+Syntax: system
+(lldb) system ls -l
+total 0
+drwxr-xr-x 7 johnny admin 238 Oct 11 17:24 hello_watchlocation
+drwxr-xr-x 7 johnny admin 238 Oct 11 17:24 hello_watchpoint
+drwxr-xr-x 7 johnny admin 238 Oct 11 17:24 multiple_threads
+drwxr-xr-x 7 johnny admin 238 Oct 11 17:24 watchpoint_commands
+
+retcode: 0
+(lldb)
diff --git a/examples/customization/pwd-cd-and-system/utils.py b/examples/customization/pwd-cd-and-system/utils.py
new file mode 100644
index 000000000000..e975e8869773
--- /dev/null
+++ b/examples/customization/pwd-cd-and-system/utils.py
@@ -0,0 +1,49 @@
+"""Utility for changing directories and execution of commands in a subshell."""
+
+import os, shlex, subprocess
+
+# Store the previous working directory for the 'cd -' command.
+class Holder:
+ """Holds the _prev_dir_ class attribute for chdir() function."""
+ _prev_dir_ = None
+
+ @classmethod
+ def prev_dir(cls):
+ return cls._prev_dir_
+
+ @classmethod
+ def swap(cls, dir):
+ cls._prev_dir_ = dir
+
+def chdir(debugger, args, result, dict):
+ """Change the working directory, or cd to ${HOME}.
+ You can also issue 'cd -' to change to the previous working directory."""
+ new_dir = args.strip()
+ if not new_dir:
+ new_dir = os.path.expanduser('~')
+ elif new_dir == '-':
+ if not Holder.prev_dir():
+ # Bad directory, not changing.
+ print "bad directory, not changing"
+ return
+ else:
+ new_dir = Holder.prev_dir()
+
+ Holder.swap(os.getcwd())
+ os.chdir(new_dir)
+ print "Current working directory: %s" % os.getcwd()
+
+def system(debugger, command_line, result, dict):
+ """Execute the command (a string) in a subshell."""
+ args = shlex.split(command_line)
+ process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ output, error = process.communicate()
+ retcode = process.poll()
+ if output and error:
+ print "stdout=>\n", output
+ print "stderr=>\n", error
+ elif output:
+ print output
+ elif error:
+ print error
+ print "retcode:", retcode