Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_debug.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#include "kis_debug.h"
7
8#include "config-debug.h"
9
10#if HAVE_BACKTRACE
11#include <execinfo.h>
12#ifdef __GNUC__
13#define HAVE_BACKTRACE_DEMANGLE
14#include <cxxabi.h>
15#endif
16#endif
17
18#include <string>
19
20
21#if HAVE_BACKTRACE
22static QString maybeDemangledName(char *name)
23{
24#ifdef HAVE_BACKTRACE_DEMANGLE
25 const int len = strlen(name);
26 QByteArray in = QByteArray::fromRawData(name, len);
27 const int mangledNameStart = in.indexOf("(_");
28 if (mangledNameStart >= 0) {
29 const int mangledNameEnd = in.indexOf('+', mangledNameStart + 2);
30 if (mangledNameEnd >= 0) {
31 int status;
32 // if we forget about this line and the one that undoes its effect we don't change the
33 // internal data of the QByteArray::fromRawData() ;)
34 name[mangledNameEnd] = 0;
35 char *demangled = abi::__cxa_demangle(name + mangledNameStart + 1, 0, 0, &status);
36 name[mangledNameEnd] = '+';
37 if (demangled) {
38 QString ret = QString::fromLatin1(name, mangledNameStart + 1) +
39 QString::fromLatin1(demangled) +
40 QString::fromLatin1(name + mangledNameEnd, len - mangledNameEnd);
41 free(demangled);
42 return ret;
43 }
44 }
45 }
46#endif
47 return QString::fromLatin1(name);
48}
49#endif
50
51QString kisBacktrace()
52{
53 QString s;
54#if HAVE_BACKTRACE
55 void *trace[256];
56 int n = backtrace(trace, 256);
57 if (!n) {
58 return s;
59 }
60 char **strings = backtrace_symbols(trace, n);
61
62 s = QLatin1String("[\n");
63
64 for (int i = 0; i < n; ++i)
65 s += QLatin1String("\t") + QString::number(i) + QLatin1String(": ") +
66 maybeDemangledName(strings[i]) + QLatin1Char('\n');
67 s += QLatin1String("]\n");
68 free(strings);
69#endif
70 return s;
71}
72
73Q_LOGGING_CATEGORY(_30009, "krita.lib.resources", QtInfoMsg)
74Q_LOGGING_CATEGORY(_30010, "krita.db.migration", QtInfoMsg)
75Q_LOGGING_CATEGORY(_41000, "krita.general", QtInfoMsg)
76Q_LOGGING_CATEGORY(_41001, "krita.core", QtInfoMsg)
77Q_LOGGING_CATEGORY(_41002, "krita.registry", QtInfoMsg)
78Q_LOGGING_CATEGORY(_41003, "krita.tools", QtInfoMsg)
79Q_LOGGING_CATEGORY(_41004, "krita.tiles", QtInfoMsg)
80Q_LOGGING_CATEGORY(_41005, "krita.filters", QtInfoMsg)
81Q_LOGGING_CATEGORY(_41006, "krita.plugins", QtInfoMsg)
82Q_LOGGING_CATEGORY(_41007, "krita.ui", QtInfoMsg)
83Q_LOGGING_CATEGORY(_41008, "krita.file", QtInfoMsg)
84Q_LOGGING_CATEGORY(_41009, "krita.math", QtInfoMsg)
85Q_LOGGING_CATEGORY(_41010, "krita.render", QtInfoMsg)
86Q_LOGGING_CATEGORY(_41011, "krita.scripting", QtInfoMsg)
87Q_LOGGING_CATEGORY(_41012, "krita.input", QtInfoMsg)
88Q_LOGGING_CATEGORY(_41013, "krita.action", QtInfoMsg)
89Q_LOGGING_CATEGORY(_41014, "krita.tabletlog", QtDebugMsg)
90Q_LOGGING_CATEGORY(_41015, "krita.opengl", QtInfoMsg)
91Q_LOGGING_CATEGORY(_41016, "krita.metadata", QtInfoMsg)
92Q_LOGGING_CATEGORY(_41017, "krita.android", QtDebugMsg)
93Q_LOGGING_CATEGORY(_41018, "krita.locale", QtInfoMsg)
94
95QString __methodName(const char *_prettyFunction)
96{
97 std::string prettyFunction(_prettyFunction);
98
99 size_t colons = prettyFunction.find("::");
100 size_t begin = prettyFunction.substr(0,colons).rfind(" ") + 1;
101 size_t end = prettyFunction.rfind("(") - begin;
102
103 return QString(std::string(prettyFunction.substr(begin,end) + "()").c_str());
104}
QString __methodName(const char *_prettyFunction)
Definition kis_debug.cpp:95
QString kisBacktrace()
Definition kis_debug.cpp:51
const KRITAGLOBAL_EXPORT QLoggingCategory & _41003()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41006()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41011()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41017()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41009()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41005()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41015()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41012()
const KRITAGLOBAL_EXPORT QLoggingCategory & _30010()
const KRITAGLOBAL_EXPORT QLoggingCategory & _30009()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41004()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41007()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41001()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41016()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41000()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41014()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41002()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41008()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41018()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41013()
const KRITAGLOBAL_EXPORT QLoggingCategory & _41010()
const char * name(StandardAction id)