Catch exceptions on Winows if using Mingw compiler.
--HG-- branch : develop
This commit is contained in:
parent
d8ead200a8
commit
1f0521ea30
|
@ -525,10 +525,12 @@ GCC_DEBUG_CXXFLAGS += \
|
||||||
-Wall \
|
-Wall \
|
||||||
-Wextra \
|
-Wextra \
|
||||||
-pedantic \
|
-pedantic \
|
||||||
|
-fno-omit-frame-pointer # Need for exchndl.dll
|
||||||
|
|
||||||
CLANG_DEBUG_CXXFLAGS += \
|
CLANG_DEBUG_CXXFLAGS += \
|
||||||
-O0 \
|
-O0 \
|
||||||
-Wall \
|
-Wall \
|
||||||
-Wextra \
|
-Wextra \
|
||||||
-pedantic \
|
-pedantic \
|
||||||
|
-fno-omit-frame-pointer # Need for exchndl.dll
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,9 +145,17 @@ CONFIG(debug, debug|release){
|
||||||
# Release mode
|
# Release mode
|
||||||
DEFINES += QT_NO_DEBUG_OUTPUT
|
DEFINES += QT_NO_DEBUG_OUTPUT
|
||||||
|
|
||||||
|
!unix:*-g++{
|
||||||
|
QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll
|
||||||
|
}
|
||||||
|
|
||||||
# Turn on debug symbols in release mode on Unix systems.
|
# Turn on debug symbols in release mode on Unix systems.
|
||||||
# On Mac OS X temporarily disabled. Need find way how to strip binary file.
|
# On Mac OS X temporarily disabled. Need find way how to strip binary file.
|
||||||
unix:!macx:QMAKE_CXXFLAGS_RELEASE += -g -gdwarf-3
|
!macx:!win32-msvc*{
|
||||||
|
QMAKE_CXXFLAGS_RELEASE += -g -gdwarf-3
|
||||||
|
QMAKE_CFLAGS_RELEASE += -g -gdwarf-3
|
||||||
|
QMAKE_LFLAGS_RELEASE =
|
||||||
|
}
|
||||||
|
|
||||||
#local revision number for using in version
|
#local revision number for using in version
|
||||||
HG_REV=$$system(hg parents --template '{rev}')
|
HG_REV=$$system(hg parents --template '{rev}')
|
||||||
|
@ -369,11 +377,18 @@ DEPENDPATH += $${PWD}/../libs/vpropertyexplorer
|
||||||
|
|
||||||
# Strip after you link all libaries.
|
# Strip after you link all libaries.
|
||||||
CONFIG(release, debug|release){
|
CONFIG(release, debug|release){
|
||||||
|
win32:!win32-msvc*{
|
||||||
|
# Strip debug symbols.
|
||||||
|
QMAKE_POST_LINK += objcopy --only-keep-debug bin/${TARGET} bin/${TARGET}.dbg &&
|
||||||
|
QMAKE_POST_LINK += objcopy --strip-debug bin/${TARGET} &&
|
||||||
|
QMAKE_POST_LINK += objcopy --add-gnu-debuglink="bin/${TARGET}.dbg" bin/${TARGET}
|
||||||
|
}
|
||||||
|
|
||||||
unix:!macx{
|
unix:!macx{
|
||||||
# Strip debug symbols.
|
# Strip debug symbols.
|
||||||
QMAKE_POST_LINK += objcopy --only-keep-debug $(TARGET) $(TARGET).debug &&
|
QMAKE_POST_LINK += objcopy --only-keep-debug ${TARGET} ${TARGET}.dbg &&
|
||||||
QMAKE_POST_LINK += strip --strip-debug --strip-unneeded $(TARGET) &&
|
QMAKE_POST_LINK += objcopy --strip-debug ${TARGET} &&
|
||||||
QMAKE_POST_LINK += objcopy --add-gnu-debuglink $(TARGET).debug $(TARGET)
|
QMAKE_POST_LINK += objcopy --add-gnu-debuglink="${TARGET}.dbg" ${TARGET}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,48 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Catch exception and create report. Use if program build with Mingw compiler.
|
||||||
|
// See more about catcher https://github.com/jrfonseca/drmingw/blob/master/README.md
|
||||||
|
void DrMingw()
|
||||||
|
{
|
||||||
|
#if defined(Q_OS_WIN) && defined(Q_CC_GNU)
|
||||||
|
// Put exchndl.dll near binary file
|
||||||
|
QFile drmingw("exchndl.dll");
|
||||||
|
if(drmingw.exists())
|
||||||
|
{// If don't want create reports just delete exchndl.dll from installer
|
||||||
|
LoadLibrary(L"exchndl.dll");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Check if last run was crash.
|
||||||
|
// Each new crash we will lose old crashes reports if don't move them in save place.
|
||||||
|
// See more about catcher https://github.com/jrfonseca/drmingw/blob/master/README.md
|
||||||
|
void CollectReport()
|
||||||
|
{
|
||||||
|
// Seek file "binary_name.RPT"
|
||||||
|
const QString reportName = QString("%1/%2.RPT").arg(qApp->applicationDirPath())
|
||||||
|
.arg(QFileInfo(qApp->arguments().at(0)).baseName());
|
||||||
|
QFile reportFile(reportName);
|
||||||
|
if (reportFile.exists())
|
||||||
|
{ // Hooray we have found crash
|
||||||
|
const QString reportsDir = QString("%1/reports").arg(qApp->applicationDirPath());
|
||||||
|
QDir reports(reportsDir);
|
||||||
|
if (reports.exists() == false)
|
||||||
|
{
|
||||||
|
reports.mkpath("."); // Create directory for reports if need
|
||||||
|
}
|
||||||
|
|
||||||
|
const QDateTime now = QDateTime::currentDateTime();
|
||||||
|
const QString timestamp = now.toString(QLatin1String("yyyyMMdd-hhmmsszzz"));
|
||||||
|
const QString filename = QString("%1/reports/crash-%2.RPT").arg(qApp->applicationDirPath()).arg(timestamp);
|
||||||
|
reportFile.copy(filename); // Collect new crash
|
||||||
|
reportFile.remove(); // Clear after yourself
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -133,6 +175,12 @@ int main(int argc, char *argv[])
|
||||||
QT_REQUIRE_VERSION(argc, argv, "5.0.2");
|
QT_REQUIRE_VERSION(argc, argv, "5.0.2");
|
||||||
|
|
||||||
VApplication app(argc, argv);
|
VApplication app(argc, argv);
|
||||||
|
|
||||||
|
#if defined(Q_OS_WIN) && defined(Q_CC_GNU)
|
||||||
|
DrMingw();
|
||||||
|
CollectReport();
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef QT_DEBUG
|
#ifdef QT_DEBUG
|
||||||
// Because our "noisy" message handler uses the GUI subsystem for message
|
// Because our "noisy" message handler uses the GUI subsystem for message
|
||||||
// boxes, we can't install it until after the QApplication is constructed. But it
|
// boxes, we can't install it until after the QApplication is constructed. But it
|
||||||
|
|
|
@ -54,23 +54,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//In Windows you can't use same header in all modes.
|
//In Windows you can't use same header in all modes.
|
||||||
#if defined(Q_OS_WIN)
|
#if !defined(Q_OS_WIN)
|
||||||
# if defined(QT_NO_DEBUG)//release mode
|
|
||||||
|
|
||||||
# ifdef QT_WIDGETS_LIB
|
|
||||||
# include <QtWidgets>
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef QT_SVG_LIB
|
|
||||||
# include <QtSvg/QtSvg>
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef QT_PRINTSUPPORT_LIB
|
|
||||||
# include <QtPrintSupport>
|
|
||||||
# endif
|
|
||||||
# endif/*QT_NO_DEBUG*/
|
|
||||||
#else
|
|
||||||
|
|
||||||
# ifdef QT_WIDGETS_LIB
|
# ifdef QT_WIDGETS_LIB
|
||||||
# include <QtWidgets>
|
# include <QtWidgets>
|
||||||
# endif
|
# endif
|
||||||
|
|
|
@ -103,14 +103,20 @@ CONFIG(debug, debug|release){
|
||||||
# Release mode
|
# Release mode
|
||||||
DEFINES += QT_NO_DEBUG_OUTPUT
|
DEFINES += QT_NO_DEBUG_OUTPUT
|
||||||
|
|
||||||
unix:!macx{
|
!unix:*-g++{
|
||||||
|
QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll
|
||||||
|
}
|
||||||
|
|
||||||
|
!macx:!win32-msvc*{
|
||||||
# Turn on debug symbols in release mode on Unix systems.
|
# Turn on debug symbols in release mode on Unix systems.
|
||||||
# On Mac OS X temporarily disabled. TODO: find way how to strip binary file.
|
# On Mac OS X temporarily disabled. TODO: find way how to strip binary file.
|
||||||
QMAKE_CXXFLAGS_RELEASE += -g -gdwarf-3
|
QMAKE_CXXFLAGS_RELEASE += -g -gdwarf-3
|
||||||
|
QMAKE_CFLAGS_RELEASE += -g -gdwarf-3
|
||||||
|
QMAKE_LFLAGS_RELEASE =
|
||||||
|
|
||||||
# Strip debug symbols.
|
# Strip debug symbols.
|
||||||
QMAKE_POST_LINK += objcopy --only-keep-debug $(DESTDIR)/$(TARGET) $(DESTDIR)/$(TARGET).debug &&
|
QMAKE_POST_LINK += objcopy --only-keep-debug bin/${TARGET} bin/${TARGET}.dbg &&
|
||||||
QMAKE_POST_LINK += strip --strip-debug --strip-unneeded $(DESTDIR)/$(TARGET) &&
|
QMAKE_POST_LINK += objcopy --strip-debug bin/${TARGET} &&
|
||||||
QMAKE_POST_LINK += objcopy --add-gnu-debuglink $(DESTDIR)/$(TARGET).debug $(DESTDIR)/$(TARGET)
|
QMAKE_POST_LINK += objcopy --add-gnu-debuglink="bin/${TARGET}.dbg" bin/${TARGET}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,23 +36,6 @@
|
||||||
# include <QtCore>
|
# include <QtCore>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//In Windows you can't use same header in all modes.
|
|
||||||
#if defined(Q_OS_WIN)
|
|
||||||
# if defined(QT_NO_DEBUG)//release mode
|
|
||||||
|
|
||||||
# ifdef QT_WIDGETS_LIB
|
|
||||||
# include <QtWidgets>
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# endif/*QT_NO_DEBUG*/
|
|
||||||
#else
|
|
||||||
|
|
||||||
# ifdef QT_WIDGETS_LIB
|
|
||||||
# include <QtWidgets>
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif/*Q_OS_WIN*/
|
|
||||||
|
|
||||||
#endif /*__cplusplus*/
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
#endif // STABLE_H
|
#endif // STABLE_H
|
||||||
|
|
|
@ -145,13 +145,20 @@ CONFIG(debug, debug|release){
|
||||||
# Release mode
|
# Release mode
|
||||||
DEFINES += QT_NO_DEBUG_OUTPUT
|
DEFINES += QT_NO_DEBUG_OUTPUT
|
||||||
|
|
||||||
unix:!macx{
|
!unix:*-g++{
|
||||||
|
QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll
|
||||||
|
}
|
||||||
|
|
||||||
|
!macx:!win32-msvc*{
|
||||||
# Turn on debug symbols in release mode on Unix systems.
|
# Turn on debug symbols in release mode on Unix systems.
|
||||||
# On Mac OS X temporarily disabled. TODO: find way how to strip binary file.
|
# On Mac OS X temporarily disabled. TODO: find way how to strip binary file.
|
||||||
QMAKE_CXXFLAGS_RELEASE += -g -gdwarf-3
|
QMAKE_CXXFLAGS_RELEASE += -g -gdwarf-3
|
||||||
# On Linux
|
QMAKE_CFLAGS_RELEASE += -g -gdwarf-3
|
||||||
QMAKE_POST_LINK += objcopy --only-keep-debug $(DESTDIR)/$(TARGET) $(DESTDIR)/$(TARGET).debug &&
|
QMAKE_LFLAGS_RELEASE =
|
||||||
QMAKE_POST_LINK += strip --strip-debug --strip-unneeded $(DESTDIR)/$(TARGET) &&
|
|
||||||
QMAKE_POST_LINK += objcopy --add-gnu-debuglink $(DESTDIR)/$(TARGET).debug $(DESTDIR)/$(TARGET)
|
# Strip debug symbols.
|
||||||
|
QMAKE_POST_LINK += objcopy --only-keep-debug bin/${TARGET} bin/${TARGET}.dbg &&
|
||||||
|
QMAKE_POST_LINK += objcopy --strip-debug bin/${TARGET} &&
|
||||||
|
QMAKE_POST_LINK += objcopy --add-gnu-debuglink="bin/${TARGET}.dbg" bin/${TARGET}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user