MCPcopy Create free account
hub / github.com/NVIDIA/DALI / GetStacktrace

Function GetStacktrace

include/dali/core/error_handling.h:131–162  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

129}
130
131inline dali::string GetStacktrace() {
132 const int MAX_STACK_SIZE = 100;
133 void * stack[MAX_STACK_SIZE];
134 int nframes = backtrace(stack, MAX_STACK_SIZE);
135 dali::string ret = "\nStacktrace (" + std::to_string(nframes) + " entries):\n";
136 char **msgs = backtrace_symbols(stack, nframes);
137 if (msgs != nullptr) {
138 for (int frame = 0; frame < nframes; ++frame) {
139 dali::string msg(msgs[frame]);
140 size_t symbol_start = string::npos;
141 size_t symbol_end = string::npos;
142 dali::string s = msgs[frame];
143 if ( ((symbol_start = msg.find("_Z")) != string::npos)
144 && (symbol_end = msg.find("+0x", symbol_start)) != string::npos ) {
145 string left(msg, 0, symbol_start);
146 string symbol(msg, symbol_start, symbol_end - symbol_start);
147 trim(&symbol);
148 string right(msg, symbol_end);
149 int status = 0;
150 char * demangled_symbol =
151 abi::__cxa_demangle(symbol.c_str(), 0, 0, &status);
152 if (demangled_symbol != nullptr) {
153 s = left + demangled_symbol + right;
154 std::free(demangled_symbol);
155 }
156 }
157 ret += "[frame " + std::to_string(frame) + "]: " + s + "\n";
158 }
159 }
160 free(msgs);
161 return ret;
162}
163#else
164inline dali::string GetStacktrace() {
165 return "";

Callers 1

signal_handlerFunction · 0.85

Calls 4

trimFunction · 0.85
to_stringFunction · 0.70
findMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected