strace
- 一个强大的命令行工具,用于在Linux系统上跟踪系统调用和信号
- 主要用于调试和诊断程序,在了解程序如何与操作系统交互方面非常有用
用法
- 跟踪系统调用
1 |
strace <command> |
- 跟踪现有进程
1 |
strace -p <pid> |
- 筛选特定系统调用
1 |
strace -e open,read,write <command> |
- 写入到文件
1 |
strace -o output.txt <command> |
- 跟踪子进程
1 |
strace -f <command> |
高级用法
- 使用-c选项可以查看关于系统调用的统计信息,如次数、时间等
- 使用-e选项加上signal可以跟踪进程接收和发送的信号
- 使用-i可以显示指令指针地址,这对于调试可能非常有用
1 |
sudo strace -e trace=signal -p 6958 |
nohup
- 一个
Unix
和Linux
环境中的命令行实用程序,用于运行命令在终端会话结束后继续执行
用法
command
是你想要运行的命令[arguments]
是传递给该命令的任何参数- 将
&
添加到命令的末尾将使该命令在后台运行
1 |
nohup command [arguments] & |
原理
- 使用
nohup
运行命令时,该命令将不会收到挂起信号(SIGHUP
)- 这意味着即使你关闭终端窗口或注销当前会话,该命令也将继续运行
输出重定向
- 默认情况下,如果在命令中没有指定输出重定向,
nohup
将把标准输出和标准错误输出重定向到名为nohup.out
的文件 - 如果用户没有权限在当前目录下写入,那么
nohup.out
将会在用户的主目录下创建 - 也可以手动重定向输出到其他文件,示例如下:
1 |
nohup ./long-running-process > output.log & |
valgrind
- 一个强大的
Linux
下的内存检测工具,可以用于发现程序中的内存管理问题
功能
- 内存泄漏检测
Valgrind
能够检测到程序中未释放的内存块,这些内存块在程序结束后也不会被操作系统回收
- 越界访问检测
- 如果程序访问了数组的越界位置或未初始化的内存,
Valgrind
会报告这些问题
- 如果程序访问了数组的越界位置或未初始化的内存,
- 错误的内存释放
- 例如,释放了未分配的内存或释放同一块内存两次
- 使用未初始化的值
- 如果程序使用了未初始化的变量,
Valgrind
会发出警告
- 如果程序使用了未初始化的变量,
- 线程错误检测
Valgrind
也可以检测多线程程序中的各种常见错误,如死锁、竞态条件等
工具集
Valgrind
实际上是一组工具的集合,最常用的工具是Memcheck
- 其他工具包括用于缓存分析的
Cachegrind
- 用于线程错误检测的
Helgrind
等
Memcheck
- Memcheck是Valgrind的主要工具之一,主要用于检测C和C++程序中的内存管理问题
- 它能检测是通过拦截内存分配和释放的调用
选项
--leak-check=full
- 提供关于内存泄漏的详细信息
--show-leak-kinds=all
- 显示所有类型的内存泄漏。
--track-origins=yes
- 显示未初始化值的来源
使用
1 |
valgrind ./my_program |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 51CTO:Linux C++网络编程四08/19
- ♥ Linux 线程等待&&取消&&终止03/31
- ♥ vim编辑器的配置03/18
- ♥ Linux 高性能服务器编程:高性能服务器架构二12/05
- ♥ Linux 基于文件指针的文件操作(缓冲)03/23
- ♥ 51CTO:Linux C++网络编程二08/14