前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你的代码有内存泄漏!

你的代码有内存泄漏!

作者头像
用户5521279
发布2020-06-04 16:23:04
9010
发布2020-06-04 16:23:04
举报
文章被收录于专栏:搜狗测试搜狗测试

前言

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

一.Valgrind

1.Valgrind简介

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

2.Valgrind安装

代码语言:javascript
复制
 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

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

代码语言:javascript
复制
 valgrind --version

3.Valgrind使用

代码语言:javascript
复制
valgrind --leak-check=yes ./your_progress

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

代码语言:javascript
复制
 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,如下:

代码语言:javascript
复制
dump_syms /aarch64_linux_gnu_release/bin/sgxserver >Capture.syms

b.调整目录结构

为了可以使用 minidump_stackwalk工具来生成stack trace,你需要将文件放置在一定的目录结构,symbol file的第一行说明了需要放置的目录结构,可以使用head命令来新建这样的目录结构。

代码语言:javascript
复制
head -n1 Capture.syms//MODULE Linux aarch 092F2B14F23231C563AD282A3043D1E70
test
mkdir -p ./symbols/PanoramaCapture/092F2B14F23231C563AD282A3043D1E70
mv Capture.syms ./symbols/PanoramaCapture/092F2B14F23231C563AD282A3043D1E70

c.生成Stack Trace

代码语言:javascript
复制
minidump_stackwalk minidump.dmp ./symbols

总结

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档