zoukankan      html  css  js  c++  java
  • 用GDB远程调试android native程序

    上次写了几个native程序,想着如何调试,经过一阵子搜索和测试,终于完成了。有几个关键点:

    1 gdb和gdbserver
    因为这两个需要配套,建议使用同一个ndk下面的gdb和gdbserver
    gdbserver的是在 android-ndk-r9prebuiltandroid-armgdbserver 这个目录下
    gdb 是在 android-ndk-r9 oolchainsarm-linux-androideabi-4.8prebuiltwindows-x86_64in 目录下,名称是arm-linux-androideabi-gdb.exe
    2 然后把gdbserver安装到设备的 /system/bin下
    adb push gdbserver /system/bin/
    adb shell chmod u+x /system/bin/gdbserver
    3 以DEBUG方式编译程序
    具体来说,就是 ndk-build NDK_DEBUG=1
    可以调试的程序在 ..objlocalarmeabi目录下,相对于jni目录
    4 启动程序
    adb push hello /data/local/tmp/
    adb shell chmod u+x /data/local/tmp/hello
    gdbserver  :8123 /data/local/tmp/hello
    5 启动GDB开始调试
    adb forward tcp:1234 tcp:8123
    设置adb的转发
     
    arm-linux-androideabi-gdb
    (gdb) file ../obj/local/armeabi/sum
    加载调试程序
    (gdb) target remote :1234
    说明远程调试对象
    (gdb)list
    显示代码
    (gdb) break main
    设置断点
    (gdb) cont
    继续运行
    6 总结
    因为gdb本来就支持远程调试,在启动gdbserver的时候,指定本地调试端口,但是由于设备是通过adb来连接的,所以指定adb来做转接,在设备启动调试后,就等待gdb来连接调试,所以gdb启动后,指定本地的端口,加载代码,然后就可以调试了
  • 相关阅读:
    换个角度看Salesforce之基础配置学习笔记(二)
    换个角度看Salesforce之基础配置学习笔记(一)
    C# LINQ学习笔记
    Oracle使用总结
    UML图及Visio 2010使用总结
    常见的DOS命令
    ansible笔记
    jsoncpp1.9.4源码解析
    fabric链码
    fabric数据结构
  • 原文地址:https://www.cnblogs.com/jefree/p/4438936.html
Copyright © 2011-2022 走看看