UE4 try catch 打包報錯

UE4 C++源碼 在Visual studio 2015中使用過程發現添加 try catch 以後打包通不過。追溯錯誤提示是C++的 try catch 代碼。網上查找以後發現
https://blog.csdn.net/SC32024826/article/details/78710672 html

在項目文件.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)
{編輯器

……ide

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
    }
}

這樣的結構能夠直接使用 ui

Target.bEnableExceptions = true;

可是我使用的代碼層次是this

using UnrealBuildTool;
using System.Collections.Generic;

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

並無ReadOnlyTargetRules。(搜索到這邊其實應該解決問題了,但是本身忽略重點繼續花時間搜索)spa

後面直接在源代碼搜索TargetInfo 。 發現TargetInfo 的成員變量都跟異常不相關。可是,在它的成員變量在的文件"UeBulidTarget.cs"能搜索到bEnableExceptions 。發現 bEnableExceptions出如今如下環境.net

    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引擎。這時候打包和運行都正常了。

相關文章
相關標籤/搜索