2017年11月29日

UFunction::Invoke故障排除

作者 Nick Darnell

在今年十月份,Nick Penwarden着重介绍了我们在开发《Fortnite Battle Royale》时对虚幻引擎4的若干改进

他在文章中没有提到的一点是在开发《Battle Royale》时添加的一点宝贵的故障排除技巧。该团队大量使用基于蓝图的小部件,所以我们经常会在C++中看到类似以下示例的调用堆栈,这种调用并不会捕获蓝图中实际发出本地调用的来源。

 
[你的C++代码]
UFunction::Invoke(...)  
UObject::ProcessEvent(...)  
AActor::ProcessEvent(...)  
[堆栈的其余内容]

我在《Fortnite》中要处理很多不太熟悉的代码,所以经常看不出来调用来自于哪里。为了帮助搜索,我添加了一条可以在Visual Studio的Immediate Window中运行的C命令,用于输出当前蓝图/编程调用堆栈。

现在,你就可以在运行游戏的编辑器版本时使用这条命令,

{,,UE4Editor-Core}::PrintScriptCallstack()

以及
::PrintScriptCallstack() 

使用4.18和更高版本时,在单一版本中可以使用上述命令。
770_DebuggingUFunction_Invoke.jpg

希望大家能像我一样,在获取UE4项目调用堆栈实时快照时能用上这条命令。