相关疑难解决方法(0)

80
推荐指数
7
解决办法
3万
查看次数

调试Mac上的分段错误?

我在使用Mac上运行导致分段错误的程序时出现问题.我正在为IOCCC整理一个条目,这意味着我的计划有以下几点:

  • 它是一个名为prog.c的单个文件中的一个非常小的C程序
  • 我不会在这里发布,因为它不会帮助(并且可能会使比赛条目无效)
  • 它使用"cc -o prog prog.c -Wall"在gcc下干净地编译
  • 尽管(或者,更确切地说,因为)它包含了许多C的奇怪用途,但它的构造非常谨慎.我不知道它的任何一部分是粗心的记忆(这并不是说不可能存在错误,只是如果它们不可能是明显的错误)
  • 我主要是Windows用户,但几年前我成功编译并在几台Windows机器,几台Mac机和一个Linux机器上运行它,没有任何问题.从那时起代码没有改变,但我无法访问这些机器.

我没有重新测试的Linux机器,但作为最后的测试,我尝试在MacBook Pro上编译和运行它 - Mac OSX 10.6.7,Xcode 4.2(即GCC 4.2.1).同样,它从命令行干净地编译.似乎在Mac上键入"prog"不会使编译的程序运行,但"open prog"似乎.大约10秒钟没有任何事情发生(我的程序成功运行大约需要一分钟),但它只是说"分段错误",然后结束.

以下是我尝试过的,使用从这个有用的StackOverflow线程收集的答案来追踪问题:

  • 在Windows上,用_ASSERTE(_CrtCheckMemory())填充代码; - 代码运行速度慢,但运行成功.没有一个断言被触发(当我故意添加可怕的代码以确保_CrtCheckMemory和_ASSERTE正在按预期工作时,它们会这样做,但不是这样)
  • 在Mac上,我尝试了Mudflap.我尝试使用"g ++ -fmudflap -fstack-protector-all -lmudflap -Wall -o prog prog.c"的变体构建代码,这只会产生错误"cc1plus:error:mf-runtime.h:没有这样的文件或目录".谷歌搜索这个问题没有提出任何结论,但似乎有一种感觉,Mudflap只是不适用于Macs.
  • 同样在Mac上,我尝试了Valgrind.我安装并构建了它,并使用"cc -o prog -g -O0 prog.c"构建了我的代码.使用命令"valgrind --leak-check = yes prog"运行Valgrind会产生错误"valgrind:prog:command not found".记住你让你在Mac上"打开"一个exectable我尝试了"valgrind --leak-check = yes open prog",这似乎运行程序,并运行Valgrind,它没有发现任何问题.但是,即使我使用专门设计用于触发错误消息的程序运行它,Valgrind也未能为我找到问题.我这也打破了Macs?
  • 我尝试在Xcode中运行程序,在Product-> Edit Scheme ...菜单中勾选所有Diagnostics复选框,并在malloc_error_break中设置符号断点.断点没有被击中,代码在包含一个东西("dlopen")的callstack停止,并且在输出窗口中显示的唯一注意事项如下:

警告:无法恢复以前选择的帧.现在没有可用于编程的内存:调用malloc不安全

我没有想法.我试图让Cygwin设置(虽然花了好几个小时),看看是否有任何工具可以这样工作,但如果失败那么我就不知所措了.当然必须有一些能够跟踪Mac上分段错误原因的工具吗?

c debugging macos gcc segmentation-fault

4
推荐指数
3
解决办法
1万
查看次数

标签 统计

c ×2

gcc ×2

compiler-errors ×1

debugging ×1

macos ×1

segmentation-fault ×1