10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[UE4] いつもどんな時もフルクラッシュダンプ

Posted at

クラッシュ原因の調査に有用なのがフルクラッシュダンプ。
ミニダンプでは変数の中身などが見えず、解決に有用な情報を得られないことも多い。

なので私は、

エディタを起動するときも

/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 で再現してみて」というやりとりが減ることを期待する。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?