当前位置: 首页 > news >正文

使用valgrind工具检测server端lib库的内存泄漏

工作中需要检查内存泄漏,但是Linux server端的代码生成的是lib库,而不是可执行程序。研究了很久,分享给有需要的朋友。

背景,server端code是C++开发的,部署在Linux上的lib库集合;客户端是WPF,通过tibco RV call server端的接口,执行命令。

网上找到的资料都是通过gcc编译成可执行的程序,再通过valgrind命令检测内存泄漏。因此尝试gcc编译时去掉-c选项,但是根本编译不过,因为server端根本不是可执行代码,而是lib库。几经波折,终于通了。方法如下:

1. 服务器上安装valgrind

    yum install valgrind

    安装成功,通过命令valgrind --version查看valgrind的版本;通过命令gcc --version查看gcc版本

2. 编译server端代码

    server端编译c++代码,肯定是有Makefile文件的。查看makefile文件的编译命名是否有-g选项,没有则加上。范例(执行make指令,会打印出编译过程中的中间指令,检查是否有-g选项)

    gcc -m64 -fPIC -Wno-deprecated -Wno-invalid-offsetof -DLINUX64 -DBITS64  -c -g  -fpermissive  -DLINUX64 -DBITS64 -DONEBYTE -DRW_STD_TYPEDEFS -D_FASTECH_ -D__MBX_DISTRIB__ -DNOEXTERNC   -I./Fwlinux64.d -I. -I../../../include/Fwlinux64.d -I../../../include  -I../../../Fwlinux64.d/include -I/home/product/v1.0/FASTech/FACTORYworks/include/Fwlinux64.d -I/home/product/v1.0/FASTech/FACTORYworks/include -I/home/product/v1.0/FASTech/SDT/include -I/home/ProdustSource/v1.0/server/include/Fwlinux64.d -I/home/ProdustSource/v1.0/server/include -I/home/product/v1.0/FASTech/FACTORYworks/include  -DFAB32 jobprep.cpp

3. 起server

4. 停某支进程(需要检查内存泄漏的那支进程)

5. 通过valgrind命令起item4停掉的进程

    log能正常打印出来(可有可无,原本server的执行过程会打印到相应的log文件中),命令如下:

CELLtrace -n FW_MBX_DEV_srv1 -f /home/systemlog/FW_MBX_DEV.srv1_log -s -T -d -S 20000000 -B 50 -X &

    valgrind起进程,命令如下:

valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --log-file=test.log DTPFsrv "set mbx=FW_MBX_DEV" "set name=srv1.1" "set dblog=TRC:FW_MBX_DEV_srv1" "set dbuser=fwdev dbpassword=fwdev dbserver=MESDSRV dbtimeout=30 dbretries=200 trace_name=FW_MBX_DEV_srv1 verbose=5 diagnose=5" "include /home/Prod/config/srv1.cfg"

6. 在客户端执行相应进程负责的功能,然后去test.log文件查看valgrind打印出来的检测报告。

http://www.dtcms.com/a/316162.html

相关文章:

  • FT5X06 触摸芯片
  • 【技术教程】如何将 ONLYOFFICE 文档连接到 Confluence
  • nodejs 编程基础01-NPM包管理
  • Android 之 Kotlin
  • 让 Spark 干体力活:用 Java 快速找出最小值
  • GaussDB 并行创建索引
  • Webpack 5 Module Federation 模块共享最佳实践
  • AI智能体的安全困境:防护机制与伦理平衡的艺术
  • 高精度惯性导航IMU传感器供应商价格
  • Python-机器学习初识
  • C结构体的几种定义形式 + typedef结合使用的好处
  • 数分思维14:用户研究与数据分析
  • WordPress如何实现隐藏文章部分内容?WordPress无法解析[hide]...[/hide]这类短代码怎么办?
  • 【机器学习】算法调参的两种方式:网格搜索(枚举)、随机搜索
  • Android 中几种常用布局的优缺点
  • 2023 年 6 月 GESP Python 二级试卷真题+答案+解析
  • 基于 Lyapunov 能量函数的等势面绘制方法 —— MATLAB 实现与工程应用拓展
  • 永磁同步电机的矢量控制
  • CPP引用
  • 组织架构与软件架构协同演进实践指南
  • UE5 安装Visual Studio
  • Go语言实战案例:使用context控制协程取消
  • GB28181监控平台LiveGBS如何配置GB28181对接海康、大华解码器上墙,将GB28181平台是视频给硬件解码器解码上墙
  • 软件无线电 招标参数
  • ⭐CVPR2025 非均匀运动视频插帧新突破
  • 文献阅读 | Briefings in Bioinformatics | Hiplot:全面且易于使用的生物医学可视化分析平台
  • HarmonyOS 应用拉起系列(二):如何拉起微信小程序
  • 前端1.0
  • 查看 Redis 某个数据库的内存占用
  • python+MySQL组合实现生成销售财务报告