GDB-4——Android设备中使用GDB调试程序的例子

 

一、一个简单的例子

1. 实验Demo

(1) Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= mytest.c
LOCAL_MODULE:= mytest
LOCAL_C_FLAGS += -g -O0
LOCAL_SHARED_LIBRARIES := libc
include $(BUILD_EXECUTABLE)

(2) 测试程序

复制代码
 1 #include <stdio.h>
 2 #include <unistd.h>
 3 
 4 static void my_sleep_func(void) {
 5         int i;
 6 
 7         for(i = 0; i < 10; i++) {
 8                 usleep(5000);
 9         }
10 }
11 
12 int main()
13 {
14 
15         int *p = NULL;
16 
17         printf("Hello World!\n");
18 
19         my_sleep_func();
20 
21         *p = 110; //dump
22 
23         return 0;
24 }
复制代码

2. out目录下生成的可用文件

obj/EXECUTABLES/mytest_intermediates/LINKED/mytest //OK
obj/EXECUTABLES/mytest_intermediates/mytest //不能用,list 命令显示"No symbol table is loaded"
symbols/system/bin/mytest //OK
system/bin/mytest //不能用,list 命令显示"No symbol table is loaded"

使用md5sum查看,第一个和第三个的hash值相同,第二个和第四个的hash值相同。

3. 实验示范

先将编译生成的 mytest 可执行elf文件push到设备的 /data/local/tmp 目录下,然后将测试文件也push到这个目录下。然后启动 adeb,使用其中的 gdb 工具进行调试。

复制代码
root@localhost:/data/local/tmp# gdb mytest_1
(gdb) l
3       vendor/poo/frameworks/cmd/mytest/mytest.c: No such file or directory. //若没有将.c文件放到当前目录或
(gdb) show dir
Source directories searched: $cdir:$cwd //应该是表示compile dir 和 current dir为两个默认的源文件搜索路径
(gdb) b 15
Breakpoint 1 at 0x1064: file vendor/poo/frameworks/cmd/mytest/mytest.c, line 17. //和源文件行号对应不上,b 15却显示的是17
(gdb) r
Starting program: /data/local/tmp/mytest_1
Breakpoint 1, main () at vendor/poo/frameworks/cmd/mytest/mytest.c:17
17              printf("Hello World!\n");
(gdb) c
Continuing.
Hello World! //输出后就正常oops死机了
复制代码

 

二、交叉调试

1. 使用gdb在主机上调试设备机的vmlinux内核

$ ./aarch64-linux-gnu-gdb /.../kernel-5.10/vmlinux

(gdb) p sizeof(struct task_struct)
$19 = 4736
(gdb) p sizeof(struct raw_spinlock)
$20 = 4

打印一些结构体的大小挺方便的,但是不能设置断点后run,会报"Don't know how to run"。gdb一个运行在客户机上的ko文件也是可以的。

 

posted on   Hello-World3  阅读(521)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示