本文主要是介绍【UE4源代码观察】尝试调试UBT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
在之前的博客《【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程》中我尝试动手搭建了一个用UBT进行编译的空白的工程。但是对UBT其中的逻辑并不理解。
后来在学习UE4源代码的过程中,又了解了它的一些行为。目前,对我影响较大的是:1.他会有一些逻辑去添加一些宏。2.他会有一些逻辑去给修改ModuleRules(和.build.cs
中内容的角色一样)。这时候我发现一些和预期不太一样的行为,因此就有了调试的需求。
所幸,步骤很简单:
步骤
1.获得命令行参数
UBT的参数最基本上是一个Target。
不过为了省事,也可以直接看想要编译的项目的配置页面中启动UBT的命令行:
.bat
后面的就是参数,这些参数在.bat
中会直接传递给UBT的exe
。
2.调试
然后给UBT的属性面板加上这些参数:
然后设置为启动项目:
然后确保处于debug下:
最后,就可以点“调试”了:
实例
最近在看TargetPlatform模块
时我有一个调试UBT的需求:
我觉得UBT给我的模块增加一些我当前觉得并不需要的模块,例如UEBuildIOS.cs
有一处逻辑:
/// <summary>
/// Modify the rules for a newly created module, where the target is a different host platform.
/// This is not required - but allows for hiding details of a particular platform.
/// </summary>
/// <param name="ModuleName">The name of the module</param>
/// <param name="Rules">The module rules</param>
/// <param name="Target">The target being build</param>
public override void ModifyModuleRulesForOtherPlatform(string ModuleName, ModuleRules Rules, ReadOnlyTargetRules Target)
{if ((Target.Platform == UnrealTargetPlatform.Win32) || (Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Mac)){bool bBuildShaderFormats = Target.bForceBuildShaderFormats;if (!Target.bBuildRequiresCookedData){if (ModuleName == "Engine"){if (Target.bBuildDeveloperTools){Rules.DynamicallyLoadedModuleNames.Add("IOSTargetPlatform");Rules.DynamicallyLoadedModuleNames.Add("TVOSTargetPlatform");}}
IOSTargetPlatform
和TVOSTargetPlatform
都是IOS平台用的,按照我之前的理解,我不应该需要。所以我现在要确认逻辑是否真的跑到了这里,如果是的话探究一下为什么。
在这里加上断点之后,我似乎发现了问题:
从这里看,他似乎是对很多的平台都执行了这个操作,不光包括当前所在的Windows平台,因此增加了IOS平台用的东西是正常的。
这篇关于【UE4源代码观察】尝试调试UBT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!