我在Linux上运行了一个泄漏内存的软件。这是一个嵌入式系统,所以我没有很多调试工具,所以我使用的是printf。
如果没有做'popen()'调用'cat / proc / meminfo'并扫描MemFree行,我有没有办法把这些信息放到printf中?
目前我正在做类似的事情:
# ./myprogram &
# for (( c=0; c<99; c++)) do echo --- $c --- && cat /proc/meminfo | grep MemFree: && sleep 30; done;
哪个好,但我想知道是否有更好的方法。
编辑:迄今为止的四个回复并不是我想要的,我不够具体。
看来我的程序不是内存泄漏的原因;无论我是否想要查看是否可以添加一些“c”代码来查看/报告系统中的可用内存,而不是我的代码(进程)使用的内存量。
答案 0 :(得分:2)
可能有用的两个库调用:
getrusage
将允许您获取当前程序(以及可选的子进程)Resident Set Size;
sbrk(0)
将返回程序中断的当前位置,该位置将随着程序堆大小的增加而增加。
答案 1 :(得分:1)
watch
命令很有用,例如尝试。
watch -n 1 ps v `pgrep ./myprogram`
但您当然也可以尝试告诉top
,htop
及其图形变体只是观察您的过程。
另外,您可以通过查询自己的进程ID,查找/ proc / $ PID并从那里读取内存信息来尝试相同的操作,以便printf
可以在运行时报告它们。
答案 2 :(得分:0)
您可以尝试使用mallinfo(尽管它已经过时了......我已成功使用过一次) http://scaryreasoner.wordpress.com/2007/10/17/finding-memory-leaks-with-mallinfo/
此外,njamd(或电围栏,或任何其他基于LD_PRELOAD的malloc调试器可能会有所帮助): http://sourceforge.net/projects/njamd/
另外,mtrace可能会引起关注: http://en.wikipedia.org/wiki/Mtrace
答案 3 :(得分:0)
您确定要查看免费的系统内存吗? 在大多数unix平台上,该值总是趋于零。 原因: - 缓存文件系统块,以防有人再次需要它们 - 只有在某些进程需要内存时才会释放块 - 这些块是受欢迎的,因为后备存储是文件系统, 所以偷这些街区很便宜......不需要翻页。