Я проводил много исследований по обработке ошибок с Qt/С++, и я все еще теряюсь, когда начинаю. Может быть, я ищу легкий выход (как и другие языки). Один, в частности, предусматривает необработанное исключение, которое я использую религиозно. Когда программа сталкивается с проблемой, она выдает необработанное исключение, поэтому я могу создать свой собственный отчет об ошибках. Этот отчет отправляется с моей машины клиентов на сервер, который я потом читаю позже.
Проблема, с которой я сталкиваюсь в С++, заключается в том, что любая обработка ошибок, о которой идет речь, должна быть рассмотрена перед рукой (думаю, try/catch или массивные условные выражения). По моему опыту, проблемы с кодом не считаются ранее, иначе не было бы проблем.
Написание кросс-платформенного приложения без кросс-платформенного механизма обработки ошибок/отчетности/трассировки для меня немного страшно.
Мой вопрос: есть ли какой-либо Qt или С++ специфический механизм захвата ошибок "все-все", который я могу использовать в своем приложении, чтобы, если что-то пошло не так, я могу, по крайней мере, написать отчет перед ним аварии?
Пример:
class MainWindow: public QMainWindow
{
[...]
public slots:
void add_clicked();
}
void MainWindow::add_clicked()
{
QFileDialog dlg(this, Qt::Sheet);
QString filename = dlg.getOpenFileName(this);
if(!filename.isEmpty())
{
QStringList path = filename.split(QDir::separator());
QString file = path.at(path.count()); // Index out of range assertion.
if(!lst_tables->openDatabase(filename))
{
[...]
}
}
}
Я хочу, чтобы эта ошибка была поймана как необработанное исключение. И приложение прекратилось, не показывая пользователю окно сбоя по умолчанию в операционной системе Windows/Mac. Я просто хочу, чтобы это прекратилось после написания сообщения об утверждении в файл и т.д.