You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS环境下如何用Android Studio调试Native代码中fork的子进程

调试Android Native Fork出的子进程方法

嘿,这个场景我之前踩过不少坑,给你整理几个亲测有效的调试方法:

一、先做好准备工作

  • 确保你的Android Studio已经配好NDK、CMake环境,项目能正常编译Native代码
  • 目标设备得是root过的,或者能成功执行adb root,调试子进程需要较高权限
  • 要调试的可执行文件必须带调试符号编译,也就是编译时加-g参数(用CMake的话直接设CMAKE_BUILD_TYPE=Debug就行)

二、方法1:手动用GDB附加调试

这是最直接的路子,步骤清晰:

  1. 先启动你的App,让它fork出子进程并跑起来目标可执行文件
  2. 连adb进设备shell:adb shell
  3. 找子进程的PID:ps | grep 你的可执行文件名,把PID记下来
  4. 退出shell,启动gdbserver挂住进程:adb shell gdbserver :1234 --attach 刚才的PID
  5. 做端口转发:adb forward tcp:1234 tcp:1234
  6. 回到Android Studio,打开Run > Edit Configurations,新建一个Native配置,在Debugger标签页里把Debug type改成GDB,然后在GDB commands里加一行target remote :1234
  7. 启动调试,就能正常断点调试子进程的代码了

三、方法2:让子进程启动时自动等调试器

如果子进程启动太快,手动附加赶不上,可以改Native代码让它暂停等你:

  1. 在fork完、调用exec执行可执行文件之前,加这段代码:
#include <unistd.h>
#include <sys/ptrace.h>

// 让子进程暂停,等着调试器连接
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
kill(getpid(), SIGSTOP);
  1. 重新编译安装App,启动后子进程会卡在暂停状态
  2. 用ps找到PID后,照着方法1的步骤3-7操作就行

四、方法3:用Android Studio自带的LLDB附加

Android Studio默认用LLDB,操作更简便:

  1. 启动App,fork出子进程后,要么在Logcat里找PID,要么用adb shell ps查
  2. 打开Run > Attach Debugger to Android Process,选对应的设备,勾选Show all processes就能看到子进程了
  3. 点OK,LLDB会自动连上子进程,之后就能正常设断点调试

几个要注意的点

  • 如果子进程启动后调试连不上,试试关SELinux:adb shell setenforce 0(仅限root设备)
  • 确保可执行文件有执行权限:adb shell chmod +x /你的可执行文件路径
  • 调试符号必须和可执行文件对应,不然断点会无效

内容的提问来源于stack exchange,提问作者joker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:52:40