NDK调试:ndk-gdb无法拉取app_process。谁和何时创建app_process二进制文件?

时间:2014-10-23 14:39:34

标签: android windows debugging android-ndk eclipse-adt

在调查在本机代码中遇到断点的问题时,我决定检查ndk-gdb是否正常工作。我删除了app_process,启动了Java调试并运行ndk-gdb --force。猜猜看,没有创建app_process。 ndk-gdb --verbose输出有这一行:

## COMMAND: adb_cmd pull /system/bin/app_process obj/local/armeabi-v7a/app_process
remote object '/system/bin/app_process' not a file or directory
Pulled app_process from device/emulator.

我已从目标设备上卸载了该应用,重启了设备并重复了。仍然没有app_process。所以,我想知道这里的问题是什么,我也想知道这个文件是什么时候创建的,以及什么进程/脚本。

3 个答案:

答案 0 :(得分:5)

如前所述,Android 5.0将/system/bin/app_process作为/system/bin/app_process32的符号链接。由于无法使用adb pull提取符号链接,因此ndk-gdb脚本无法按原样运行。

按如下方式更改ndk-gdb以支持api21更改以及<的向后兼容性api21:

# Get the app_server binary from the device
APP_PROCESS=$APP_OUT/app_process
if [ "$API_LEVEL" -lt "21" ] ; then
    run adb_cmd pull /system/bin/app_process `native_path $APP_PROCESS`
    log "Pulled app_process from device/emulator to $APP_PROCESS"
else
    run adb_cmd pull /system/bin/app_process32 `native_path $APP_PROCESS`
    log "Pulled app_process32 from device/emulator to $APP_PROCESS"
fi

编辑:或:

# Get the app_server binary from the device
APP_PROCESS=$APP_OUT/app_process
APP_PROCESS_DEVICE=app_process32
if [ "$API_LEVEL" -lt "21" ] ; then
    APP_PROCESS_DEVICE=app_process
fi
run adb_cmd pull /system/bin/$APP_PROCESS_DEVICE `native_path $APP_PROCESS`
log "Pulled $APP_PROCESS_DEVICE from device/emulator to $APP_PROCESS"

原始变更也在这里:http://pastebin.com/YfxNs06U。请注意,当将此更改提取到开发计算机以支持在Eclipse中使用单个调试配置时,此更改会将app_process32重命名为app_process

答案 1 :(得分:1)

发现问题。我的设备正在运行Android 5.0预览,而app_process有一个名为app_process32的文件的符号链接。所以拉app_process32工作正常。

答案 2 :(得分:0)

除了Violet Giraffe的回答,在脚本ndk-gdb中交换行

run adb_cmd pull /system/bin/app_process `native_path $APP_PROCESS` 

run adb_cmd pull /system/bin/app_process32 `native_path $APP_PROCESS`

这解决了Android 5.0问题的问题,我能够像以前一样构建和调试。