UE4 try catch 打包報錯


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM