| 1493 | } |
| 1494 | |
| 1495 | BOOL StackWalker::ShowObject(LPVOID pObject) |
| 1496 | { |
| 1497 | // Load modules if not done yet |
| 1498 | if (m_modulesLoaded == FALSE) |
| 1499 | this->LoadModules(); // ignore the result... |
| 1500 | |
| 1501 | // Verify that the DebugHelp.dll was actually found |
| 1502 | if (this->m_sw->m_hDbhHelp == NULL) |
| 1503 | { |
| 1504 | SetLastError(ERROR_DLL_INIT_FAILED); |
| 1505 | return FALSE; |
| 1506 | } |
| 1507 | |
| 1508 | // SymGetSymFromAddr64() is required |
| 1509 | if (this->m_sw->pSGSFA == NULL) |
| 1510 | return FALSE; |
| 1511 | |
| 1512 | // Show object info (SymGetSymFromAddr64()) |
| 1513 | DWORD64 dwAddress = DWORD64(pObject); |
| 1514 | DWORD64 dwDisplacement = 0; |
| 1515 | const SIZE_T symSize = sizeof(IMAGEHLP_SYMBOL64) + STACKWALK_MAX_NAMELEN; |
| 1516 | IMAGEHLP_SYMBOL64* pSym = (IMAGEHLP_SYMBOL64*) malloc(symSize); |
| 1517 | if (!pSym) |
| 1518 | return FALSE; |
| 1519 | memset(pSym, 0, symSize); |
| 1520 | pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64); |
| 1521 | pSym->MaxNameLength = STACKWALK_MAX_NAMELEN; |
| 1522 | if (this->m_sw->pSGSFA(this->m_hProcess, dwAddress, &dwDisplacement, pSym) == FALSE) |
| 1523 | { |
| 1524 | this->OnDbgHelpErr("SymGetSymFromAddr64", GetLastError(), dwAddress); |
| 1525 | return FALSE; |
| 1526 | } |
| 1527 | // Object name output |
| 1528 | this->OnOutput(pSym->Name); |
| 1529 | |
| 1530 | free(pSym); |
| 1531 | return TRUE; |
| 1532 | }; |
| 1533 | |
| 1534 | void StackWalker::ClearCSEntryInline(CallstackEntry& csEntry) |
| 1535 | { |
no test coverage detected