【发布时间】:2011-06-13 00:28:42
【问题描述】:
我在 XCode 4 的 C++ 项目中调试分段错误时遇到了很多麻烦。
当我使用“LLVM 2.0”编译器选项构建并使用 -O3 优化时,我只会遇到段错误。据我了解,使用优化时调试选项有限,但这是我在打开 gdb 的 Xcode 中运行后得到的调试输出:
warning: Got an error handling event: "Dwarf Error: Cannot find DIE at 0x3be2 referenced from DIE at 0x11d [in module /Users/imran/Library/Developer/Xcode/DerivedData/cgo-hczcifktgscxjigfphieegbpxxsq/Build/Products/Debug/cgo]".
No memory available to program now: unsafe to call malloc
在那之后我无法让 gdb 给我任何有用的信息(比如跟踪),但我不确定我是否真的知道如何正确使用它。当我尝试使用“LLDB”调试器时,Xcode 会崩溃(自从我开始使用它以来,这一直是一个常见的主题)。
我的程序是确定性的,但是当我尝试用打印语句隔离问题时,行为会改变。例如,如果我在某一时刻添加cout << "hello";,那么段错误就会消失。其他打印语句会导致我的程序在其主循环的不同迭代中出现段错误。当然,当我输入足够多的打印语句来确定有问题的代码时,段错误似乎发生在一行之后但在下一行之前(即无处)。
我正在使用指针和动态内存分配,这可能是问题的原因,但由于我无法缩小导致错误的代码块,我不知道在此处显示什么代码。
我尝试使用 Instruments 中的“泄漏”工具进行分析,但没有发现任何泄漏。
有什么建议吗?我对调试非常缺乏经验,所以任何事情都会有所帮助,真的。
编辑:已解决。给定某些输入,我的程序会尝试读取数组末尾的内容。
【问题讨论】:
标签: c++ macos xcode4 segmentation-fault