• gdb 远程调试android进程 -转


    什么是gdb

    它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C、C++代码。
    它主要可以做4件事情:
    1. 随心所欲地启动你的程序。
    2. 设置断点,程序执行到断点处会停住。(断点可以是表达式)
    3. 程序被停住后,可以查看此时程序中发生的事。
    4. 动态改变程序的执行环境。

    GDB远程调试原理图


    如图上所示,我们需要使用gdbserver依附到我们要调试的进程上,gdb通过adbd和手机上的gdbserver 进行socket通信。

    远程调试实战

    • 在手机上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是手机上的端口)
    $ adb shell
    # ps   #查看要调试进程的PID
    # gdbserver :1234 --attach 96   #:1234是端口号,96 是进程ID
    
    • 使用adb做端口映射,将pc机上的端口定向到手机上gdbserver监听的端口
    $ adb forward tcp:1234 tcp:1234   #端口映射,将pc机的1234端口映射到手机的1234端口
    
    • 启动gdb向指定的pc机端口发信息开始调试
    android_project_root/prebuilt/linux-x86/arm-eabi-4.4.3/$ ./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> list xxx/xxx..xxx/xxx.cpp   #查看相关文件
    <gdb> b 100    #在文件的第100行打断点
    <gdb> c    #继续执行程序
    

    使用gdbclient简化调试流程

    • 进入到源码工程目录下,进行环境配置,执行build文件夹下的envsetup.sh和choosecombo xx xx xx 命令,这时就可以使用gdbclient了。
    • adb shell进入手机,像之前一样开启gdbserver。
    • 在pc端的源码根目录下,执行 gdbclient -e mediaserver -p 1234 #从1234端口调试mediaserver
  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/xunbu7/p/3954543.html
Copyright © 2020-2023  润新知