Project

General

Profile

Actions

Emulator Issues #13516

open

Unhandled exception from formatted timestamp on savestate file scanning

Added by Janitor_Raus 2 months ago. Updated 2 months ago.

Status:
New
Priority:
Normal
Assignee:
-
% Done:

0%

Operating system:
N/A
Issue type:
Bug
Milestone:
Regression:
No
Relates to usability:
No
Relates to performance:
No
Easy:
No
Relates to maintainability:
No
Regression start:
Fixed in:

Description

What's the problem? Describe what went wrong.

As the title claims, there appears to be an odd situation going on, for me anyway, where Dolphin will "crash and burn" when attempting to format a file timestamp from a savestate of any game.

What steps will reproduce the problem?

I have no idea if anyone else is affected, but I can consistently reproduce the problem on my side. If a game I attempt to boot has any savestate file, it will crash the emulator immediately. If not, I have to create a savestate first (which works fine), then it's anyone's guess what's going to trigger it again. Even the quit dialog after pressing Esc has done it.

Is the issue present in the latest development version? For future reference, please also write down the version number of the latest development version.

I compiled the latest source code via MSVC to sound things out. Definitely present. The "oldest" version I tried where the issue isn't present was directly from a beta build download, 5.0-20347, from 4 and a half months ago. That version runs fine, but its immediate next beta build (5.0-21088) does have the same issue as current. 800+ revisions isn't a small window, but it should narrow things down.

What are your PC specifications? (CPU, GPU, Operating System, more)

Running on Windows 11, Version 10.0.22631, Build 22631

Ryzen 5, 5600
Nvidia RTX 2080

The hardware specs don't really make a difference here.

Is there anything else that can help developers narrow down the issue? (e.g. logs, screenshots,
configuration files, savefiles, savestates)

Got a stack trace. Timestamp's fine according to Jos, so the issue occurs somewhere in the format call's inner workings.

 	KernelBase.dll!00007ffab42e5b0c()	Unknown
 	vcruntime140d.dll!00007ffa48be92c1()	Unknown
>	DolphinD.exe!fmt::v10::detail::do_throw<fmt::v10::format_error>(const fmt::v10::format_error & x) Line 124	C++
 	DolphinD.exe!fmt::v10::detail::write_codecvt<wchar_t>(fmt::v10::detail::codecvt_result<wchar_t> & out, fmt::v10::basic_string_view<char> in_buf, const std::locale & loc) Line 359	C++
 	DolphinD.exe!fmt::v10::detail::write_encoded_tm_str<std::back_insert_iterator<fmt::v10::basic_memory_buffer<char,500,std::allocator<char>>>>(std::back_insert_iterator<fmt::v10::basic_memory_buffer<char,500,std::allocator<char>>> out, fmt::v10::basic_string_view<char> in, const std::locale & loc) Line 381	C++
 	DolphinD.exe!fmt::v10::detail::write<char,std::back_insert_iterator<fmt::v10::basic_memory_buffer<char,500,std::allocator<char>>>,0>(std::back_insert_iterator<fmt::v10::basic_memory_buffer<char,500,std::allocator<char>>> out, const tm & time, const std::locale & loc, char format, char modifier) Line 432	C++
 	DolphinD.exe!fmt::v10::detail::tm_writer<std::back_insert_iterator<fmt::v10::basic_memory_buffer<char,500,std::allocator<char>>>,char,std::chrono::duration<__int64,std::ratio<1,1>>>::format_localized(char format, char modifier) Line 1352	C++
 	DolphinD.exe!fmt::v10::detail::tm_writer<std::back_insert_iterator<fmt::v10::basic_memory_buffer<char,500,std::allocator<char>>>,char,std::chrono::duration<__int64,std::ratio<1,1>>>::on_loc_time(fmt::v10::detail::numeric_system ns) Line 1433	C++
 	DolphinD.exe!fmt::v10::detail::parse_chrono_format<char,fmt::v10::detail::tm_writer<std::back_insert_iterator<fmt::v10::basic_memory_buffer<char,500,std::allocator<char>>>,char,std::chrono::duration<__int64,std::ratio<1,1>>> &>(const char * begin, const char * end, fmt::v10::detail::tm_writer<std::back_insert_iterator<fmt::v10::basic_memory_buffer<char,500,std::allocator<char>>>,char,std::chrono::duration<__int64,std::ratio<1,1>>> & handler) Line 800	C++
 	DolphinD.exe!fmt::v10::formatter<tm,char,void>::do_format<fmt::v10::basic_format_context<fmt::v10::appender,char>,std::chrono::duration<__int64,std::ratio<1,1>>>(const tm & tm, fmt::v10::basic_format_context<fmt::v10::appender,char> & ctx, const std::chrono::duration<__int64,std::ratio<1,1>> * subsecs) Line 2207	C++
 	DolphinD.exe!fmt::v10::formatter<tm,char,void>::format<fmt::v10::basic_format_context<fmt::v10::appender,char>>(const tm & tm, fmt::v10::basic_format_context<fmt::v10::appender,char> & ctx) Line 2233	C++
 	DolphinD.exe!fmt::v10::detail::value<fmt::v10::basic_format_context<fmt::v10::appender,char>>::format_custom_arg<tm,fmt::v10::formatter<tm,char,void>>(void * arg, fmt::v10::basic_format_parse_context<char> & parse_ctx, fmt::v10::basic_format_context<fmt::v10::appender,char> & ctx) Line 1328	C++
 	DolphinD.exe!fmt::v10::basic_format_arg<fmt::v10::basic_format_context<fmt::v10::appender,char>>::format_custom(const char * parse_begin, fmt::v10::basic_format_parse_context<char> & parse_ctx, fmt::v10::basic_format_context<fmt::v10::appender,char> & ctx) Line 1685	C++
 	DolphinD.exe!`fmt::v10::detail::vformat_to<char>'::`2'::format_handler::on_format_specs(int id, const char * begin, const char * end) Line 4355	C++
 	DolphinD.exe!fmt::v10::detail::parse_replacement_field<char,`fmt::v10::detail::vformat_to<char>'::`2'::format_handler &>(const char * begin, const char * end, fmt::v10::detail::vformat_to::__l2::format_handler & handler) Line 2512	C++
 	DolphinD.exe!fmt::v10::detail::parse_format_string<0,char,`fmt::v10::detail::vformat_to<char>'::`2'::format_handler>(fmt::v10::basic_string_view<char> format_str, fmt::v10::detail::vformat_to::__l2::format_handler && handler) Line 2534	C++
 	DolphinD.exe!fmt::v10::detail::vformat_to<char>(fmt::v10::detail::buffer<char> & buf, fmt::v10::basic_string_view<char> fmt, fmt::v10::basic_format_args<fmt::v10::basic_format_context<fmt::v10::appender,char>> args, fmt::v10::detail::locale_ref loc) Line 4417	C++
 	DolphinD.exe!fmt::v10::detail::vformat<std::locale,char>(const std::locale & loc, fmt::v10::basic_string_view<char> fmt, fmt::v10::basic_format_args<fmt::v10::basic_format_context<fmt::v10::appender,char>> args) Line 3907	C++
 	DolphinD.exe!fmt::v10::vformat<std::locale,0>(const std::locale & loc, fmt::v10::basic_string_view<char> fmt, fmt::v10::basic_format_args<fmt::v10::basic_format_context<fmt::v10::appender,char>> args) Line 4464	C++
 	DolphinD.exe!fmt::v10::format<std::locale,tm const &,0>(const std::locale & loc, fmt::v10::basic_format_string<char,tm const &> fmt, const tm & <args_0>) Line 4471	C++
 	DolphinD.exe!State::SystemTimeAsDoubleToString(double time) Line 291	C++
 	DolphinD.exe!State::GetInfoStringOfSlot(int slot, bool translate) Line 654	C++
 	DolphinD.exe!MenuBar::UpdateStateSlotMenu() Line 405	C++
 	DolphinD.exe!MenuBar::OnEmulationStateChanged(Core::State state) Line 166	C++
 	DolphinD.exe!MenuBar::{ctor}::__l2::<lambda_1>::operator()(Core::State state) Line 94	C++
 	DolphinD.exe!QtPrivate::FunctorCall<QtPrivate::IndexesList<0>,QtPrivate::List<enum Core::State>,void,`MenuBar::MenuBar'::`2'::<lambda_1>>::call(MenuBar::{ctor}::__l2::<lambda_1> & f, void * * arg) Line 127	C++
 	DolphinD.exe!QtPrivate::Functor<`MenuBar::MenuBar'::`2'::<lambda_1>,1>::call<QtPrivate::List<enum Core::State>,void>(MenuBar::{ctor}::__l2::<lambda_1> & f, void * __formal, void * * arg) Line 241	C++
 	DolphinD.exe!QtPrivate::QFunctorSlotObject<`MenuBar::MenuBar'::`2'::<lambda_1>,1,QtPrivate::List<enum Core::State>,void>::impl(int which, QtPrivate::QSlotObjectBase * this_, QObject * r, void * * a, bool * ret) Line 409	C++
 	[External Code]	
 	DolphinD.exe!Settings::EmulationStateChanged(Core::State _t1) Line 914	C++
 	DolphinD.exe!Settings::{ctor}::__l2::<lambda_1>::()::__l2::<lambda_1>::operator()() Line 62	C++
 	DolphinD.exe!QtPrivate::FunctorCall<QtPrivate::IndexesList<>,QtPrivate::List<>,void,``Settings::Settings'::`2'::<lambda_1>::operator()'::`2'::<lambda_1>>::call(Settings::{ctor}::__l2::<lambda_1>::()::__l2::<lambda_1> & f, void * * arg) Line 127	C++
 	DolphinD.exe!QtPrivate::Functor<``Settings::Settings'::`2'::<lambda_1>::operator()'::`2'::<lambda_1>,0>::call<QtPrivate::List<>,void>(Settings::{ctor}::__l2::<lambda_1>::()::__l2::<lambda_1> & f, void * __formal, void * * arg) Line 241	C++
 	DolphinD.exe!QtPrivate::QFunctorSlotObject<``Settings::Settings'::`2'::<lambda_1>::operator()'::`2'::<lambda_1>,0,QtPrivate::List<>,void>::impl(int which, QtPrivate::QSlotObjectBase * this_, QObject * r, void * * a, bool * ret) Line 409	C++
 	[External Code]	
 	DolphinD.exe!app_main(int argc, char * * argv) Line 294	C++
 	DolphinD.exe!wWinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, wchar_t * __formal, int __formal) Line 313	C++
 	[External Code]	


Files

time2.png (11.6 KB) time2.png Janitor_Raus, 04/05/2024 01:25 PM
time1.png (24.2 KB) time1.png Janitor_Raus, 04/05/2024 01:25 PM
Actions #1

Updated by Janitor_Raus 2 months ago

Version compiled and tested was: ad331205d1b3c4efb41981a332c9d6fc86009ce3

Updated by Janitor_Raus 2 months ago

Added pictures timestamp data (though it's from a previous stack trace) as an example.

Actions #3

Updated by Dentomologist 2 months ago

If you replace line 291 of Core/Core/State.cpp with the following, what values do you get?

auto loc = std::locale{""}; auto name = loc.name(); auto time_flags = loc.time; NOTICE_LOG_FMT(COMMON, "Locale name: {}", name); NOTICE_LOG_FMT(COMMON, "Locale time flags: {}", time_flags); // fmt is locale agnostic by default, so explicitly use current locale. return fmt::format(loc, "{:%x %X}", *local_time);

Actions #4

Updated by Janitor_Raus 2 months ago

Dentomologist wrote in #note-3:

If you replace line 291 of Core/Core/State.cpp with the following, what values do you get?

auto loc = std::locale{""}; auto name = loc.name(); auto time_flags = loc.time; NOTICE_LOG_FMT(COMMON, "Locale name: {}", name); NOTICE_LOG_FMT(COMMON, "Locale time flags: {}", time_flags); // fmt is locale agnostic by default, so explicitly use current locale. return fmt::format(loc, "{:%x %X}", *local_time);

Log contains:
14:53:039 Core\State.cpp:293 N[COMMON]: Locale name:
14:53:039 Core\State.cpp:294 N[COMMON]: Locale time flags: 16

Actions

Also available in: Atom PDF