gcc 程序内存使用分析

EDIT at 2019/04/24 此博客内容过时, 内存分析请使用 gperftools, 在运行速度上比valgrind要太多了

 

前提:

程序使用gcc编译的, 并且编译时加入了-g

命令:

valgrind  --vgdb=yes --tool=massif  <程序启动命令>

如  valgrind  --vgdb=yes --tool=massif ./dbserver 0 0

 

 

有两种分析方式:

1) 程序退出是分析运行过程中的内存变化

当程序退出出会生成采样文件 massif.out.<pid>  例如 massif.out.6430

 

使用ms_print命令把采样文件转成可阅读的文件:

ms_print massif.out.<pid> > <out_file>

如 ms_print massif.out.6430 > ms_print.out.6430 

 

2)程序运行时, 分析当前内存占用

 

可以使用gdb attach到运行中的程序, 不过由于程序是运行在valgrind环境之下, gdb命令有所改变

 

在shell中输入:

gdb <程序> 

如 gdb dbserver

待gdb加载程序完毕之后, 输入:

target remote | vgdb

这时候gdb就已经attach到程序上了, 除了使用正常的gdb命令之外, 可以使用massif的特殊命令.

一个比较有用的功能是采样当前内存使用情况并输出到文件

 

在gdb shell中输入

monitor detailed_snapshot

会在当前目录下产出一个massif.vgdb.out 的文件, 即为本次采样数据

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用gcc和make调试程序的原理涉及到编译、链接和调试几个关键步骤。以下是大致的调试程序的原理: 1. 编写源代码:首先需要编写源代码,使用C或C++等编程语言编写程序。 2. 编译源代码:使用gcc编译器将源代码编译成可执行文件。编译过程中会将源代码转换为机器代码,并生成目标文件。 3. 链接目标文件:链接器将目标文件和系统库文件进行链接,生成最终的可执行文件。在链接过程中会解析函数引用、地址重定向等操作。 4. 添加调试信息:通过在编译时添加调试信息选项,如-g参数,可以在可执行文件中包含调试符号表和源代码映射关系。 5. 使用调试器:使用调试器,如gdb,加载可执行文件,并设置断点或其他调试指令。调试器提供了一系列工具和命令,可以单步执行程序查看变量值、检查堆栈等。 6. 调试过程:在调试过程中,可以通过断点来暂停程序的执行,并逐步跟踪代码。可以观察变量的值、检查函数调用和返回,以及查看程序的状态。 7. 调试输出:在调试过程中,可以使用调试器提供的输出功能,如打印变量的值、显示调试信息等。 8. 修复问题:根据调试过程中的观察和分析,可以定位和修复程序中的问题,如逻辑错误、内存泄漏等。 9. 重新编译和调试:在修复问题后,可以重新编译程序,并使用调试器再次进行调试,以确认问题是否已解决。 总体来说,使用gcc和make调试程序的原理是通过编译、链接和使用调试器来定位和修复代码中的问题。调试器提供了一系列功能和命令,帮助开发人员探查程序的执行情况,以解决bug和改进代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值