LogOversizedDbCache (added in #33333) is noexcept, but it reads -dbcache through CalculateDbCacheBytes -> GetIntArg. GetIntArg throws when settings.json has a number that isn't an integer or doesn't fit in int64, e.g. {"dbcache": 4096.5}. The exception hits the noexcept boundary and bitcoind aborts during startup:
libc++abi: terminating due to uncaught exception of type std::runtime_error: JSON integer out of range
This removes noexcept. The exception now reaches the handler in AppInit, and the node exits with status 1 and an error message instead of aborting:
EXCEPTION: St13runtime_error
JSON integer out of range
bitcoin in AppInit()
The added case in feature_settings.py writes {"dbcache": 4096.5} to settings.json and checks that startup fails with that message from AppInit.