ARM架构Linux下的glibc6调试工具 (arm linux libc6 dbg)

在ARM架构的Linux系统上,glibc6是一种重要的C标准库,它为程序员提供了大量的标准C函数。但是在使用过程中也常常会出现一些问题,例如程序运行异常、段错误等。这时就需要借助一些调试工具来找出问题所在,本文将介绍一些常用的。

1. gdb

gdb是GNU调试器的简称,是一种强大的调试工具。它可以对程序进行单步跟踪、打印变量的值、修改程序的状态等功能,帮助程序员定位程序中的错误。

使用gdb调试程序的流程大致如下:

1)编译程序时加上-g参数,生成可调试的程序:

$ gcc -g -o program program.c

2)启动gdb:

$ gdb program

3)设置断点:

(gdb) break mn

4)运行程序:

(gdb) run

5)执行单步调试:

(gdb) next

6)打印变量的值:

(gdb) print var

7)修改变量的值:

(gdb) set var=10

8)退出gdb:

(gdb) quit

除了以上基本用法外,gdb还可以对内存进行调试、生成程序的核心转储文件等。

2. valgrind

valgrind是一款常用的内存调试工具,可以检测内存泄露、越界访问等问题。它可以运行在ARM架构的Linux系统上,但需要安装valgrind for ARM。

使用valgrind调试程序的流程大致如下:

1)安装valgrind for ARM:

$ sudo apt-get install valgrind-arm-linux

2)编译程序时不用加-g参数:

$ gcc -o program program.c

3)启动valgrind:

$ valgrind –tool=memcheck –leak-check=yes ./program

4)查看内存信息:

==12345== Memcheck, a memory error detector

==12345== Copyright (C) 2023-2023, and GNU GPL’d, by Julian Seward et al.

==12345== Using Valgrind-3.13.0.SVN and LibVEX; rerun with -h for copyright info

==12345== Command: ./program

==12345==

Hello, world!

==12345==

==12345== HEAP SUMMARY:

==12345== in use at exit: 0 bytes in 0 blocks

==12345== total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated

==12345==

==12345== All heap blocks were freed — no leaks are possible

==12345==

==12345== For counts of detected and suppressed errors, rerun with: -v

==12345== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

5)退出valgrind:

==12345==

==12345== HEAP SUMMARY:

==12345== in use at exit: 0 bytes in 0 blocks

==12345== total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated

==12345==

==12345== All heap blocks were freed — no leaks are possible

==12345==

==12345== For counts of detected and suppressed errors, rerun with: -v

==12345== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

$

valgrind还有其他的工具,例如helgrind可以检测多线程程序中的数据竞争问题,不过与ARM架构的Linux下的glibc6调试工具关联不大,这里不再深入介绍。

3. strace

strace是一款系统调用跟踪工具,可以输出程序运行过程中调用的系统调用。通过使用strace,程序员可以了解程序的运行情况,找出程序中的问题。

使用strace调试程序的流程大致如下:

1)编译程序:

$ gcc -o program program.c

2)启动strace:

$ strace ./program

3)运行程序:

execve(“./program”, [“./program”], []) = 0

brk(NULL) = 0x55a08fb3c000

access(“/etc/ld.so.nohwcap”, F_OK) = -1 ENOENT (No such file or directory)

access(“/etc/ld.so.preload”, R_OK) = -1 ENOENT (No such file or directory)

openat(AT_FDCWD, “/etc/ld.so.cache”, O_RDON|O_CLOEXEC) = 3

fstat(3, {st_mode=S_IFREG|0644, st_size=78687, …}) = 0

mmap(NULL, 78687, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f36c9fb2023

close(3) = 0

……

4)查看程序调用的系统调用:

openat(AT_FDCWD, “/etc/ld.so.cache”, O_RDON|O_CLOEXEC) = 3

close(3) = 0

access(“/etc/ld.so.nohwcap”, F_OK) = -1 ENOENT (No such file or directory)

access(“/etc/ld.so.preload”, R_OK) = -1 ENOENT (No such file or directory)

openat(AT_FDCWD, “/lib/aarch64-linux-gnu/libc.so.6”, O_RDON|O_CLOEXEC) = 3

read(3, “\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0D.\2\0\0\0\0\0″…, 832) = 832

lseek(3, 4294971392, SEEK_SET) = -1 ESPIPE (Illegal seek)

……

5)退出strace:

$ exit_group(0) = ?

+++ exited with 0 +++

strace还可以输出文件读写情况、网络通信情况等,方便程序员进行问题定位。

本文介绍了一些常用的,包括gdb、valgrind和strace。这些工具提供了不同的调试方式,程序员可以根据需要选择合适的工具。在程序开发过程中,遇到问题时,调试工具是很好的助手,使用调试工具可以提高程序员的调试效率,缩短问题定位的时间。


数据运维技术 » ARM架构Linux下的glibc6调试工具 (arm linux libc6 dbg)