前提要求:需要将待调试设备与一台Ubuntu连接,并且它们之间网络要通。
1、下面这个是需要在单板上执行的:
从如下目录获取gdbserver,并上传到单板上:
prebuilt\misc\android-arm\gdbserver
2、下面这两步需要在Linux-86上执行的:
从如下目录获取arm-eabi-gdb工具:
prebuilt\linux-x86\toolchain\arm-eabi-4.4.3\bin\arm-eabi-gdb
从如下目录获取adb工具:
out\host\linux-x86\bin
开始调试:
单板侧adb登录上去,执行:
ps #查看要调试进程的PID
gdbserver :1234 --attach 96 #:1234是端口号,96 是进程ID
Linux-PC侧:
使用adb做端口映射,将pc机上的端口定向到手机上gdbserver监听的端口
$ adb forward tcp:1234 tcp:1234 #端口映射,将pc机的1234端口映射到设备的1234端口
启动gdb向指定的pc机端口发信息开始调试
./arm-eabi-gdb #使用项目下的gdb客户端去连接gdbserver,gdb的类型要选择针对手机平台的,版本要和gdbserver一致。
<gdb> target remote :1234 #连接本地的:1234端口,此端口已经和手机的1234端口做好映射。
<gdb> file xxx/out/target/xx...xx/symbols/system/bin/mediaserver #加载可执行程序,注意选择symbols下的,如果调试的进程是app进程,这里选择app_process。
<gdb> set solib-search-path xxx/out/target/xx...xx/symbols/system/lib #加载所有的动态连接库,注意选择symbols下的。
<gdb> bt #查看调用堆栈
<gdb> b 100 #在文件的第100行打断点
<gdb> c #继续执行程序
1、下面这个是需要在单板上执行的:
从如下目录获取gdbserver,并上传到单板上:
prebuilt\misc\android-arm\gdbserver
2、下面这两步需要在Linux-86上执行的:
从如下目录获取arm-eabi-gdb工具:
prebuilt\linux-x86\toolchain\arm-eabi-4.4.3\bin\arm-eabi-gdb
从如下目录获取adb工具:
out\host\linux-x86\bin
开始调试:
单板侧adb登录上去,执行:
ps #查看要调试进程的PID
gdbserver :1234 --attach 96 #:1234是端口号,96 是进程ID
Linux-PC侧:
使用adb做端口映射,将pc机上的端口定向到手机上gdbserver监听的端口
$ adb forward tcp:1234 tcp:1234 #端口映射,将pc机的1234端口映射到设备的1234端口
启动gdb向指定的pc机端口发信息开始调试
./arm-eabi-gdb #使用项目下的gdb客户端去连接gdbserver,gdb的类型要选择针对手机平台的,版本要和gdbserver一致。
<gdb> target remote :1234 #连接本地的:1234端口,此端口已经和手机的1234端口做好映射。
<gdb> file xxx/out/target/xx...xx/symbols/system/bin/mediaserver #加载可执行程序,注意选择symbols下的,如果调试的进程是app进程,这里选择app_process。
<gdb> set solib-search-path xxx/out/target/xx...xx/symbols/system/lib #加载所有的动态连接库,注意选择symbols下的。
<gdb> bt #查看调用堆栈
<gdb> b 100 #在文件的第100行打断点
<gdb> c #继续执行程序