简介: 前面已经捋了 62% ,结果草率了,遇到了一个很长的函数调用 AppInit(),它里面有不少的操作,很更多没见过的类,我觉得应该展开看一下
PreInitPreStartupScreen 内的 AppInit() 函数
本文就主要来捋一下 这个 AppInit 函数把,它本身也是定义在 LaunchEngineLoop.cpp 内的,应该很好定位到
第一步就是本地化初始
向全局错误缓冲区写入致命错误信息
- FCString C风格字符串工具类
- FCString::Strcpy 字符串copy
- LINE_TERMINATOR_ANSI 字符串结果字符 宏
FPlatformMisc 的 PlatformPreInit
FPlatformApplicationMisc 的 PreInit
用 GSystemStartTime 记录系统启动时间
设置当前工作目录到执行程序的根目录
根据 cmdline 内容初始化 IFileManager
FPageAllocator 管理虚拟内存页,锁定内存页保护模式
根据 cmdLine 的参数 控制 FMemory 的EnablePurgatoryTests 和 EnablePoisonTests 开关
根据 cmdLine 参数设置 是不是 BUILDMACHINE
创建项目 log 目录
创建最小的 dump 文件名称
设置 输出设备
FConfigCacheIni 初始化配置缓存系统
如果是 GIsEditor 模式,则为 FName 预分配内存
- FName UE中高效管理唯一字符串标识的系统
ConfigUtilities 配置管理工具。通过热修复更新控制台变量
加载 "IoStoreOnDemand" 模块
FTraceAuxiliary的初始化预设
调用 IniSystemReady 阶段的延迟注册函数
在最早的可能阶段 加载 Project 的关联模块和 开启的 Plugin 的模块
调用 EarliestPossiblePluginsLoaded 阶段的延迟注册函数
FPlatformStackWalk 初始化调用栈捕获工具
检查打印时间样式
检查项目或插件是否完整
FLogSuppressionInterface 根据 cmdline 参数初始化
根据 cmdline 参数 确定是否 显示 LOG
加载 PostConfigInit 阶段之后的 Project 相关模块和 Plugin 相关模块
FEmbeddedCommunication 嵌入式内部调用,目前不知道是干嘛的
根据 CmdLine 参数,设置远程调试,包含致命错误和非致命错误两种
根据 CmdLine 参数,设置是否将 warning log 作为 error,是否将 Error log 作为 warning 等其他log 相关设置
输出所有初始化的 log
FMaintenance 如果正在构建 log ,则删除旧的log
FAPP 初始化 session
33.check()宏 验证各种数据类型的大小
GColorList 创建通用 color 映射
FAutomationTestFramework 根据配置设置 强制冒烟测试
FCoreDelegates 广播内核系统初始化,初始化其他 system
FPIEPreviewDeviceModule 设置预览设备
总结
这个 AppInit 函数基本就是设置 log,加载项目模块和插件,并通过广播的形式通知其他系统初始化
罗列一下这里遇到的新东西
- FName UE中高效管理唯一字符串标识的系统
- FConfigCacheIni 初始化配置缓存系统
- ConfigUtilities 配置管理工具
- FPlatformStackWalk 初始化调用栈捕获工具
- GColorList 全局通用颜色列表
- FAutomationTestFramework 自动化测试框架
- FPIEPreviewDeviceModule 预览设备模块