我设法获得了 Xcode leaks
在我的命令行 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
是 main()
由 gnatmake
生成, _ada_foobar
是实际发生泄漏的 Ada 程序。其他帧来自运行时系统。
最佳答案
好吧,这里的主要问题正是您拥有哪种编译器。您从 ACT 获得的 Gnat 版本带有链接库 addr2line.lib,可用于在运行时生成符号回溯。
您从 FSF 发行版获得的 Gnat 版本没有该库。但是,仍然有 Gnu 的“binutils”附带的 addr2line 程序。您确实可以在 Mac 设置中使用它,对吗?
如果您将十六进制地址输入该程序,它应该报告您想要的符号信息。您可能需要重新格式化您的 leaks
输出一点让 addr2line 接受它。
关于xcode - 如何在 Mac OS X 上获取内存泄漏的行号堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075703/