clang在Xcode中以发布模式编译.cpp时崩溃,但在调试模式下正常 我有一个项目,我有一个.h,.cp,和一个桥接头,所以基本上尝试从SWIFT调用C++代码。当我在调试模式下构建和运行时,一切看起来都很好

clang在Xcode中以发布模式编译.cpp时崩溃,但在调试模式下正常 我有一个项目,我有一个.h,.cp,和一个桥接头,所以基本上尝试从SWIFT调用C++代码。当我在调试模式下构建和运行时,一切看起来都很好,c++,swift,crash,clang,C++,Swift,Crash,Clang,如果我切换到release模式,它将无法构建,并且崩溃发生在从clang编译的过程中。以下是信息: clang: error: unable to execute command: Segmentation fault: 11 clang: error: clang frontend command failed due to signal (use -v to see invocation) Apple LLVM version 10.0.0 (clang-1000.11.45.5) Targ

如果我切换到release模式,它将无法构建,并且崩溃发生在从clang编译的过程中。以下是信息:

clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: aarch64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
clang: note: diagnostic msg: PLEASE submit a bug report to http://developer.apple.com/bugreporter/ and include the crash backtrace, preprocessed source, and associated run script.
clang: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/folders/r5/bs8mgc751_bbl3gcths89jc00000gp/T/CBaseMath-8e4bd0.cpp
clang: note: diagnostic msg: /var/folders/r5/bs8mgc751_bbl3gcths89jc00000gp/T/CBaseMath-8e4bd0.sh
clang: note: diagnostic msg: Crash backtrace is located in
clang: note: diagnostic msg: /Users/kelvinchan/Library/Logs/DiagnosticReports/clang_<YYYY-MM-DD-HHMMSS>_<hostname>.crash
clang: note: diagnostic msg: (choose the .crash file that corresponds to your crash)
clang: note: diagnostic msg: 
clang:错误:无法执行命令:分段错误:11
clang:错误:由于信号原因,clang前端命令失败(使用-v查看调用)
苹果LLVM版本10.0.0(clang-1000.11.45.5)
目标:AARC64-apple-darwin17.7.0
线程模型:posix
InstalledDir:/Applications/Xcode.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin
叮当声:注意:诊断信息:请向http://developer.apple.com/bugreporter/ 并包括崩溃回溯、预处理的源代码和相关的运行脚本。
叮当声:注意:诊断信息:
********************
请将以下文件附加到错误报告:
预处理源和关联的运行脚本位于:
叮当声:注意:诊断消息:/var/folders/r5/bs8mgc751_bbl3gcths89jc0000gp/T/CBaseMath-8e4bd0.cpp
叮当声:注意:诊断消息:/var/folders/r5/bs8mgc751_bbl3gcths89jc0000gp/T/CBaseMath-8e4bd0.sh
叮当声:注意:诊断信息:崩溃回溯位于
叮当声:注意:诊断消息:/Users/kelvinchan/Library/Logs/DiagnosticReports/clang\uuuuu.crash
叮当声:注意:诊断消息:(选择与崩溃对应的.crash文件)
叮当声:注意:诊断信息:

在按照指示为苹果公司提交错误报告之前,我是否知道我应该看些什么?我试图查看.crash文件,但我的技术水平不足以理解它。它不引用我所拥有的任何C++代码。

你在编译器中崩溃了,这很烦人。记录错误的最好方法是尽可能减少错误

最好的方法是使用一个名为的程序。这是一个需要文件和脚本的程序。该文件是您的起始位置。脚本需要证明您的bug仍然存在

在本例中,您的脚本可能存在于2个compile命令和检查返回代码之间。该文件就是您的.CPP文件

有了所有这些,程序将丢弃代码。。。并尽可能减少文件。我已经看到10万行减少到5行

一个技巧:预处理的文件虽然是自包含的,但是更大,这使得它更容易减少

最后,你需要很多时间。你启动它,它一直运行,直到它被减少


如果在不到五分钟的时间内运行,您的脚本就会出错,您通常会得到一个空的。CPP预期时间在小时范围内。

这不是程序中的错误,而是编译器中的错误。所以你真的没什么需要找的。因此,尝试创建尽可能最小的程序来复制崩溃(即,您需要创建一个新的程序)。然后按照编译器告诉的关于如何向开发人员报告的说明进行操作。@Someprogrammerdude,好的,听起来不错。我将删除所有swift的内容,只编译单个cpp并系统地缩小代码部分。MCVE可能已经揭示了是哪段代码引起了这个叮当声。如果没有,您也可以尝试使用GCC编译这个MCVE(可能需要先安装),使用完全相同的编译器设置(只要GCC和clang兼容,但在相当大的范围内就是这样)。如果它不包含相同的bug,您可能会在GCC的编译日志中得到一些提示,这些提示可能会帮助您找到解决问题的方法,以便您可以继续开发,直到clang修复为止。或者,作为另一种解决方法,您可以继续使用GCC……值得一提的是,您可以尝试在上复制它。这还可以让你快速发现这个bug是否在最新版本中仍然存在。我没有记录一个bug。我想出了一个解决办法,包括注释一些#pragma。。。交错。。。回购协议的作者接受了这一变化。.cpp的长度仍然可以管理,我可以手动提取攻击子集。无论如何,谢谢你的建议。