| 1343 | } |
| 1344 | |
| 1345 | void StackWalker::OnLoadModule(LPCSTR img, |
| 1346 | LPCSTR mod, |
| 1347 | DWORD64 baseAddr, |
| 1348 | DWORD size, |
| 1349 | DWORD result, |
| 1350 | LPCSTR symType, |
| 1351 | LPCSTR pdbName, |
| 1352 | ULONGLONG fileVersion) |
| 1353 | { |
| 1354 | CHAR buffer[STACKWALK_MAX_NAMELEN]; |
| 1355 | size_t maxLen = STACKWALK_MAX_NAMELEN; |
| 1356 | #if _MSC_VER >= 1400 |
| 1357 | maxLen = _TRUNCATE; |
| 1358 | #endif |
| 1359 | if (fileVersion == 0) |
| 1360 | _snprintf_s(buffer, maxLen, "%s:%s (%p), size: %d (result: %d), SymType: '%s', PDB: '%s'\n", |
| 1361 | img, mod, (LPVOID)baseAddr, size, result, symType, pdbName); |
| 1362 | else |
| 1363 | { |
| 1364 | DWORD v4 = (DWORD)(fileVersion & 0xFFFF); |
| 1365 | DWORD v3 = (DWORD)((fileVersion >> 16) & 0xFFFF); |
| 1366 | DWORD v2 = (DWORD)((fileVersion >> 32) & 0xFFFF); |
| 1367 | DWORD v1 = (DWORD)((fileVersion >> 48) & 0xFFFF); |
| 1368 | _snprintf_s( |
| 1369 | buffer, maxLen, |
| 1370 | "%s:%s (%p), size: %d (result: %d), SymType: '%s', PDB: '%s', fileVersion: %d.%d.%d.%d\n", |
| 1371 | img, mod, (LPVOID)baseAddr, size, result, symType, pdbName, v1, v2, v3, v4); |
| 1372 | } |
| 1373 | buffer[STACKWALK_MAX_NAMELEN - 1] = 0; // be sure it is NULL terminated |
| 1374 | OnOutput(buffer); |
| 1375 | } |
| 1376 | |
| 1377 | void StackWalker::OnCallstackEntry(CallstackEntryType eType, CallstackEntry& entry) |
| 1378 | { |