Inital launch localization crash

Hello,

A game I am working on has been having an issue with the version published to steam where a crash occurs only on the very initial launch after installing that seems to be related to localization engine code. Subsequent launches and the crash is not hit again, only the initial launch.

We are having a hard time reproducing this issue, leading me to believe some sort of temp file is being created that avoids the crash on subsequent launches. However this is just a guess and has so far not helped to reproduce it.

Specifically an access violation exception is being hit in ICUCulture.cpp in the function ExtractNumberFormattingRulesFromICUDecimalFormatter. Full callstack from the log below along with a couple of preceding lines for context.

We have yet to properly implement localization data for the game and I’m wondering if that is the cause, but its a wild guess without a way to reliably reproduce the crash. Since its only on very initial launch it will be a bad thing to have for launch so need help with this asap!
Many thanks for any help someone can provide.

LogInit: Using OS detected language (en-US).
LogInit: Using OS detected locale (en-US).
LogPaths: Warning: No paths for game localization data were specifed in the game configuration.
LogInit: Warning: No paths for engine localization data were specifed in the engine configuration.
LogTextLocalizationManager: No localization for 'en-US' exists, so 'en' will be used for the language.
LogTextLocalizationManager: No localization for 'en-US' exists, so 'en' will be used for the locale.
LogWindows: Warning: CreateProc failed: The system cannot find the file specified. (0x00000002)
LogWindows: Warning: URL: ../../../Engine/Binaries/Win64/CrashReportClient.exe "/AppData/Local/GameName/Saved/Crashes/UE4CC-Windows-18E4F7CF4374E5CABE511687E820CC32_0000" -AppName=UE4-GameName -CrashGUID=UE4CC-Windows-18E4F7CF4374E5CABE511687E820CC32_0000 -DebugSymbols=..\..\..\Engine\Intermediate\Symbols
LogWindows: Could not start CrashReportClient.exe
LogMemory: Platform Memory Stats for WindowsNoEditor
LogMemory: Process Physical Memory: 128.34 MB used, 128.37 MB peak
LogMemory: Process Virtual Memory: 120.16 MB used, 120.37 MB peak
LogMemory: Physical Memory: 6490.78 MB used,  9848.39 MB free, 16339.16 MB total
LogMemory: Virtual Memory: 512.95 MB used,  9848.39 MB free, 134217728.00 MB total
LogWindows: Error: === Critical error: ===
LogWindows: Error: 
LogWindows: Error: Fatal error!
LogWindows: Error: 
LogWindows: Error: Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x00000000
LogWindows: Error: 
LogWindows: Error: [Callstack] 0x000000005271FD31 GameName-Win64-Shipping.exe!`anonymous namespace'::ExtractNumberFormattingRulesFromICUDecimalFormatter() [c:\projects\unrealengine\engine\source\runtime\core\private\internationalization\icuculture.cpp:634]
LogWindows: Error: [Callstack] 0x00000000527205BE GameName-Win64-Shipping.exe!FCulture::FICUCultureImplementation::GetDecimalNumberFormattingRules() [c:\projects\unrealengine\engine\source\runtime\core\private\internationalization\icuculture.cpp:708]
LogWindows: Error: [Callstack] 0x000000005275F9E9 GameName-Win64-Shipping.exe!FText::AsNumberTemplate() [c:\projects\unrealengine\engine\source\runtime\core\private\internationalization\text.cpp:534]
LogWindows: Error: [Callstack] 0x000000005273589E GameName-Win64-Shipping.exe!FText::AsNumber() [c:\projects\unrealengine\engine\source\runtime\core\private\internationalization\text.cpp:518]
LogWindows: Error: [Callstack] 0x00000000529CE1AF GameName-Win64-Shipping.exe!EKeys::Initialize() [c:\projects\unrealengine\engine\source\runtime\inputcore\private\inputcoretypes.cpp:584]
LogWindows: Error: [Callstack] 0x0000000052A9A6EB GameName-Win64-Shipping.exe!FSlateApplication::Create() [c:\projects\unrealengine\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:884]
LogWindows: Error: [Callstack] 0x0000000052A9A654 GameName-Win64-Shipping.exe!FSlateApplication::Create() [c:\projects\unrealengine\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:877]
LogWindows: Error: [Callstack] 0x0000000052527471 GameName-Win64-Shipping.exe!FEngineLoop::PreInit() [c:\projects\unrealengine\engine\source\runtime\launch\private\launchengineloop.cpp:1717]
LogWindows: Error: [Callstack] 0x0000000052523439 GameName-Win64-Shipping.exe!GuardedMain() [c:\projects\unrealengine\engine\source\runtime\launch\private\launch.cpp:127]
LogWindows: Error: [Callstack] 0x000000005252DFBA GameName-Win64-Shipping.exe!GuardedMainWrapper() [c:\projects\unrealengine\engine\source\runtime\launch\private\windows\launchwindows.cpp:134]

LogWindows: Error: [Callstack] 0x0000000054711F07 GameName-Win64-Shipping.exe!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:253]
LogWindows: Error: [Callstack] 0x00000000E0AF1FE4 KERNEL32.DLL!UnknownFunction []
LogWindows: Error: [Callstack] 0x00000000E0C2EFC1 ntdll.dll!UnknownFunction []
LogWindows: Error: [Callstack] 0x00000000E0C2EFC1 ntdll.dll!UnknownFunction []
LogWindows: Error: 
LogExit: Executing StaticShutdownAfterError
LogWindows: FPlatformMisc::RequestExit(1)

How are you packaging your game, and are you trying to do anything fancy like part-install the game to begin play, then installing the rest later (like consoles would)?

The error about missing engine data makes me think that either config or content data is missing.

Afaik we are using a standard approach for packaging with unreal automation tool, and not doing any runtime package loads atm. Here is the command line we are using to package game with:

RunUAT" BuildCookRun -project=“%WORKSPACE%/GameName/GameName.uproject” -noP4 -platform=%GameName_CLIENT_PLATFORM% -clientconfig=%GameName_CLIENT_CONFIG% -build -cook -stage -pak

If there is missing data, it seems to be somehow creating that data just prior to the crash since the game never crashes again on startup after initial just following first install of the game on steam.

The root of the issue seems to be related to using FText::AsNumber in a static function in EKeys::Initialize() when instantiating the touch key inputs.

Hmm, okay. I’m not aware of any issues related to this, or anything that would fix it after the first run.

There are a number of checks in the code that would have likely caught this crash earlier and given a better idea about why it’s failing. If you don’t have a reliable repro, it might be worth enabling asserts in your shipping build to try and trap the issue sooner.

We have seen the exact same crash, with UE 4.18, on another platform. It happens also with a fresh install. Do not crash after 2nd run or if we update the game.

Same here. I had a project which would always crash the first time after being packaged, then rarely after that. The project currently crashes less often, but still usually first time after packaged.

I solved an issue similar to this and hope this message helps someone in the future. I had crashes only in packaged builds (never editor) with the following log error:

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address ...

and

Warning: CreateProc failed: The system cannot find the file specified. 

Experienced devs told me 99% of the time it’s a null pointer error, meaning you are referencing something in your c++ or blueprints which can’t be referenced (usually because it doesn’t exist, for example it hasn’t yet been instantiated). This was true in my case.

The way to solve this issue:

  1. Look in your log folder. ([yourprojectname]>Saved>Crashes). Look for the FATAL ERROR near the end and look underneath that for the callstack hint which will steer you where your problem is. In my case, it looked like this:

    [2018.07.30-19.19.53:720][ 0]LogWindows: Error: Fatal error!
    [2018.07.30-19.19.53:720][ 0]LogWindows: Error:
    [2018.07.30-19.19.53:720][ 0]LogWindows: Error: Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0xfad70000
    [2018.07.30-19.19.53:720][ 0]LogWindows: Error:
    [2018.07.30-19.19.53:720][ 0]LogWindows: Error: [Callstack] 0x00007ff716532680
    AAADragonFresh.exe!AlgoImpl::IntroSortInternal<TBitArray,FIdentityFunctor,TDereferenceWrapper<TBitArray,TGreater<TBitArray > > >() []
    [2018.07.30-19.19.53:720][ 0]LogWindows: Error: [Callstack] 0x00007ff7165ca3b9 AAADragonFresh.exe!FSkeletalMeshLODRenderData::InitResources() []
    Notice the last message in mine. It contains the words “skeletalMesh”, “sort”, “TBitArray”. In my case, the null pointer was a reference to a skeletal mesh inside of a switch.

  2. Go into a blueprint you think the log could be referring to and disconnect the tick, begin play, and constructor wires, effectively deactivating the blueprint, and then package and run. If it stops crashing, you’ve found the blueprint with your toxic reference. You’re zeroing in!

  3. Reconnect your wires and disconnect only the part you think is responsible until the packaged build stops crashing. Find your bad reference, and then figure out why it’s a bad reference. Have you instantiated it yet? (You can put in printstrings, or you can put in breakpoints and step through your blueprints to find out). In my case, it was something stranger which really threw me off: I had imported the mesh from Blender with the skeleton turned to invisible. This was enough to throw off ue4, but only when ue4 was trying to load it (hence why only the crashes in packaged builds).

The first time debugging something like this is hell, but have faith that you can and will get through it, and once you do, you’ll have tremendous confidence moving forward!