MCPcopy Create free account
hub / github.com/FastLED/FastLED / print_symbol_for_address

Method print_symbol_for_address

tests/crash_handler_win.h:280–319  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

278 }
279
280 void print_symbol_for_address(DWORD64 address) {
281 HANDLE process = GetCurrentProcess();
282 std::string moduleName = get_module_name(address);
283 printf(" [%s]", moduleName.c_str());
284
285 std::string gdb_result = get_symbol_with_gdb(address);
286 if (gdb_result.find("--") != 0) {
287 printf(" %s", gdb_result.c_str());
288 } else if (symbols_initialized) {
289 char symbolBuffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)];
290 PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)symbolBuffer;
291 pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
292 pSymbol->MaxNameLen = MAX_SYM_NAME;
293
294 DWORD64 displacement = 0;
295 if (SymFromAddr(process, address, &displacement, pSymbol)) {
296 std::string demangled = demangle_symbol(pSymbol->Name);
297 printf(" %s+0x%llx (via Windows API)", demangled.c_str(), displacement);
298
299 IMAGEHLP_LINE64 line;
300 line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
301 DWORD lineDisplacement = 0;
302 if (SymGetLineFromAddr64(process, address, &lineDisplacement, &line)) {
303 char* fileName = strrchr(line.FileName, '\\');
304 if (fileName) fileName++;
305 else fileName = line.FileName;
306 printf(" [%s:%lu]", fileName, line.LineNumber);
307 }
308 } else {
309 DWORD error = GetLastError();
310 if (error != ERROR_MOD_NOT_FOUND) {
311 printf(" -- symbol lookup failed (error %lu)", error);
312 } else {
313 printf(" -- no debug symbols available");
314 }
315 }
316 } else {
317 printf(" -- no symbol resolution available");
318 }
319 }
320
321 void print_loaded_modules() {
322 HANDLE process = GetCurrentProcess();

Callers

nothing calls this directly

Calls 5

printfFunction · 0.85
strrchrFunction · 0.85
demangle_symbolFunction · 0.50
c_strMethod · 0.45
findMethod · 0.45

Tested by

no test coverage detected