QT下我们如何实现程序崩溃后,调起我们的crashreporter程式呢?window 系统有一个异常处理函数SetUnhandledExceptionFilter,当异常没有处理的时候,系统就会调用SetUnhandledExceptionFilter设置异常处理函数,它所捕获的异常,内存访问违例,段错误等等,操作系统允许你Hook这个函数,就是通过SetUnhandledExceptionFilter函数来设置。大部分异常通过此种方法都能捕获,不过栈溢出、覆盖的有可能捕获不到。mac系统下,我们可以用oc的一个函数NSSetUncaughtExceptionHandler来捕获。下面开始真正的灵魂代码吧。
一.QT里设置mac下支持OC混编的库,(pro文件加入下面一定定义macos下)。
- QMAKE_CXXFLAGS += -x objective-c++
- LIBS += -framework Foundation
- LIBS += -f