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();
|
||
}
|