如何在Eclipse中通过LAN远程调试Android JNI的C++代码
嘿,我刚好折腾过类似的场景,给你整理一套完整的远程调试步骤,帮你摆脱只能打日志的窘境:
1. 先搞定Android设备的网络调试连接
- 首先确保你的Android设备和开发电脑在同一个LAN网段,能互相ping通(避免跨网段的路由问题)
- 开启设备的调试权限:
- 打开开发者选项(连续点击版本号几次),开启USB调试;如果是Android 10及以上,直接开无线调试;旧版本的话,先连USB执行
adb tcpip 5555,断开USB后用adb connect <设备IP>:5555把设备连到电脑的adb服务
- 打开开发者选项(连续点击版本号几次),开启USB调试;如果是Android 10及以上,直接开无线调试;旧版本的话,先连USB执行
- 验证连接是否成功:执行
adb devices,能看到你的设备IP就行
2. 配置Eclipse的C++远程调试环境
- 先确认Eclipse装了**CDT(C/C++开发工具)**插件,没装的话去Eclipse Marketplace搜一下安装就行
- 把你的C++项目导入Eclipse,右键项目 → Debug As → Debug Configurations
- 在左侧列表找到C/C++ Remote Application,右键新建一个调试配置:
- Main标签页:
- 点击
Browse选中你的C++项目 - 点击
Connection区域的New,选择TCP/IP连接类型,输入设备的LAN IP,端口先填5005(后面要对应)
- 点击
- Debugger标签页:
- 调试器类型选
gdbserver - 在
GDB Command里指定对应你设备架构的gdb路径,比如arm64架构的话,路径大概是<你的NDK路径>/toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android-gdb - 切换到
Remote子标签,勾选Use remote target,把Remote host设为设备IP,Remote port填5005
- 调试器类型选
- Main标签页:
3. 在Android设备上启动gdbserver
- 先把你的C++共享库(注意是.so,你说的.o应该是编译中间文件,最终要打包成.so)推到设备的可读写目录,比如
/data/local/tmp/:adb push <你的.so文件路径> /data/local/tmp/ - 登录设备shell:
adb shell,如果需要root权限就执行su - 找到你的app进程ID:用
ps | grep <你的app包名>,或者直接在Android Studio的Logcat里找进程ID - 启动gdbserver,关联进程并监听端口:
执行完后会看到类似gdbserver :5005 --attach <你的app进程ID>Listening on port 5005的提示,说明gdbserver已经在等连接了
4. 启动Eclipse的远程调试
- 回到Eclipse的Debug Configurations窗口,选中刚才新建的配置,点击
Debug - 等几秒,Eclipse就会和设备上的gdbserver建立连接,之后你就可以像调试本地C++代码一样:设置断点、单步执行、查看变量值、调用栈,完全不用依赖日志了
关键注意事项
- 编译C++代码时一定要加调试参数:编译选项里加上
-g,不要开优化(比如-O2这类参数要去掉),否则断点会失效或者变量显示异常 - 如果连接失败,检查设备的防火墙(有些定制ROM会拦截端口),或者换个端口试试(比如5006)
- 如果你用的是新版NDK,gdb可能被lldb替代,那可以用lldb-server调试:在设备上执行
lldb-server platform --listen *:5005 --server,然后在Eclipse里把调试器换成lldb就行
内容的提问来源于stack exchange,提问作者Gal sav
相关产品推荐
相关产品推荐

