private void doPdbPreWork() throws CancelledException, PdbException {
		if (preWorkDone) {
			return;
		}
		pdbApplicatorMetrics = pdbAnalysisLookupState.getPdbApplicatorMetrics();
		pdbAddressManager = pdbAnalysisLookupState.getPdbAddressManager();
		complexTypeMapper = pdbAnalysisLookupState.getComplexTypeMapper();
		dataTypeByMsTypeNum = pdbAnalysisLookupState.getDataTypeByMsTypeNumMap();
		classTypeByMsTypeNum = pdbAnalysisLookupState.getClassTypeByMsTypeNumMap();

		if (!pdbAddressManager.isInitialized()) {
			pdbAddressManager.initialize(this, imageBase);
		}
		pdbCategories = setPdbCatogoryUtils(pdb.getFilename());
		symbolGroups = createSymbolGroups();
		linkerModuleNumber = findLinkerModuleNumber();
		if (program != null) {
			// Currently, this must happen after symbolGroups are created.
			MsVxtManager msftVxtManager = new MsVxtManager(getClassTypeManager(), program);
			msftVxtManager.createVirtualTables(getRootPdbCategory(), findVirtualTableSymbols(), log,
				monitor);
			vxtManager = msftVxtManager;

			registerNameToRegisterMapper = new PdbRegisterNameToProgramRegisterMapper(program);
		}
//		else {
//			vxtManager = new VxtManager(getClassTypeManager());
//		}
		preWorkDone = true;
	}
Does some basic work based on the PDB and other parameters.  This work can be redone
 for each analysis phase (results should not differ)
@throws CancelledException upon user cancellation
@throws PdbException upon error in processing components
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DefaultPdbApplicator.java