在 StartupModule() 中添加调用栈输出的方法 方法 1:使用
FPlatformStackWalk::StackWalkAndDump
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include "HAL/PlatformStackWalk.h"
void FGPULightmassModule::StartupModule() { UE_LOG(LogGPULightmass, Log, TEXT("GPULightmass module is loaded")); ANSICHAR StackTrace[65536] = {0}; constexpr int32 NumStackFramesToIgnore = 1; FPlatformStackWalk::StackWalkAndDump(StackTrace, UE_ARRAY_COUNT(StackTrace), NumStackFramesToIgnore, nullptr); FString StackTraceString = ANSI_TO_TCHAR(StackTrace); UE_LOG(LogGPULightmass, Log, TEXT("Call Stack:\n%s"), *StackTraceString); FString PluginShaderDir = FPaths::Combine(IPluginManager::Get().FindPlugin(TEXT("GPULightmass"))->GetBaseDir(), TEXT("Shaders")); AddShaderSourceDirectoryMapping(TEXT("/Plugin/GPULightmass"), PluginShaderDir);
FStaticLightingSystemInterface::Get()->RegisterImplementation(FName(TEXT("GPULightmass")), this); }
|
方法 2:使用
CaptureStackBackTrace
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include "HAL/PlatformStackWalk.h"
void FGPULightmassModule::StartupModule() { UE_LOG(LogGPULightmass, Log, TEXT("GPULightmass module is loaded")); constexpr int32 MaxDepth = 20; uint64 BackTrace[MaxDepth] = {0}; uint32 CapturedDepth = FPlatformStackWalk::CaptureStackBackTrace(BackTrace, MaxDepth); UE_LOG(LogGPULightmass, Log, TEXT("Call Stack (Depth: %d):"), CapturedDepth); for (uint32 i = 0; i < CapturedDepth; ++i) { FProgramCounterSymbolInfo SymbolInfo; FPlatformStackWalk::ProgramCounterToSymbolInfo(BackTrace[i], SymbolInfo); UE_LOG(LogGPULightmass, Log, TEXT(" [%d] %s!%s [%s:%d]"), i, ANSI_TO_TCHAR(SymbolInfo.ModuleName), ANSI_TO_TCHAR(SymbolInfo.FunctionName), ANSI_TO_TCHAR(SymbolInfo.Filename), SymbolInfo.LineNumber); } }
|