SystemTap应用跟踪探测的使用

本文介绍了如何在64位ARM64/Linux设备上使用usdt技术静态定义探测点,对内存分配与释放进行跟踪,并通过Systemtap脚本捕获和分析应用行为。适合大型嵌入式应用开发中内存管理的调试。

用户静态定义探测点USDT

usdt(User-Statically-Defined-Tracepoint)是一种向应用插入跟踪点的技术方案,其特点是跟踪点的插入是静态的,通常需要修改应用的源码并再次编译。该技术方案源于DTrace,不过usdt应用跟踪的功能在Systemtapbcc等内核跟踪调试工具中已有良好的支持。Systemtap开源工具提供了sys/sdt.h头文件,该头文件没有相应用C代码实现,仅仅提供了多个STAP_PROBExxxDTRACE_PROBExxx宏定义。这些宏定义通过GCC编译器的内联汇编和段操作在编译成生的ELF文件中加入一些用于跟踪的信息(主要加入一个nop机器指令和.note.stapsdt段信息)。当应用未被跟踪调试时,这些额外的信息不会影响应用的正常功能,也不会造成性能的消耗;当应用被跟踪调试时,Systemtapbcc工具会通过Linux内核修改应用的代码段,将nop命令替换为陷入Linux内核或调试代码的指令;具体的实现请参考Systemtap相关文档

本文记录用笔者编写的简单usdt调试应用及在64位arm64/Linux设备上的调试过程。

跟踪应用层的内存申请与释放

在编写代码前,笔者需要在x86_64/Linux主机上两次编译Systemtap:分别为主机和嵌入式ARM设备编译;该操作这里不再详述。之后,笔者编写了以下代码mymalloc.c,使用sys/sdt.h中提供的宏,对应用的内存分配函数封装的同时,加入跟踪点:

#include <sys/sdt.h>

extern void * __libc_malloc(size_t);
extern void __libc_free(void * ptr);
extern void * __libc_calloc(size_t nmemb, size_t size);
extern voi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值