我在使用Mac上运行导致分段错误的程序时出现问题。我正在为IOCCC整理一个条目,这意味着我的程序有以下几点:
我没有重新测试的Linux机器,但作为最后的测试,我尝试在MacBook Pro上编译和运行它 - Mac OSX 10.6.7,Xcode 4.2(即GCC 4.2.1)。同样,它从命令行干净地编译。似乎在Mac上键入“prog”不会使编译的程序运行,但“open prog”似乎。大约10秒钟没有任何事情发生(我的程序成功运行大约需要一分钟),但它只是说“分段错误”,并结束。
以下是我尝试使用this useful StackOverflow thread收集的答案来追踪问题:
警告:无法恢复以前选择的框架。 现在没有可用于编程的内存:调用malloc不安全
我没有想法。我试图让Cygwin设置(虽然需要花费数小时),看看是否有任何工具可以正常工作,但如果失败那么我就会感到茫然。当然必须有一些能够跟踪Mac上分段错误原因的工具吗?
答案 0 :(得分:7)
您是否使用-g
编译并在gdb
内运行?应用程序崩溃后,您可以获得bt
的回溯,该回溯应显示崩溃发生的位置
答案 1 :(得分:1)
更现代的lldb
风味
$ lldb --file /path/to/program
...
(lldb) r
Process 89510 launched
...
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x726f00)
* frame #0: 0x00007fff73856e52 libsystem_platform.dylib`_platform_strlen + 18
...
答案 2 :(得分:0)
在许多情况下,macOS 将最近的程序崩溃日志存储在 ~/Library/Logs/DiagnosticReports/
文件夹下。
通常我会在 macOS 上进行故障排除时尝试以下步骤:
~/Library/Logs/DiagnosticReports/
下的现有崩溃日志{your_program}_{crashing_date}_{id}_{your_host}.crash
Crashed
以找到导致崩溃的线程。它会显示崩溃期间的堆栈跟踪,并且在许多情况下,还会记录导致崩溃的确切源代码行。一些链接:
[1] https://mac-optimization.bestreviews.net/analyze-mac-crash-reports/