GrabBag/Test/crash/test_crash.cpp

65 lines
1.7 KiB
C++
Raw Permalink Normal View History

2025-10-12 16:46:46 +08:00
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QDebug>
#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();
}