我已经成功获得了 Xcodeleaks
报告我的命令行 GCC Ada 程序中的泄漏的工具(通过添加delay 11.0;
最后让leaks
进行检查)然后
$ export MallocStackLogging=1
$ (./foobar &) && leaks foobar
这导致(摘录)
Process 52027: 18 nodes malloced for 2053 KB
Process 52027: 2 leaks for 32 total leaked bytes.
Leak: 0x1002000c0 size=16 zone: DefaultMallocZone_0x100175000 string '*'
Call stack: [thread 0x7fff70bbcca0]: | start | main | _ada_foobar | __gnat_malloc | malloc | malloc_zone_malloc
Leak: 0x1002000d0 size=16 zone: DefaultMallocZone_0x100175000 string 'T'
Call stack: [thread 0x7fff70bbcca0]: | start | main | _ada_foobar | __gnat_malloc | malloc | malloc_zone_malloc
这比没有好得多,但随着行数的增加会得到很大的改善。
有没有我应该使用的构建选项?如果 Ada 编译器(FSF GCC 4.6.0,不是来自 Apple)与 Xcode 集成,效果会更好吗?
这是基于 10.6.7、Xcode 3.2.6 的 x86_64 构建。使用 -g 没有什么区别。
在调用堆栈中,main
is the main()
产生于gnatmake
, _ada_foobar
是实际发生泄漏的 Ada 程序。其他帧来自运行时系统。
好吧,这里的主要问题正是您拥有哪个编译器。您从 ACT 获得的 Gnat 版本带有一个链接库 addr2line.lib,可用于在运行时生成符号回溯。
您从 FSF 发行版获得的 Gnat 版本没有该库。不过,仍然有 Gnu 的“binutils”附带的 addr2line 程序。您的 Mac 设置中确实可以使用该功能,对吗?
如果您将十六进制地址输入该程序,它应该报告您想要的符号信息。您可能需要重新格式化您的leaks
输出一个位让 addr2line 接受它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)