mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Auto merge of #21759 - jdm:ndkgdb, r=paulrouget
Add mach command to setup remote debugging on Android devices. This removes any need to fiddle with search paths for source files and makes the experience of remote debugging much less frustrating. I've tried this on a Pixel, Pixel 2, and emulator and successfully set breakpoints and investigated variables on all of them. The APP_ABI changes are necessary to prevent ndk-gdb from thinking that the build is arm64 when it's not. --- - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21759) <!-- Reviewable:end -->
This commit is contained in:
commit
391d67fa1d
2 changed files with 59 additions and 2 deletions
|
@ -8,10 +8,12 @@
|
|||
# except according to those terms.
|
||||
|
||||
from __future__ import print_function, unicode_literals
|
||||
from os import path, listdir
|
||||
from os import path, listdir, getcwd
|
||||
from time import time
|
||||
|
||||
import signal
|
||||
import sys
|
||||
import tempfile
|
||||
import urllib2
|
||||
import json
|
||||
import subprocess
|
||||
|
@ -265,3 +267,57 @@ class MachCommands(CommandBase):
|
|||
"local",
|
||||
self.config["android"]["lib"])
|
||||
print(subprocess.check_output([ndk_stack, "-sym", sym_path, "-dump", logfile]))
|
||||
|
||||
@Command('ndk-gdb',
|
||||
description='Invoke ndk-gdb tool with the expected symbol paths',
|
||||
category='devenv')
|
||||
@CommandArgument('--release', action='store_true', help="Use release build symbols")
|
||||
@CommandArgument('--target', action='store', default="armv7-linux-androideabi",
|
||||
help="Build target")
|
||||
def ndk_gdb(self, release, target):
|
||||
env = self.build_env(target)
|
||||
self.handle_android_target(target)
|
||||
ndk_gdb = path.join(env["ANDROID_NDK"], "ndk-gdb")
|
||||
adb_path = path.join(env["ANDROID_SDK"], "platform-tools", "adb")
|
||||
sym_paths = [
|
||||
path.join(
|
||||
getcwd(),
|
||||
"target",
|
||||
target,
|
||||
"release" if release else "debug",
|
||||
"apk",
|
||||
"obj",
|
||||
"local",
|
||||
self.config["android"]["lib"]
|
||||
),
|
||||
path.join(
|
||||
getcwd(),
|
||||
"target",
|
||||
target,
|
||||
"release" if release else "debug",
|
||||
"apk",
|
||||
"libs",
|
||||
self.config["android"]["lib"]
|
||||
),
|
||||
]
|
||||
env["NDK_PROJECT_PATH"] = path.join(getcwd(), "support", "android", "apk")
|
||||
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||
|
||||
with tempfile.NamedTemporaryFile(delete=False) as f:
|
||||
f.write('\n'.join([
|
||||
"python",
|
||||
"param = gdb.parameter('solib-search-path')",
|
||||
"param += ':{}'".format(':'.join(sym_paths)),
|
||||
"gdb.execute('set solib-search-path ' + param)",
|
||||
"end",
|
||||
]))
|
||||
|
||||
p = subprocess.Popen([
|
||||
ndk_gdb,
|
||||
"--adb", adb_path,
|
||||
"--project", "support/android/apk/servoapp/src/main/",
|
||||
"--launch", "com.mozilla.servo.MainActivity",
|
||||
"-x", f.name,
|
||||
"--verbose",
|
||||
], env=env)
|
||||
return p.wait()
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
NDK_TOOLCHAIN_VERSION := 4.9
|
||||
NDK_TOOLCHAIN_VERSION := clang
|
||||
APP_MODULES := c++_shared servojni gstreamer
|
||||
APP_PLATFORM := android-18
|
||||
APP_STL:= c++_shared
|
||||
APP_ABI:= armeabi-v7a x86
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue