Compare commits
1 Commits
master
...
boost-stac
Author | SHA1 | Date |
---|---|---|
Martchus | e388f72b97 |
|
@ -592,6 +592,7 @@ SyncthingDir *SyncthingConnection::addDirInfo(std::vector<SyncthingDir> &dirs, c
|
||||||
*/
|
*/
|
||||||
SyncthingDev *SyncthingConnection::findDevInfo(const QString &devId, int &row)
|
SyncthingDev *SyncthingConnection::findDevInfo(const QString &devId, int &row)
|
||||||
{
|
{
|
||||||
|
throw std::runtime_error("foobar");
|
||||||
row = 0;
|
row = 0;
|
||||||
for (SyncthingDev &d : m_devs) {
|
for (SyncthingDev &d : m_devs) {
|
||||||
if (d.id == devId) {
|
if (d.id == devId) {
|
||||||
|
|
|
@ -114,6 +114,9 @@ if (NOT QT_FORK_AWESOME_ICON_ENGINE_LIB_IS_SHARED)
|
||||||
use_qt_fork_awesome_icon_engine()
|
use_qt_fork_awesome_icon_engine()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
# use Boost.Stacktrace to print stacktraces in case of fatal errors
|
||||||
|
use_package(TARGET_NAME Boost::stacktrace_basic PACKAGE_NAME Boost PACKAGE_ARGS "COMPONENTS;stacktrace_basic")
|
||||||
|
|
||||||
# link also explicitly against the following Qt modules
|
# link also explicitly against the following Qt modules
|
||||||
list(APPEND ADDITIONAL_QT_MODULES Network)
|
list(APPEND ADDITIONAL_QT_MODULES Network)
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
#include <c++utilities/application/commandlineutils.h>
|
#include <c++utilities/application/commandlineutils.h>
|
||||||
#include <c++utilities/misc/parseerror.h>
|
#include <c++utilities/misc/parseerror.h>
|
||||||
|
|
||||||
|
#include <boost/stacktrace/stacktrace.hpp>
|
||||||
|
#include <boost/stacktrace/safe_dump_to.hpp>
|
||||||
|
|
||||||
#include <qtutilities/resources/importplugin.h>
|
#include <qtutilities/resources/importplugin.h>
|
||||||
#include <qtutilities/resources/qtconfigarguments.h>
|
#include <qtutilities/resources/qtconfigarguments.h>
|
||||||
#include <qtutilities/resources/resources.h>
|
#include <qtutilities/resources/resources.h>
|
||||||
|
@ -29,6 +32,9 @@
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QStringBuilder>
|
#include <QStringBuilder>
|
||||||
|
|
||||||
|
#include <csignal>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
@ -237,7 +243,31 @@ int runApplication(int argc, const char *const *argv)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void printStackTrace()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
std::cerr << boost::stacktrace::stacktrace();
|
||||||
|
} catch (...) {}
|
||||||
|
std::abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void printStackTraceFromSignalHandler(int signal)
|
||||||
|
{
|
||||||
|
std::signal(SIGSEGV, SIG_DFL);
|
||||||
|
std::signal(SIGABRT, SIG_DFL);
|
||||||
|
boost::stacktrace::safe_dump_to(PROJECT_VARNAME "-stacktrace-dump.bin");
|
||||||
|
std::raise(signal);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
std::set_terminate(&printStackTrace);
|
||||||
|
std::signal(SIGABRT, &printStackTraceFromSignalHandler);
|
||||||
|
std::signal(SIGSEGV, &printStackTraceFromSignalHandler);
|
||||||
|
if (auto stacktraceFile = std::ifstream("stacktrace.bin", std::ios_base::in | std::ios_base::binary); stacktraceFile.is_open()) {
|
||||||
|
std::cerr << "Last execution crashed:\n" << boost::stacktrace::stacktrace::from_dump(stacktraceFile);
|
||||||
|
std::rename(PROJECT_VARNAME "-stacktrace-dump.bin", PROJECT_VARNAME "-stacktrace-dump.bin.bak");
|
||||||
|
}
|
||||||
|
|
||||||
return runApplication(argc, argv);
|
return runApplication(argc, argv);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue