先废话两句,这篇文章可能有所缺陷,因为我并没有条件去测试动态库的调试。(主要是因为是自己的手机不想乱放各种so)

所以我只能说有空的话我会去进行下测试,这里就先这样了。

1、测试代码gdb-test.c

#include <stdio.h>

int main() {

printf("this is gdb test !!!\n");

}

2、Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_CFLAGS := -g

LOCAL_STRIP_MODULE := flase   #禁止对最终生成的gdb-test进行strip处理

LOCAL_MOULE_TAGS := optional
LOCAL_SRC_FILES := gdb-test.c
LOCAL_MODULE        := gdb-test
include $(BUILD_EXECUTABLE)

3、拷贝gdb-test gdbserver到device的data目录下(这里只是为了简单)

4、在shell中输入

# adb shell

进入到device中的shell中

# cd data

# ./gdbserver :2000 ./gdb-test  (注:这里可以给gdb-test传参)

我们给gdbserver使用的端口为2000

成功的话你会看到

# Listening on port 2000

说明成功开启了服务

5、 在PC上执行

adb forward tcp:2000 tcp:2000

6、在运行PC上的gdb,具体路径为

#arm-linux-androideabi-gdb ./gdb-test

注意,这里的gdb-test的位置非常重要,因为你可以看到在libs下有个gdb-test,在obj下也有,为了保证符号表

能成功进行加载,这里必须使用在obj下的gdb-test,因为libs中生成的始终是去掉符号表的,只有objs中的才是真正可调试的。

成功后进入gdb中,输入

# (gdb)target remote :2000

android中使用gdbserver调试c程序的更多相关文章

  1. 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...

  2. [转][android][利用JNI技术在Android中调用、调试C++代码]

    在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过 ...

  3. 在vscode中怎样debug调试go程序

    随着互联网时代的飞速发展,我们编码使用的开发利器也在不断更新换代,古话说工欲善其事必先利其器,对于Java开发者而言,eclipse和idea这两款神器各有千秋,因自己的爱好可以选取不同的IDE,但是 ...

  4. Android 中的反调试技术

    比较简单的有下面这两种 调试端口检测, 23946(0x5D8A) Demo: void CheckPort23946ByTcp() { FILE* pfile=NULL; char buf[0x10 ...

  5. 嵌入式arm linux环境中gdb+gdbserver调试

    一.前言嵌入式Linux系统中,应用开发过程中,很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序.采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采 ...

  6. android中完全退出当前应用程序的四种方法

    Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A.在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方 ...

  7. VS中发布并调试IIS程序(非附加进程!!!)

    筒子们,你们不觉得发布到IIS再附加进程太烦了么???看了看网上全是这种方法,这不科学!VS已经提供了更好的方式了,少年们! 流程 1.打开你的IIS,创建一个站点示例中,我创建了一个端口号为5002 ...

  8. Android中为你的应用程序添加桌面快捷方式

    public void ShortCut(View view){ createDeskShortCut(this,getString(R.string.short_cut),R.drawable.up ...

  9. VS中发布并调试IIS程序

    1.创建本地IIS站点 2.修改配置 .net framework 右击项目属性,服务器修改为本地IIS,并且项目URL修改为相对应的站点即可 .net core 右键属性,进入调试栏新建一个配置 选 ...

随机推荐

  1. ThinkPHP 多应用多模块建立方式

    ThinkPHP3.2.2及以后版本同一应用多模块和多应用多模块的设计已经比以前的版本更加简单快捷. 注:入口文件为index.php,内容为: <?php // +-------------- ...

  2. AE特效-与MAYA的结合、制作音乐舞蹈太极动作

    http://blog.sina.com.cn/s/blog_a439a2670101fbkk.html AE特效-与MAYA的结合.制作音乐舞蹈太极动作 (2013-07-24 14:44:12) ...

  3. time_t转化成日期格式小工具

    time_t转化成日期格式小工具下载  http://files.cnblogs.com/files/lansan0701/TimeTool.zip

  4. 【洛谷P3708】Koishi的数学题

    可以很显然的看出分块的性质…… 看不出来的打个表也能看出来. 然后就是随手做做就行了. #include<bits/stdc++.h> #define N 1000005 typedef ...

  5. python 多进程multiprocessing 模块

    multiprocessing 常用方法: cpu_count():统计cpu核数 multiprocessing.cpu_count() active_children() 获取所有子进程 mult ...

  6. centos 7 卸载自带的jdk

    # 查看jdk安装信息 rpm -qa|grep java 卸载已安装的jdk: # yum -y remove java java-1.7.0-*

  7. C# 正则表达式判断IP,URL等及其解释

    C# 正则表达式判断IP,URL等及其解释 判断IP格式方法: public static bool ValidateIPAddress(string ipAddress) { Regex valid ...

  8. lucene 排序

    (1)排序对一个文档里什么域都没存储,使用字符串排序会排在首位 (2)排序对一个文档里什么域都没存储,使用数字类型排序会默认给其赋值为0进行排序 (3)我们可以对数字类型的null值的文档进行代码控制 ...

  9. Vuejs1.0学习

    1.数据双向绑定 双向绑定以后,表单中数据的改变会同步改变H2中的输出 2.v-show 内容输入前: 内容输入后:隐藏提示,展示按钮 代码实现: 此处的v-show可以换成v-if,v-show是隐 ...

  10. VMware vCenter Server安装与配置

    预先准备好安装包 ESXI6    VMware-VMvisor-Installer-6.0.0.update01-3073146.x86_64.iso VC        VMware-VIMSet ...