65 lines
1.7 KiB
C++
65 lines
1.7 KiB
C++
|
|
#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();
|
|||
|
|
}
|