Valgrind
外观
(从 使用 Valgrind 重定向)
Valgrind (可在此处下载) 是一个用于调试 x86 和 x86-64 Linux 平台程序的实用工具。它最近变得非常流行,因为它可以用来轻松地追踪内存管理和线程错误,这些错误在其他情况下很难追踪。
有一个“通用”选项,在大多数系统上都可用,它涉及编译
user> wget http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2 user> bunzip2 valgrind-3.8.1.tar.bz2 user> tar -xvf valgrind-3.8.1.tar user> cd /valgrind-3.8.1 user> ./configure user> make user> su root root> make install
然而,在大多数 Linux 发行版中,你可以使用包管理系统。例如,在 Debian GNU/Linux(及其衍生版)中,只需运行
apt-get install valgrind
Valgrind 可以简单地通过在运行的命令行前加上 valgrind 来运行
./myprogram -o option
valgrind ./myprogram -o option
这个简单的测试将检查程序中的内存访问是否正确。当你收到关于你知道不是问题的代码的消息时,不要感到惊讶。此程序测试每次访问,一些程序对现有错误很宽容。修复这些额外的错误始终是值得的,因为当它们导致代码中断时,这些错误将无法追踪。
你可能更喜欢运行 valgrind 并将日志记录到文本文件中,使用以下选项
valgrind --leak-check=full --freelist-vol=100000000 --log-file-exactly=log.txt -v ./myprogram
Valgrind 本质上是一个 x86 机器码解释器。事实上,它运行作为一个即时编译器,将机器码转换为内部语言,对该语言进行检测,然后从该语言生成代码。Valgrind 对代码进行检测以监控内存分配、释放、写入和读取,这使得它可以保存内存状态的位图。因此,它可以报告试图从从未写入的内存中读取数据,或使用最近释放的内存的尝试。在 Valgrind 下,程序的运行时间将比未检测的程序长 2-10 倍左右。
Callgrind 是一个相关的程序,它使用相同的 x86 解释器技术对代码进行检测以记录例程调用并生成一个文件,该文件可以被分析以显示在各种例程中花费的时间以及涉及的调用路径。