博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UE4 try catch 打包报错
阅读量:5359 次
发布时间:2019-06-15

本文共 4138 字,大约阅读时间需要 13 分钟。

UE4 C++源码 在Visual studio 2015中使用过程发现添加 try catch 之后打包通不过。追溯错误提示是C++的 try catch 代码。网上查找之后发现

https://blog.csdn.net/SC32024826/article/details/78710672 

在项目文件.build.cs  添加一行代码:
 UEBuildConfiguration.bForceEnableExceptions = true;
 
在代码尝试添加。发现UEBuildConfiguration 不识别。 中间 Ctrl + F 查找到跟代码相关语句 。在查找的xml文件中添加 bForceEnableExceptions 同时在唯一查找的cs 文件 仿照添加 bForceEnableExceptions 。结果生成失败。还原该部分修改继续追查
https://answers.unrealengine.com/questions/657485/uebuildconfigurationbforceenableexceptions-in-416.html
在该网站看到 4.16之后似乎改为   UEBuildConfiguration.bEnableExceptions = true;  但是还是不能解决 build.cs文件添加 代码后提示UEBuildConfiguration 不识别问题。刚才的链接下面有一段论坛链接
https://forums.unrealengine.com/development-discussion/c-gameplay-programming/118722-c-4-16-transition-guide/page4
打开发现,提到要在 target.cs添加 “ UEBuildConfiguration.bForceEnableExceptions = true;” 问题依然没有解决。
后面再ue4官网搜索C++相关帖子得到如下链接
https://answers.unrealengine.com/questions/799396/how-to-detect-if-its-editor-build-in-buildcs.html
 
 UEBuildConfiguration.bForceEnableExceptions = true; 更改为   。 更改位置 在 XXXXX.Target.cs 

public class XXXXXX: TargetRules

{
public XXXXX(TargetInfo Target) : base(Target)
{

……

Target.bForceEnableExceptions = true;

}

然后没有报错能生成文件。后续再观察。
 
 
经过试验,在UE4.19.还是不行。在ue4qq群询问过并不使用try catch ,就自己把代码可能出问题的屏蔽掉。但是从以上查找的数据看,ue4至少有段时间是支持try Catch 。 如果有谁找到方法回复我。
 
2018-07-31
不甘心没解决。 于是搜索在UE4官网搜索“UEBuildConfiguration”, 4.18更新日志最后提到 “不推荐使用ModuleRules类中的BuildConfiguration和UEBuildConfiguration别名。 这些已经实现为传递给几个引擎版本的构造函数的ReadOnlyTargetRules实例的别名。”(查找的时候忽略了ReadOnlyTargetRules,不然会更快接近真相)。知道弃用UEBuildConfiguration。直接搜索上面提到的bEnableExceptions
https://docs.unrealengine.com/en-us/Search-Results?search=bEnableExceptions
打开搜索到的链接“https://docs.unrealengine.com/en-us/Programming/UnrealBuildSystem/ModuleFiles”发现
提到bulid.cs 文件里面 代码层次如下:
using UnrealBuildTool;using System.Collections.Generic;public class MyModule : ModuleRules{    public MyModule(ReadOnlyTargetRules Target) : base(Target)    {        // Settings go here    }}

这样的结构可以直接使用 

Target.bEnableExceptions = true;

但是我使用的代码层次是

using UnrealBuildTool;using System.Collections.Generic;public class XXXTarget : TargetRules{    public XXXTarget(TargetInfo Target) : base(Target)    {        Type = TargetType.Game;        ExtraModuleNames.Add("szmUEDesign");    }}

并没有ReadOnlyTargetRules。(搜索到这边其实应该解决问题了,可是自己忽略重点继续花时间搜索)

后面直接在源代码搜索TargetInfo 。 发现TargetInfo 的成员变量都跟异常不相关。但是,在它的成员变量在的文件"UeBulidTarget.cs"能搜索到bEnableExceptions 。发现 bEnableExceptions出现在以下环境

GlobalCompileEnvironment.bEnableExceptions = Rules.bForceEnableExceptions || Rules.bBuildEditor;

此处的Rules定义如下

public ReadOnlyTargetRules Rules;

追述ReadOnlyTargetRules 到TargetRulers.cs

public partial class ReadOnlyTargetRules    {……        ///         /// The writeable TargetRules instance        ///         TargetRules Inner;……public bool bForceEnableExceptions        {            get { return Inner.bForceEnableExceptions; }        }……       }TargetRules定义    public abstract class TargetRules    {  ……///         /// Enable exceptions for all modules.        ///         [RequiresUniqueBuildEnvironment]        public bool bForceEnableExceptions = false;      }

 

到这边就明白调用规则了。 直接在自己的bulid文件增加以下代码,启用异常检测机制。

using UnrealBuildTool;using System.Collections.Generic;public XXXTarget : TargetRules{    public XXXTarget(TargetInfo Target) : base(Target)    {        Type = TargetType.Game;        ExtraModuleNames.Add("szmUEDesign");        this.bForceEnableExceptions = true;    }}

 

 

4.18(不含)之前在 bulid.cs文件添加 UEBuildConfiguration.bForceEnableExceptions = true;或者 UEBuildConfiguration.bEnableExceptions = true;  。 UE4.18之后使用         this.bForceEnableExceptions = true;解决异常

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2019-04-02

问题:代码添加 this.bForceEnableExceptions  = true; UE4.19编辑器环境可以运行,但是打包失败。         
解答:该问题是因为使用ue4官方下载生成好的环境。 当调用 this.bForceEnableExceptions  时,因为和编辑好的环境冲突,所以失败。 解决的办法是下载UE4官方源代码,然后建立sln文件,本地重新生成。 然后项目引用生成后的ue4引擎。这时候打包和运行都正常了。

转载于:https://www.cnblogs.com/PiaoLingJiLu/p/9373452.html

你可能感兴趣的文章
Web服务器的原理
查看>>
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
HAL层三类函数及其作用
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
linux下编译复数类型引发的错误:expected unqualified-id before '(' token
查看>>
codeforces 1041A Heist
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
bzoj1048 [HAOI2007]分割矩阵
查看>>
PKUWC2018 5/6
查看>>