优化 - 步进可能表现得很奇怪:iOS / Unity

时间:2017-07-13 11:08:27

标签: ios swift unity3d optimization

我正在尝试将Unity整合到iOS应用程序中。我已经按照本教程http://www.agnosticdev.com/blog-entry/swift/integrating-unity-and-vuforia-ios-swift-project

进行了操作

现在,在我启动应用程序时进行集成后,它会崩溃并在控制台上显示此错误:project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

崩溃: Crash log

我试过谷歌搜索这个链接:

  1. APPNAME was compiled with optimization - stepping may behave oddly; variables may not be available
  2. 'Project Name' was compiled with optimization - stepping may behave oddly; variables may not be available
  3. Xcode target compiled with optimization
  4. Xcode: Cannot set optimization level for debug
  5. 并没有改变。

    我已经更改了项目和pod的优化级别。 我还将此行添加到pod文件:@EnableBinding(Source.class) @EnableConfigurationProperties(TimeSourceOptionsMetadata.class) public class TimeSource { private static final Logger logger = LoggerFactory.getLogger(TimeSource.class); @Value("${app.info.instance_index}") private String instanceIndex; @Autowired private TimeSourceOptionsMetadata timeSourceOptionsMetadata; @Autowired @Qualifier(Source.OUTPUT) private MessageChannel outputMessageChannel; /** with using the injected MessageHeaders and wrapping with a Hystrix CircuitBreaker */ @Scheduled(fixedDelay = 2500, initialDelay = 500) @HystrixCommand(fallbackMethod = "fallbackTimerMessageSource") public void timerMessageSource() { HelloDTO helloDTO = new HelloDTO(); helloDTO.name = new SimpleDateFormat(this.timeSourceOptionsMetadata.getFormat()).format(new Date()); logger.info("[{}]Produced: '{}'", instanceIndex, helloDTO); Message<HelloDTO> theMessage = MessageBuilder.withPayload(helloDTO).setHeader(MessageHeaders.CONTENT_TYPE, "application/json") .build(); outputMessageChannel.send(theMessage, 1000l); } public void fallbackTimerMessageSource(Throwable t) { logger.error("Hystrix fallbackTimerMessageSource handle exception. The original exception was {}", t.getMessage()); Throwable cause = t.getCause(); logger.error("Exception cause was: {} {}", (cause == null ? "null" : cause.getClass().getName()), (cause == null ? "null" : cause.getMessage())); } } (在目标'projectname'之前)

    此外,我已统一取消选中剥离引擎代码

    我该怎么做才能克服这个错误? 任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:2)

我有同样的问题,我解决了它添加到Apple LLVM - 自定义编译器FLAG:

其他C标志:-DRUNTIME_IL2CPP = 1

答案 1 :(得分:1)

您正在调试的代码是IL2CPP代码,该代码可能位于预先构建了优化的库中(可能位于libiPhone-lib.a中)。您的构建设置仅影响您现在在xcode项目中编译的代码,因此它们不会影响预构建的lib。要消除警告,您需要重建该库,并且您需要使用Unity源代码来执行此操作。

更重要的是,它不是崩溃的原因。它只是告诉你,找到崩溃的根源会变得更加困难。

看起来它正在调用一个名为LoadMetadataFile的函数,并在访问返回时崩溃。您可以在该函数调用上设置断点,并查看进出该函数的内容以查找下一个调试步骤(bl指示突出显示的崩溃线上方5行)。

以下是一些可能对您有帮助的文件: 苹果调用会议文档:  https://developer.apple.com/library/content/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html

Arm指令参考(对崩溃指令开放):http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802a/LDRSW_imm.html