クラッシュ原因の調査に有用なのがフルクラッシュダンプ。
ミニダンプでは変数の中身などが見えず、解決に有用な情報を得られないことも多い。
なので私は、
エディタを起動するときも
/path/to/UE4Editor.exe /path/to/project/MyGame.uproject -fullcrashdump
ビルドするときも
/path/to/engine/Build/BatchFiles/Build.bat ... -fullcrashdump
パッケージするときも
/path/to/engine/Build/BatchFiles/RunUAT.bat ... -fullcrashdump
クックやコマンドレットを起動するときも
/path/to/engine/Binaries/Win64/UE4Editor-Cmd.exe ... -fullcrashdump
常に -fullcrashdump
をつけて作業していた。
それでも BuildSteps
を利用した外部スクリプトが呼び出しているコマンドレットのクラッシュダンプは自動で取る手段がなかったので、デフォルトの出力をフルクラッシュダンプにしてみた。
Engine/Source/Runtime/CrashReportCore/Private/CrashDescription.cpp
FPrimaryCrashProperties::FPrimaryCrashProperties()
... // Initialize list
{
#if UE_BUILD_SHIPPING
CrashDumpMode = ECrashDumpMode::Default;
#else
CrashDumpMode = ECrashDumpMode::FullDump;
#endif
}
FCrashWERContext::FCrashWERContext( const FString& WERXMLFilepath )
: FPrimaryCrashProperties()
{
...
#if UE_BUILD_SHIPPING
CrashDumpMode = CommandLine.AsString().Contains( TEXT( "-fullcrashdump" ) ) ? ECrashDumpMode::FullDump : ECrashDumpMode::Default;
#else
CrashDumpMode = CommandLine.AsString().Contains( TEXT( "-minicrashdump" ) ) ? ECrashDumpMode::Default: CrashDumpMode;
#endif
...
}
Engine/Runtime/Core/Private/GenericPlatform/GenericPlatformCrashContext.cpp
void FGenericCrashContext::Initialize()
{
...
#if UE_BUILD_SHIPPING
NCached::Session.CrashDumpMode = (int32)ECrashDumpMode::Default;
#else
NCached::Session.CrashDumpMode = (int32)ECrashDumpMode::FullDump;
#endif
if (FPlatformMisc::SupportsFullCrashDumps() && FCommandLine::IsInitialized())
{
const TCHAR* CmdLine = FCommandLine::Get();
if (FParse::Param(CmdLine, TEXT("fullcrashdumpalways")))
{
NCached::Session.CrashDumpMode = (int32)ECrashDumpMode::FullDumpAlways;
}
else if (FParse::Param(CmdLine, TEXT("fullcrashdump")))
{
NCached::Session.CrashDumpMode = (int32)ECrashDumpMode::FullDump;
}
else if (FParse::Param(CmdLine, TEXT("minicrashdump")))
{
NCached::Session.CrashDumpMode = (int32)ECrashDumpMode::Default;
}
}
...
}
これでテストビルド以外ではデフォルトでフルダンプが出ているので、バグ報告に対し「-fullcrashdump
で再現してみて」というやりとりが減ることを期待する。