He estado investigando mucho sobre el manejo de errores con Qt/C++ y todavía estoy tan perdido como cuando comencé. Tal vez estoy buscando una salida fácil (como otros idiomas ofrecen). Uno, en particular, proporciona una excepción no controlada que uso religiosamente. Cuando el programa encuentra un problema, arroja la excepción no controlada para que pueda crear mi propio informe de error. Ese informe se envía desde la máquina de mis clientes a un servidor en línea, y luego lo leo.Qt/C++ Manejo de errores
El problema que estoy teniendo con C++ es que cualquier manejo de error que se haya hecho tiene que pensarse ANTES de la mano (piense intente/capture o condicionales masivos). En mi experiencia, los problemas en el código no se consideran de antemano, de lo contrario no habría un problema para empezar.
Escribir una aplicación multiplataforma sin un mecanismo de manejo/informe/rastreo de errores multiplataforma me da un poco de miedo.
Mi pregunta es: ¿Hay algún tipo de Qt o C++ mecanismo de captura de errores "catch-all" específico que pueda usar en mi aplicación para que, si algo sale mal, pueda, al menos, escribir un informe antes se bloquea?
Ejemplo:
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))
{
[...]
}
}
}
Quiero que este error para ser capturado como una excepción no controlada y la aplicación de dejar de fumar sin mostrar al usuario la ventana de accidente por defecto en el sistema operativo Windows/Mac. Solo quiero que salga bien después de escribir el mensaje de afirmación en un archivo, etc.
¿Puede mostrarme un ejemplo de su pesca de prueba allí? –
@ShiGon: Hecho ... – Macke
Creo que estoy haciendo algo mal porque NO recibo amor por ningún try-catch que haga, excepto cuando utilizo el comando throw por mi cuenta. Muy confuso. E incluso entonces, la aplicación aún se bloquea e intenta enviar un informe de error a Apple en este caso. Estoy intentando que la aplicación salga con gracia. –