diff --git a/android_gdb/session.py b/android_gdb/session.py
index e425c40..44bc17d 100644
--- a/android_gdb/session.py
+++ b/android_gdb/session.py
@@ -71,10 +71,11 @@
 
 
 class DebugSession(object):
-  def __init__(self, build_directory, package_name, pyelftools_dir, adb):
-    self._build_directory = build_directory
-    if not os.path.exists(self._build_directory):
-      logging.fatal("Please pass a valid build directory")
+  def __init__(self, build_directory_list, package_name, pyelftools_dir, adb):
+    build_directories = build_directory_list.split(',')
+    if len(build_directories) == 0 or not all(map(os.path.exists,
+                                                  build_directories)):
+      logging.fatal("Please pass a list of valid build directories")
       sys.exit(1)
     self._package_name = package_name
     self._adb = adb
@@ -92,7 +93,7 @@
 
     self._elffile_module = elffile
 
-    self._libraries = self._find_libraries(build_directory)
+    self._libraries = self._find_libraries(build_directories)
     self._rfc = RemoteFileConnection('localhost', 10000)
     self._remote_file_reader_process = None
     if not os.path.exists(self._remote_file_cache):
@@ -111,15 +112,16 @@
     if self._remote_file_reader_process != None:
       self._remote_file_reader_process.kill()
 
-  def _find_libraries(self, lib_dir):
-    """Finds all libraries in |lib_dir| and key them by their signatures.
+  def _find_libraries(self, lib_dirs):
+    """Finds all libraries in |lib_dirs| and key them by their signatures.
     """
     res = {}
-    for fn in glob.glob('%s/*.so' % lib_dir):
-      with open(fn, 'r') as f:
-        s = get_signature(f, self._elffile_module)
-        if s is not None:
-          res[s] = fn
+    for lib_dir in lib_dirs:
+      for fn in glob.glob('%s/*.so' % lib_dir):
+        with open(fn, 'r') as f:
+          s = get_signature(f, self._elffile_module)
+          if s is not None:
+            res[s] = fn
     return res
 
   def _associate_symbols(self, mapping, local_file):
diff --git a/mojo_debug b/mojo_debug
index cc1aa0b..b3b786d 100755
--- a/mojo_debug
+++ b/mojo_debug
@@ -143,7 +143,8 @@
   devtools_dir = os.path.dirname(os.path.abspath(__file__))
   stack_command = [os.path.join(devtools_dir, 'android_stack_parser', 'stack')]
   if args.build_dir:
-    stack_command.append('--build-dir=' + os.path.abspath(args.build_dir))
+    stack_command.append('--build-dir=' +
+            os.path.abspath(','.join(args.build_dir)))
   if args.ndk_dir:
     stack_command.append('--ndk-dir=' + os.path.abspath(args.ndk_dir))
   stack_command.append('-')
@@ -222,12 +223,12 @@
                                         'android_gdb', 'session.py')
   debug_session_arguments = {}
   if args.build_dir:
-    debug_session_arguments["build_directory"] = args.build_dir
+    debug_session_arguments["build_directory_list"] = ','.join(args.build_dir)
   else:
     try:
-      debug_session_arguments["build_directory"] = os.path.join(
+      debug_session_arguments["build_directory_list"] = os.path.join(
           _get_dir_above('out'), 'out', 'android_Debug')
-      if not os.path.exists(debug_session_arguments["build_directory"]):
+      if not os.path.exists(debug_session_arguments["build_directory_list"]):
         raise DirectoryNotFoundException()
     except DirectoryNotFoundException:
       logging.fatal("Unable to find the build directory, please specify it "
@@ -290,8 +291,8 @@
       help='symbolize the crash stacktraces from the device log')
   device_stack_parser.add_argument('--ndk-dir', type=str,
       help='path to the directory containing the Android NDK')
-  device_stack_parser.add_argument('--build-dir', type=str,
-      help='list paths to the build directories, separated by commas')
+  device_stack_parser.add_argument('--build-dir', type=str, action='append',
+      help='paths to the build directory, may be repeated')
   device_stack_parser.set_defaults(func=_device_stack)
 
 
@@ -307,8 +308,8 @@
       help='path to the adb tool from the Android SDK (optional)')
   gdb_attach_parser.add_argument('--ndk-dir', type=str,
       help='path to the directory containing the Android NDK')
-  gdb_attach_parser.add_argument('--build-dir', type=str,
-      help='path to the build directory')
+  gdb_attach_parser.add_argument('--build-dir', type=str, action='append',
+      help='Paths to the build directory, may be repeated')
   gdb_attach_parser.add_argument('--pyelftools-dir', type=str,
       help='Path to a directory containing third party libraries')
   gdb_attach_parser.add_argument('--gsutil-dir', type=str,
