C++笔记之Linux-嵌入式调试与追踪工具strace、ftrace、ptrace、trace32、perf、eBPF、ASan、Valgrind、Heaptrack区别code review!文章目录C++笔记之Linux-嵌入式调试与追踪工具strace、ftrace、ptrace、trace32、perf、eBPF、ASan、Valgrind、Heaptrack区别1. 概述:四大层级划分1.1 层级总览2. 用户态-内核态接口层:ptrace 与 strace2.1 ptrace:底层机制而非工具2.2 strace:基于 ptrace 的系统调用追踪工具2.3 二者关系小结3. 内核与系统级追踪层:ftrace、perf、eBPF3.1 ftrace:内核自带的函数追踪框架3.2 perf:基于硬件计数器的采样分析工具3.3 eBPF:可编程的内核追踪引擎3.4 三者对比小结4. 硬件级调试层:Trace325. 内存分析层:ASan、Heaptrack 与 Valgrind5.1 ASan(AddressSanitizer):编译期插桩的内存安全检测5.2 Valgrind:运行期二进制插桩的重量级检测套件5.3 Heaptrack:堆内存分配剖析5.4 三者对比小结6. 综合对比总表7. 一句话速记7.1 追踪类7.2 硬件调试类7.3 内存分析类1. 概述:四大层级划分这九个工具/技术虽然都服务于调试、追踪、性能分析,但工作层级完全不同,理解层级是理解区别的关键:1.1 层级总览用户态-内核态接口层:ptrace、strace(进程级,观测系统调用交互)内核与全局追踪层:ftrace、perf、eBPF(内核态或跨内核-用户态的系统级观测)硬件级调试层:Trace32(脱离操作系统的芯片级调试)内存分析层:ASan、Heaptrack、Valgrind(针对内存安全与内存分配的专项分析)层级越低(越靠近硬件),观测能力越强、越不依赖操作系统是否正常运行;层级越高,使用越简单,但受限于操作系统状态。2. 用户态-内核态接口层:ptrace 与 strace2.1 ptrace:底层机制而非工具本质:Linux 提供的一个系统调用ptrace(),不是独立可执行工具,而是其他调试工具的底层实现基石。原理:允许一个进程(Tracer)控制另一个进程(Tracee)的执行,可读写其内存、寄存器,拦截系统调用与信号。