Debug#
在 Linux 系统中,除了 nm
之外,还有许多常用的调试和分析工具,用于检查二进制文件、调试程序、分析性能等。以下是一些常见的工具及其用途:
1. 二进制文件分析工具#
工具 |
说明 |
---|---|
|
显示目标文件的详细信息,包括反汇编、段信息、符号表等。 |
|
显示 ELF 文件的详细信息,如段头、符号表、动态段等。 |
|
检测文件类型(如可执行文件、共享库等)。 |
|
提取文件中的可打印字符串。 |
|
列出可执行文件或共享库依赖的动态库。 |
2. 调试工具#
工具 |
说明 |
---|---|
|
GNU 调试器,用于调试 C/C++ 程序,支持断点、单步执行、变量查看等功能。 |
|
跟踪程序执行时的系统调用和信号。 |
|
跟踪程序执行时的库函数调用。 |
|
内存调试工具,检测内存泄漏、非法内存访问等问题。 |
|
将地址转换为文件名和行号(用于调试崩溃问题)。 |
3. 性能分析工具#
工具 |
说明 |
---|---|
|
Linux 性能分析工具,支持 CPU 性能分析、函数调用图等。 |
|
分析程序的性能瓶颈,生成函数调用图和耗时统计。 |
|
交互式进程查看器,实时监控系统资源使用情况。 |
|
报告虚拟内存、CPU、I/O 等系统状态。 |
|
监控系统 I/O 设备的使用情况。 |
4. 动态分析工具#
工具 |
说明 |
---|---|
|
动态链接器,支持环境变量 |
|
查看内核日志,用于分析内核级别的错误。 |
|
查看和修改内核参数。 |
|
网络抓包工具,用于分析网络流量。 |
5. 静态分析工具#
工具 |
说明 |
---|---|
|
C/C++ 代码静态分析工具,检测潜在的错误和代码风格问题。 |
|
Clang 的静态分析工具,支持代码风格检查和优化建议。 |
|
C 代码的静态分析工具,检测潜在的错误和漏洞。 |
6. 崩溃分析工具#
工具 |
说明 |
---|---|
|
分析程序崩溃时生成的核心转储文件。 |
|
加载核心转储文件,分析崩溃时的堆栈和变量状态。 |
|
在 |
7. 其他工具#
工具 |
说明 |
---|---|
|
查看当前运行的进程信息。 |
|
实时监控系统进程和资源使用情况。 |
|
列出打开的文件和网络连接。 |
|
查看网络连接、路由表、接口统计等信息。 |
|
监控进程的 CPU、内存、I/O 等资源使用情况。 |
工具组合使用示例#
1. 调试崩溃问题#
使用
gdb
加载核心转储文件:gdb ./my_program core
在
gdb
中使用bt
查看堆栈回溯:(gdb) bt
2. 分析内存泄漏#
使用
valgrind
检查内存泄漏:valgrind --leak-check=full ./my_program
3. 分析系统调用#
使用
strace
跟踪程序执行时的系统调用:strace ./my_program
4. 分析性能瓶颈#
使用
perf
分析程序的 CPU 性能:perf record ./my_program perf report
5. 查看动态库依赖#
使用
ldd
查看可执行文件的动态库依赖:ldd ./my_program
查看 gpio 占用情况#
cat /sys/kernel/debug/gpio