#include #include #include #include #include #include "../QtUtils/Inc/CrashHandler.h" void testNullPointerCrash() { int* p = nullptr; *p = 42; // 触发访问违规异常 } void testDivisionByZero() { volatile int a = 10; volatile int b = 0; volatile int c = a / b; // 浮点异常 qDebug() << c; } void testAbort() { abort(); // 触发 SIGABRT } int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setApplicationName("CrashTest"); app.setApplicationVersion("1.0"); // 注册崩溃处理器 CrashHandler::setDumpPath("D:/crash_dumps"); CrashHandler::registerCrashHandler(); QWidget window; QVBoxLayout* layout = new QVBoxLayout(&window); QPushButton* btnNullPtr = new QPushButton("测试空指针崩溃(访问违规)"); QPushButton* btnAbort = new QPushButton("测试 Abort 崩溃"); QPushButton* btnNormal = new QPushButton("正常退出"); layout->addWidget(btnNullPtr); layout->addWidget(btnAbort); layout->addWidget(btnNormal); QObject::connect(btnNullPtr, &QPushButton::clicked, []() { qDebug() << "触发空指针崩溃..."; testNullPointerCrash(); }); QObject::connect(btnAbort, &QPushButton::clicked, []() { qDebug() << "触发 abort 崩溃..."; testAbort(); }); QObject::connect(btnNormal, &QPushButton::clicked, &app, &QApplication::quit); window.setWindowTitle("Crash Handler 测试"); window.resize(300, 150); window.show(); qDebug() << "崩溃处理器已注册,dump路径:" << CrashHandler::getDumpPath(); return app.exec(); }