UE4 try catch 打包报错
UE4 C++源码 在Visual studio 2015中使用过程发现添加 try catch 之后打包通不过。追溯错误提示是C++的 try catch 代码。网上查找之后发现
https://blog.csdn.net/SC32024826/article/details/78710672
public class XXXXXX: TargetRules
{
public XXXXX(TargetInfo Target) : base(Target)
{
……
Target.bForceEnableExceptions = true;
}
然后没有报错能生成文件。后续再观察。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 { …… /// <summary> /// The writeable TargetRules instance /// </summary> TargetRules Inner; …… public bool bForceEnableExceptions { get { return Inner.bForceEnableExceptions; } } …… } TargetRules定义 public abstract class TargetRules { …… /// <summary> /// Enable exceptions for all modules. /// </summary> [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引擎。这时候打包和运行都正常了。