Bootstrap

Linux内存泄漏valgrind

Valgrind 是一个内存调试和性能分析工具,可以检测包括内存泄漏、使用未初始化的变量等内存相关错误,并提供详细的错误信息和定位,是 C/C++ 开发中不可或缺的工具之一。

具体使用步骤如下:

  1. 安装 Valgrind。在 Linux 环境下可以通过包管理器安装,例如使用 apt-get 命令:

    sudo apt-get install valgrind
    

    在此如果没有安装成功,出现以下问题:
    root@ubuntu:/mnt/work_space_share/my_programe/C# apt install valgrind
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    You might want to run ‘apt --fix-broken install’ to correct these.
    The following packages have unmet dependencies:
    linux-image-4.15.0-210-generic : Depends: linux-modules-4.15.0-210-generic but it is not going to be installed
    valgrind : Depends: libc6-dbg but it is not going to be installed
    Recommends: gdb but it is not going to be installed
    E: Unmet dependencies. Try ‘apt --fix-broken install’ with no packages (or specify a solution)

请点击解决方式:安装valgrind提示libc6-dbg but it is not going to be installed

  1. 编译程序时加上 -g 选项,生成调试信息。例如:

    gcc -g -o myprogram myprogram.c
    
  2. 使用 Valgrind 运行程序。例如:

    valgrind ./myprogram
    

    运行后,Valgrind 会输出程序运行过程中产生的内存错误,例如未释放的堆内存、访问非法的内存地址等等。可以根据提示信息定位错误并修复。

  3. 可以通过 Valgrind 的一些选项来调整测试输出的详细程度。例如,使用 --leak-check=full 选项来详细显示内存泄漏信息:

    valgrind --leak-check=full ./myprogram
    

    使用 --show-reachable=yes 选项来显示一些非常小的内存泄漏:

    valgrind --leak-check=full --show-reachable=yes ./myprogram
    
  4. 完成调试后,一定要将程序编译为不带调试信息的可执行文件,否则可能会影响程序运行效率。例如:

    gcc -o myprogram myprogram.c
    

总之,Valgrind 是一个非常强大的工具,可以帮助开发人员发现和修复内存相关的错误,提高代码的质量和稳定性。

;