private Map<SymbolPath, List<String>> getPdbMethodInfo(File pdbFile) throws CancelledException {
		PdbReaderOptions pdbReaderOptions = new PdbReaderOptions();
		Map<SymbolPath, List<String>> results = new LinkedHashMap<>();
		try (AbstractPdb pdb = PdbParser.parse(pdbFile, pdbReaderOptions, monitor)) {
			monitor.setMessage("PDB: Parsing " + pdbFile + "...");
			pdb.deserialize();
			TypeProgramInterface tpi = pdb.getTypeProgramInterface();
			if (tpi == null) {
				return results;
			}
			for (int indexNumber = tpi.getTypeIndexMin(); indexNumber < tpi
					.getTypeIndexMaxExclusive(); indexNumber++) {
				monitor.checkCancelled();
				RecordNumber recordNumber = RecordNumber.typeRecordNumber(indexNumber);
				AbstractMsType msType = pdb.getTypeRecord(recordNumber);
				if (msType instanceof AbstractComplexMsType acms) {
					String className = acms.getName();
					SymbolPath classSymbolPath = new SymbolPath(SymbolPathParser.parse(className));
					RecordNumber listRecordNumber = acms.getFieldDescriptorListRecordNumber();
					AbstractMsType type = pdb.getTypeRecord(listRecordNumber);
					if (type instanceof PrimitiveMsType primitive && primitive.isNoType()) {
						continue;
					}
					else if (type instanceof AbstractFieldListMsType fieldListType) {
						List<String> commandStrings = new ArrayList<>();
						commandStrings.add("length: " + acms.getLength());
						List<AbstractVirtualFunctionTablePointerMsType> vftPtrs =
							fieldListType.getVftPointers();
						processVftPtrs(commandStrings, pdb, vftPtrs);
						processBases(commandStrings, pdb, fieldListType.getBaseClassList());
						processNonstaticMembers(commandStrings, pdb,
							fieldListType.getNonStaticMembers());
						processMethods(commandStrings, pdb, fieldListType.getMethodList());
						if (!commandStrings.isEmpty()) {
							results.put(classSymbolPath, commandStrings);
						}
					}
					else {
						throw new PdbException(type.getClass().getSimpleName() + " seen where " +
							FieldListMsType.class.getSimpleName() + " expected for record number " +
							recordNumber);
					}
				}
			}

		}
		catch (PdbException | IOException e) {
			Msg.warn(this, e);
		}
		return results;
	}
Developer script to capture items from Program and PDB for developing tests
Ghidra/Features/PDB/developer_scripts/CaptureHelperScript.java