MCPcopy Create free account
hub / github.com/Xtra-Computing/thundersvm / generateNew

Method generateNew

src/thundersvm/util/log.cpp:2666–2720  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2664}
2665
2666void StackTrace::generateNew(void) {
2667#if ELPP_STACKTRACE
2668 m_stack.clear();
2669 void* stack[kMaxStack];
2670 unsigned int size = backtrace(stack, kMaxStack);
2671 char** strings = backtrace_symbols(stack, size);
2672 if (size > kStackStart) { // Skip StackTrace c'tor and generateNew
2673 for (std::size_t i = kStackStart; i < size; ++i) {
2674 char* mangName = nullptr;
2675 char* hex = nullptr;
2676 char* addr = nullptr;
2677 for (char* c = strings[i]; *c; ++c) {
2678 switch (*c) {
2679 case '(':
2680 mangName = c;
2681 break;
2682 case '+':
2683 hex = c;
2684 break;
2685 case ')':
2686 addr = c;
2687 break;
2688 default:
2689 break;
2690 }
2691 }
2692 // Perform demangling if parsed properly
2693 if (mangName != nullptr && hex != nullptr && addr != nullptr && mangName < hex) {
2694 *mangName++ = '\0';
2695 *hex++ = '\0';
2696 *addr++ = '\0';
2697 int status = 0;
2698 char* demangName = abi::__cxa_demangle(mangName, 0, 0, &status);
2699 // if demangling is successful, output the demangled function name
2700 if (status == 0) {
2701 // Success (see http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/a01696.html)
2702 StackTraceEntry entry(i - 1, strings[i], demangName, hex, addr);
2703 m_stack.push_back(entry);
2704 } else {
2705 // Not successful - we will use mangled name
2706 StackTraceEntry entry(i - 1, strings[i], mangName, hex, addr);
2707 m_stack.push_back(entry);
2708 }
2709 free(demangName);
2710 } else {
2711 StackTraceEntry entry(i - 1, strings[i]);
2712 m_stack.push_back(entry);
2713 }
2714 }
2715 }
2716 free(strings);
2717#else
2718 ELPP_INTERNAL_INFO(1, "Stacktrace generation not supported for selected compiler");
2719#endif // ELPP_STACKTRACE
2720}
2721
2722// Static helper functions
2723

Callers

nothing calls this directly

Calls 1

clearMethod · 0.80

Tested by

no test coverage detected