| 1422 | } |
| 1423 | |
| 1424 | void StackWalker::OnLoadModule(LPCSTR img, |
| 1425 | LPCSTR mod, |
| 1426 | DWORD64 baseAddr, |
| 1427 | DWORD size, |
| 1428 | DWORD result, |
| 1429 | LPCSTR symType, |
| 1430 | LPCSTR pdbName, |
| 1431 | ULONGLONG fileVersion) |
| 1432 | { |
| 1433 | CHAR buffer[STACKWALK_MAX_NAMELEN]; |
| 1434 | size_t maxLen = STACKWALK_MAX_NAMELEN; |
| 1435 | #if _MSC_VER >= 1400 |
| 1436 | maxLen = _TRUNCATE; |
| 1437 | #endif |
| 1438 | if (fileVersion == 0) |
| 1439 | _snprintf_s(buffer, maxLen, "%s:%s (%p), size: %d (result: %d), SymType: '%s', PDB: '%s'\n", |
| 1440 | img, mod, (LPVOID)baseAddr, size, result, symType, pdbName); |
| 1441 | else |
| 1442 | { |
| 1443 | DWORD v4 = (DWORD)(fileVersion & 0xFFFF); |
| 1444 | DWORD v3 = (DWORD)((fileVersion >> 16) & 0xFFFF); |
| 1445 | DWORD v2 = (DWORD)((fileVersion >> 32) & 0xFFFF); |
| 1446 | DWORD v1 = (DWORD)((fileVersion >> 48) & 0xFFFF); |
| 1447 | _snprintf_s( |
| 1448 | buffer, maxLen, |
| 1449 | "%s:%s (%p), size: %d (result: %d), SymType: '%s', PDB: '%s', fileVersion: %d.%d.%d.%d\n", |
| 1450 | img, mod, (LPVOID)baseAddr, size, result, symType, pdbName, v1, v2, v3, v4); |
| 1451 | } |
| 1452 | buffer[STACKWALK_MAX_NAMELEN - 1] = 0; // be sure it is NULL terminated |
| 1453 | OnOutput(buffer); |
| 1454 | } |
| 1455 | |
| 1456 | void StackWalker::OnCallstackEntry(CallstackEntryType eType, CallstackEntry& entry) |
| 1457 | { |