如何使用valgrind定位服务器程序的内存泄露?

nkinuyasha 2014-02-15 07:20:29
有一个C++程序是常驻进程
如果通过valgrind讲程序拉起来以后,怎么退出这个进程来触发内存泄露检测啊

我通过kill -15不行
...全文
377 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
后坡 2014-03-28
  • 打赏
  • 举报
回复
可以在你的程序中注册信号处理函数 比如注册SIGTERM信号处理函数 //信号处理函数 void dosignal(int sig) { is_runing = false; } int main() { while(is_runing) { do XX } return } 可以执行kill -s SIGTERM pid 让进程主动退出。 当然也可以在信号处理函数中直接exit退出,看你情况 (我用的是linux,windows应该也有类似的机制)
jiandingzhe 2014-02-17
  • 打赏
  • 举报
回复
咩?没debug过这类程序。会有任何不同吗? 另外我都是运行的时候就带着valgrind跑啊。
赵4老师 2014-02-17
  • 打赏
  • 举报
回复
检查是否资源泄漏的办法之一: 在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
内容概要:本文系统介绍了Linux环境下内存泄漏的检测与分析技术,涵盖内存泄漏的基本概念、危害、产生原因及其常见场景,并重点讲解了两种主流检测工具Valgrind和AddressSanitizer的使用方法与输出解读。通过一个网络服务器程序的实战案例,演示了如何利用这些工具发现、定位并修复内存泄漏问题,最后提出了预防内存泄漏的编程技巧,包括正确使用内存管理函数、智能指针的应用以及代码审查与测试的重要性。文章兼具理论性与实践性,为开发者提供了完整的内存泄漏应对方案。; 适合人群:具备C/C++编程基础,从事Linux系统开发或服务端开发的程序员,尤其是工作1-3年、关注程序性能与稳定性的研发人员。; 使用场景及目标:①掌握Valgrind和AddressSanitizer工具的安装、配置与使用,用于日常开发中的内存问题排查;②通过实战案例学习如何分析内存泄漏日志,精确定位问题代码;③应用智能指针、RAII等技术预防内存泄漏,提升代码质量与系统稳定性。; 阅读建议:建议结合文中提供的代码示例和编译命令动手实践,先在小型项目中尝试使用Valgrind和AddressSanitizer进行检测,逐步过渡到复杂项目的内存问题分析,同时重视代码规范与测试环节,形成长期有效的内存管理习惯。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧