Опять исключения
Если писать catch(...), то в лог не запишешь какая ошибка произошла, а хотелось бы записать класс исключения и его сообщение. Перечислять все классы в блоках catch геморрно да и не знаешь их всех.
А существует ли самый верхний класс исключений, который будет отлавливать в catch() ВСЕ ошибки.
Если писать catch(...), то в лог не запишешь какая ошибка произошла, а хотелось бы записать класс исключения и его сообщение. Перечислять все классы в блоках catch геморрно да и не знаешь их всех.
Приветствую
Есм такой класс Exception он называется (см. help)
все классы исключений порождены от него.
Есм такой класс Exception он называется (см. help)
все классы исключений порождены от него.
Не обязательно. Ничто не мешает объявить класс исключений не порожденный от Exception.
Skolotovich
все классы исключений порождены от него
Не обязательно. Ничто не мешает объявить класс исключений не порожденный от Exception.
Имеются в виду все классы VCL-исключений, естесственно. Они все от Exception
Имеются в виду все классы VCL-исключений, естесственно. Они все от Exception
Ясновидящий что-ли ? Или передача мыслей на расстоянии: Новосибирск-Киев :D
Если серьезно, то в хороших программах своих исключений не меньше чем VCL-ких и не факт, что они будут наследоваться от Exception. Кроме того, есть класс exception (с маленькой буквы), от которого порождаются все стандартные классы исключений C++. То есть универсального решения этой проблемы нет. По крайней мере на уровне языка.
_kolyan
Ясновидящий что-ли ? Или передача мыслей на расстоянии: Новосибирск-Киев :D
Если серьезно, то в хороших программах своих исключений не меньше чем VCL-ких и не факт, что они будут наследоваться от Exception. Кроме того, есть класс exception (с маленькой буквы), от которого порождаются все стандартные классы исключений C++. То есть универсального решения этой проблемы нет. По крайней мере на уровне языка.
Есть еще вариант:
отлавливать event TApplication OnException. Прототип: void __fastcall AppException(TObject *Sender, Exception *Е);
а Е в свою очередь имеет поля и методы, с помощью которых можно узнать тип экзепшена и само сообщение об ошибки, которые можно отловить и записать в лог.
Есть еще вариант:
отлавливать event TApplication OnException.
Прототип: void __fastcall AppException(TObject *Sender, Exception *Е);
а Е в свою очередь имеет поля и методы, с помощью которых можно узнать тип экзепшена и само сообщение об ошибки, которые можно отловить и записать в лог.
Идея неплохая - действительно перехватывает все исключения. Но есть свои минусы: действительное сообщение об ошибке получить сложно (а может и невозможно, не знаю). При перехвате любых не-VCL исключений выдается стандартное: "C++ exception", а что именно случилось непонятно. Во-вторых исключения перехватываются только в основном потоке обработки сообщений. Если работа ведется в параллельном потоке, как и зачастую бывает, метод не годится.