| 145 | |
| 146 | #if !defined(USE_BACKWARD_CPP) && defined(HAVE_BACKTRACE) |
| 147 | static QString maybeDemangleName(char *name) |
| 148 | { |
| 149 | #ifdef HAVE_CXA_DEMANGLE |
| 150 | #if defined(Q_OS_MACOS) |
| 151 | const char MANGLED_START[] = " _Z"; |
| 152 | const char MANGLED_END[] = " "; |
| 153 | #else |
| 154 | const char MANGLED_START[] = "(_Z"; |
| 155 | const char MANGLED_END[] = "+"; |
| 156 | #endif |
| 157 | |
| 158 | auto mangledNameStart = strstr(name, MANGLED_START); |
| 159 | if (mangledNameStart) { |
| 160 | ++mangledNameStart; |
| 161 | const auto mangledNameEnd = strstr(mangledNameStart, MANGLED_END); |
| 162 | if (mangledNameEnd) { |
| 163 | int status; |
| 164 | *mangledNameEnd = 0; |
| 165 | auto demangled = abi::__cxa_demangle(mangledNameStart, nullptr, nullptr, &status); |
| 166 | *mangledNameEnd = MANGLED_END[0]; |
| 167 | if (status == 0 && demangled) { |
| 168 | QString ret = QString::fromLatin1(name, mangledNameStart - name) |
| 169 | + QString::fromLatin1(demangled) |
| 170 | + QString::fromLatin1(mangledNameEnd); |
| 171 | free(demangled); |
| 172 | return ret; |
| 173 | } |
| 174 | } |
| 175 | } |
| 176 | #endif |
| 177 | return QString::fromLatin1(name); |
| 178 | } |
| 179 | #endif |
| 180 | |
| 181 | Execution::ResolvedFrame Execution::resolveOne(const Execution::Trace &trace, int index) |
no outgoing calls
no test coverage detected