Tôi đã thực hiện rất nhiều nghiên cứu về xử lý lỗi với Qt/C++ và tôi vẫn bị mất khi tôi bắt đầu. Có lẽ tôi đang tìm kiếm một cách dễ dàng (như các ngôn ngữ khác cung cấp). Một, đặc biệt, cung cấp cho một ngoại lệ unhandled mà tôi sử dụng tôn giáo. Khi chương trình gặp sự cố, chương trình sẽ ném ngoại lệ không được xử lý để tôi có thể tạo báo cáo lỗi của riêng mình. Báo cáo đó được gửi từ máy khách hàng của tôi đến máy chủ trực tuyến mà sau đó tôi đọc sau.Qt/C++ Xử lý lỗi
Vấn đề mà tôi gặp phải với C++ là bất kỳ lỗi xử lý nào được thực hiện đều phải được suy nghĩ về TRƯỚC KHI tay (nghĩ thử/nắm bắt hoặc điều kiện lớn). Theo kinh nghiệm của tôi, các vấn đề trong mã không được nghĩ đến trước khi tay khác không có vấn đề gì để bắt đầu.
Viết ứng dụng đa nền tảng mà không có cơ chế xử lý lỗi/báo cáo/theo dõi đa nền tảng là một chút đáng sợ đối với tôi.
Câu hỏi của tôi là: Có loại cơ chế bẫy lỗi “bắt tất cả” Qt hoặc C++ cụ thể mà tôi có thể sử dụng trong ứng dụng của mình để, nếu có điều gì sai, ít nhất tôi có thể viết báo cáo trước Nó bị treo?
Ví dụ:
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))
{
[...]
}
}
}
Tôi muốn lỗi này bị bắt là một ngoại lệ unhandled VÀ ứng dụng để bỏ mà không hiển thị cho người dùng cửa sổ tai nạn mặc định trên hệ điều hành Windows/Mac. Tôi chỉ muốn nó thoát độc đáo sau khi viết thông báo xác nhận vào một tệp, v.v.
Bạn có thể chỉ cho tôi một ví dụ về thử trò chơi của bạn ở đó không? –
@ShiGon: Xong ... – Macke
Tôi nghĩ mình đang làm điều gì đó sai vì tôi không nhận được tình yêu từ bất kỳ thử thách nào trừ khi tôi sử dụng lệnh ném bản thân mình. Vì vậy, khó hiểu. Và thậm chí sau đó, ứng dụng vẫn gặp sự cố và cố gửi báo cáo lỗi cho Apple trong trường hợp này. Tôi đang cố gắng để ứng dụng từ bỏ một cách duyên dáng. –