Cześć,
zmagam się od dwóch dni z nastepującym problemem.
Mam funkcję, która odczytuje jakiś tam plik z systemu plików. Podczas jednego z testów zrobiłem ten plik pusty - dostałem wtedy crasha.
Dołożyłem obsługę wyjątków try-catch
w tej funkcji, bazując na backtrace, który dostałem, ale wyjątek dalej nie jest łapany.
Może ktoś rzucić okiem? Ja już się wystrzelałem z pomysłów...
Link do backtrace.
template<typename T>
std::optional<T> Database::CacheStore::read(const boost::filesystem::path& path) const
{
boost::filesystem::ifstream file(path, std::ios_base::in | std::ios_base::binary);
if (!file)
{
const std::error_code ec(errno, std::generic_category());
// logging...
return std::nullopt;
}
T result;
Some::Namespace::error_code ec;
try
{
boost::iostreams::filtering_istream filter;
filter.push(boost::iostreams::gzip_decompressor());
filter.push(file);
std::cout << "TABORET - before deserialize" << std::endl;
ec = Signaling::Json::deserialize(filter, result);
}
catch (...)
{
std::cout << "TABORET" << std::endl;
}
if (ec)
{
// logging...
return std::nullopt;
}
return result;
}
Od siebie jeszcze dodam, że trejs TABORET - before deserialize jest ostatnim przed backtrace (co też jest w nim zapisane), więc wadliwy kod jest ewidentnie obłożony try-catch.
Z góry dzięki za pomoc.