你的代码有内存泄漏!

2020/05/29 18:44
阅读数 246
前言
    最近在进行词典笔的离线解码器测试,遇到了各种内存泄漏以及崩溃问题,为了协助开发定位问题,用到了Valgrind和BreakPad工具,下面就简单介绍一下这两个小工具吧。
一.Valgrind

    1.Valgrind简介   

    Valgrind是一款用于内存调试、内存泄漏检测以及性能分析、检测线程错误的软件开发工具。Valgrind 可以运行在Linux 上的多用途代码剖析和内存调试软件。主要包括Memcheck、Callgrind、Cachegrind 等工具,每个工具都能完成一项任务调试、检测或分析。

   2.Valgrind安装

 wget https://sourceware.org/pub/valgrind/valgrind-3.16.0.tar.bz2 tar -xjvf valgrind-3.16.0.tar.bz2 cd valgrind-3.16.0 ./configure make &&make install

    编译好后检查是否安装完成

   

 valgrind --version

   3.Valgrind使用

valgrind --leak-check=yes ./your_progress

    如果程序后面带有参数,可以通过下面方式进行使用。

 valgrind --leak-check=yes ./your_progress argv1 argv2

    还可以通过添加日志参数--log-file=leak.log,将valgrind生成的日志定向到文件中。最后可以通过查看文件的尾部的LEAK SUMMARY检查程序是否有内存泄漏的问题。

二.BreakPad

1.BreakPad简介

    Google breakpad是一个跨平台的崩溃转储和分析框架和工具集合。

    Breakpad由三个主要组件:

    a.client

   以library的形式内置在你的应用中,当崩溃发生时写 minidump文件

    b.symbol dumper

    读取由编译器生成的调试信息(debugging information),并生成 symbol file

    c.processor

   读取 minidump文件 和 symbol file ,生成可读的c/c++ Stack trace.

   简单来说就是一个生成 minidump,一个生成symbol file,然后将其合并处理成可读的Stack trace。

2.崩溃日志分析

    a.生成symbols文件

    为了生成可读的stack trace, breakpad需要你将binaries里的调试符号(debugging symbols)转换成基于文本格式的symbol files。

    首先确保你在编译代码的时候加上 -g 参数来生成带调试符号的。然后使用 configure && make breakpad源码来生成dump_syms 工具。接着运行 dump_syms 命令来生成 symbol files,如下:

dump_syms /aarch64_linux_gnu_release/bin/sgxserver >Capture.syms

    b.调整目录结构

  为了可以使用 minidump_stackwalk工具来生成stack trace,你需要将文件放置在一定的目录结构,symbol file的第一行说明了需要放置的目录结构,可以使用head命令来新建这样的目录结构。
head -n1 Capture.syms//MODULE Linux aarch 092F2B14F23231C563AD282A3043D1E70testmkdir -p ./symbols/PanoramaCapture/092F2B14F23231C563AD282A3043D1E70mv Capture.syms ./symbols/PanoramaCapture/092F2B14F23231C563AD282A3043D1E70

    c.生成Stack Trace

minidump_stackwalk minidump.dmp ./symbols

总结
    

本期就为大家简单介绍了Vargrind和BreakPad工具的使用,可以有效帮助开发定位无法复现的问题。如果有其他更好的工具,欢迎与小编进行讨论。


欢迎添加我们的搜狗测试微信号,与我们一起聊聊测试

本文分享自微信公众号 - 搜狗测试(SogouQA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部