xcode - 如何在 Mac OS X 上获取内存泄漏的行号堆栈跟踪?

标签 xcode memory-leaks ada

我设法获得了 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 没有区别。

在调用堆栈中,mainmain()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/

相关文章:

iphone - 在 iOS 上存储身份验证 token

iphone - 通过 AppleScript 构建并运行 xcode 项目

c++ - 渲染网格时 C++ 中的内存泄漏

c++ - 您可以将 Ada 泛型函数导出到 C++ 吗?

ada - 在Ada中使用 `limited with`来避免循环依赖

ios - 使用 NSCrossWebsiteTrackingUsageDescription 请求用户禁用 WKWebView 的 ITP

xcode - 如何检测 UITextField 中的阿拉伯字符?

c++ - 程序终止后动态分配的内存

iOS:KVO 内存泄漏?

c++ - 从 C++ 处理程序捕获时如何获取 Ada 异常消息?