OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 import skypy.paths | |
7 from skypy.skyserver import SkyServer | 6 from skypy.skyserver import SkyServer |
8 import argparse | 7 import argparse |
9 import json | 8 import json |
10 import logging | 9 import logging |
11 import os | 10 import os |
12 import pipes | 11 import pipes |
13 import requests | 12 import requests |
14 import signal | 13 import signal |
14 import skypy.paths | |
15 import StringIO | |
15 import subprocess | 16 import subprocess |
16 import sys | 17 import sys |
17 import time | 18 import time |
18 import urlparse | 19 import urlparse |
19 | 20 |
20 SRC_ROOT = skypy.paths.Paths('ignored').src_root | 21 SRC_ROOT = skypy.paths.Paths('ignored').src_root |
21 sys.path.insert(0, os.path.join(SRC_ROOT, 'build', 'android')) | 22 sys.path.insert(0, os.path.join(SRC_ROOT, 'build', 'android')) |
22 from pylib import android_commands | 23 from pylib import android_commands |
23 from pylib import constants | 24 from pylib import constants |
24 from pylib import forwarder | 25 from pylib import forwarder |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
311 time.sleep(1) | 312 time.sleep(1) |
312 | 313 |
313 def logcat_command(self, args): | 314 def logcat_command(self, args): |
314 TAGS = [ | 315 TAGS = [ |
315 'AndroidHandler', | 316 'AndroidHandler', |
316 'MojoMain', | 317 'MojoMain', |
317 'MojoShellActivity', | 318 'MojoShellActivity', |
318 'MojoShellApplication', | 319 'MojoShellApplication', |
319 'chromium', | 320 'chromium', |
320 ] | 321 ] |
321 subprocess.call(['adb', 'logcat', '-s'] + TAGS) | 322 subprocess.call(['adb', 'logcat', '-d', '-s'] + TAGS) |
eseidel
2015/01/13 22:58:02
This makes skydb logcat exit immediately insetead
| |
322 | 323 |
323 def gdb_attach_command(self, args): | 324 def gdb_attach_command(self, args): |
324 self.paths = self._create_paths_for_build_dir(self.pids['build_dir']) | 325 self.paths = self._create_paths_for_build_dir(self.pids['build_dir']) |
325 gdb_command = [ | 326 gdb_command = [ |
326 '/usr/bin/gdb', self.paths.mojo_shell_path, | 327 '/usr/bin/gdb', self.paths.mojo_shell_path, |
327 '--eval-command', 'target remote localhost:%s' % GDB_PORT | 328 '--eval-command', 'target remote localhost:%s' % GDB_PORT |
328 ] | 329 ] |
329 print " ".join(gdb_command) | 330 print " ".join(gdb_command) |
330 # We don't want python listenting for signals or anything, so exec | 331 # We don't want python listenting for signals or anything, so exec |
331 # gdb and let it take the entire process. | 332 # gdb and let it take the entire process. |
332 os.execv(gdb_command[0], gdb_command) | 333 os.execv(gdb_command[0], gdb_command) |
333 | 334 |
335 def print_crash_command(self, args): | |
336 logcat_cmd = ['adb', 'logcat', '-d'] | |
337 logcat = subprocess.Popen(logcat_cmd, stdout=subprocess.PIPE) | |
338 | |
339 stack_path = os.path.join(SRC_ROOT, | |
340 'tools', 'android_stack_parser', 'stack') | |
341 stack = subprocess.Popen([stack_path, '-'], stdin=logcat.stdout) | |
342 logcat.wait() | |
343 stack.wait() | |
344 | |
334 def main(self): | 345 def main(self): |
335 logging.basicConfig(level=logging.INFO) | 346 logging.basicConfig(level=logging.INFO) |
336 logging.getLogger("requests").setLevel(logging.WARNING) | 347 logging.getLogger("requests").setLevel(logging.WARNING) |
337 | 348 |
338 self.pids = self._load_pid_file(PID_FILE_PATH) | 349 self.pids = self._load_pid_file(PID_FILE_PATH) |
339 | 350 |
340 parser = argparse.ArgumentParser(description='Sky launcher/debugger') | 351 parser = argparse.ArgumentParser(description='Sky launcher/debugger') |
341 subparsers = parser.add_subparsers(help='sub-command help') | 352 subparsers = parser.add_subparsers(help='sub-command help') |
342 | 353 |
343 start_parser = subparsers.add_parser('start', | 354 start_parser = subparsers.add_parser('start', |
(...skipping 11 matching lines...) Expand all Loading... | |
355 start_parser.set_defaults(func=self.start_command) | 366 start_parser.set_defaults(func=self.start_command) |
356 | 367 |
357 stop_parser = subparsers.add_parser('stop', | 368 stop_parser = subparsers.add_parser('stop', |
358 help=('stop sky (as listed in %s)' % PID_FILE_PATH)) | 369 help=('stop sky (as listed in %s)' % PID_FILE_PATH)) |
359 stop_parser.set_defaults(func=self.stop_command) | 370 stop_parser.set_defaults(func=self.stop_command) |
360 | 371 |
361 logcat_parser = subparsers.add_parser('logcat', | 372 logcat_parser = subparsers.add_parser('logcat', |
362 help=('dump sky-related logs from device')) | 373 help=('dump sky-related logs from device')) |
363 logcat_parser.set_defaults(func=self.logcat_command) | 374 logcat_parser.set_defaults(func=self.logcat_command) |
364 | 375 |
376 print_crash_parser = subparsers.add_parser('print_crash', | |
377 help=('dump (and symbolicate) recent crash-stacks')) | |
378 print_crash_parser.set_defaults(func=self.print_crash_command) | |
379 | |
365 gdb_attach_parser = subparsers.add_parser('gdb_attach', | 380 gdb_attach_parser = subparsers.add_parser('gdb_attach', |
366 help='launch gdb and attach to gdbserver launched from start --gdb') | 381 help='launch gdb and attach to gdbserver launched from start --gdb') |
367 gdb_attach_parser.set_defaults(func=self.gdb_attach_command) | 382 gdb_attach_parser.set_defaults(func=self.gdb_attach_command) |
368 | 383 |
369 self._add_basic_command(subparsers, 'trace', '/trace', | 384 self._add_basic_command(subparsers, 'trace', '/trace', |
370 'toggle tracing') | 385 'toggle tracing') |
371 self._add_basic_command(subparsers, 'reload', '/reload', | 386 self._add_basic_command(subparsers, 'reload', '/reload', |
372 'reload the current page') | 387 'reload the current page') |
373 self._add_basic_command(subparsers, 'inspect', '/inspect', | 388 self._add_basic_command(subparsers, 'inspect', '/inspect', |
374 'stop the running sky instance') | 389 'stop the running sky instance') |
375 | 390 |
376 load_parser = subparsers.add_parser('load', | 391 load_parser = subparsers.add_parser('load', |
377 help='load a new page in the currently running sky') | 392 help='load a new page in the currently running sky') |
378 load_parser.add_argument('url_or_path', type=str) | 393 load_parser.add_argument('url_or_path', type=str) |
379 load_parser.set_defaults(func=self.load_command) | 394 load_parser.set_defaults(func=self.load_command) |
380 | 395 |
381 args = parser.parse_args() | 396 args = parser.parse_args() |
382 args.func(args) | 397 args.func(args) |
383 | 398 |
384 self._write_pid_file(PID_FILE_PATH, self.pids) | 399 self._write_pid_file(PID_FILE_PATH, self.pids) |
385 | 400 |
386 | 401 |
387 if __name__ == '__main__': | 402 if __name__ == '__main__': |
388 SkyDebugger().main() | 403 SkyDebugger().main() |
OLD | NEW |