Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Unified Diff: sky/tools/skydb

Issue 859103002: Fix skydb gdb_attach for non-android configs (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/tools/skydb
diff --git a/sky/tools/skydb b/sky/tools/skydb
index ab84fae44b9ff49b0c93d98188d0f9c8778c9dfc..b3cc35f7d1f9100c9176ed1bde9747f1dcfc2ac0 100755
--- a/sky/tools/skydb
+++ b/sky/tools/skydb
@@ -40,6 +40,8 @@ DEFAULT_URL = "https://raw.githubusercontent.com/domokit/mojo/master/sky/example
ANDROID_PACKAGE = "org.chromium.mojo.shell"
ANDROID_ACTIVITY = "%s/.MojoShellActivity" % ANDROID_PACKAGE
+CACHE_LINKS_PATH = '/tmp/mojo_cache_links'
+SYSTEM_LIBS_ROOT_PATH = '/tmp/device_libs'
# FIXME: Move this into mopy.config
@@ -379,12 +381,9 @@ class SkyDebugger(object):
]
subprocess.call(['adb', 'logcat', '-d', '-s'] + TAGS)
- def gdb_attach_command(self, args):
- self.paths = self._create_paths_for_build_dir(self.pids['build_dir'])
-
+ def _start_mojo_cache_linker(self, links_path):
self._kill_if_exists('mojo_cache_linker_pid', 'mojo cache linker')
- links_path = '/tmp/mojo_cache_links'
if not os.path.exists(links_path):
os.makedirs(links_path)
shell_link_path = os.path.join(links_path, 'libmojo_shell.so')
@@ -403,15 +402,11 @@ class SkyDebugger(object):
self.pids['build_dir'],
'http://localhost:%s' % self.pids['remote_sky_server_port']
]
- self.pids['mojo_cache_linker_pid'] = \
- subprocess.Popen(cache_linker_cmd, stdin=logcat.stdout).pid
-
- # Write out our pid file before we exec ourselves.
- self._write_pid_file(PID_FILE_PATH, self.pids)
+ return subprocess.Popen(cache_linker_cmd, stdin=logcat.stdout).pid
+ def _pull_system_libraries(self, system_libs_root):
# Pull down the system libraries this pid has already mapped in.
- # TODO(eseidel): This does not handle dynamic loads well.
- system_libs_root = '/tmp/device_libs'
+ # TODO(eseidel): This does not handle dynamic loads.
library_cacher_path = os.path.join(
self.paths.sky_tools_directory, 'android_library_cacher.py')
subprocess.call([
@@ -420,35 +415,57 @@ class SkyDebugger(object):
# TODO(eseidel): adb_gdb does, this, unclear why solib-absolute-prefix
# doesn't make this explicit listing not necessary?
- system_lib_dirs = subprocess.check_output([
+ return subprocess.check_output([
'find', system_libs_root,
'-mindepth', '1',
'-maxdepth', '4',
'-type', 'd',
]).strip().split('\n')
- # TODO(eseidel): Need to sync down system libraries into a directory.
- symbol_search_paths = system_lib_dirs + [
- links_path,
- self.pids['build_dir'],
- ]
- # TODO(eseidel): We need to look up the toolchain somehow?
- gdb_path = os.path.join(SRC_ROOT, 'third_party/android_tools/ndk/'
- 'toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/'
- 'bin/arm-linux-androideabi-gdb')
- gdb_command = [
- gdb_path,
- '--eval-command', 'file %s' % self.paths.mojo_shell_path,
- '--eval-command', 'directory %s' % self.paths.src_root,
- '--eval-command', 'target remote localhost:%s' % GDB_PORT,
- '--eval-command', 'set solib-search-path %s' %
- ':'.join(symbol_search_paths),
- '--eval-command', 'set solib-absolute-prefix %s' % system_libs_root,
+
+ def gdb_attach_command(self, args):
+ self.paths = self._create_paths_for_build_dir(self.pids['build_dir'])
+
+ symbol_search_paths = [self.pids['build_dir']]
+ gdb_path = '/usr/bin/gdb'
+
+ init_commands = [
+ 'file %s' % self.paths.mojo_shell_path,
+ 'directory %s' % self.paths.src_root,
+ 'target remote localhost:%s' % GDB_PORT,
]
- print " ".join(gdb_command)
- # We don't want python listening for signals or anything, so exec
- # gdb and let it take the entire process.
- os.execv(gdb_command[0], gdb_command)
+
+ # A bunch of extra work is needed for android:
+ if 'remote_sky_server_port' in self.pids:
qsr 2015/01/21 09:00:49 Shouldn't you have some more explicit test for det
+ pid = self._start_mojo_cache_linker(CACHE_LINKS_PATH)
+ self.pids['mojo_cache_linker_pid'] = pid
+
+ system_lib_dirs = self._pull_system_libraries(SYSTEM_LIBS_ROOT_PATH)
+ init_commands.append(
+ 'set solib-absolute-prefix %s' % SYSTEM_LIBS_ROOT_PATH)
+
+ symbol_search_paths = system_lib_dirs + symbol_search_paths
+ symbol_search_paths.append(CACHE_LINKS_PATH)
+
+ # TODO(eseidel): We need to look up the toolchain somehow?
+ gdb_path = os.path.join(SRC_ROOT, 'third_party/android_tools/ndk/'
+ 'toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/'
+ 'bin/arm-linux-androideabi-gdb')
+
+ # Set solib-search-path after letting android modify symbol_search_paths
+ init_commands.append(
+ 'set solib-search-path %s' % ':'.join(symbol_search_paths))
+
+ exec_command = [gdb_path]
+ for command in init_commands:
+ exec_command += ['--eval-command', command]
+ print " ".join(exec_command)
+
+ # Write out our pid file before we exec ourselves.
+ self._write_pid_file(PID_FILE_PATH, self.pids)
+
+ # Exec gdb directly to avoid python intercepting symbols, etc.
+ os.execv(exec_command[0], exec_command)
def print_crash_command(self, args):
logcat_cmd = ['adb', 'logcat', '-d']
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698