admin管理员组文章数量:1130349
目录
说明
一、概述
二、主要功能
三、主要工具
四、使用方法
五、常用选项
5.1 适用于所有Valgrind工具
5.2 log信息输出
5.3 适用于Memcheck工具的相关选项
六、注意事项
Valgrind 交叉编译(RV1126)
1 官网下载 https://valgrind/downloads/current.html
2 解压tar -xvf valgrind-3.23.0.tar.bz2
3 配置
4 编译 (make -j10 && make install)
Valgrind (1126平台测试)
1 创建环境
2 编写 编译测试文件为test的测试程序。复制到/userdata/testVagrind/bin 目录下面
3 运行测试
说明
Valgrind是一款功能强大的开源工具,主要用于内存调试、内存泄漏检测、性能分析以及线程错误的检测。以下是Valgrind的详细介绍:
一、概述
Valgrind运行在Linux系统上,它基于仿真方式对程序进行调试。Valgrind会先于应用程序获取实际处理器的控制权,并在实际处理器的基础上仿真一个虚拟处理器,使应用程序在这个虚拟处理器上运行,从而监视应用程序的运行状态。由于Valgrind直接解释二进制代码,已经编译成二进制代码的应用程序无需重新编译即可使用Valgrind进行调试。
二、主要功能
- 内存错误检测:Valgrind能够检测程序中的内存访问错误,包括使用未初始化的内存、访问已释放的内存、内存越界访问等。这些错误通常难以通过常规调试手段发现,但Valgrind能够准确地指出错误发生的位置和原因。
- 内存泄漏检测:Valgrind能够检测程序中的内存泄漏问题,即程序分配的内存没有被正确释放。它会详细列出每个内存泄漏的情况,包括泄漏的内存大小和位置。
- 性能分析:Valgrind提供了性能分析工具,如Cachegrind和Callgrind,它们能够模拟CPU的缓存行为,分析程序的性能瓶颈和优化点。这些工具可以帮助开发人员优化程序,提高程序的运行效率。
- 线程错误检测:对于多线程程序,Valgrind能够检测线程同步错误、死锁等问题。它通过分析线程间的内存访问情况,确保线程的正确性和安全性。
三、主要工具
- Memcheck:Memcheck是Valgrind中最常用的工具,它主要用于检测内存管理和分配错误。Memcheck会详细记录程序对内存的读写操作,并检查这些操作是否合法。它能够检测上述提到的内存错误和内存泄漏问题,并提供详细的错误报告。
- Cachegrind:Cachegrind是一个缓存分析器,它能够模拟CPU的一级缓存和二级缓存,并精确指出程序中缓存的命中和丢失情况。此外,它还可以给出每行代码、每个函数、每个模块和整个程序的内存引用次数以及指令数,有助于优化程序性能。
- Callgrind:Callgrind是Cachegrind的扩展工具,它除了能够提供Cachegrind的所有信息外,还可以生成程序的调用图。这有助于开发人员了解程序内部的函数调用关系,进而优化程序结构。
- Massif:Massif是一个堆分析器,它通过程序的堆内存快照技术实现堆内存的分析。Massif会生成一张表示程序运行过程中堆内存使用情况的图,包括在运行过程中哪个模块占用的堆内存最多等信息。
- Helgrind和DRD:这两个工具用于检测多线程程序中的数据竞争问题。它们会查找被多个线程访问的内存区域,并检测这些内存区域在使用时是否进行了线程同步。如果没有进行同步,则这些内存区域可能会成为潜在的隐患。
四、使用方法
使用Valgrind非常简单,只需在命令行中输入相应的命令即可。例如,要检测一个C/C++程序的内存错误和内存泄漏问题,可以使用以下命令:
valgrind --leak-check=full ./your_program
其中,--leak-check=full选项表示在程序结束时详细叙述每一个内存泄漏情况。./your_program是要检测的程序的可执行文件。
五、常用选项
5.1 适用于所有Valgrind工具
–tool=< name > 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
-h --help 显示帮助信息。
–version 显示valgrind内核的版本,每个工具都有各自的版本。
-q --quiet 安静地运行,只打印错误信息。
-v --verbose 更详细的信息, 增加错误数统计。
–trace-children=no|yes 跟踪子线程? [no]
–track-fds=no|yes 跟踪打开的文件描述?[no]
–time-stamp=no|yes 增加时间戳到LOG信息? [no]
–log-fd=< number > 输出LOG到描述符文件 [2=stderr]
–log-file=< file > 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
–log-file-exactly=< file > 输出LOG信息到 file
–log-file-qualifier=< VAR > 取得环境变量的值来做为输出信息的文件名。 [none]
–log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port
5.2 log信息输出
–xml=yes 将信息以xml格式输出,只有memcheck可用
–num-callers=< number > show < numbe r> callers in stack traces [12]
–error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]
–error-exitcode=< number > 如果发现错误则返回错误代码 [0=disable]
–db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]
–db-command=< command > 启动调试器的命令行选项[gdb -nw %f %p]
5.3 适用于Memcheck工具的相关选项
–leak-check=no|summary|full 要求对leak给出详细信息? [summary]
–leak-resolution=low|med|high how much bt merging in leak check [low]
–show-reachable=no|yes show reachable blocks in leak check? [no]
六、注意事项
- 由于Valgrind通过仿真方式运行程序,因此程序的运行速度会比正常情况慢得多,且使用的内存也会更多。因此,最好在性能较好的机器上使用Valgrind。
- Valgrind提供了抑制文件(suppression file)的功能,用于屏蔽一些已知的、无需关注的错误或警告信息。这有助于减少调试过程中的噪音,提高调试效率。
综上所述,Valgrind是一款功能强大的开源工具,它能够帮助开发人员有效地检测和修复程序中的内存错误、内存泄漏和线程错误等问题。通过Valgrind的详细报告和调试信息,开发人员可以更加深入地了解程序的运行情况,进而优化程序性能和提高程序质量。
Valgrind 交叉编译(RV1126)
1 官网下载 https://valgrind/downloads/current.html
2 解压tar -xvf valgrind-3.23.0.tar.bz2
3 配置
./configure --host=arm-none-linux-gnueabihf CC=/opt/rv1126_sdk/cross-compiler/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --prefix=/home/userdata/lilong/内存泄漏检测/valgrind/valgrind-3.23.0/build
4 编译 (make -j10 && make install)
4.1报错处理
m_dispatch/dispatch-arm-linux.S: Assembler messages:
m_dispatch/dispatch-arm-linux.S:102: Error: selected processor does not support `movw r1,#47' in ARM mode
m_dispatch/dispatch-arm-linux.S:103: Error: selected processor does not support `movw r2,#0' in ARM mode
m_dispatch/dispatch-arm-linux.S:155: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndirs_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:156: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndirs_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:173: Error: selected processor does not support `ubfx r6,r6,#0,#13' in ARM mode
m_dispatch/dispatch-arm-linux.S:176: Error: selected processor does not support `movw r4,#:lower16:vgPlain_tt_fast' in ARM mode
m_dispatch/dispatch-arm-linux.S:177: Error: selected processor does not support `movt r4,#:upper16:vgPlain_tt_fast' in ARM mode
m_dispatch/dispatch-arm-linux.S:204: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndir_hits1_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:205: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndir_hits1_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:226: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndir_hits2_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:227: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndir_hits2_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:248: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndir_hits3_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:249: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndir_hits3_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:258: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndir_misses_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:259: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndir_misses_32' in ARM mode
4.2 修改configure armv7改为armv7*|arm
4.3 重新配置编译,编译完成 ,在build下面生成目标文件(包含执行文件,头文件,库文件)
Valgrind (1126平台测试)
1 创建环境
在/userdata下面创建文件夹testVagrind,将bin文件和libexecx复制在该目录。
2 编写 编译测试文件为test的测试程序。复制到/userdata/testVagrind/bin 目录下面
测试代码
#include<stdio.h>
#include <stdlib.h>
int main()
{
int* p= (int*) malloc(sizeof(int));
return 0;
}
编译脚本
CC=/opt/rv1126_sdk/cross-compiler/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
CFLAGS=-Wall -g
BIN = test
all:$(BIN)
%.o:%c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf test
3 运行测试
3.1 配置环境变量
export VALGRIND_LIB=/userdata/testVagrind/libexec//(该路径替换为实际终端路径)
3.2 运行测试
:/userdata/testVagrind/bin]# ./valgrind --tool=memcheck --leak-check=full --log-file=./log.txt --show-reachable=yes ./test
3.3 运行完成会在 执行路径下面生成日志文件 log.txt
==3453== Memcheck, a memory error detector
==3453== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.
==3453== Using Valgrind-3.23.0 and LibVEX; rerun with -h for copyright info
==3453== Command: ./test
==3453== Parent PID: 3905
==3453==
==3453==
==3453== HEAP SUMMARY:
==3453== in use at exit: 4 bytes in 1 blocks
==3453== total heap usage: 1 allocs, 0 frees, 4 bytes allocated
==3453==
==3453== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
==3453== at 0x48491DC: malloc (vg_replace_malloc.c:446)
==3453== by 0x1041F: main (test.c:6)
==3453==
==3453== LEAK SUMMARY:
==3453== definitely lost: 4 bytes in 1 blocks
==3453== indirectly lost: 0 bytes in 0 blocks
==3453== possibly lost: 0 bytes in 0 blocks
==3453== still reachable: 0 bytes in 0 blocks
==3453== suppressed: 0 bytes in 0 blocks
==3453==
==3453== For lists of detected and suppressed errors, rerun with: -s
==3453== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
下面是这段输出的详细解释:
- 基本信息:
==3453== Memcheck, a memory error detector:表示这是 Memcheck 的输出,Memcheck 是 Valgrind 的一部分,用于检测内存错误。==3453== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.:版权信息。==3453== Using Valgrind-3.23.0 and LibVEX; rerun with -h for copyright info:使用的 Valgrind 版本和 LibVEX 库的信息。==3453== Command: ./test:被测试的命令或程序是./test。==3453== Parent PID: 3905:父进程的 PID 是 3905。
- 堆内存总结:
==3453== HEAP SUMMARY::这是堆内存使用的总结。==3453== in use at exit: 4 bytes in 1 blocks:程序退出时,还有 4 字节的内存在使用中,分布在 1 个内存块中。==3453== total heap usage: 1 allocs, 0 frees, 4 bytes allocated:总共进行了 1 次内存分配,0 次释放,分配了 4 字节的内存。
- 内存泄漏信息:
==3453== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1:有 4 字节的内存确实丢失了,这是第 1 条(也是唯一一条)记录。==3453== at 0x48491DC: malloc (vg_replace_malloc.c:446):内存是在malloc函数中分配的,位于vg_replace_malloc.c文件的第 446 行。==3453== by 0x1041F: main (test.c:6):调用malloc的是main函数,位于test.c文件的第 6 行。
- 泄漏总结:
==3453== LEAK SUMMARY::内存泄漏的总结。==3453== definitely lost: 4 bytes in 1 blocks:确定丢失了 4 字节的内存,分布在 1 个块中。- 其他类型的丢失(间接丢失、可能丢失、仍然可达、被抑制)都是 0 字节。
- 错误总结:
==3453== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0):总共有 1 个错误,来自 1 个上下文,没有错误被抑制。
解释:
这个输出表明程序 ./test 在退出时有一个内存泄漏,即分配了 4 字节的内存但没有释放。泄漏发生在 main 函数中,具体位置是 test.c 文件的第 6 行,这里调用了 malloc 函数分配内存。根据这些信息,你应该检查 test.c 文件的第 6 行附近的代码,确保每次分配内存后都有相应的释放操作。
目录
说明
一、概述
二、主要功能
三、主要工具
四、使用方法
五、常用选项
5.1 适用于所有Valgrind工具
5.2 log信息输出
5.3 适用于Memcheck工具的相关选项
六、注意事项
Valgrind 交叉编译(RV1126)
1 官网下载 https://valgrind/downloads/current.html
2 解压tar -xvf valgrind-3.23.0.tar.bz2
3 配置
4 编译 (make -j10 && make install)
Valgrind (1126平台测试)
1 创建环境
2 编写 编译测试文件为test的测试程序。复制到/userdata/testVagrind/bin 目录下面
3 运行测试
说明
Valgrind是一款功能强大的开源工具,主要用于内存调试、内存泄漏检测、性能分析以及线程错误的检测。以下是Valgrind的详细介绍:
一、概述
Valgrind运行在Linux系统上,它基于仿真方式对程序进行调试。Valgrind会先于应用程序获取实际处理器的控制权,并在实际处理器的基础上仿真一个虚拟处理器,使应用程序在这个虚拟处理器上运行,从而监视应用程序的运行状态。由于Valgrind直接解释二进制代码,已经编译成二进制代码的应用程序无需重新编译即可使用Valgrind进行调试。
二、主要功能
- 内存错误检测:Valgrind能够检测程序中的内存访问错误,包括使用未初始化的内存、访问已释放的内存、内存越界访问等。这些错误通常难以通过常规调试手段发现,但Valgrind能够准确地指出错误发生的位置和原因。
- 内存泄漏检测:Valgrind能够检测程序中的内存泄漏问题,即程序分配的内存没有被正确释放。它会详细列出每个内存泄漏的情况,包括泄漏的内存大小和位置。
- 性能分析:Valgrind提供了性能分析工具,如Cachegrind和Callgrind,它们能够模拟CPU的缓存行为,分析程序的性能瓶颈和优化点。这些工具可以帮助开发人员优化程序,提高程序的运行效率。
- 线程错误检测:对于多线程程序,Valgrind能够检测线程同步错误、死锁等问题。它通过分析线程间的内存访问情况,确保线程的正确性和安全性。
三、主要工具
- Memcheck:Memcheck是Valgrind中最常用的工具,它主要用于检测内存管理和分配错误。Memcheck会详细记录程序对内存的读写操作,并检查这些操作是否合法。它能够检测上述提到的内存错误和内存泄漏问题,并提供详细的错误报告。
- Cachegrind:Cachegrind是一个缓存分析器,它能够模拟CPU的一级缓存和二级缓存,并精确指出程序中缓存的命中和丢失情况。此外,它还可以给出每行代码、每个函数、每个模块和整个程序的内存引用次数以及指令数,有助于优化程序性能。
- Callgrind:Callgrind是Cachegrind的扩展工具,它除了能够提供Cachegrind的所有信息外,还可以生成程序的调用图。这有助于开发人员了解程序内部的函数调用关系,进而优化程序结构。
- Massif:Massif是一个堆分析器,它通过程序的堆内存快照技术实现堆内存的分析。Massif会生成一张表示程序运行过程中堆内存使用情况的图,包括在运行过程中哪个模块占用的堆内存最多等信息。
- Helgrind和DRD:这两个工具用于检测多线程程序中的数据竞争问题。它们会查找被多个线程访问的内存区域,并检测这些内存区域在使用时是否进行了线程同步。如果没有进行同步,则这些内存区域可能会成为潜在的隐患。
四、使用方法
使用Valgrind非常简单,只需在命令行中输入相应的命令即可。例如,要检测一个C/C++程序的内存错误和内存泄漏问题,可以使用以下命令:
valgrind --leak-check=full ./your_program
其中,--leak-check=full选项表示在程序结束时详细叙述每一个内存泄漏情况。./your_program是要检测的程序的可执行文件。
五、常用选项
5.1 适用于所有Valgrind工具
–tool=< name > 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
-h --help 显示帮助信息。
–version 显示valgrind内核的版本,每个工具都有各自的版本。
-q --quiet 安静地运行,只打印错误信息。
-v --verbose 更详细的信息, 增加错误数统计。
–trace-children=no|yes 跟踪子线程? [no]
–track-fds=no|yes 跟踪打开的文件描述?[no]
–time-stamp=no|yes 增加时间戳到LOG信息? [no]
–log-fd=< number > 输出LOG到描述符文件 [2=stderr]
–log-file=< file > 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
–log-file-exactly=< file > 输出LOG信息到 file
–log-file-qualifier=< VAR > 取得环境变量的值来做为输出信息的文件名。 [none]
–log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port
5.2 log信息输出
–xml=yes 将信息以xml格式输出,只有memcheck可用
–num-callers=< number > show < numbe r> callers in stack traces [12]
–error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]
–error-exitcode=< number > 如果发现错误则返回错误代码 [0=disable]
–db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]
–db-command=< command > 启动调试器的命令行选项[gdb -nw %f %p]
5.3 适用于Memcheck工具的相关选项
–leak-check=no|summary|full 要求对leak给出详细信息? [summary]
–leak-resolution=low|med|high how much bt merging in leak check [low]
–show-reachable=no|yes show reachable blocks in leak check? [no]
六、注意事项
- 由于Valgrind通过仿真方式运行程序,因此程序的运行速度会比正常情况慢得多,且使用的内存也会更多。因此,最好在性能较好的机器上使用Valgrind。
- Valgrind提供了抑制文件(suppression file)的功能,用于屏蔽一些已知的、无需关注的错误或警告信息。这有助于减少调试过程中的噪音,提高调试效率。
综上所述,Valgrind是一款功能强大的开源工具,它能够帮助开发人员有效地检测和修复程序中的内存错误、内存泄漏和线程错误等问题。通过Valgrind的详细报告和调试信息,开发人员可以更加深入地了解程序的运行情况,进而优化程序性能和提高程序质量。
Valgrind 交叉编译(RV1126)
1 官网下载 https://valgrind/downloads/current.html
2 解压tar -xvf valgrind-3.23.0.tar.bz2
3 配置
./configure --host=arm-none-linux-gnueabihf CC=/opt/rv1126_sdk/cross-compiler/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --prefix=/home/userdata/lilong/内存泄漏检测/valgrind/valgrind-3.23.0/build
4 编译 (make -j10 && make install)
4.1报错处理
m_dispatch/dispatch-arm-linux.S: Assembler messages:
m_dispatch/dispatch-arm-linux.S:102: Error: selected processor does not support `movw r1,#47' in ARM mode
m_dispatch/dispatch-arm-linux.S:103: Error: selected processor does not support `movw r2,#0' in ARM mode
m_dispatch/dispatch-arm-linux.S:155: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndirs_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:156: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndirs_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:173: Error: selected processor does not support `ubfx r6,r6,#0,#13' in ARM mode
m_dispatch/dispatch-arm-linux.S:176: Error: selected processor does not support `movw r4,#:lower16:vgPlain_tt_fast' in ARM mode
m_dispatch/dispatch-arm-linux.S:177: Error: selected processor does not support `movt r4,#:upper16:vgPlain_tt_fast' in ARM mode
m_dispatch/dispatch-arm-linux.S:204: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndir_hits1_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:205: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndir_hits1_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:226: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndir_hits2_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:227: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndir_hits2_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:248: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndir_hits3_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:249: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndir_hits3_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:258: Error: selected processor does not support `movw r4,#:lower16:vgPlain_stats__n_xIndir_misses_32' in ARM mode
m_dispatch/dispatch-arm-linux.S:259: Error: selected processor does not support `movt r4,#:upper16:vgPlain_stats__n_xIndir_misses_32' in ARM mode
4.2 修改configure armv7改为armv7*|arm
4.3 重新配置编译,编译完成 ,在build下面生成目标文件(包含执行文件,头文件,库文件)
Valgrind (1126平台测试)
1 创建环境
在/userdata下面创建文件夹testVagrind,将bin文件和libexecx复制在该目录。
2 编写 编译测试文件为test的测试程序。复制到/userdata/testVagrind/bin 目录下面
测试代码
#include<stdio.h>
#include <stdlib.h>
int main()
{
int* p= (int*) malloc(sizeof(int));
return 0;
}
编译脚本
CC=/opt/rv1126_sdk/cross-compiler/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
CFLAGS=-Wall -g
BIN = test
all:$(BIN)
%.o:%c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf test
3 运行测试
3.1 配置环境变量
export VALGRIND_LIB=/userdata/testVagrind/libexec//(该路径替换为实际终端路径)
3.2 运行测试
:/userdata/testVagrind/bin]# ./valgrind --tool=memcheck --leak-check=full --log-file=./log.txt --show-reachable=yes ./test
3.3 运行完成会在 执行路径下面生成日志文件 log.txt
==3453== Memcheck, a memory error detector
==3453== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.
==3453== Using Valgrind-3.23.0 and LibVEX; rerun with -h for copyright info
==3453== Command: ./test
==3453== Parent PID: 3905
==3453==
==3453==
==3453== HEAP SUMMARY:
==3453== in use at exit: 4 bytes in 1 blocks
==3453== total heap usage: 1 allocs, 0 frees, 4 bytes allocated
==3453==
==3453== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
==3453== at 0x48491DC: malloc (vg_replace_malloc.c:446)
==3453== by 0x1041F: main (test.c:6)
==3453==
==3453== LEAK SUMMARY:
==3453== definitely lost: 4 bytes in 1 blocks
==3453== indirectly lost: 0 bytes in 0 blocks
==3453== possibly lost: 0 bytes in 0 blocks
==3453== still reachable: 0 bytes in 0 blocks
==3453== suppressed: 0 bytes in 0 blocks
==3453==
==3453== For lists of detected and suppressed errors, rerun with: -s
==3453== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
下面是这段输出的详细解释:
- 基本信息:
==3453== Memcheck, a memory error detector:表示这是 Memcheck 的输出,Memcheck 是 Valgrind 的一部分,用于检测内存错误。==3453== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.:版权信息。==3453== Using Valgrind-3.23.0 and LibVEX; rerun with -h for copyright info:使用的 Valgrind 版本和 LibVEX 库的信息。==3453== Command: ./test:被测试的命令或程序是./test。==3453== Parent PID: 3905:父进程的 PID 是 3905。
- 堆内存总结:
==3453== HEAP SUMMARY::这是堆内存使用的总结。==3453== in use at exit: 4 bytes in 1 blocks:程序退出时,还有 4 字节的内存在使用中,分布在 1 个内存块中。==3453== total heap usage: 1 allocs, 0 frees, 4 bytes allocated:总共进行了 1 次内存分配,0 次释放,分配了 4 字节的内存。
- 内存泄漏信息:
==3453== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1:有 4 字节的内存确实丢失了,这是第 1 条(也是唯一一条)记录。==3453== at 0x48491DC: malloc (vg_replace_malloc.c:446):内存是在malloc函数中分配的,位于vg_replace_malloc.c文件的第 446 行。==3453== by 0x1041F: main (test.c:6):调用malloc的是main函数,位于test.c文件的第 6 行。
- 泄漏总结:
==3453== LEAK SUMMARY::内存泄漏的总结。==3453== definitely lost: 4 bytes in 1 blocks:确定丢失了 4 字节的内存,分布在 1 个块中。- 其他类型的丢失(间接丢失、可能丢失、仍然可达、被抑制)都是 0 字节。
- 错误总结:
==3453== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0):总共有 1 个错误,来自 1 个上下文,没有错误被抑制。
解释:
这个输出表明程序 ./test 在退出时有一个内存泄漏,即分配了 4 字节的内存但没有释放。泄漏发生在 main 函数中,具体位置是 test.c 文件的第 6 行,这里调用了 malloc 函数分配内存。根据这些信息,你应该检查 test.c 文件的第 6 行附近的代码,确保每次分配内存后都有相应的释放操作。
版权声明:本文标题:Valgrind (使用说明,交叉编译) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1758621141a2782001.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论